diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 302fb5b..0000000 --- a/Gemfile +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -source "https://rubygems.org" - -git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } - -gem 'cocoapods', '1.9.0' diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 9a1a1a0..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,76 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.0) - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - atomos (0.1.3) - claide (1.0.2) - cocoapods (1.6.0) - activesupport (>= 4.0.2, < 5) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.6.0) - cocoapods-deintegrate (>= 1.0.2, < 2.0) - cocoapods-downloader (>= 1.2.2, < 2.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.3.1, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.2.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.6.6) - nap (~> 1.0) - ruby-macho (~> 1.3, >= 1.3.1) - xcodeproj (>= 1.8.0, < 2.0) - cocoapods-core (1.6.0) - activesupport (>= 4.0.2, < 6) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - cocoapods-deintegrate (1.0.4) - cocoapods-downloader (1.2.2) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.0) - cocoapods-stats (1.1.0) - cocoapods-trunk (1.3.1) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.1.0) - colored2 (3.1.2) - concurrent-ruby (1.1.5) - escape (0.0.4) - fourflusher (2.2.0) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - minitest (5.11.3) - molinillo (0.6.6) - nanaimo (0.2.6) - nap (1.1.0) - netrc (0.11.0) - ruby-macho (1.4.0) - thread_safe (0.3.6) - tzinfo (1.2.5) - thread_safe (~> 0.1) - xcodeproj (1.9.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.2.6) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods (= 1.6.0) - -BUNDLED WITH - 1.17.3 diff --git a/Podfile b/Podfile deleted file mode 100644 index 0cd1fe4..0000000 --- a/Podfile +++ /dev/null @@ -1,18 +0,0 @@ -platform :osx, '10.14' -use_frameworks! - -xcodeproj 'Quests', 'DebugInternal' => :debug, 'ReleaseInternal' => :release - -target 'Quests' do - pod 'Alamofire', '~> 4.7' - pod 'CwlUtils', :git => 'https://github.com/mattgallagher/CwlUtils.git' - pod 'Down' - pod 'ReachabilitySwift' - pod 'SnapKit' - pod 'SwiftyUserDefaults', '~> 4.0' - pod 'SwiftLint' - pod 'SwiftyJSON' - pod 'Valet' - pod 'Netable' - pod 'XCGLogger', '~> 6.1.0' -end diff --git a/Podfile.lock b/Podfile.lock deleted file mode 100644 index df5b1b9..0000000 --- a/Podfile.lock +++ /dev/null @@ -1,72 +0,0 @@ -PODS: - - Alamofire (4.9.1) - - CwlUtils (2.2.0) - - Down (0.9.4) - - Netable (0.10.2) - - ObjcExceptionBridging (1.0.1): - - ObjcExceptionBridging/ObjcExceptionBridging (= 1.0.1) - - ObjcExceptionBridging/ObjcExceptionBridging (1.0.1) - - ReachabilitySwift (5.0.0) - - SnapKit (5.0.1) - - SwiftLint (0.42.0) - - SwiftyJSON (5.0.0) - - SwiftyUserDefaults (4.0.0) - - Valet (4.1.1) - - XCGLogger (6.1.0): - - XCGLogger/Core (= 6.1.0) - - XCGLogger/Core (6.1.0): - - ObjcExceptionBridging - -DEPENDENCIES: - - Alamofire (~> 4.7) - - CwlUtils (from `https://github.com/mattgallagher/CwlUtils.git`) - - Down - - Netable - - ReachabilitySwift - - SnapKit - - SwiftLint - - SwiftyJSON - - SwiftyUserDefaults (~> 4.0) - - Valet - - XCGLogger (~> 6.1.0) - -SPEC REPOS: - trunk: - - Alamofire - - Down - - Netable - - ObjcExceptionBridging - - ReachabilitySwift - - SnapKit - - SwiftLint - - SwiftyJSON - - SwiftyUserDefaults - - Valet - - XCGLogger - -EXTERNAL SOURCES: - CwlUtils: - :git: https://github.com/mattgallagher/CwlUtils.git - -CHECKOUT OPTIONS: - CwlUtils: - :commit: 0bfc4587d01cfc796b6c7e118fc631333dd8ab33 - :git: https://github.com/mattgallagher/CwlUtils.git - -SPEC CHECKSUMS: - Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 - CwlUtils: 33e0095342412c8fcde26dc3a21326ab125a762c - Down: 276f2c3eeeaf30345873bdad25f44b2640fcfa3a - Netable: f6cd47f79aa133c63a83c3f5015f35b310f1d05f - ObjcExceptionBridging: c30e00eb3700467e695faeea30e26e18bd445001 - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb - SwiftLint: 4fa9579c63416865179bc416f0a92d55f009600d - SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7 - SwiftyUserDefaults: 6a1951df1daa19337862b677dd9a4b9bd4c288cd - Valet: 11ab0e318b7284888a81392e36136563b4af5deb - XCGLogger: 7f7f43f15dfe3a305fa1342b7dc29af656289abd - -PODFILE CHECKSUM: 468987039732bf8f93fc1bced1ef05984ee6e15c - -COCOAPODS: 1.9.3 diff --git a/Pods/Alamofire/LICENSE b/Pods/Alamofire/LICENSE deleted file mode 100644 index 38a301a..0000000 --- a/Pods/Alamofire/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) - -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/Pods/Alamofire/README.md b/Pods/Alamofire/README.md deleted file mode 100644 index bafa09a..0000000 --- a/Pods/Alamofire/README.md +++ /dev/null @@ -1,234 +0,0 @@ -![Alamofire: Elegant Networking in Swift](https://raw.githubusercontent.com/Alamofire/Alamofire/master/alamofire.png) - -[![Build Status](https://travis-ci.org/Alamofire/Alamofire.svg?branch=master)](https://travis-ci.org/Alamofire/Alamofire) -[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Alamofire.svg)](https://img.shields.io/cocoapods/v/Alamofire.svg) -[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) -[![Platform](https://img.shields.io/cocoapods/p/Alamofire.svg?style=flat)](https://alamofire.github.io/Alamofire) -[![Twitter](https://img.shields.io/badge/twitter-@AlamofireSF-blue.svg?style=flat)](https://twitter.com/AlamofireSF) -[![Gitter](https://badges.gitter.im/Alamofire/Alamofire.svg)](https://gitter.im/Alamofire/Alamofire?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) - -Alamofire is an HTTP networking library written in Swift. - -- [Features](#features) -- [Component Libraries](#component-libraries) -- [Requirements](#requirements) -- [Migration Guides](#migration-guides) -- [Communication](#communication) -- [Installation](#installation) -- [Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md) - - **Intro -** [Making a Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#making-a-request), [Response Handling](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-handling), [Response Validation](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-validation), [Response Caching](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#response-caching) - - **HTTP -** [HTTP Methods](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-methods), [Parameter Encoding](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#parameter-encoding), [HTTP Headers](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#http-headers), [Authentication](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#authentication) - - **Large Data -** [Downloading Data to a File](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#downloading-data-to-a-file), [Uploading Data to a Server](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server) - - **Tools -** [Statistical Metrics](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#statistical-metrics), [cURL Command Output](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#curl-command-output) -- [Advanced Usage](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md) - - **URL Session -** [Session Manager](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session-manager), [Session Delegate](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#session-delegate), [Request](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#request) - - **Routing -** [Routing Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#routing-requests), [Adapting and Retrying Requests](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#adapting-and-retrying-requests) - - **Model Objects -** [Custom Response Serialization](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#custom-response-serialization) - - **Connection -** [Security](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#security), [Network Reachability](https://github.com/Alamofire/Alamofire/blob/master/Documentation/AdvancedUsage.md#network-reachability) -- [Open Radars](#open-radars) -- [FAQ](#faq) -- [Credits](#credits) -- [Donations](#donations) -- [License](#license) - -## Features - -- [x] Chainable Request / Response Methods -- [x] URL / JSON / plist Parameter Encoding -- [x] Upload File / Data / Stream / MultipartFormData -- [x] Download File using Request or Resume Data -- [x] Authentication with URLCredential -- [x] HTTP Response Validation -- [x] Upload and Download Progress Closures with Progress -- [x] cURL Command Output -- [x] Dynamically Adapt and Retry Requests -- [x] TLS Certificate and Public Key Pinning -- [x] Network Reachability -- [x] Comprehensive Unit and Integration Test Coverage -- [x] [Complete Documentation](https://alamofire.github.io/Alamofire) - -## Component Libraries - -In order to keep Alamofire focused specifically on core networking implementations, additional component libraries have been created by the [Alamofire Software Foundation](https://github.com/Alamofire/Foundation) to bring additional functionality to the Alamofire ecosystem. - -- [AlamofireImage](https://github.com/Alamofire/AlamofireImage) - An image library including image response serializers, `UIImage` and `UIImageView` extensions, custom image filters, an auto-purging in-memory cache and a priority-based image downloading system. -- [AlamofireNetworkActivityIndicator](https://github.com/Alamofire/AlamofireNetworkActivityIndicator) - Controls the visibility of the network activity indicator on iOS using Alamofire. It contains configurable delay timers to help mitigate flicker and can support `URLSession` instances not managed by Alamofire. - -## Requirements - -- iOS 8.0+ / macOS 10.10+ / tvOS 9.0+ / watchOS 2.0+ -- Xcode 9.3+ -- Swift 4.0+ - -## Migration Guides - -- [Alamofire 4.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%204.0%20Migration%20Guide.md) -- [Alamofire 3.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md) -- [Alamofire 2.0 Migration Guide](https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%202.0%20Migration%20Guide.md) - -## Communication -- If you **need help with making network requests**, use [Stack Overflow](https://stackoverflow.com/questions/tagged/alamofire) and tag `alamofire`. -- If you need to **find or understand an API**, check [our documentation](http://alamofire.github.io/Alamofire/) or [Apple's documentation for `URLSession`](https://developer.apple.com/documentation/foundation/url_loading_system), on top of which Alamofire is built. -- If you need **help with an Alamofire feature**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you'd like to **discuss Alamofire best practices**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you'd like to **discuss a feature request**, use [our forum on swift.org](https://forums.swift.org/c/related-projects/alamofire). -- If you **found a bug**, open an issue and follow the guide. The more detail the better! -- If you **want to contribute**, submit a pull request. - -## Installation - -### CocoaPods - -[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: - -```bash -$ gem install cocoapods -``` - -> CocoaPods 1.7+ is required to build Alamofire 4.9+. - -To integrate Alamofire into your Xcode project using CocoaPods, specify it in your `Podfile`: - -```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '10.0' -use_frameworks! - -target '' do - pod 'Alamofire', '~> 4.9' -end -``` - -Then, run the following command: - -```bash -$ pod install -``` - -### Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. - -You can install Carthage with [Homebrew](https://brew.sh/) using the following command: - -```bash -$ brew install carthage -``` - -To integrate Alamofire into your Xcode project using Carthage, specify it in your `Cartfile`: - -```ogdl -github "Alamofire/Alamofire" ~> 4.9 -``` - -Run `carthage update` to build the framework and drag the built `Alamofire.framework` into your Xcode project. - -### Swift Package Manager - -The [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. It is in early development, but Alamofire does support its use on supported platforms. - -Once you have your Swift package set up, adding Alamofire as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. - -#### Swift 4 - -```swift -dependencies: [ - .package(url: "https://github.com/Alamofire/Alamofire.git", from: "4.9") -] -``` - -### Manually - -If you prefer not to use any of the aforementioned dependency managers, you can integrate Alamofire into your project manually. - -#### Embedded Framework - -- Open up Terminal, `cd` into your top-level project directory, and run the following command "if" your project is not initialized as a git repository: - - ```bash - $ git init - ``` - -- Add Alamofire as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command: - - ```bash - $ git submodule add https://github.com/Alamofire/Alamofire.git - ``` - -- Open the new `Alamofire` folder, and drag the `Alamofire.xcodeproj` into the Project Navigator of your application's Xcode project. - - > It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter. - -- Select the `Alamofire.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target. -- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the "Targets" heading in the sidebar. -- In the tab bar at the top of that window, open the "General" panel. -- Click on the `+` button under the "Embedded Binaries" section. -- You will see two different `Alamofire.xcodeproj` folders each with two different versions of the `Alamofire.framework` nested inside a `Products` folder. - - > It does not matter which `Products` folder you choose from, but it does matter whether you choose the top or bottom `Alamofire.framework`. - -- Select the top `Alamofire.framework` for iOS and the bottom one for OS X. - - > You can verify which one you selected by inspecting the build log for your project. The build target for `Alamofire` will be listed as either `Alamofire iOS`, `Alamofire macOS`, `Alamofire tvOS` or `Alamofire watchOS`. - -- And that's it! - - > The `Alamofire.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device. - -## Open Radars - -The following radars have some effect on the current implementation of Alamofire. - -- [`rdar://21349340`](http://www.openradar.me/radar?id=5517037090635776) - Compiler throwing warning due to toll-free bridging issue in test case -- `rdar://26870455` - Background URL Session Configurations do not work in the simulator -- `rdar://26849668` - Some URLProtocol APIs do not properly handle `URLRequest` -- [`rdar://36082113`](http://openradar.appspot.com/radar?id=4942308441063424) - `URLSessionTaskMetrics` failing to link on watchOS 3.0+ - -## Resolved Radars - -The following radars have been resolved over time after being filed against the Alamofire project. - -- [`rdar://26761490`](http://www.openradar.me/radar?id=5010235949318144) - Swift string interpolation causing memory leak with common usage (Resolved on 9/1/17 in Xcode 9 beta 6). - -## FAQ - -### What's the origin of the name Alamofire? - -Alamofire is named after the [Alamo Fire flower](https://aggie-horticulture.tamu.edu/wildseed/alamofire.html), a hybrid variant of the Bluebonnet, the official state flower of Texas. - -### What logic belongs in a Router vs. a Request Adapter? - -Simple, static data such as paths, parameters and common headers belong in the `Router`. Dynamic data such as an `Authorization` header whose value can changed based on an authentication system belongs in a `RequestAdapter`. - -The reason the dynamic data MUST be placed into the `RequestAdapter` is to support retry operations. When a `Request` is retried, the original request is not rebuilt meaning the `Router` will not be called again. The `RequestAdapter` is called again allowing the dynamic data to be updated on the original request before retrying the `Request`. - -## Credits - -Alamofire is owned and maintained by the [Alamofire Software Foundation](http://alamofire.org). You can follow them on Twitter at [@AlamofireSF](https://twitter.com/AlamofireSF) for project updates and releases. - -### Security Disclosure - -If you believe you have identified a security vulnerability with Alamofire, you should report it as soon as possible via email to security@alamofire.org. Please do not post it to a public issue tracker. - -## Donations - -The [ASF](https://github.com/Alamofire/Foundation#members) is looking to raise money to officially stay registered as a federal non-profit organization. -Registering will allow us members to gain some legal protections and also allow us to put donations to use, tax free. -Donating to the ASF will enable us to: - -- Pay our yearly legal fees to keep the non-profit in good status -- Pay for our mail servers to help us stay on top of all questions and security issues -- Potentially fund test servers to make it easier for us to test the edge cases -- Potentially fund developers to work on one of our projects full-time - -The community adoption of the ASF libraries has been amazing. -We are greatly humbled by your enthusiasm around the projects, and want to continue to do everything we can to move the needle forward. -With your continued support, the ASF will be able to improve its reach and also provide better legal safety for the core members. -If you use any of our libraries for work, see if your employers would be interested in donating. -Any amount you can donate today to help us reach our goal would be greatly appreciated. - -[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=W34WPEE74APJQ) - -## License - -Alamofire is released under the MIT license. [See LICENSE](https://github.com/Alamofire/Alamofire/blob/master/LICENSE) for details. diff --git a/Pods/Alamofire/Source/AFError.swift b/Pods/Alamofire/Source/AFError.swift deleted file mode 100644 index b163f60..0000000 --- a/Pods/Alamofire/Source/AFError.swift +++ /dev/null @@ -1,460 +0,0 @@ -// -// AFError.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// `AFError` is the error type returned by Alamofire. It encompasses a few different types of errors, each with -/// their own associated reasons. -/// -/// - invalidURL: Returned when a `URLConvertible` type fails to create a valid `URL`. -/// - parameterEncodingFailed: Returned when a parameter encoding object throws an error during the encoding process. -/// - multipartEncodingFailed: Returned when some step in the multipart encoding process fails. -/// - responseValidationFailed: Returned when a `validate()` call fails. -/// - responseSerializationFailed: Returned when a response serializer encounters an error in the serialization process. -public enum AFError: Error { - /// The underlying reason the parameter encoding error occurred. - /// - /// - missingURL: The URL request did not have a URL to encode. - /// - jsonEncodingFailed: JSON serialization failed with an underlying system error during the - /// encoding process. - /// - propertyListEncodingFailed: Property list serialization failed with an underlying system error during - /// encoding process. - public enum ParameterEncodingFailureReason { - case missingURL - case jsonEncodingFailed(error: Error) - case propertyListEncodingFailed(error: Error) - } - - /// The underlying reason the multipart encoding error occurred. - /// - /// - bodyPartURLInvalid: The `fileURL` provided for reading an encodable body part isn't a - /// file URL. - /// - bodyPartFilenameInvalid: The filename of the `fileURL` provided has either an empty - /// `lastPathComponent` or `pathExtension. - /// - bodyPartFileNotReachable: The file at the `fileURL` provided was not reachable. - /// - bodyPartFileNotReachableWithError: Attempting to check the reachability of the `fileURL` provided threw - /// an error. - /// - bodyPartFileIsDirectory: The file at the `fileURL` provided is actually a directory. - /// - bodyPartFileSizeNotAvailable: The size of the file at the `fileURL` provided was not returned by - /// the system. - /// - bodyPartFileSizeQueryFailedWithError: The attempt to find the size of the file at the `fileURL` provided - /// threw an error. - /// - bodyPartInputStreamCreationFailed: An `InputStream` could not be created for the provided `fileURL`. - /// - outputStreamCreationFailed: An `OutputStream` could not be created when attempting to write the - /// encoded data to disk. - /// - outputStreamFileAlreadyExists: The encoded body data could not be writtent disk because a file - /// already exists at the provided `fileURL`. - /// - outputStreamURLInvalid: The `fileURL` provided for writing the encoded body data to disk is - /// not a file URL. - /// - outputStreamWriteFailed: The attempt to write the encoded body data to disk failed with an - /// underlying error. - /// - inputStreamReadFailed: The attempt to read an encoded body part `InputStream` failed with - /// underlying system error. - public enum MultipartEncodingFailureReason { - case bodyPartURLInvalid(url: URL) - case bodyPartFilenameInvalid(in: URL) - case bodyPartFileNotReachable(at: URL) - case bodyPartFileNotReachableWithError(atURL: URL, error: Error) - case bodyPartFileIsDirectory(at: URL) - case bodyPartFileSizeNotAvailable(at: URL) - case bodyPartFileSizeQueryFailedWithError(forURL: URL, error: Error) - case bodyPartInputStreamCreationFailed(for: URL) - - case outputStreamCreationFailed(for: URL) - case outputStreamFileAlreadyExists(at: URL) - case outputStreamURLInvalid(url: URL) - case outputStreamWriteFailed(error: Error) - - case inputStreamReadFailed(error: Error) - } - - /// The underlying reason the response validation error occurred. - /// - /// - dataFileNil: The data file containing the server response did not exist. - /// - dataFileReadFailed: The data file containing the server response could not be read. - /// - missingContentType: The response did not contain a `Content-Type` and the `acceptableContentTypes` - /// provided did not contain wildcard type. - /// - unacceptableContentType: The response `Content-Type` did not match any type in the provided - /// `acceptableContentTypes`. - /// - unacceptableStatusCode: The response status code was not acceptable. - public enum ResponseValidationFailureReason { - case dataFileNil - case dataFileReadFailed(at: URL) - case missingContentType(acceptableContentTypes: [String]) - case unacceptableContentType(acceptableContentTypes: [String], responseContentType: String) - case unacceptableStatusCode(code: Int) - } - - /// The underlying reason the response serialization error occurred. - /// - /// - inputDataNil: The server response contained no data. - /// - inputDataNilOrZeroLength: The server response contained no data or the data was zero length. - /// - inputFileNil: The file containing the server response did not exist. - /// - inputFileReadFailed: The file containing the server response could not be read. - /// - stringSerializationFailed: String serialization failed using the provided `String.Encoding`. - /// - jsonSerializationFailed: JSON serialization failed with an underlying system error. - /// - propertyListSerializationFailed: Property list serialization failed with an underlying system error. - public enum ResponseSerializationFailureReason { - case inputDataNil - case inputDataNilOrZeroLength - case inputFileNil - case inputFileReadFailed(at: URL) - case stringSerializationFailed(encoding: String.Encoding) - case jsonSerializationFailed(error: Error) - case propertyListSerializationFailed(error: Error) - } - - case invalidURL(url: URLConvertible) - case parameterEncodingFailed(reason: ParameterEncodingFailureReason) - case multipartEncodingFailed(reason: MultipartEncodingFailureReason) - case responseValidationFailed(reason: ResponseValidationFailureReason) - case responseSerializationFailed(reason: ResponseSerializationFailureReason) -} - -// MARK: - Adapt Error - -struct AdaptError: Error { - let error: Error -} - -extension Error { - var underlyingAdaptError: Error? { return (self as? AdaptError)?.error } -} - -// MARK: - Error Booleans - -extension AFError { - /// Returns whether the AFError is an invalid URL error. - public var isInvalidURLError: Bool { - if case .invalidURL = self { return true } - return false - } - - /// Returns whether the AFError is a parameter encoding error. When `true`, the `underlyingError` property will - /// contain the associated value. - public var isParameterEncodingError: Bool { - if case .parameterEncodingFailed = self { return true } - return false - } - - /// Returns whether the AFError is a multipart encoding error. When `true`, the `url` and `underlyingError` properties - /// will contain the associated values. - public var isMultipartEncodingError: Bool { - if case .multipartEncodingFailed = self { return true } - return false - } - - /// Returns whether the `AFError` is a response validation error. When `true`, the `acceptableContentTypes`, - /// `responseContentType`, and `responseCode` properties will contain the associated values. - public var isResponseValidationError: Bool { - if case .responseValidationFailed = self { return true } - return false - } - - /// Returns whether the `AFError` is a response serialization error. When `true`, the `failedStringEncoding` and - /// `underlyingError` properties will contain the associated values. - public var isResponseSerializationError: Bool { - if case .responseSerializationFailed = self { return true } - return false - } -} - -// MARK: - Convenience Properties - -extension AFError { - /// The `URLConvertible` associated with the error. - public var urlConvertible: URLConvertible? { - switch self { - case .invalidURL(let url): - return url - default: - return nil - } - } - - /// The `URL` associated with the error. - public var url: URL? { - switch self { - case .multipartEncodingFailed(let reason): - return reason.url - default: - return nil - } - } - - /// The `Error` returned by a system framework associated with a `.parameterEncodingFailed`, - /// `.multipartEncodingFailed` or `.responseSerializationFailed` error. - public var underlyingError: Error? { - switch self { - case .parameterEncodingFailed(let reason): - return reason.underlyingError - case .multipartEncodingFailed(let reason): - return reason.underlyingError - case .responseSerializationFailed(let reason): - return reason.underlyingError - default: - return nil - } - } - - /// The acceptable `Content-Type`s of a `.responseValidationFailed` error. - public var acceptableContentTypes: [String]? { - switch self { - case .responseValidationFailed(let reason): - return reason.acceptableContentTypes - default: - return nil - } - } - - /// The response `Content-Type` of a `.responseValidationFailed` error. - public var responseContentType: String? { - switch self { - case .responseValidationFailed(let reason): - return reason.responseContentType - default: - return nil - } - } - - /// The response code of a `.responseValidationFailed` error. - public var responseCode: Int? { - switch self { - case .responseValidationFailed(let reason): - return reason.responseCode - default: - return nil - } - } - - /// The `String.Encoding` associated with a failed `.stringResponse()` call. - public var failedStringEncoding: String.Encoding? { - switch self { - case .responseSerializationFailed(let reason): - return reason.failedStringEncoding - default: - return nil - } - } -} - -extension AFError.ParameterEncodingFailureReason { - var underlyingError: Error? { - switch self { - case .jsonEncodingFailed(let error), .propertyListEncodingFailed(let error): - return error - default: - return nil - } - } -} - -extension AFError.MultipartEncodingFailureReason { - var url: URL? { - switch self { - case .bodyPartURLInvalid(let url), .bodyPartFilenameInvalid(let url), .bodyPartFileNotReachable(let url), - .bodyPartFileIsDirectory(let url), .bodyPartFileSizeNotAvailable(let url), - .bodyPartInputStreamCreationFailed(let url), .outputStreamCreationFailed(let url), - .outputStreamFileAlreadyExists(let url), .outputStreamURLInvalid(let url), - .bodyPartFileNotReachableWithError(let url, _), .bodyPartFileSizeQueryFailedWithError(let url, _): - return url - default: - return nil - } - } - - var underlyingError: Error? { - switch self { - case .bodyPartFileNotReachableWithError(_, let error), .bodyPartFileSizeQueryFailedWithError(_, let error), - .outputStreamWriteFailed(let error), .inputStreamReadFailed(let error): - return error - default: - return nil - } - } -} - -extension AFError.ResponseValidationFailureReason { - var acceptableContentTypes: [String]? { - switch self { - case .missingContentType(let types), .unacceptableContentType(let types, _): - return types - default: - return nil - } - } - - var responseContentType: String? { - switch self { - case .unacceptableContentType(_, let responseType): - return responseType - default: - return nil - } - } - - var responseCode: Int? { - switch self { - case .unacceptableStatusCode(let code): - return code - default: - return nil - } - } -} - -extension AFError.ResponseSerializationFailureReason { - var failedStringEncoding: String.Encoding? { - switch self { - case .stringSerializationFailed(let encoding): - return encoding - default: - return nil - } - } - - var underlyingError: Error? { - switch self { - case .jsonSerializationFailed(let error), .propertyListSerializationFailed(let error): - return error - default: - return nil - } - } -} - -// MARK: - Error Descriptions - -extension AFError: LocalizedError { - public var errorDescription: String? { - switch self { - case .invalidURL(let url): - return "URL is not valid: \(url)" - case .parameterEncodingFailed(let reason): - return reason.localizedDescription - case .multipartEncodingFailed(let reason): - return reason.localizedDescription - case .responseValidationFailed(let reason): - return reason.localizedDescription - case .responseSerializationFailed(let reason): - return reason.localizedDescription - } - } -} - -extension AFError.ParameterEncodingFailureReason { - var localizedDescription: String { - switch self { - case .missingURL: - return "URL request to encode was missing a URL" - case .jsonEncodingFailed(let error): - return "JSON could not be encoded because of error:\n\(error.localizedDescription)" - case .propertyListEncodingFailed(let error): - return "PropertyList could not be encoded because of error:\n\(error.localizedDescription)" - } - } -} - -extension AFError.MultipartEncodingFailureReason { - var localizedDescription: String { - switch self { - case .bodyPartURLInvalid(let url): - return "The URL provided is not a file URL: \(url)" - case .bodyPartFilenameInvalid(let url): - return "The URL provided does not have a valid filename: \(url)" - case .bodyPartFileNotReachable(let url): - return "The URL provided is not reachable: \(url)" - case .bodyPartFileNotReachableWithError(let url, let error): - return ( - "The system returned an error while checking the provided URL for " + - "reachability.\nURL: \(url)\nError: \(error)" - ) - case .bodyPartFileIsDirectory(let url): - return "The URL provided is a directory: \(url)" - case .bodyPartFileSizeNotAvailable(let url): - return "Could not fetch the file size from the provided URL: \(url)" - case .bodyPartFileSizeQueryFailedWithError(let url, let error): - return ( - "The system returned an error while attempting to fetch the file size from the " + - "provided URL.\nURL: \(url)\nError: \(error)" - ) - case .bodyPartInputStreamCreationFailed(let url): - return "Failed to create an InputStream for the provided URL: \(url)" - case .outputStreamCreationFailed(let url): - return "Failed to create an OutputStream for URL: \(url)" - case .outputStreamFileAlreadyExists(let url): - return "A file already exists at the provided URL: \(url)" - case .outputStreamURLInvalid(let url): - return "The provided OutputStream URL is invalid: \(url)" - case .outputStreamWriteFailed(let error): - return "OutputStream write failed with error: \(error)" - case .inputStreamReadFailed(let error): - return "InputStream read failed with error: \(error)" - } - } -} - -extension AFError.ResponseSerializationFailureReason { - var localizedDescription: String { - switch self { - case .inputDataNil: - return "Response could not be serialized, input data was nil." - case .inputDataNilOrZeroLength: - return "Response could not be serialized, input data was nil or zero length." - case .inputFileNil: - return "Response could not be serialized, input file was nil." - case .inputFileReadFailed(let url): - return "Response could not be serialized, input file could not be read: \(url)." - case .stringSerializationFailed(let encoding): - return "String could not be serialized with encoding: \(encoding)." - case .jsonSerializationFailed(let error): - return "JSON could not be serialized because of error:\n\(error.localizedDescription)" - case .propertyListSerializationFailed(let error): - return "PropertyList could not be serialized because of error:\n\(error.localizedDescription)" - } - } -} - -extension AFError.ResponseValidationFailureReason { - var localizedDescription: String { - switch self { - case .dataFileNil: - return "Response could not be validated, data file was nil." - case .dataFileReadFailed(let url): - return "Response could not be validated, data file could not be read: \(url)." - case .missingContentType(let types): - return ( - "Response Content-Type was missing and acceptable content types " + - "(\(types.joined(separator: ","))) do not match \"*/*\"." - ) - case .unacceptableContentType(let acceptableTypes, let responseType): - return ( - "Response Content-Type \"\(responseType)\" does not match any acceptable types: " + - "\(acceptableTypes.joined(separator: ","))." - ) - case .unacceptableStatusCode(let code): - return "Response status code was unacceptable: \(code)." - } - } -} diff --git a/Pods/Alamofire/Source/Alamofire.swift b/Pods/Alamofire/Source/Alamofire.swift deleted file mode 100644 index 20c3672..0000000 --- a/Pods/Alamofire/Source/Alamofire.swift +++ /dev/null @@ -1,465 +0,0 @@ -// -// Alamofire.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Types adopting the `URLConvertible` protocol can be used to construct URLs, which are then used to construct -/// URL requests. -public protocol URLConvertible { - /// Returns a URL that conforms to RFC 2396 or throws an `Error`. - /// - /// - throws: An `Error` if the type cannot be converted to a `URL`. - /// - /// - returns: A URL or throws an `Error`. - func asURL() throws -> URL -} - -extension String: URLConvertible { - /// Returns a URL if `self` represents a valid URL string that conforms to RFC 2396 or throws an `AFError`. - /// - /// - throws: An `AFError.invalidURL` if `self` is not a valid URL string. - /// - /// - returns: A URL or throws an `AFError`. - public func asURL() throws -> URL { - guard let url = URL(string: self) else { throw AFError.invalidURL(url: self) } - return url - } -} - -extension URL: URLConvertible { - /// Returns self. - public func asURL() throws -> URL { return self } -} - -extension URLComponents: URLConvertible { - /// Returns a URL if `url` is not nil, otherwise throws an `Error`. - /// - /// - throws: An `AFError.invalidURL` if `url` is `nil`. - /// - /// - returns: A URL or throws an `AFError`. - public func asURL() throws -> URL { - guard let url = url else { throw AFError.invalidURL(url: self) } - return url - } -} - -// MARK: - - -/// Types adopting the `URLRequestConvertible` protocol can be used to construct URL requests. -public protocol URLRequestConvertible { - /// Returns a URL request or throws if an `Error` was encountered. - /// - /// - throws: An `Error` if the underlying `URLRequest` is `nil`. - /// - /// - returns: A URL request. - func asURLRequest() throws -> URLRequest -} - -extension URLRequestConvertible { - /// The URL request. - public var urlRequest: URLRequest? { return try? asURLRequest() } -} - -extension URLRequest: URLRequestConvertible { - /// Returns a URL request or throws if an `Error` was encountered. - public func asURLRequest() throws -> URLRequest { return self } -} - -// MARK: - - -extension URLRequest { - /// Creates an instance with the specified `method`, `urlString` and `headers`. - /// - /// - parameter url: The URL. - /// - parameter method: The HTTP method. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - /// - returns: The new `URLRequest` instance. - public init(url: URLConvertible, method: HTTPMethod, headers: HTTPHeaders? = nil) throws { - let url = try url.asURL() - - self.init(url: url) - - httpMethod = method.rawValue - - if let headers = headers { - for (headerField, headerValue) in headers { - setValue(headerValue, forHTTPHeaderField: headerField) - } - } - } - - func adapt(using adapter: RequestAdapter?) throws -> URLRequest { - guard let adapter = adapter else { return self } - return try adapter.adapt(self) - } -} - -// MARK: - Data Request - -/// Creates a `DataRequest` using the default `SessionManager` to retrieve the contents of the specified `url`, -/// `method`, `parameters`, `encoding` and `headers`. -/// -/// - parameter url: The URL. -/// - parameter method: The HTTP method. `.get` by default. -/// - parameter parameters: The parameters. `nil` by default. -/// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. -/// - parameter headers: The HTTP headers. `nil` by default. -/// -/// - returns: The created `DataRequest`. -@discardableResult -public func request( - _ url: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, - headers: HTTPHeaders? = nil) - -> DataRequest -{ - return SessionManager.default.request( - url, - method: method, - parameters: parameters, - encoding: encoding, - headers: headers - ) -} - -/// Creates a `DataRequest` using the default `SessionManager` to retrieve the contents of a URL based on the -/// specified `urlRequest`. -/// -/// - parameter urlRequest: The URL request -/// -/// - returns: The created `DataRequest`. -@discardableResult -public func request(_ urlRequest: URLRequestConvertible) -> DataRequest { - return SessionManager.default.request(urlRequest) -} - -// MARK: - Download Request - -// MARK: URL Request - -/// Creates a `DownloadRequest` using the default `SessionManager` to retrieve the contents of the specified `url`, -/// `method`, `parameters`, `encoding`, `headers` and save them to the `destination`. -/// -/// If `destination` is not specified, the contents will remain in the temporary location determined by the -/// underlying URL session. -/// -/// - parameter url: The URL. -/// - parameter method: The HTTP method. `.get` by default. -/// - parameter parameters: The parameters. `nil` by default. -/// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. -/// - parameter headers: The HTTP headers. `nil` by default. -/// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. -/// -/// - returns: The created `DownloadRequest`. -@discardableResult -public func download( - _ url: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, - headers: HTTPHeaders? = nil, - to destination: DownloadRequest.DownloadFileDestination? = nil) - -> DownloadRequest -{ - return SessionManager.default.download( - url, - method: method, - parameters: parameters, - encoding: encoding, - headers: headers, - to: destination - ) -} - -/// Creates a `DownloadRequest` using the default `SessionManager` to retrieve the contents of a URL based on the -/// specified `urlRequest` and save them to the `destination`. -/// -/// If `destination` is not specified, the contents will remain in the temporary location determined by the -/// underlying URL session. -/// -/// - parameter urlRequest: The URL request. -/// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. -/// -/// - returns: The created `DownloadRequest`. -@discardableResult -public func download( - _ urlRequest: URLRequestConvertible, - to destination: DownloadRequest.DownloadFileDestination? = nil) - -> DownloadRequest -{ - return SessionManager.default.download(urlRequest, to: destination) -} - -// MARK: Resume Data - -/// Creates a `DownloadRequest` using the default `SessionManager` from the `resumeData` produced from a -/// previous request cancellation to retrieve the contents of the original request and save them to the `destination`. -/// -/// If `destination` is not specified, the contents will remain in the temporary location determined by the -/// underlying URL session. -/// -/// On the latest release of all the Apple platforms (iOS 10, macOS 10.12, tvOS 10, watchOS 3), `resumeData` is broken -/// on background URL session configurations. There's an underlying bug in the `resumeData` generation logic where the -/// data is written incorrectly and will always fail to resume the download. For more information about the bug and -/// possible workarounds, please refer to the following Stack Overflow post: -/// -/// - http://stackoverflow.com/a/39347461/1342462 -/// -/// - parameter resumeData: The resume data. This is an opaque data blob produced by `URLSessionDownloadTask` -/// when a task is cancelled. See `URLSession -downloadTask(withResumeData:)` for additional -/// information. -/// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. -/// -/// - returns: The created `DownloadRequest`. -@discardableResult -public func download( - resumingWith resumeData: Data, - to destination: DownloadRequest.DownloadFileDestination? = nil) - -> DownloadRequest -{ - return SessionManager.default.download(resumingWith: resumeData, to: destination) -} - -// MARK: - Upload Request - -// MARK: File - -/// Creates an `UploadRequest` using the default `SessionManager` from the specified `url`, `method` and `headers` -/// for uploading the `file`. -/// -/// - parameter file: The file to upload. -/// - parameter url: The URL. -/// - parameter method: The HTTP method. `.post` by default. -/// - parameter headers: The HTTP headers. `nil` by default. -/// -/// - returns: The created `UploadRequest`. -@discardableResult -public func upload( - _ fileURL: URL, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil) - -> UploadRequest -{ - return SessionManager.default.upload(fileURL, to: url, method: method, headers: headers) -} - -/// Creates a `UploadRequest` using the default `SessionManager` from the specified `urlRequest` for -/// uploading the `file`. -/// -/// - parameter file: The file to upload. -/// - parameter urlRequest: The URL request. -/// -/// - returns: The created `UploadRequest`. -@discardableResult -public func upload(_ fileURL: URL, with urlRequest: URLRequestConvertible) -> UploadRequest { - return SessionManager.default.upload(fileURL, with: urlRequest) -} - -// MARK: Data - -/// Creates an `UploadRequest` using the default `SessionManager` from the specified `url`, `method` and `headers` -/// for uploading the `data`. -/// -/// - parameter data: The data to upload. -/// - parameter url: The URL. -/// - parameter method: The HTTP method. `.post` by default. -/// - parameter headers: The HTTP headers. `nil` by default. -/// -/// - returns: The created `UploadRequest`. -@discardableResult -public func upload( - _ data: Data, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil) - -> UploadRequest -{ - return SessionManager.default.upload(data, to: url, method: method, headers: headers) -} - -/// Creates an `UploadRequest` using the default `SessionManager` from the specified `urlRequest` for -/// uploading the `data`. -/// -/// - parameter data: The data to upload. -/// - parameter urlRequest: The URL request. -/// -/// - returns: The created `UploadRequest`. -@discardableResult -public func upload(_ data: Data, with urlRequest: URLRequestConvertible) -> UploadRequest { - return SessionManager.default.upload(data, with: urlRequest) -} - -// MARK: InputStream - -/// Creates an `UploadRequest` using the default `SessionManager` from the specified `url`, `method` and `headers` -/// for uploading the `stream`. -/// -/// - parameter stream: The stream to upload. -/// - parameter url: The URL. -/// - parameter method: The HTTP method. `.post` by default. -/// - parameter headers: The HTTP headers. `nil` by default. -/// -/// - returns: The created `UploadRequest`. -@discardableResult -public func upload( - _ stream: InputStream, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil) - -> UploadRequest -{ - return SessionManager.default.upload(stream, to: url, method: method, headers: headers) -} - -/// Creates an `UploadRequest` using the default `SessionManager` from the specified `urlRequest` for -/// uploading the `stream`. -/// -/// - parameter urlRequest: The URL request. -/// - parameter stream: The stream to upload. -/// -/// - returns: The created `UploadRequest`. -@discardableResult -public func upload(_ stream: InputStream, with urlRequest: URLRequestConvertible) -> UploadRequest { - return SessionManager.default.upload(stream, with: urlRequest) -} - -// MARK: MultipartFormData - -/// Encodes `multipartFormData` using `encodingMemoryThreshold` with the default `SessionManager` and calls -/// `encodingCompletion` with new `UploadRequest` using the `url`, `method` and `headers`. -/// -/// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative -/// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most -/// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to -/// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory -/// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be -/// used for larger payloads such as video content. -/// -/// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory -/// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, -/// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk -/// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding -/// technique was used. -/// -/// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. -/// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. -/// `multipartFormDataEncodingMemoryThreshold` by default. -/// - parameter url: The URL. -/// - parameter method: The HTTP method. `.post` by default. -/// - parameter headers: The HTTP headers. `nil` by default. -/// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. -public func upload( - multipartFormData: @escaping (MultipartFormData) -> Void, - usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?) -{ - return SessionManager.default.upload( - multipartFormData: multipartFormData, - usingThreshold: encodingMemoryThreshold, - to: url, - method: method, - headers: headers, - encodingCompletion: encodingCompletion - ) -} - -/// Encodes `multipartFormData` using `encodingMemoryThreshold` and the default `SessionManager` and -/// calls `encodingCompletion` with new `UploadRequest` using the `urlRequest`. -/// -/// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative -/// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most -/// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to -/// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory -/// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be -/// used for larger payloads such as video content. -/// -/// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory -/// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, -/// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk -/// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding -/// technique was used. -/// -/// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. -/// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. -/// `multipartFormDataEncodingMemoryThreshold` by default. -/// - parameter urlRequest: The URL request. -/// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. -public func upload( - multipartFormData: @escaping (MultipartFormData) -> Void, - usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, - with urlRequest: URLRequestConvertible, - encodingCompletion: ((SessionManager.MultipartFormDataEncodingResult) -> Void)?) -{ - return SessionManager.default.upload( - multipartFormData: multipartFormData, - usingThreshold: encodingMemoryThreshold, - with: urlRequest, - encodingCompletion: encodingCompletion - ) -} - -#if !os(watchOS) - -// MARK: - Stream Request - -// MARK: Hostname and Port - -/// Creates a `StreamRequest` using the default `SessionManager` for bidirectional streaming with the `hostname` -/// and `port`. -/// -/// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. -/// -/// - parameter hostName: The hostname of the server to connect to. -/// - parameter port: The port of the server to connect to. -/// -/// - returns: The created `StreamRequest`. -@discardableResult -@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) -public func stream(withHostName hostName: String, port: Int) -> StreamRequest { - return SessionManager.default.stream(withHostName: hostName, port: port) -} - -// MARK: NetService - -/// Creates a `StreamRequest` using the default `SessionManager` for bidirectional streaming with the `netService`. -/// -/// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. -/// -/// - parameter netService: The net service used to identify the endpoint. -/// -/// - returns: The created `StreamRequest`. -@discardableResult -@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) -public func stream(with netService: NetService) -> StreamRequest { - return SessionManager.default.stream(with: netService) -} - -#endif diff --git a/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift b/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift deleted file mode 100644 index a54673c..0000000 --- a/Pods/Alamofire/Source/DispatchQueue+Alamofire.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// DispatchQueue+Alamofire.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Dispatch -import Foundation - -extension DispatchQueue { - static var userInteractive: DispatchQueue { return DispatchQueue.global(qos: .userInteractive) } - static var userInitiated: DispatchQueue { return DispatchQueue.global(qos: .userInitiated) } - static var utility: DispatchQueue { return DispatchQueue.global(qos: .utility) } - static var background: DispatchQueue { return DispatchQueue.global(qos: .background) } - - func after(_ delay: TimeInterval, execute closure: @escaping () -> Void) { - asyncAfter(deadline: .now() + delay, execute: closure) - } -} diff --git a/Pods/Alamofire/Source/MultipartFormData.swift b/Pods/Alamofire/Source/MultipartFormData.swift deleted file mode 100644 index b840138..0000000 --- a/Pods/Alamofire/Source/MultipartFormData.swift +++ /dev/null @@ -1,580 +0,0 @@ -// -// MultipartFormData.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -#if os(iOS) || os(watchOS) || os(tvOS) -import MobileCoreServices -#elseif os(macOS) -import CoreServices -#endif - -/// Constructs `multipart/form-data` for uploads within an HTTP or HTTPS body. There are currently two ways to encode -/// multipart form data. The first way is to encode the data directly in memory. This is very efficient, but can lead -/// to memory issues if the dataset is too large. The second way is designed for larger datasets and will write all the -/// data to a single file on disk with all the proper boundary segmentation. The second approach MUST be used for -/// larger datasets such as video content, otherwise your app may run out of memory when trying to encode the dataset. -/// -/// For more information on `multipart/form-data` in general, please refer to the RFC-2388 and RFC-2045 specs as well -/// and the w3 form documentation. -/// -/// - https://www.ietf.org/rfc/rfc2388.txt -/// - https://www.ietf.org/rfc/rfc2045.txt -/// - https://www.w3.org/TR/html401/interact/forms.html#h-17.13 -open class MultipartFormData { - - // MARK: - Helper Types - - struct EncodingCharacters { - static let crlf = "\r\n" - } - - struct BoundaryGenerator { - enum BoundaryType { - case initial, encapsulated, final - } - - static func randomBoundary() -> String { - return String(format: "alamofire.boundary.%08x%08x", arc4random(), arc4random()) - } - - static func boundaryData(forBoundaryType boundaryType: BoundaryType, boundary: String) -> Data { - let boundaryText: String - - switch boundaryType { - case .initial: - boundaryText = "--\(boundary)\(EncodingCharacters.crlf)" - case .encapsulated: - boundaryText = "\(EncodingCharacters.crlf)--\(boundary)\(EncodingCharacters.crlf)" - case .final: - boundaryText = "\(EncodingCharacters.crlf)--\(boundary)--\(EncodingCharacters.crlf)" - } - - return boundaryText.data(using: String.Encoding.utf8, allowLossyConversion: false)! - } - } - - class BodyPart { - let headers: HTTPHeaders - let bodyStream: InputStream - let bodyContentLength: UInt64 - var hasInitialBoundary = false - var hasFinalBoundary = false - - init(headers: HTTPHeaders, bodyStream: InputStream, bodyContentLength: UInt64) { - self.headers = headers - self.bodyStream = bodyStream - self.bodyContentLength = bodyContentLength - } - } - - // MARK: - Properties - - /// The `Content-Type` header value containing the boundary used to generate the `multipart/form-data`. - open lazy var contentType: String = "multipart/form-data; boundary=\(self.boundary)" - - /// The content length of all body parts used to generate the `multipart/form-data` not including the boundaries. - public var contentLength: UInt64 { return bodyParts.reduce(0) { $0 + $1.bodyContentLength } } - - /// The boundary used to separate the body parts in the encoded form data. - public var boundary: String - - private var bodyParts: [BodyPart] - private var bodyPartError: AFError? - private let streamBufferSize: Int - - // MARK: - Lifecycle - - /// Creates a multipart form data object. - /// - /// - returns: The multipart form data object. - public init() { - self.boundary = BoundaryGenerator.randomBoundary() - self.bodyParts = [] - - /// - /// The optimal read/write buffer size in bytes for input and output streams is 1024 (1KB). For more - /// information, please refer to the following article: - /// - https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Streams/Articles/ReadingInputStreams.html - /// - - self.streamBufferSize = 1024 - } - - // MARK: - Body Parts - - /// Creates a body part from the data and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}` (HTTP Header) - /// - Encoded data - /// - Multipart form boundary - /// - /// - parameter data: The data to encode into the multipart form data. - /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. - public func append(_ data: Data, withName name: String) { - let headers = contentHeaders(withName: name) - let stream = InputStream(data: data) - let length = UInt64(data.count) - - append(stream, withLength: length, headers: headers) - } - - /// Creates a body part from the data and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}` (HTTP Header) - /// - `Content-Type: #{generated mimeType}` (HTTP Header) - /// - Encoded data - /// - Multipart form boundary - /// - /// - parameter data: The data to encode into the multipart form data. - /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. - /// - parameter mimeType: The MIME type to associate with the data content type in the `Content-Type` HTTP header. - public func append(_ data: Data, withName name: String, mimeType: String) { - let headers = contentHeaders(withName: name, mimeType: mimeType) - let stream = InputStream(data: data) - let length = UInt64(data.count) - - append(stream, withLength: length, headers: headers) - } - - /// Creates a body part from the data and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) - /// - `Content-Type: #{mimeType}` (HTTP Header) - /// - Encoded file data - /// - Multipart form boundary - /// - /// - parameter data: The data to encode into the multipart form data. - /// - parameter name: The name to associate with the data in the `Content-Disposition` HTTP header. - /// - parameter fileName: The filename to associate with the data in the `Content-Disposition` HTTP header. - /// - parameter mimeType: The MIME type to associate with the data in the `Content-Type` HTTP header. - public func append(_ data: Data, withName name: String, fileName: String, mimeType: String) { - let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) - let stream = InputStream(data: data) - let length = UInt64(data.count) - - append(stream, withLength: length, headers: headers) - } - - /// Creates a body part from the file and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}; filename=#{generated filename}` (HTTP Header) - /// - `Content-Type: #{generated mimeType}` (HTTP Header) - /// - Encoded file data - /// - Multipart form boundary - /// - /// The filename in the `Content-Disposition` HTTP header is generated from the last path component of the - /// `fileURL`. The `Content-Type` HTTP header MIME type is generated by mapping the `fileURL` extension to the - /// system associated MIME type. - /// - /// - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data. - /// - parameter name: The name to associate with the file content in the `Content-Disposition` HTTP header. - public func append(_ fileURL: URL, withName name: String) { - let fileName = fileURL.lastPathComponent - let pathExtension = fileURL.pathExtension - - if !fileName.isEmpty && !pathExtension.isEmpty { - let mime = mimeType(forPathExtension: pathExtension) - append(fileURL, withName: name, fileName: fileName, mimeType: mime) - } else { - setBodyPartError(withReason: .bodyPartFilenameInvalid(in: fileURL)) - } - } - - /// Creates a body part from the file and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - Content-Disposition: form-data; name=#{name}; filename=#{filename} (HTTP Header) - /// - Content-Type: #{mimeType} (HTTP Header) - /// - Encoded file data - /// - Multipart form boundary - /// - /// - parameter fileURL: The URL of the file whose content will be encoded into the multipart form data. - /// - parameter name: The name to associate with the file content in the `Content-Disposition` HTTP header. - /// - parameter fileName: The filename to associate with the file content in the `Content-Disposition` HTTP header. - /// - parameter mimeType: The MIME type to associate with the file content in the `Content-Type` HTTP header. - public func append(_ fileURL: URL, withName name: String, fileName: String, mimeType: String) { - let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) - - //============================================================ - // Check 1 - is file URL? - //============================================================ - - guard fileURL.isFileURL else { - setBodyPartError(withReason: .bodyPartURLInvalid(url: fileURL)) - return - } - - //============================================================ - // Check 2 - is file URL reachable? - //============================================================ - - do { - let isReachable = try fileURL.checkPromisedItemIsReachable() - guard isReachable else { - setBodyPartError(withReason: .bodyPartFileNotReachable(at: fileURL)) - return - } - } catch { - setBodyPartError(withReason: .bodyPartFileNotReachableWithError(atURL: fileURL, error: error)) - return - } - - //============================================================ - // Check 3 - is file URL a directory? - //============================================================ - - var isDirectory: ObjCBool = false - let path = fileURL.path - - guard FileManager.default.fileExists(atPath: path, isDirectory: &isDirectory) && !isDirectory.boolValue else { - setBodyPartError(withReason: .bodyPartFileIsDirectory(at: fileURL)) - return - } - - //============================================================ - // Check 4 - can the file size be extracted? - //============================================================ - - let bodyContentLength: UInt64 - - do { - guard let fileSize = try FileManager.default.attributesOfItem(atPath: path)[.size] as? NSNumber else { - setBodyPartError(withReason: .bodyPartFileSizeNotAvailable(at: fileURL)) - return - } - - bodyContentLength = fileSize.uint64Value - } - catch { - setBodyPartError(withReason: .bodyPartFileSizeQueryFailedWithError(forURL: fileURL, error: error)) - return - } - - //============================================================ - // Check 5 - can a stream be created from file URL? - //============================================================ - - guard let stream = InputStream(url: fileURL) else { - setBodyPartError(withReason: .bodyPartInputStreamCreationFailed(for: fileURL)) - return - } - - append(stream, withLength: bodyContentLength, headers: headers) - } - - /// Creates a body part from the stream and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - `Content-Disposition: form-data; name=#{name}; filename=#{filename}` (HTTP Header) - /// - `Content-Type: #{mimeType}` (HTTP Header) - /// - Encoded stream data - /// - Multipart form boundary - /// - /// - parameter stream: The input stream to encode in the multipart form data. - /// - parameter length: The content length of the stream. - /// - parameter name: The name to associate with the stream content in the `Content-Disposition` HTTP header. - /// - parameter fileName: The filename to associate with the stream content in the `Content-Disposition` HTTP header. - /// - parameter mimeType: The MIME type to associate with the stream content in the `Content-Type` HTTP header. - public func append( - _ stream: InputStream, - withLength length: UInt64, - name: String, - fileName: String, - mimeType: String) - { - let headers = contentHeaders(withName: name, fileName: fileName, mimeType: mimeType) - append(stream, withLength: length, headers: headers) - } - - /// Creates a body part with the headers, stream and length and appends it to the multipart form data object. - /// - /// The body part data will be encoded using the following format: - /// - /// - HTTP headers - /// - Encoded stream data - /// - Multipart form boundary - /// - /// - parameter stream: The input stream to encode in the multipart form data. - /// - parameter length: The content length of the stream. - /// - parameter headers: The HTTP headers for the body part. - public func append(_ stream: InputStream, withLength length: UInt64, headers: HTTPHeaders) { - let bodyPart = BodyPart(headers: headers, bodyStream: stream, bodyContentLength: length) - bodyParts.append(bodyPart) - } - - // MARK: - Data Encoding - - /// Encodes all the appended body parts into a single `Data` value. - /// - /// It is important to note that this method will load all the appended body parts into memory all at the same - /// time. This method should only be used when the encoded data will have a small memory footprint. For large data - /// cases, please use the `writeEncodedDataToDisk(fileURL:completionHandler:)` method. - /// - /// - throws: An `AFError` if encoding encounters an error. - /// - /// - returns: The encoded `Data` if encoding is successful. - public func encode() throws -> Data { - if let bodyPartError = bodyPartError { - throw bodyPartError - } - - var encoded = Data() - - bodyParts.first?.hasInitialBoundary = true - bodyParts.last?.hasFinalBoundary = true - - for bodyPart in bodyParts { - let encodedData = try encode(bodyPart) - encoded.append(encodedData) - } - - return encoded - } - - /// Writes the appended body parts into the given file URL. - /// - /// This process is facilitated by reading and writing with input and output streams, respectively. Thus, - /// this approach is very memory efficient and should be used for large body part data. - /// - /// - parameter fileURL: The file URL to write the multipart form data into. - /// - /// - throws: An `AFError` if encoding encounters an error. - public func writeEncodedData(to fileURL: URL) throws { - if let bodyPartError = bodyPartError { - throw bodyPartError - } - - if FileManager.default.fileExists(atPath: fileURL.path) { - throw AFError.multipartEncodingFailed(reason: .outputStreamFileAlreadyExists(at: fileURL)) - } else if !fileURL.isFileURL { - throw AFError.multipartEncodingFailed(reason: .outputStreamURLInvalid(url: fileURL)) - } - - guard let outputStream = OutputStream(url: fileURL, append: false) else { - throw AFError.multipartEncodingFailed(reason: .outputStreamCreationFailed(for: fileURL)) - } - - outputStream.open() - defer { outputStream.close() } - - self.bodyParts.first?.hasInitialBoundary = true - self.bodyParts.last?.hasFinalBoundary = true - - for bodyPart in self.bodyParts { - try write(bodyPart, to: outputStream) - } - } - - // MARK: - Private - Body Part Encoding - - private func encode(_ bodyPart: BodyPart) throws -> Data { - var encoded = Data() - - let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() - encoded.append(initialData) - - let headerData = encodeHeaders(for: bodyPart) - encoded.append(headerData) - - let bodyStreamData = try encodeBodyStream(for: bodyPart) - encoded.append(bodyStreamData) - - if bodyPart.hasFinalBoundary { - encoded.append(finalBoundaryData()) - } - - return encoded - } - - private func encodeHeaders(for bodyPart: BodyPart) -> Data { - var headerText = "" - - for (key, value) in bodyPart.headers { - headerText += "\(key): \(value)\(EncodingCharacters.crlf)" - } - headerText += EncodingCharacters.crlf - - return headerText.data(using: String.Encoding.utf8, allowLossyConversion: false)! - } - - private func encodeBodyStream(for bodyPart: BodyPart) throws -> Data { - let inputStream = bodyPart.bodyStream - inputStream.open() - defer { inputStream.close() } - - var encoded = Data() - - while inputStream.hasBytesAvailable { - var buffer = [UInt8](repeating: 0, count: streamBufferSize) - let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) - - if let error = inputStream.streamError { - throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: error)) - } - - if bytesRead > 0 { - encoded.append(buffer, count: bytesRead) - } else { - break - } - } - - return encoded - } - - // MARK: - Private - Writing Body Part to Output Stream - - private func write(_ bodyPart: BodyPart, to outputStream: OutputStream) throws { - try writeInitialBoundaryData(for: bodyPart, to: outputStream) - try writeHeaderData(for: bodyPart, to: outputStream) - try writeBodyStream(for: bodyPart, to: outputStream) - try writeFinalBoundaryData(for: bodyPart, to: outputStream) - } - - private func writeInitialBoundaryData(for bodyPart: BodyPart, to outputStream: OutputStream) throws { - let initialData = bodyPart.hasInitialBoundary ? initialBoundaryData() : encapsulatedBoundaryData() - return try write(initialData, to: outputStream) - } - - private func writeHeaderData(for bodyPart: BodyPart, to outputStream: OutputStream) throws { - let headerData = encodeHeaders(for: bodyPart) - return try write(headerData, to: outputStream) - } - - private func writeBodyStream(for bodyPart: BodyPart, to outputStream: OutputStream) throws { - let inputStream = bodyPart.bodyStream - - inputStream.open() - defer { inputStream.close() } - - while inputStream.hasBytesAvailable { - var buffer = [UInt8](repeating: 0, count: streamBufferSize) - let bytesRead = inputStream.read(&buffer, maxLength: streamBufferSize) - - if let streamError = inputStream.streamError { - throw AFError.multipartEncodingFailed(reason: .inputStreamReadFailed(error: streamError)) - } - - if bytesRead > 0 { - if buffer.count != bytesRead { - buffer = Array(buffer[0.. 0, outputStream.hasSpaceAvailable { - let bytesWritten = outputStream.write(buffer, maxLength: bytesToWrite) - - if let error = outputStream.streamError { - throw AFError.multipartEncodingFailed(reason: .outputStreamWriteFailed(error: error)) - } - - bytesToWrite -= bytesWritten - - if bytesToWrite > 0 { - buffer = Array(buffer[bytesWritten.. String { - if - let id = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension as CFString, nil)?.takeRetainedValue(), - let contentType = UTTypeCopyPreferredTagWithClass(id, kUTTagClassMIMEType)?.takeRetainedValue() - { - return contentType as String - } - - return "application/octet-stream" - } - - // MARK: - Private - Content Headers - - private func contentHeaders(withName name: String, fileName: String? = nil, mimeType: String? = nil) -> [String: String] { - var disposition = "form-data; name=\"\(name)\"" - if let fileName = fileName { disposition += "; filename=\"\(fileName)\"" } - - var headers = ["Content-Disposition": disposition] - if let mimeType = mimeType { headers["Content-Type"] = mimeType } - - return headers - } - - // MARK: - Private - Boundary Encoding - - private func initialBoundaryData() -> Data { - return BoundaryGenerator.boundaryData(forBoundaryType: .initial, boundary: boundary) - } - - private func encapsulatedBoundaryData() -> Data { - return BoundaryGenerator.boundaryData(forBoundaryType: .encapsulated, boundary: boundary) - } - - private func finalBoundaryData() -> Data { - return BoundaryGenerator.boundaryData(forBoundaryType: .final, boundary: boundary) - } - - // MARK: - Private - Errors - - private func setBodyPartError(withReason reason: AFError.MultipartEncodingFailureReason) { - guard bodyPartError == nil else { return } - bodyPartError = AFError.multipartEncodingFailed(reason: reason) - } -} diff --git a/Pods/Alamofire/Source/NetworkReachabilityManager.swift b/Pods/Alamofire/Source/NetworkReachabilityManager.swift deleted file mode 100644 index 398ca82..0000000 --- a/Pods/Alamofire/Source/NetworkReachabilityManager.swift +++ /dev/null @@ -1,238 +0,0 @@ -// -// NetworkReachabilityManager.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -#if !os(watchOS) - -import Foundation -import SystemConfiguration - -/// The `NetworkReachabilityManager` class listens for reachability changes of hosts and addresses for both WWAN and -/// WiFi network interfaces. -/// -/// Reachability can be used to determine background information about why a network operation failed, or to retry -/// network requests when a connection is established. It should not be used to prevent a user from initiating a network -/// request, as it's possible that an initial request may be required to establish reachability. -open class NetworkReachabilityManager { - /// Defines the various states of network reachability. - /// - /// - unknown: It is unknown whether the network is reachable. - /// - notReachable: The network is not reachable. - /// - reachable: The network is reachable. - public enum NetworkReachabilityStatus { - case unknown - case notReachable - case reachable(ConnectionType) - } - - /// Defines the various connection types detected by reachability flags. - /// - /// - ethernetOrWiFi: The connection type is either over Ethernet or WiFi. - /// - wwan: The connection type is a WWAN connection. - public enum ConnectionType { - case ethernetOrWiFi - case wwan - } - - /// A closure executed when the network reachability status changes. The closure takes a single argument: the - /// network reachability status. - public typealias Listener = (NetworkReachabilityStatus) -> Void - - // MARK: - Properties - - /// Whether the network is currently reachable. - open var isReachable: Bool { return isReachableOnWWAN || isReachableOnEthernetOrWiFi } - - /// Whether the network is currently reachable over the WWAN interface. - open var isReachableOnWWAN: Bool { return networkReachabilityStatus == .reachable(.wwan) } - - /// Whether the network is currently reachable over Ethernet or WiFi interface. - open var isReachableOnEthernetOrWiFi: Bool { return networkReachabilityStatus == .reachable(.ethernetOrWiFi) } - - /// The current network reachability status. - open var networkReachabilityStatus: NetworkReachabilityStatus { - guard let flags = self.flags else { return .unknown } - return networkReachabilityStatusForFlags(flags) - } - - /// The dispatch queue to execute the `listener` closure on. - open var listenerQueue: DispatchQueue = DispatchQueue.main - - /// A closure executed when the network reachability status changes. - open var listener: Listener? - - open var flags: SCNetworkReachabilityFlags? { - var flags = SCNetworkReachabilityFlags() - - if SCNetworkReachabilityGetFlags(reachability, &flags) { - return flags - } - - return nil - } - - private let reachability: SCNetworkReachability - open var previousFlags: SCNetworkReachabilityFlags - - // MARK: - Initialization - - /// Creates a `NetworkReachabilityManager` instance with the specified host. - /// - /// - parameter host: The host used to evaluate network reachability. - /// - /// - returns: The new `NetworkReachabilityManager` instance. - public convenience init?(host: String) { - guard let reachability = SCNetworkReachabilityCreateWithName(nil, host) else { return nil } - self.init(reachability: reachability) - } - - /// Creates a `NetworkReachabilityManager` instance that monitors the address 0.0.0.0. - /// - /// Reachability treats the 0.0.0.0 address as a special token that causes it to monitor the general routing - /// status of the device, both IPv4 and IPv6. - /// - /// - returns: The new `NetworkReachabilityManager` instance. - public convenience init?() { - var address = sockaddr_in() - address.sin_len = UInt8(MemoryLayout.size) - address.sin_family = sa_family_t(AF_INET) - - guard let reachability = withUnsafePointer(to: &address, { pointer in - return pointer.withMemoryRebound(to: sockaddr.self, capacity: MemoryLayout.size) { - return SCNetworkReachabilityCreateWithAddress(nil, $0) - } - }) else { return nil } - - self.init(reachability: reachability) - } - - private init(reachability: SCNetworkReachability) { - self.reachability = reachability - - // Set the previous flags to an unreserved value to represent unknown status - self.previousFlags = SCNetworkReachabilityFlags(rawValue: 1 << 30) - } - - deinit { - stopListening() - } - - // MARK: - Listening - - /// Starts listening for changes in network reachability status. - /// - /// - returns: `true` if listening was started successfully, `false` otherwise. - @discardableResult - open func startListening() -> Bool { - var context = SCNetworkReachabilityContext(version: 0, info: nil, retain: nil, release: nil, copyDescription: nil) - context.info = Unmanaged.passUnretained(self).toOpaque() - - let callbackEnabled = SCNetworkReachabilitySetCallback( - reachability, - { (_, flags, info) in - let reachability = Unmanaged.fromOpaque(info!).takeUnretainedValue() - reachability.notifyListener(flags) - }, - &context - ) - - let queueEnabled = SCNetworkReachabilitySetDispatchQueue(reachability, listenerQueue) - - listenerQueue.async { - self.previousFlags = SCNetworkReachabilityFlags(rawValue: 1 << 30) - - guard let flags = self.flags else { return } - - self.notifyListener(flags) - } - - return callbackEnabled && queueEnabled - } - - /// Stops listening for changes in network reachability status. - open func stopListening() { - SCNetworkReachabilitySetCallback(reachability, nil, nil) - SCNetworkReachabilitySetDispatchQueue(reachability, nil) - } - - // MARK: - Internal - Listener Notification - - func notifyListener(_ flags: SCNetworkReachabilityFlags) { - guard previousFlags != flags else { return } - previousFlags = flags - - listener?(networkReachabilityStatusForFlags(flags)) - } - - // MARK: - Internal - Network Reachability Status - - func networkReachabilityStatusForFlags(_ flags: SCNetworkReachabilityFlags) -> NetworkReachabilityStatus { - guard isNetworkReachable(with: flags) else { return .notReachable } - - var networkStatus: NetworkReachabilityStatus = .reachable(.ethernetOrWiFi) - - #if os(iOS) - if flags.contains(.isWWAN) { networkStatus = .reachable(.wwan) } - #endif - - return networkStatus - } - - func isNetworkReachable(with flags: SCNetworkReachabilityFlags) -> Bool { - let isReachable = flags.contains(.reachable) - let needsConnection = flags.contains(.connectionRequired) - let canConnectAutomatically = flags.contains(.connectionOnDemand) || flags.contains(.connectionOnTraffic) - let canConnectWithoutUserInteraction = canConnectAutomatically && !flags.contains(.interventionRequired) - - return isReachable && (!needsConnection || canConnectWithoutUserInteraction) - } -} - -// MARK: - - -extension NetworkReachabilityManager.NetworkReachabilityStatus: Equatable {} - -/// Returns whether the two network reachability status values are equal. -/// -/// - parameter lhs: The left-hand side value to compare. -/// - parameter rhs: The right-hand side value to compare. -/// -/// - returns: `true` if the two values are equal, `false` otherwise. -public func ==( - lhs: NetworkReachabilityManager.NetworkReachabilityStatus, - rhs: NetworkReachabilityManager.NetworkReachabilityStatus) - -> Bool -{ - switch (lhs, rhs) { - case (.unknown, .unknown): - return true - case (.notReachable, .notReachable): - return true - case let (.reachable(lhsConnectionType), .reachable(rhsConnectionType)): - return lhsConnectionType == rhsConnectionType - default: - return false - } -} - -#endif diff --git a/Pods/Alamofire/Source/Notifications.swift b/Pods/Alamofire/Source/Notifications.swift deleted file mode 100644 index e1ac31b..0000000 --- a/Pods/Alamofire/Source/Notifications.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// Notifications.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -extension Notification.Name { - /// Used as a namespace for all `URLSessionTask` related notifications. - public struct Task { - /// Posted when a `URLSessionTask` is resumed. The notification `object` contains the resumed `URLSessionTask`. - public static let DidResume = Notification.Name(rawValue: "org.alamofire.notification.name.task.didResume") - - /// Posted when a `URLSessionTask` is suspended. The notification `object` contains the suspended `URLSessionTask`. - public static let DidSuspend = Notification.Name(rawValue: "org.alamofire.notification.name.task.didSuspend") - - /// Posted when a `URLSessionTask` is cancelled. The notification `object` contains the cancelled `URLSessionTask`. - public static let DidCancel = Notification.Name(rawValue: "org.alamofire.notification.name.task.didCancel") - - /// Posted when a `URLSessionTask` is completed. The notification `object` contains the completed `URLSessionTask`. - public static let DidComplete = Notification.Name(rawValue: "org.alamofire.notification.name.task.didComplete") - } -} - -// MARK: - - -extension Notification { - /// Used as a namespace for all `Notification` user info dictionary keys. - public struct Key { - /// User info dictionary key representing the `URLSessionTask` associated with the notification. - public static let Task = "org.alamofire.notification.key.task" - - /// User info dictionary key representing the responseData associated with the notification. - public static let ResponseData = "org.alamofire.notification.key.responseData" - } -} diff --git a/Pods/Alamofire/Source/ParameterEncoding.swift b/Pods/Alamofire/Source/ParameterEncoding.swift deleted file mode 100644 index 6195809..0000000 --- a/Pods/Alamofire/Source/ParameterEncoding.swift +++ /dev/null @@ -1,483 +0,0 @@ -// -// ParameterEncoding.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// HTTP method definitions. -/// -/// See https://tools.ietf.org/html/rfc7231#section-4.3 -public enum HTTPMethod: String { - case options = "OPTIONS" - case get = "GET" - case head = "HEAD" - case post = "POST" - case put = "PUT" - case patch = "PATCH" - case delete = "DELETE" - case trace = "TRACE" - case connect = "CONNECT" -} - -// MARK: - - -/// A dictionary of parameters to apply to a `URLRequest`. -public typealias Parameters = [String: Any] - -/// A type used to define how a set of parameters are applied to a `URLRequest`. -public protocol ParameterEncoding { - /// Creates a URL request by encoding parameters and applying them onto an existing request. - /// - /// - parameter urlRequest: The request to have parameters applied. - /// - parameter parameters: The parameters to apply. - /// - /// - throws: An `AFError.parameterEncodingFailed` error if encoding fails. - /// - /// - returns: The encoded request. - func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest -} - -// MARK: - - -/// Creates a url-encoded query string to be set as or appended to any existing URL query string or set as the HTTP -/// body of the URL request. Whether the query string is set or appended to any existing URL query string or set as -/// the HTTP body depends on the destination of the encoding. -/// -/// The `Content-Type` HTTP header field of an encoded request with HTTP body is set to -/// `application/x-www-form-urlencoded; charset=utf-8`. -/// -/// There is no published specification for how to encode collection types. By default the convention of appending -/// `[]` to the key for array values (`foo[]=1&foo[]=2`), and appending the key surrounded by square brackets for -/// nested dictionary values (`foo[bar]=baz`) is used. Optionally, `ArrayEncoding` can be used to omit the -/// square brackets appended to array keys. -/// -/// `BoolEncoding` can be used to configure how boolean values are encoded. The default behavior is to encode -/// `true` as 1 and `false` as 0. -public struct URLEncoding: ParameterEncoding { - - // MARK: Helper Types - - /// Defines whether the url-encoded query string is applied to the existing query string or HTTP body of the - /// resulting URL request. - /// - /// - methodDependent: Applies encoded query string result to existing query string for `GET`, `HEAD` and `DELETE` - /// requests and sets as the HTTP body for requests with any other HTTP method. - /// - queryString: Sets or appends encoded query string result to existing query string. - /// - httpBody: Sets encoded query string result as the HTTP body of the URL request. - public enum Destination { - case methodDependent, queryString, httpBody - } - - /// Configures how `Array` parameters are encoded. - /// - /// - brackets: An empty set of square brackets is appended to the key for every value. - /// This is the default behavior. - /// - noBrackets: No brackets are appended. The key is encoded as is. - public enum ArrayEncoding { - case brackets, noBrackets - - func encode(key: String) -> String { - switch self { - case .brackets: - return "\(key)[]" - case .noBrackets: - return key - } - } - } - - /// Configures how `Bool` parameters are encoded. - /// - /// - numeric: Encode `true` as `1` and `false` as `0`. This is the default behavior. - /// - literal: Encode `true` and `false` as string literals. - public enum BoolEncoding { - case numeric, literal - - func encode(value: Bool) -> String { - switch self { - case .numeric: - return value ? "1" : "0" - case .literal: - return value ? "true" : "false" - } - } - } - - // MARK: Properties - - /// Returns a default `URLEncoding` instance. - public static var `default`: URLEncoding { return URLEncoding() } - - /// Returns a `URLEncoding` instance with a `.methodDependent` destination. - public static var methodDependent: URLEncoding { return URLEncoding() } - - /// Returns a `URLEncoding` instance with a `.queryString` destination. - public static var queryString: URLEncoding { return URLEncoding(destination: .queryString) } - - /// Returns a `URLEncoding` instance with an `.httpBody` destination. - public static var httpBody: URLEncoding { return URLEncoding(destination: .httpBody) } - - /// The destination defining where the encoded query string is to be applied to the URL request. - public let destination: Destination - - /// The encoding to use for `Array` parameters. - public let arrayEncoding: ArrayEncoding - - /// The encoding to use for `Bool` parameters. - public let boolEncoding: BoolEncoding - - // MARK: Initialization - - /// Creates a `URLEncoding` instance using the specified destination. - /// - /// - parameter destination: The destination defining where the encoded query string is to be applied. - /// - parameter arrayEncoding: The encoding to use for `Array` parameters. - /// - parameter boolEncoding: The encoding to use for `Bool` parameters. - /// - /// - returns: The new `URLEncoding` instance. - public init(destination: Destination = .methodDependent, arrayEncoding: ArrayEncoding = .brackets, boolEncoding: BoolEncoding = .numeric) { - self.destination = destination - self.arrayEncoding = arrayEncoding - self.boolEncoding = boolEncoding - } - - // MARK: Encoding - - /// Creates a URL request by encoding parameters and applying them onto an existing request. - /// - /// - parameter urlRequest: The request to have parameters applied. - /// - parameter parameters: The parameters to apply. - /// - /// - throws: An `Error` if the encoding process encounters an error. - /// - /// - returns: The encoded request. - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let parameters = parameters else { return urlRequest } - - if let method = HTTPMethod(rawValue: urlRequest.httpMethod ?? "GET"), encodesParametersInURL(with: method) { - guard let url = urlRequest.url else { - throw AFError.parameterEncodingFailed(reason: .missingURL) - } - - if var urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: false), !parameters.isEmpty { - let percentEncodedQuery = (urlComponents.percentEncodedQuery.map { $0 + "&" } ?? "") + query(parameters) - urlComponents.percentEncodedQuery = percentEncodedQuery - urlRequest.url = urlComponents.url - } - } else { - if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { - urlRequest.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type") - } - - urlRequest.httpBody = query(parameters).data(using: .utf8, allowLossyConversion: false) - } - - return urlRequest - } - - /// Creates percent-escaped, URL encoded query string components from the given key-value pair using recursion. - /// - /// - parameter key: The key of the query component. - /// - parameter value: The value of the query component. - /// - /// - returns: The percent-escaped, URL encoded query string components. - public func queryComponents(fromKey key: String, value: Any) -> [(String, String)] { - var components: [(String, String)] = [] - - if let dictionary = value as? [String: Any] { - for (nestedKey, value) in dictionary { - components += queryComponents(fromKey: "\(key)[\(nestedKey)]", value: value) - } - } else if let array = value as? [Any] { - for value in array { - components += queryComponents(fromKey: arrayEncoding.encode(key: key), value: value) - } - } else if let value = value as? NSNumber { - if value.isBool { - components.append((escape(key), escape(boolEncoding.encode(value: value.boolValue)))) - } else { - components.append((escape(key), escape("\(value)"))) - } - } else if let bool = value as? Bool { - components.append((escape(key), escape(boolEncoding.encode(value: bool)))) - } else { - components.append((escape(key), escape("\(value)"))) - } - - return components - } - - /// Returns a percent-escaped string following RFC 3986 for a query string key or value. - /// - /// RFC 3986 states that the following characters are "reserved" characters. - /// - /// - General Delimiters: ":", "#", "[", "]", "@", "?", "/" - /// - Sub-Delimiters: "!", "$", "&", "'", "(", ")", "*", "+", ",", ";", "=" - /// - /// In RFC 3986 - Section 3.4, it states that the "?" and "/" characters should not be escaped to allow - /// query strings to include a URL. Therefore, all "reserved" characters with the exception of "?" and "/" - /// should be percent-escaped in the query string. - /// - /// - parameter string: The string to be percent-escaped. - /// - /// - returns: The percent-escaped string. - public func escape(_ string: String) -> String { - let generalDelimitersToEncode = ":#[]@" // does not include "?" or "/" due to RFC 3986 - Section 3.4 - let subDelimitersToEncode = "!$&'()*+,;=" - - var allowedCharacterSet = CharacterSet.urlQueryAllowed - allowedCharacterSet.remove(charactersIn: "\(generalDelimitersToEncode)\(subDelimitersToEncode)") - - var escaped = "" - - //========================================================================================================== - // - // Batching is required for escaping due to an internal bug in iOS 8.1 and 8.2. Encoding more than a few - // hundred Chinese characters causes various malloc error crashes. To avoid this issue until iOS 8 is no - // longer supported, batching MUST be used for encoding. This introduces roughly a 20% overhead. For more - // info, please refer to: - // - // - https://github.com/Alamofire/Alamofire/issues/206 - // - //========================================================================================================== - - if #available(iOS 8.3, *) { - escaped = string.addingPercentEncoding(withAllowedCharacters: allowedCharacterSet) ?? string - } else { - let batchSize = 50 - var index = string.startIndex - - while index != string.endIndex { - let startIndex = index - let endIndex = string.index(index, offsetBy: batchSize, limitedBy: string.endIndex) ?? string.endIndex - let range = startIndex.. String { - var components: [(String, String)] = [] - - for key in parameters.keys.sorted(by: <) { - let value = parameters[key]! - components += queryComponents(fromKey: key, value: value) - } - return components.map { "\($0)=\($1)" }.joined(separator: "&") - } - - private func encodesParametersInURL(with method: HTTPMethod) -> Bool { - switch destination { - case .queryString: - return true - case .httpBody: - return false - default: - break - } - - switch method { - case .get, .head, .delete: - return true - default: - return false - } - } -} - -// MARK: - - -/// Uses `JSONSerialization` to create a JSON representation of the parameters object, which is set as the body of the -/// request. The `Content-Type` HTTP header field of an encoded request is set to `application/json`. -public struct JSONEncoding: ParameterEncoding { - - // MARK: Properties - - /// Returns a `JSONEncoding` instance with default writing options. - public static var `default`: JSONEncoding { return JSONEncoding() } - - /// Returns a `JSONEncoding` instance with `.prettyPrinted` writing options. - public static var prettyPrinted: JSONEncoding { return JSONEncoding(options: .prettyPrinted) } - - /// The options for writing the parameters as JSON data. - public let options: JSONSerialization.WritingOptions - - // MARK: Initialization - - /// Creates a `JSONEncoding` instance using the specified options. - /// - /// - parameter options: The options for writing the parameters as JSON data. - /// - /// - returns: The new `JSONEncoding` instance. - public init(options: JSONSerialization.WritingOptions = []) { - self.options = options - } - - // MARK: Encoding - - /// Creates a URL request by encoding parameters and applying them onto an existing request. - /// - /// - parameter urlRequest: The request to have parameters applied. - /// - parameter parameters: The parameters to apply. - /// - /// - throws: An `Error` if the encoding process encounters an error. - /// - /// - returns: The encoded request. - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let parameters = parameters else { return urlRequest } - - do { - let data = try JSONSerialization.data(withJSONObject: parameters, options: options) - - if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { - urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") - } - - urlRequest.httpBody = data - } catch { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) - } - - return urlRequest - } - - /// Creates a URL request by encoding the JSON object and setting the resulting data on the HTTP body. - /// - /// - parameter urlRequest: The request to apply the JSON object to. - /// - parameter jsonObject: The JSON object to apply to the request. - /// - /// - throws: An `Error` if the encoding process encounters an error. - /// - /// - returns: The encoded request. - public func encode(_ urlRequest: URLRequestConvertible, withJSONObject jsonObject: Any? = nil) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let jsonObject = jsonObject else { return urlRequest } - - do { - let data = try JSONSerialization.data(withJSONObject: jsonObject, options: options) - - if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { - urlRequest.setValue("application/json", forHTTPHeaderField: "Content-Type") - } - - urlRequest.httpBody = data - } catch { - throw AFError.parameterEncodingFailed(reason: .jsonEncodingFailed(error: error)) - } - - return urlRequest - } -} - -// MARK: - - -/// Uses `PropertyListSerialization` to create a plist representation of the parameters object, according to the -/// associated format and write options values, which is set as the body of the request. The `Content-Type` HTTP header -/// field of an encoded request is set to `application/x-plist`. -public struct PropertyListEncoding: ParameterEncoding { - - // MARK: Properties - - /// Returns a default `PropertyListEncoding` instance. - public static var `default`: PropertyListEncoding { return PropertyListEncoding() } - - /// Returns a `PropertyListEncoding` instance with xml formatting and default writing options. - public static var xml: PropertyListEncoding { return PropertyListEncoding(format: .xml) } - - /// Returns a `PropertyListEncoding` instance with binary formatting and default writing options. - public static var binary: PropertyListEncoding { return PropertyListEncoding(format: .binary) } - - /// The property list serialization format. - public let format: PropertyListSerialization.PropertyListFormat - - /// The options for writing the parameters as plist data. - public let options: PropertyListSerialization.WriteOptions - - // MARK: Initialization - - /// Creates a `PropertyListEncoding` instance using the specified format and options. - /// - /// - parameter format: The property list serialization format. - /// - parameter options: The options for writing the parameters as plist data. - /// - /// - returns: The new `PropertyListEncoding` instance. - public init( - format: PropertyListSerialization.PropertyListFormat = .xml, - options: PropertyListSerialization.WriteOptions = 0) - { - self.format = format - self.options = options - } - - // MARK: Encoding - - /// Creates a URL request by encoding parameters and applying them onto an existing request. - /// - /// - parameter urlRequest: The request to have parameters applied. - /// - parameter parameters: The parameters to apply. - /// - /// - throws: An `Error` if the encoding process encounters an error. - /// - /// - returns: The encoded request. - public func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest { - var urlRequest = try urlRequest.asURLRequest() - - guard let parameters = parameters else { return urlRequest } - - do { - let data = try PropertyListSerialization.data( - fromPropertyList: parameters, - format: format, - options: options - ) - - if urlRequest.value(forHTTPHeaderField: "Content-Type") == nil { - urlRequest.setValue("application/x-plist", forHTTPHeaderField: "Content-Type") - } - - urlRequest.httpBody = data - } catch { - throw AFError.parameterEncodingFailed(reason: .propertyListEncodingFailed(error: error)) - } - - return urlRequest - } -} - -// MARK: - - -extension NSNumber { - fileprivate var isBool: Bool { return CFBooleanGetTypeID() == CFGetTypeID(self) } -} diff --git a/Pods/Alamofire/Source/Request.swift b/Pods/Alamofire/Source/Request.swift deleted file mode 100644 index 2be2ce0..0000000 --- a/Pods/Alamofire/Source/Request.swift +++ /dev/null @@ -1,660 +0,0 @@ -// -// Request.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// A type that can inspect and optionally adapt a `URLRequest` in some manner if necessary. -public protocol RequestAdapter { - /// Inspects and adapts the specified `URLRequest` in some manner if necessary and returns the result. - /// - /// - parameter urlRequest: The URL request to adapt. - /// - /// - throws: An `Error` if the adaptation encounters an error. - /// - /// - returns: The adapted `URLRequest`. - func adapt(_ urlRequest: URLRequest) throws -> URLRequest -} - -// MARK: - - -/// A closure executed when the `RequestRetrier` determines whether a `Request` should be retried or not. -public typealias RequestRetryCompletion = (_ shouldRetry: Bool, _ timeDelay: TimeInterval) -> Void - -/// A type that determines whether a request should be retried after being executed by the specified session manager -/// and encountering an error. -public protocol RequestRetrier { - /// Determines whether the `Request` should be retried by calling the `completion` closure. - /// - /// This operation is fully asynchronous. Any amount of time can be taken to determine whether the request needs - /// to be retried. The one requirement is that the completion closure is called to ensure the request is properly - /// cleaned up after. - /// - /// - parameter manager: The session manager the request was executed on. - /// - parameter request: The request that failed due to the encountered error. - /// - parameter error: The error encountered when executing the request. - /// - parameter completion: The completion closure to be executed when retry decision has been determined. - func should(_ manager: SessionManager, retry request: Request, with error: Error, completion: @escaping RequestRetryCompletion) -} - -// MARK: - - -protocol TaskConvertible { - func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask -} - -/// A dictionary of headers to apply to a `URLRequest`. -public typealias HTTPHeaders = [String: String] - -// MARK: - - -/// Responsible for sending a request and receiving the response and associated data from the server, as well as -/// managing its underlying `URLSessionTask`. -open class Request { - - // MARK: Helper Types - - /// A closure executed when monitoring upload or download progress of a request. - public typealias ProgressHandler = (Progress) -> Void - - enum RequestTask { - case data(TaskConvertible?, URLSessionTask?) - case download(TaskConvertible?, URLSessionTask?) - case upload(TaskConvertible?, URLSessionTask?) - case stream(TaskConvertible?, URLSessionTask?) - } - - // MARK: Properties - - /// The delegate for the underlying task. - open internal(set) var delegate: TaskDelegate { - get { - taskDelegateLock.lock() ; defer { taskDelegateLock.unlock() } - return taskDelegate - } - set { - taskDelegateLock.lock() ; defer { taskDelegateLock.unlock() } - taskDelegate = newValue - } - } - - /// The underlying task. - open var task: URLSessionTask? { return delegate.task } - - /// The session belonging to the underlying task. - public let session: URLSession - - /// The request sent or to be sent to the server. - open var request: URLRequest? { return task?.originalRequest } - - /// The response received from the server, if any. - open var response: HTTPURLResponse? { return task?.response as? HTTPURLResponse } - - /// The number of times the request has been retried. - open internal(set) var retryCount: UInt = 0 - - let originalTask: TaskConvertible? - - var startTime: CFAbsoluteTime? - var endTime: CFAbsoluteTime? - - var validations: [() -> Void] = [] - - private var taskDelegate: TaskDelegate - private var taskDelegateLock = NSLock() - - // MARK: Lifecycle - - init(session: URLSession, requestTask: RequestTask, error: Error? = nil) { - self.session = session - - switch requestTask { - case .data(let originalTask, let task): - taskDelegate = DataTaskDelegate(task: task) - self.originalTask = originalTask - case .download(let originalTask, let task): - taskDelegate = DownloadTaskDelegate(task: task) - self.originalTask = originalTask - case .upload(let originalTask, let task): - taskDelegate = UploadTaskDelegate(task: task) - self.originalTask = originalTask - case .stream(let originalTask, let task): - taskDelegate = TaskDelegate(task: task) - self.originalTask = originalTask - } - - delegate.error = error - delegate.queue.addOperation { self.endTime = CFAbsoluteTimeGetCurrent() } - } - - // MARK: Authentication - - /// Associates an HTTP Basic credential with the request. - /// - /// - parameter user: The user. - /// - parameter password: The password. - /// - parameter persistence: The URL credential persistence. `.ForSession` by default. - /// - /// - returns: The request. - @discardableResult - open func authenticate( - user: String, - password: String, - persistence: URLCredential.Persistence = .forSession) - -> Self - { - let credential = URLCredential(user: user, password: password, persistence: persistence) - return authenticate(usingCredential: credential) - } - - /// Associates a specified credential with the request. - /// - /// - parameter credential: The credential. - /// - /// - returns: The request. - @discardableResult - open func authenticate(usingCredential credential: URLCredential) -> Self { - delegate.credential = credential - return self - } - - /// Returns a base64 encoded basic authentication credential as an authorization header tuple. - /// - /// - parameter user: The user. - /// - parameter password: The password. - /// - /// - returns: A tuple with Authorization header and credential value if encoding succeeds, `nil` otherwise. - open class func authorizationHeader(user: String, password: String) -> (key: String, value: String)? { - guard let data = "\(user):\(password)".data(using: .utf8) else { return nil } - - let credential = data.base64EncodedString(options: []) - - return (key: "Authorization", value: "Basic \(credential)") - } - - // MARK: State - - /// Resumes the request. - open func resume() { - guard let task = task else { delegate.queue.isSuspended = false ; return } - - if startTime == nil { startTime = CFAbsoluteTimeGetCurrent() } - - task.resume() - - NotificationCenter.default.post( - name: Notification.Name.Task.DidResume, - object: self, - userInfo: [Notification.Key.Task: task] - ) - } - - /// Suspends the request. - open func suspend() { - guard let task = task else { return } - - task.suspend() - - NotificationCenter.default.post( - name: Notification.Name.Task.DidSuspend, - object: self, - userInfo: [Notification.Key.Task: task] - ) - } - - /// Cancels the request. - open func cancel() { - guard let task = task else { return } - - task.cancel() - - NotificationCenter.default.post( - name: Notification.Name.Task.DidCancel, - object: self, - userInfo: [Notification.Key.Task: task] - ) - } -} - -// MARK: - CustomStringConvertible - -extension Request: CustomStringConvertible { - /// The textual representation used when written to an output stream, which includes the HTTP method and URL, as - /// well as the response status code if a response has been received. - open var description: String { - var components: [String] = [] - - if let HTTPMethod = request?.httpMethod { - components.append(HTTPMethod) - } - - if let urlString = request?.url?.absoluteString { - components.append(urlString) - } - - if let response = response { - components.append("(\(response.statusCode))") - } - - return components.joined(separator: " ") - } -} - -// MARK: - CustomDebugStringConvertible - -extension Request: CustomDebugStringConvertible { - /// The textual representation used when written to an output stream, in the form of a cURL command. - open var debugDescription: String { - return cURLRepresentation() - } - - func cURLRepresentation() -> String { - var components = ["$ curl -v"] - - guard let request = self.request, - let url = request.url, - let host = url.host - else { - return "$ curl command could not be created" - } - - if let httpMethod = request.httpMethod, httpMethod != "GET" { - components.append("-X \(httpMethod)") - } - - if let credentialStorage = self.session.configuration.urlCredentialStorage { - let protectionSpace = URLProtectionSpace( - host: host, - port: url.port ?? 0, - protocol: url.scheme, - realm: host, - authenticationMethod: NSURLAuthenticationMethodHTTPBasic - ) - - if let credentials = credentialStorage.credentials(for: protectionSpace)?.values { - for credential in credentials { - guard let user = credential.user, let password = credential.password else { continue } - components.append("-u \(user):\(password)") - } - } else { - if let credential = delegate.credential, let user = credential.user, let password = credential.password { - components.append("-u \(user):\(password)") - } - } - } - - if session.configuration.httpShouldSetCookies { - if - let cookieStorage = session.configuration.httpCookieStorage, - let cookies = cookieStorage.cookies(for: url), !cookies.isEmpty - { - let string = cookies.reduce("") { $0 + "\($1.name)=\($1.value);" } - - #if swift(>=3.2) - components.append("-b \"\(string[.. URLSessionTask { - do { - let urlRequest = try self.urlRequest.adapt(using: adapter) - return queue.sync { session.dataTask(with: urlRequest) } - } catch { - throw AdaptError(error: error) - } - } - } - - // MARK: Properties - - /// The request sent or to be sent to the server. - open override var request: URLRequest? { - if let request = super.request { return request } - if let requestable = originalTask as? Requestable { return requestable.urlRequest } - - return nil - } - - /// The progress of fetching the response data from the server for the request. - open var progress: Progress { return dataDelegate.progress } - - var dataDelegate: DataTaskDelegate { return delegate as! DataTaskDelegate } - - // MARK: Stream - - /// Sets a closure to be called periodically during the lifecycle of the request as data is read from the server. - /// - /// This closure returns the bytes most recently received from the server, not including data from previous calls. - /// If this closure is set, data will only be available within this closure, and will not be saved elsewhere. It is - /// also important to note that the server data in any `Response` object will be `nil`. - /// - /// - parameter closure: The code to be executed periodically during the lifecycle of the request. - /// - /// - returns: The request. - @discardableResult - open func stream(closure: ((Data) -> Void)? = nil) -> Self { - dataDelegate.dataStream = closure - return self - } - - // MARK: Progress - - /// Sets a closure to be called periodically during the lifecycle of the `Request` as data is read from the server. - /// - /// - parameter queue: The dispatch queue to execute the closure on. - /// - parameter closure: The code to be executed periodically as data is read from the server. - /// - /// - returns: The request. - @discardableResult - open func downloadProgress(queue: DispatchQueue = DispatchQueue.main, closure: @escaping ProgressHandler) -> Self { - dataDelegate.progressHandler = (closure, queue) - return self - } -} - -// MARK: - - -/// Specific type of `Request` that manages an underlying `URLSessionDownloadTask`. -open class DownloadRequest: Request { - - // MARK: Helper Types - - /// A collection of options to be executed prior to moving a downloaded file from the temporary URL to the - /// destination URL. - public struct DownloadOptions: OptionSet { - /// Returns the raw bitmask value of the option and satisfies the `RawRepresentable` protocol. - public let rawValue: UInt - - /// A `DownloadOptions` flag that creates intermediate directories for the destination URL if specified. - public static let createIntermediateDirectories = DownloadOptions(rawValue: 1 << 0) - - /// A `DownloadOptions` flag that removes a previous file from the destination URL if specified. - public static let removePreviousFile = DownloadOptions(rawValue: 1 << 1) - - /// Creates a `DownloadFileDestinationOptions` instance with the specified raw value. - /// - /// - parameter rawValue: The raw bitmask value for the option. - /// - /// - returns: A new log level instance. - public init(rawValue: UInt) { - self.rawValue = rawValue - } - } - - /// A closure executed once a download request has successfully completed in order to determine where to move the - /// temporary file written to during the download process. The closure takes two arguments: the temporary file URL - /// and the URL response, and returns a two arguments: the file URL where the temporary file should be moved and - /// the options defining how the file should be moved. - public typealias DownloadFileDestination = ( - _ temporaryURL: URL, - _ response: HTTPURLResponse) - -> (destinationURL: URL, options: DownloadOptions) - - enum Downloadable: TaskConvertible { - case request(URLRequest) - case resumeData(Data) - - func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask { - do { - let task: URLSessionTask - - switch self { - case let .request(urlRequest): - let urlRequest = try urlRequest.adapt(using: adapter) - task = queue.sync { session.downloadTask(with: urlRequest) } - case let .resumeData(resumeData): - task = queue.sync { session.downloadTask(withResumeData: resumeData) } - } - - return task - } catch { - throw AdaptError(error: error) - } - } - } - - // MARK: Properties - - /// The request sent or to be sent to the server. - open override var request: URLRequest? { - if let request = super.request { return request } - - if let downloadable = originalTask as? Downloadable, case let .request(urlRequest) = downloadable { - return urlRequest - } - - return nil - } - - /// The resume data of the underlying download task if available after a failure. - open var resumeData: Data? { return downloadDelegate.resumeData } - - /// The progress of downloading the response data from the server for the request. - open var progress: Progress { return downloadDelegate.progress } - - var downloadDelegate: DownloadTaskDelegate { return delegate as! DownloadTaskDelegate } - - // MARK: State - - /// Cancels the request. - override open func cancel() { - cancel(createResumeData: true) - } - - /// Cancels the request. - /// - /// - parameter createResumeData: Determines whether resume data is created via the underlying download task or not. - open func cancel(createResumeData: Bool) { - if createResumeData { - downloadDelegate.downloadTask.cancel { self.downloadDelegate.resumeData = $0 } - } else { - downloadDelegate.downloadTask.cancel() - } - - NotificationCenter.default.post( - name: Notification.Name.Task.DidCancel, - object: self, - userInfo: [Notification.Key.Task: task as Any] - ) - } - - // MARK: Progress - - /// Sets a closure to be called periodically during the lifecycle of the `Request` as data is read from the server. - /// - /// - parameter queue: The dispatch queue to execute the closure on. - /// - parameter closure: The code to be executed periodically as data is read from the server. - /// - /// - returns: The request. - @discardableResult - open func downloadProgress(queue: DispatchQueue = DispatchQueue.main, closure: @escaping ProgressHandler) -> Self { - downloadDelegate.progressHandler = (closure, queue) - return self - } - - // MARK: Destination - - /// Creates a download file destination closure which uses the default file manager to move the temporary file to a - /// file URL in the first available directory with the specified search path directory and search path domain mask. - /// - /// - parameter directory: The search path directory. `.DocumentDirectory` by default. - /// - parameter domain: The search path domain mask. `.UserDomainMask` by default. - /// - /// - returns: A download file destination closure. - open class func suggestedDownloadDestination( - for directory: FileManager.SearchPathDirectory = .documentDirectory, - in domain: FileManager.SearchPathDomainMask = .userDomainMask) - -> DownloadFileDestination - { - return { temporaryURL, response in - let directoryURLs = FileManager.default.urls(for: directory, in: domain) - - if !directoryURLs.isEmpty { - return (directoryURLs[0].appendingPathComponent(response.suggestedFilename!), []) - } - - return (temporaryURL, []) - } - } -} - -// MARK: - - -/// Specific type of `Request` that manages an underlying `URLSessionUploadTask`. -open class UploadRequest: DataRequest { - - // MARK: Helper Types - - enum Uploadable: TaskConvertible { - case data(Data, URLRequest) - case file(URL, URLRequest) - case stream(InputStream, URLRequest) - - func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask { - do { - let task: URLSessionTask - - switch self { - case let .data(data, urlRequest): - let urlRequest = try urlRequest.adapt(using: adapter) - task = queue.sync { session.uploadTask(with: urlRequest, from: data) } - case let .file(url, urlRequest): - let urlRequest = try urlRequest.adapt(using: adapter) - task = queue.sync { session.uploadTask(with: urlRequest, fromFile: url) } - case let .stream(_, urlRequest): - let urlRequest = try urlRequest.adapt(using: adapter) - task = queue.sync { session.uploadTask(withStreamedRequest: urlRequest) } - } - - return task - } catch { - throw AdaptError(error: error) - } - } - } - - // MARK: Properties - - /// The request sent or to be sent to the server. - open override var request: URLRequest? { - if let request = super.request { return request } - - guard let uploadable = originalTask as? Uploadable else { return nil } - - switch uploadable { - case .data(_, let urlRequest), .file(_, let urlRequest), .stream(_, let urlRequest): - return urlRequest - } - } - - /// The progress of uploading the payload to the server for the upload request. - open var uploadProgress: Progress { return uploadDelegate.uploadProgress } - - var uploadDelegate: UploadTaskDelegate { return delegate as! UploadTaskDelegate } - - // MARK: Upload Progress - - /// Sets a closure to be called periodically during the lifecycle of the `UploadRequest` as data is sent to - /// the server. - /// - /// After the data is sent to the server, the `progress(queue:closure:)` APIs can be used to monitor the progress - /// of data being read from the server. - /// - /// - parameter queue: The dispatch queue to execute the closure on. - /// - parameter closure: The code to be executed periodically as data is sent to the server. - /// - /// - returns: The request. - @discardableResult - open func uploadProgress(queue: DispatchQueue = DispatchQueue.main, closure: @escaping ProgressHandler) -> Self { - uploadDelegate.uploadProgressHandler = (closure, queue) - return self - } -} - -// MARK: - - -#if !os(watchOS) - -/// Specific type of `Request` that manages an underlying `URLSessionStreamTask`. -@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) -open class StreamRequest: Request { - enum Streamable: TaskConvertible { - case stream(hostName: String, port: Int) - case netService(NetService) - - func task(session: URLSession, adapter: RequestAdapter?, queue: DispatchQueue) throws -> URLSessionTask { - let task: URLSessionTask - - switch self { - case let .stream(hostName, port): - task = queue.sync { session.streamTask(withHostName: hostName, port: port) } - case let .netService(netService): - task = queue.sync { session.streamTask(with: netService) } - } - - return task - } - } -} - -#endif diff --git a/Pods/Alamofire/Source/Response.swift b/Pods/Alamofire/Source/Response.swift deleted file mode 100644 index d05cfb0..0000000 --- a/Pods/Alamofire/Source/Response.swift +++ /dev/null @@ -1,574 +0,0 @@ -// -// Response.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Used to store all data associated with an non-serialized response of a data or upload request. -public struct DefaultDataResponse { - /// The URL request sent to the server. - public let request: URLRequest? - - /// The server's response to the URL request. - public let response: HTTPURLResponse? - - /// The data returned by the server. - public let data: Data? - - /// The error encountered while executing or validating the request. - public let error: Error? - - /// The timeline of the complete lifecycle of the request. - public let timeline: Timeline - - var _metrics: AnyObject? - - /// Creates a `DefaultDataResponse` instance from the specified parameters. - /// - /// - Parameters: - /// - request: The URL request sent to the server. - /// - response: The server's response to the URL request. - /// - data: The data returned by the server. - /// - error: The error encountered while executing or validating the request. - /// - timeline: The timeline of the complete lifecycle of the request. `Timeline()` by default. - /// - metrics: The task metrics containing the request / response statistics. `nil` by default. - public init( - request: URLRequest?, - response: HTTPURLResponse?, - data: Data?, - error: Error?, - timeline: Timeline = Timeline(), - metrics: AnyObject? = nil) - { - self.request = request - self.response = response - self.data = data - self.error = error - self.timeline = timeline - } -} - -// MARK: - - -/// Used to store all data associated with a serialized response of a data or upload request. -public struct DataResponse { - /// The URL request sent to the server. - public let request: URLRequest? - - /// The server's response to the URL request. - public let response: HTTPURLResponse? - - /// The data returned by the server. - public let data: Data? - - /// The result of response serialization. - public let result: Result - - /// The timeline of the complete lifecycle of the request. - public let timeline: Timeline - - /// Returns the associated value of the result if it is a success, `nil` otherwise. - public var value: Value? { return result.value } - - /// Returns the associated error value if the result if it is a failure, `nil` otherwise. - public var error: Error? { return result.error } - - var _metrics: AnyObject? - - /// Creates a `DataResponse` instance with the specified parameters derived from response serialization. - /// - /// - parameter request: The URL request sent to the server. - /// - parameter response: The server's response to the URL request. - /// - parameter data: The data returned by the server. - /// - parameter result: The result of response serialization. - /// - parameter timeline: The timeline of the complete lifecycle of the `Request`. Defaults to `Timeline()`. - /// - /// - returns: The new `DataResponse` instance. - public init( - request: URLRequest?, - response: HTTPURLResponse?, - data: Data?, - result: Result, - timeline: Timeline = Timeline()) - { - self.request = request - self.response = response - self.data = data - self.result = result - self.timeline = timeline - } -} - -// MARK: - - -extension DataResponse: CustomStringConvertible, CustomDebugStringConvertible { - /// The textual representation used when written to an output stream, which includes whether the result was a - /// success or failure. - public var description: String { - return result.debugDescription - } - - /// The debug textual representation used when written to an output stream, which includes the URL request, the URL - /// response, the server data, the response serialization result and the timeline. - public var debugDescription: String { - let requestDescription = request.map { "\($0.httpMethod ?? "GET") \($0)"} ?? "nil" - let requestBody = request?.httpBody.map { String(decoding: $0, as: UTF8.self) } ?? "None" - let responseDescription = response.map { "\($0)" } ?? "nil" - let responseBody = data.map { String(decoding: $0, as: UTF8.self) } ?? "None" - - return """ - [Request]: \(requestDescription) - [Request Body]: \n\(requestBody) - [Response]: \(responseDescription) - [Response Body]: \n\(responseBody) - [Result]: \(result) - [Timeline]: \(timeline.debugDescription) - """ - } -} - -// MARK: - - -extension DataResponse { - /// Evaluates the specified closure when the result of this `DataResponse` is a success, passing the unwrapped - /// result value as a parameter. - /// - /// Use the `map` method with a closure that does not throw. For example: - /// - /// let possibleData: DataResponse = ... - /// let possibleInt = possibleData.map { $0.count } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A `DataResponse` whose result wraps the value returned by the given closure. If this instance's - /// result is a failure, returns a response wrapping the same failure. - public func map(_ transform: (Value) -> T) -> DataResponse { - var response = DataResponse( - request: request, - response: self.response, - data: data, - result: result.map(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } - - /// Evaluates the given closure when the result of this `DataResponse` is a success, passing the unwrapped result - /// value as a parameter. - /// - /// Use the `flatMap` method with a closure that may throw an error. For example: - /// - /// let possibleData: DataResponse = ... - /// let possibleObject = possibleData.flatMap { - /// try JSONSerialization.jsonObject(with: $0) - /// } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A success or failure `DataResponse` depending on the result of the given closure. If this instance's - /// result is a failure, returns the same failure. - public func flatMap(_ transform: (Value) throws -> T) -> DataResponse { - var response = DataResponse( - request: request, - response: self.response, - data: data, - result: result.flatMap(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } - - /// Evaluates the specified closure when the `DataResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `mapError` function with a closure that does not throw. For example: - /// - /// let possibleData: DataResponse = ... - /// let withMyError = possibleData.mapError { MyError.error($0) } - /// - /// - Parameter transform: A closure that takes the error of the instance. - /// - Returns: A `DataResponse` instance containing the result of the transform. - public func mapError(_ transform: (Error) -> E) -> DataResponse { - var response = DataResponse( - request: request, - response: self.response, - data: data, - result: result.mapError(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } - - /// Evaluates the specified closure when the `DataResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `flatMapError` function with a closure that may throw an error. For example: - /// - /// let possibleData: DataResponse = ... - /// let possibleObject = possibleData.flatMapError { - /// try someFailableFunction(taking: $0) - /// } - /// - /// - Parameter transform: A throwing closure that takes the error of the instance. - /// - /// - Returns: A `DataResponse` instance containing the result of the transform. - public func flatMapError(_ transform: (Error) throws -> E) -> DataResponse { - var response = DataResponse( - request: request, - response: self.response, - data: data, - result: result.flatMapError(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } -} - -// MARK: - - -/// Used to store all data associated with an non-serialized response of a download request. -public struct DefaultDownloadResponse { - /// The URL request sent to the server. - public let request: URLRequest? - - /// The server's response to the URL request. - public let response: HTTPURLResponse? - - /// The temporary destination URL of the data returned from the server. - public let temporaryURL: URL? - - /// The final destination URL of the data returned from the server if it was moved. - public let destinationURL: URL? - - /// The resume data generated if the request was cancelled. - public let resumeData: Data? - - /// The error encountered while executing or validating the request. - public let error: Error? - - /// The timeline of the complete lifecycle of the request. - public let timeline: Timeline - - var _metrics: AnyObject? - - /// Creates a `DefaultDownloadResponse` instance from the specified parameters. - /// - /// - Parameters: - /// - request: The URL request sent to the server. - /// - response: The server's response to the URL request. - /// - temporaryURL: The temporary destination URL of the data returned from the server. - /// - destinationURL: The final destination URL of the data returned from the server if it was moved. - /// - resumeData: The resume data generated if the request was cancelled. - /// - error: The error encountered while executing or validating the request. - /// - timeline: The timeline of the complete lifecycle of the request. `Timeline()` by default. - /// - metrics: The task metrics containing the request / response statistics. `nil` by default. - public init( - request: URLRequest?, - response: HTTPURLResponse?, - temporaryURL: URL?, - destinationURL: URL?, - resumeData: Data?, - error: Error?, - timeline: Timeline = Timeline(), - metrics: AnyObject? = nil) - { - self.request = request - self.response = response - self.temporaryURL = temporaryURL - self.destinationURL = destinationURL - self.resumeData = resumeData - self.error = error - self.timeline = timeline - } -} - -// MARK: - - -/// Used to store all data associated with a serialized response of a download request. -public struct DownloadResponse { - /// The URL request sent to the server. - public let request: URLRequest? - - /// The server's response to the URL request. - public let response: HTTPURLResponse? - - /// The temporary destination URL of the data returned from the server. - public let temporaryURL: URL? - - /// The final destination URL of the data returned from the server if it was moved. - public let destinationURL: URL? - - /// The resume data generated if the request was cancelled. - public let resumeData: Data? - - /// The result of response serialization. - public let result: Result - - /// The timeline of the complete lifecycle of the request. - public let timeline: Timeline - - /// Returns the associated value of the result if it is a success, `nil` otherwise. - public var value: Value? { return result.value } - - /// Returns the associated error value if the result if it is a failure, `nil` otherwise. - public var error: Error? { return result.error } - - var _metrics: AnyObject? - - /// Creates a `DownloadResponse` instance with the specified parameters derived from response serialization. - /// - /// - parameter request: The URL request sent to the server. - /// - parameter response: The server's response to the URL request. - /// - parameter temporaryURL: The temporary destination URL of the data returned from the server. - /// - parameter destinationURL: The final destination URL of the data returned from the server if it was moved. - /// - parameter resumeData: The resume data generated if the request was cancelled. - /// - parameter result: The result of response serialization. - /// - parameter timeline: The timeline of the complete lifecycle of the `Request`. Defaults to `Timeline()`. - /// - /// - returns: The new `DownloadResponse` instance. - public init( - request: URLRequest?, - response: HTTPURLResponse?, - temporaryURL: URL?, - destinationURL: URL?, - resumeData: Data?, - result: Result, - timeline: Timeline = Timeline()) - { - self.request = request - self.response = response - self.temporaryURL = temporaryURL - self.destinationURL = destinationURL - self.resumeData = resumeData - self.result = result - self.timeline = timeline - } -} - -// MARK: - - -extension DownloadResponse: CustomStringConvertible, CustomDebugStringConvertible { - /// The textual representation used when written to an output stream, which includes whether the result was a - /// success or failure. - public var description: String { - return result.debugDescription - } - - /// The debug textual representation used when written to an output stream, which includes the URL request, the URL - /// response, the temporary and destination URLs, the resume data, the response serialization result and the - /// timeline. - public var debugDescription: String { - let requestDescription = request.map { "\($0.httpMethod ?? "GET") \($0)"} ?? "nil" - let requestBody = request?.httpBody.map { String(decoding: $0, as: UTF8.self) } ?? "None" - let responseDescription = response.map { "\($0)" } ?? "nil" - - return """ - [Request]: \(requestDescription) - [Request Body]: \n\(requestBody) - [Response]: \(responseDescription) - [TemporaryURL]: \(temporaryURL?.path ?? "nil") - [DestinationURL]: \(destinationURL?.path ?? "nil") - [ResumeData]: \(resumeData?.count ?? 0) bytes - [Result]: \(result) - [Timeline]: \(timeline.debugDescription) - """ - } -} - -// MARK: - - -extension DownloadResponse { - /// Evaluates the given closure when the result of this `DownloadResponse` is a success, passing the unwrapped - /// result value as a parameter. - /// - /// Use the `map` method with a closure that does not throw. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let possibleInt = possibleData.map { $0.count } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A `DownloadResponse` whose result wraps the value returned by the given closure. If this instance's - /// result is a failure, returns a response wrapping the same failure. - public func map(_ transform: (Value) -> T) -> DownloadResponse { - var response = DownloadResponse( - request: request, - response: self.response, - temporaryURL: temporaryURL, - destinationURL: destinationURL, - resumeData: resumeData, - result: result.map(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } - - /// Evaluates the given closure when the result of this `DownloadResponse` is a success, passing the unwrapped - /// result value as a parameter. - /// - /// Use the `flatMap` method with a closure that may throw an error. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let possibleObject = possibleData.flatMap { - /// try JSONSerialization.jsonObject(with: $0) - /// } - /// - /// - parameter transform: A closure that takes the success value of the instance's result. - /// - /// - returns: A success or failure `DownloadResponse` depending on the result of the given closure. If this - /// instance's result is a failure, returns the same failure. - public func flatMap(_ transform: (Value) throws -> T) -> DownloadResponse { - var response = DownloadResponse( - request: request, - response: self.response, - temporaryURL: temporaryURL, - destinationURL: destinationURL, - resumeData: resumeData, - result: result.flatMap(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } - - /// Evaluates the specified closure when the `DownloadResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `mapError` function with a closure that does not throw. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let withMyError = possibleData.mapError { MyError.error($0) } - /// - /// - Parameter transform: A closure that takes the error of the instance. - /// - Returns: A `DownloadResponse` instance containing the result of the transform. - public func mapError(_ transform: (Error) -> E) -> DownloadResponse { - var response = DownloadResponse( - request: request, - response: self.response, - temporaryURL: temporaryURL, - destinationURL: destinationURL, - resumeData: resumeData, - result: result.mapError(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } - - /// Evaluates the specified closure when the `DownloadResponse` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `flatMapError` function with a closure that may throw an error. For example: - /// - /// let possibleData: DownloadResponse = ... - /// let possibleObject = possibleData.flatMapError { - /// try someFailableFunction(taking: $0) - /// } - /// - /// - Parameter transform: A throwing closure that takes the error of the instance. - /// - /// - Returns: A `DownloadResponse` instance containing the result of the transform. - public func flatMapError(_ transform: (Error) throws -> E) -> DownloadResponse { - var response = DownloadResponse( - request: request, - response: self.response, - temporaryURL: temporaryURL, - destinationURL: destinationURL, - resumeData: resumeData, - result: result.flatMapError(transform), - timeline: timeline - ) - - response._metrics = _metrics - - return response - } -} - -// MARK: - - -protocol Response { - /// The task metrics containing the request / response statistics. - var _metrics: AnyObject? { get set } - mutating func add(_ metrics: AnyObject?) -} - -extension Response { - mutating func add(_ metrics: AnyObject?) { - #if !os(watchOS) - guard #available(iOS 10.0, macOS 10.12, tvOS 10.0, *) else { return } - guard let metrics = metrics as? URLSessionTaskMetrics else { return } - - _metrics = metrics - #endif - } -} - -// MARK: - - -@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) -extension DefaultDataResponse: Response { -#if !os(watchOS) - /// The task metrics containing the request / response statistics. - public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } -#endif -} - -@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) -extension DataResponse: Response { -#if !os(watchOS) - /// The task metrics containing the request / response statistics. - public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } -#endif -} - -@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) -extension DefaultDownloadResponse: Response { -#if !os(watchOS) - /// The task metrics containing the request / response statistics. - public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } -#endif -} - -@available(iOS 10.0, macOS 10.12, tvOS 10.0, *) -extension DownloadResponse: Response { -#if !os(watchOS) - /// The task metrics containing the request / response statistics. - public var metrics: URLSessionTaskMetrics? { return _metrics as? URLSessionTaskMetrics } -#endif -} diff --git a/Pods/Alamofire/Source/ResponseSerialization.swift b/Pods/Alamofire/Source/ResponseSerialization.swift deleted file mode 100644 index 9cc105a..0000000 --- a/Pods/Alamofire/Source/ResponseSerialization.swift +++ /dev/null @@ -1,715 +0,0 @@ -// -// ResponseSerialization.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// The type in which all data response serializers must conform to in order to serialize a response. -public protocol DataResponseSerializerProtocol { - /// The type of serialized object to be created by this `DataResponseSerializerType`. - associatedtype SerializedObject - - /// A closure used by response handlers that takes a request, response, data and error and returns a result. - var serializeResponse: (URLRequest?, HTTPURLResponse?, Data?, Error?) -> Result { get } -} - -// MARK: - - -/// A generic `DataResponseSerializerType` used to serialize a request, response, and data into a serialized object. -public struct DataResponseSerializer: DataResponseSerializerProtocol { - /// The type of serialized object to be created by this `DataResponseSerializer`. - public typealias SerializedObject = Value - - /// A closure used by response handlers that takes a request, response, data and error and returns a result. - public var serializeResponse: (URLRequest?, HTTPURLResponse?, Data?, Error?) -> Result - - /// Initializes the `ResponseSerializer` instance with the given serialize response closure. - /// - /// - parameter serializeResponse: The closure used to serialize the response. - /// - /// - returns: The new generic response serializer instance. - public init(serializeResponse: @escaping (URLRequest?, HTTPURLResponse?, Data?, Error?) -> Result) { - self.serializeResponse = serializeResponse - } -} - -// MARK: - - -/// The type in which all download response serializers must conform to in order to serialize a response. -public protocol DownloadResponseSerializerProtocol { - /// The type of serialized object to be created by this `DownloadResponseSerializerType`. - associatedtype SerializedObject - - /// A closure used by response handlers that takes a request, response, url and error and returns a result. - var serializeResponse: (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result { get } -} - -// MARK: - - -/// A generic `DownloadResponseSerializerType` used to serialize a request, response, and data into a serialized object. -public struct DownloadResponseSerializer: DownloadResponseSerializerProtocol { - /// The type of serialized object to be created by this `DownloadResponseSerializer`. - public typealias SerializedObject = Value - - /// A closure used by response handlers that takes a request, response, url and error and returns a result. - public var serializeResponse: (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result - - /// Initializes the `ResponseSerializer` instance with the given serialize response closure. - /// - /// - parameter serializeResponse: The closure used to serialize the response. - /// - /// - returns: The new generic response serializer instance. - public init(serializeResponse: @escaping (URLRequest?, HTTPURLResponse?, URL?, Error?) -> Result) { - self.serializeResponse = serializeResponse - } -} - -// MARK: - Timeline - -extension Request { - var timeline: Timeline { - let requestStartTime = self.startTime ?? CFAbsoluteTimeGetCurrent() - let requestCompletedTime = self.endTime ?? CFAbsoluteTimeGetCurrent() - let initialResponseTime = self.delegate.initialResponseTime ?? requestCompletedTime - - return Timeline( - requestStartTime: requestStartTime, - initialResponseTime: initialResponseTime, - requestCompletedTime: requestCompletedTime, - serializationCompletedTime: CFAbsoluteTimeGetCurrent() - ) - } -} - -// MARK: - Default - -extension DataRequest { - /// Adds a handler to be called once the request has finished. - /// - /// - parameter queue: The queue on which the completion handler is dispatched. - /// - parameter completionHandler: The code to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func response(queue: DispatchQueue? = nil, completionHandler: @escaping (DefaultDataResponse) -> Void) -> Self { - delegate.queue.addOperation { - (queue ?? DispatchQueue.main).async { - var dataResponse = DefaultDataResponse( - request: self.request, - response: self.response, - data: self.delegate.data, - error: self.delegate.error, - timeline: self.timeline - ) - - dataResponse.add(self.delegate.metrics) - - completionHandler(dataResponse) - } - } - - return self - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter queue: The queue on which the completion handler is dispatched. - /// - parameter responseSerializer: The response serializer responsible for serializing the request, response, - /// and data. - /// - parameter completionHandler: The code to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func response( - queue: DispatchQueue? = nil, - responseSerializer: T, - completionHandler: @escaping (DataResponse) -> Void) - -> Self - { - delegate.queue.addOperation { - let result = responseSerializer.serializeResponse( - self.request, - self.response, - self.delegate.data, - self.delegate.error - ) - - var dataResponse = DataResponse( - request: self.request, - response: self.response, - data: self.delegate.data, - result: result, - timeline: self.timeline - ) - - dataResponse.add(self.delegate.metrics) - - (queue ?? DispatchQueue.main).async { completionHandler(dataResponse) } - } - - return self - } -} - -extension DownloadRequest { - /// Adds a handler to be called once the request has finished. - /// - /// - parameter queue: The queue on which the completion handler is dispatched. - /// - parameter completionHandler: The code to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func response( - queue: DispatchQueue? = nil, - completionHandler: @escaping (DefaultDownloadResponse) -> Void) - -> Self - { - delegate.queue.addOperation { - (queue ?? DispatchQueue.main).async { - var downloadResponse = DefaultDownloadResponse( - request: self.request, - response: self.response, - temporaryURL: self.downloadDelegate.temporaryURL, - destinationURL: self.downloadDelegate.destinationURL, - resumeData: self.downloadDelegate.resumeData, - error: self.downloadDelegate.error, - timeline: self.timeline - ) - - downloadResponse.add(self.delegate.metrics) - - completionHandler(downloadResponse) - } - } - - return self - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter queue: The queue on which the completion handler is dispatched. - /// - parameter responseSerializer: The response serializer responsible for serializing the request, response, - /// and data contained in the destination url. - /// - parameter completionHandler: The code to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func response( - queue: DispatchQueue? = nil, - responseSerializer: T, - completionHandler: @escaping (DownloadResponse) -> Void) - -> Self - { - delegate.queue.addOperation { - let result = responseSerializer.serializeResponse( - self.request, - self.response, - self.downloadDelegate.fileURL, - self.downloadDelegate.error - ) - - var downloadResponse = DownloadResponse( - request: self.request, - response: self.response, - temporaryURL: self.downloadDelegate.temporaryURL, - destinationURL: self.downloadDelegate.destinationURL, - resumeData: self.downloadDelegate.resumeData, - result: result, - timeline: self.timeline - ) - - downloadResponse.add(self.delegate.metrics) - - (queue ?? DispatchQueue.main).async { completionHandler(downloadResponse) } - } - - return self - } -} - -// MARK: - Data - -extension Request { - /// Returns a result data type that contains the response data as-is. - /// - /// - parameter response: The response from the server. - /// - parameter data: The data returned from the server. - /// - parameter error: The error already encountered if it exists. - /// - /// - returns: The result data type. - public static func serializeResponseData(response: HTTPURLResponse?, data: Data?, error: Error?) -> Result { - guard error == nil else { return .failure(error!) } - - if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success(Data()) } - - guard let validData = data else { - return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) - } - - return .success(validData) - } -} - -extension DataRequest { - /// Creates a response serializer that returns the associated data as-is. - /// - /// - returns: A data response serializer. - public static func dataResponseSerializer() -> DataResponseSerializer { - return DataResponseSerializer { _, response, data, error in - return Request.serializeResponseData(response: response, data: data, error: error) - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter completionHandler: The code to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responseData( - queue: DispatchQueue? = nil, - completionHandler: @escaping (DataResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DataRequest.dataResponseSerializer(), - completionHandler: completionHandler - ) - } -} - -extension DownloadRequest { - /// Creates a response serializer that returns the associated data as-is. - /// - /// - returns: A data response serializer. - public static func dataResponseSerializer() -> DownloadResponseSerializer { - return DownloadResponseSerializer { _, response, fileURL, error in - guard error == nil else { return .failure(error!) } - - guard let fileURL = fileURL else { - return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) - } - - do { - let data = try Data(contentsOf: fileURL) - return Request.serializeResponseData(response: response, data: data, error: error) - } catch { - return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) - } - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter completionHandler: The code to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responseData( - queue: DispatchQueue? = nil, - completionHandler: @escaping (DownloadResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DownloadRequest.dataResponseSerializer(), - completionHandler: completionHandler - ) - } -} - -// MARK: - String - -extension Request { - /// Returns a result string type initialized from the response data with the specified string encoding. - /// - /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server - /// response, falling back to the default HTTP default character set, ISO-8859-1. - /// - parameter response: The response from the server. - /// - parameter data: The data returned from the server. - /// - parameter error: The error already encountered if it exists. - /// - /// - returns: The result data type. - public static func serializeResponseString( - encoding: String.Encoding?, - response: HTTPURLResponse?, - data: Data?, - error: Error?) - -> Result - { - guard error == nil else { return .failure(error!) } - - if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success("") } - - guard let validData = data else { - return .failure(AFError.responseSerializationFailed(reason: .inputDataNil)) - } - - var convertedEncoding = encoding - - if let encodingName = response?.textEncodingName as CFString?, convertedEncoding == nil { - convertedEncoding = String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding( - CFStringConvertIANACharSetNameToEncoding(encodingName)) - ) - } - - let actualEncoding = convertedEncoding ?? .isoLatin1 - - if let string = String(data: validData, encoding: actualEncoding) { - return .success(string) - } else { - return .failure(AFError.responseSerializationFailed(reason: .stringSerializationFailed(encoding: actualEncoding))) - } - } -} - -extension DataRequest { - /// Creates a response serializer that returns a result string type initialized from the response data with - /// the specified string encoding. - /// - /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server - /// response, falling back to the default HTTP default character set, ISO-8859-1. - /// - /// - returns: A string response serializer. - public static func stringResponseSerializer(encoding: String.Encoding? = nil) -> DataResponseSerializer { - return DataResponseSerializer { _, response, data, error in - return Request.serializeResponseString(encoding: encoding, response: response, data: data, error: error) - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the - /// server response, falling back to the default HTTP default character set, - /// ISO-8859-1. - /// - parameter completionHandler: A closure to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responseString( - queue: DispatchQueue? = nil, - encoding: String.Encoding? = nil, - completionHandler: @escaping (DataResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DataRequest.stringResponseSerializer(encoding: encoding), - completionHandler: completionHandler - ) - } -} - -extension DownloadRequest { - /// Creates a response serializer that returns a result string type initialized from the response data with - /// the specified string encoding. - /// - /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the server - /// response, falling back to the default HTTP default character set, ISO-8859-1. - /// - /// - returns: A string response serializer. - public static func stringResponseSerializer(encoding: String.Encoding? = nil) -> DownloadResponseSerializer { - return DownloadResponseSerializer { _, response, fileURL, error in - guard error == nil else { return .failure(error!) } - - guard let fileURL = fileURL else { - return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) - } - - do { - let data = try Data(contentsOf: fileURL) - return Request.serializeResponseString(encoding: encoding, response: response, data: data, error: error) - } catch { - return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) - } - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter encoding: The string encoding. If `nil`, the string encoding will be determined from the - /// server response, falling back to the default HTTP default character set, - /// ISO-8859-1. - /// - parameter completionHandler: A closure to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responseString( - queue: DispatchQueue? = nil, - encoding: String.Encoding? = nil, - completionHandler: @escaping (DownloadResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DownloadRequest.stringResponseSerializer(encoding: encoding), - completionHandler: completionHandler - ) - } -} - -// MARK: - JSON - -extension Request { - /// Returns a JSON object contained in a result type constructed from the response data using `JSONSerialization` - /// with the specified reading options. - /// - /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. - /// - parameter response: The response from the server. - /// - parameter data: The data returned from the server. - /// - parameter error: The error already encountered if it exists. - /// - /// - returns: The result data type. - public static func serializeResponseJSON( - options: JSONSerialization.ReadingOptions, - response: HTTPURLResponse?, - data: Data?, - error: Error?) - -> Result - { - guard error == nil else { return .failure(error!) } - - if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success(NSNull()) } - - guard let validData = data, validData.count > 0 else { - return .failure(AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength)) - } - - do { - let json = try JSONSerialization.jsonObject(with: validData, options: options) - return .success(json) - } catch { - return .failure(AFError.responseSerializationFailed(reason: .jsonSerializationFailed(error: error))) - } - } -} - -extension DataRequest { - /// Creates a response serializer that returns a JSON object result type constructed from the response data using - /// `JSONSerialization` with the specified reading options. - /// - /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. - /// - /// - returns: A JSON object response serializer. - public static func jsonResponseSerializer( - options: JSONSerialization.ReadingOptions = .allowFragments) - -> DataResponseSerializer - { - return DataResponseSerializer { _, response, data, error in - return Request.serializeResponseJSON(options: options, response: response, data: data, error: error) - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. - /// - parameter completionHandler: A closure to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responseJSON( - queue: DispatchQueue? = nil, - options: JSONSerialization.ReadingOptions = .allowFragments, - completionHandler: @escaping (DataResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DataRequest.jsonResponseSerializer(options: options), - completionHandler: completionHandler - ) - } -} - -extension DownloadRequest { - /// Creates a response serializer that returns a JSON object result type constructed from the response data using - /// `JSONSerialization` with the specified reading options. - /// - /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. - /// - /// - returns: A JSON object response serializer. - public static func jsonResponseSerializer( - options: JSONSerialization.ReadingOptions = .allowFragments) - -> DownloadResponseSerializer - { - return DownloadResponseSerializer { _, response, fileURL, error in - guard error == nil else { return .failure(error!) } - - guard let fileURL = fileURL else { - return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) - } - - do { - let data = try Data(contentsOf: fileURL) - return Request.serializeResponseJSON(options: options, response: response, data: data, error: error) - } catch { - return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) - } - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter options: The JSON serialization reading options. Defaults to `.allowFragments`. - /// - parameter completionHandler: A closure to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responseJSON( - queue: DispatchQueue? = nil, - options: JSONSerialization.ReadingOptions = .allowFragments, - completionHandler: @escaping (DownloadResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DownloadRequest.jsonResponseSerializer(options: options), - completionHandler: completionHandler - ) - } -} - -// MARK: - Property List - -extension Request { - /// Returns a plist object contained in a result type constructed from the response data using - /// `PropertyListSerialization` with the specified reading options. - /// - /// - parameter options: The property list reading options. Defaults to `[]`. - /// - parameter response: The response from the server. - /// - parameter data: The data returned from the server. - /// - parameter error: The error already encountered if it exists. - /// - /// - returns: The result data type. - public static func serializeResponsePropertyList( - options: PropertyListSerialization.ReadOptions, - response: HTTPURLResponse?, - data: Data?, - error: Error?) - -> Result - { - guard error == nil else { return .failure(error!) } - - if let response = response, emptyDataStatusCodes.contains(response.statusCode) { return .success(NSNull()) } - - guard let validData = data, validData.count > 0 else { - return .failure(AFError.responseSerializationFailed(reason: .inputDataNilOrZeroLength)) - } - - do { - let plist = try PropertyListSerialization.propertyList(from: validData, options: options, format: nil) - return .success(plist) - } catch { - return .failure(AFError.responseSerializationFailed(reason: .propertyListSerializationFailed(error: error))) - } - } -} - -extension DataRequest { - /// Creates a response serializer that returns an object constructed from the response data using - /// `PropertyListSerialization` with the specified reading options. - /// - /// - parameter options: The property list reading options. Defaults to `[]`. - /// - /// - returns: A property list object response serializer. - public static func propertyListResponseSerializer( - options: PropertyListSerialization.ReadOptions = []) - -> DataResponseSerializer - { - return DataResponseSerializer { _, response, data, error in - return Request.serializeResponsePropertyList(options: options, response: response, data: data, error: error) - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter options: The property list reading options. Defaults to `[]`. - /// - parameter completionHandler: A closure to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responsePropertyList( - queue: DispatchQueue? = nil, - options: PropertyListSerialization.ReadOptions = [], - completionHandler: @escaping (DataResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DataRequest.propertyListResponseSerializer(options: options), - completionHandler: completionHandler - ) - } -} - -extension DownloadRequest { - /// Creates a response serializer that returns an object constructed from the response data using - /// `PropertyListSerialization` with the specified reading options. - /// - /// - parameter options: The property list reading options. Defaults to `[]`. - /// - /// - returns: A property list object response serializer. - public static func propertyListResponseSerializer( - options: PropertyListSerialization.ReadOptions = []) - -> DownloadResponseSerializer - { - return DownloadResponseSerializer { _, response, fileURL, error in - guard error == nil else { return .failure(error!) } - - guard let fileURL = fileURL else { - return .failure(AFError.responseSerializationFailed(reason: .inputFileNil)) - } - - do { - let data = try Data(contentsOf: fileURL) - return Request.serializeResponsePropertyList(options: options, response: response, data: data, error: error) - } catch { - return .failure(AFError.responseSerializationFailed(reason: .inputFileReadFailed(at: fileURL))) - } - } - } - - /// Adds a handler to be called once the request has finished. - /// - /// - parameter options: The property list reading options. Defaults to `[]`. - /// - parameter completionHandler: A closure to be executed once the request has finished. - /// - /// - returns: The request. - @discardableResult - public func responsePropertyList( - queue: DispatchQueue? = nil, - options: PropertyListSerialization.ReadOptions = [], - completionHandler: @escaping (DownloadResponse) -> Void) - -> Self - { - return response( - queue: queue, - responseSerializer: DownloadRequest.propertyListResponseSerializer(options: options), - completionHandler: completionHandler - ) - } -} - -/// A set of HTTP response status code that do not contain response data. -private let emptyDataStatusCodes: Set = [204, 205] diff --git a/Pods/Alamofire/Source/Result.swift b/Pods/Alamofire/Source/Result.swift deleted file mode 100644 index e092808..0000000 --- a/Pods/Alamofire/Source/Result.swift +++ /dev/null @@ -1,300 +0,0 @@ -// -// Result.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Used to represent whether a request was successful or encountered an error. -/// -/// - success: The request and all post processing operations were successful resulting in the serialization of the -/// provided associated value. -/// -/// - failure: The request encountered an error resulting in a failure. The associated values are the original data -/// provided by the server as well as the error that caused the failure. -public enum Result { - case success(Value) - case failure(Error) - - /// Returns `true` if the result is a success, `false` otherwise. - public var isSuccess: Bool { - switch self { - case .success: - return true - case .failure: - return false - } - } - - /// Returns `true` if the result is a failure, `false` otherwise. - public var isFailure: Bool { - return !isSuccess - } - - /// Returns the associated value if the result is a success, `nil` otherwise. - public var value: Value? { - switch self { - case .success(let value): - return value - case .failure: - return nil - } - } - - /// Returns the associated error value if the result is a failure, `nil` otherwise. - public var error: Error? { - switch self { - case .success: - return nil - case .failure(let error): - return error - } - } -} - -// MARK: - CustomStringConvertible - -extension Result: CustomStringConvertible { - /// The textual representation used when written to an output stream, which includes whether the result was a - /// success or failure. - public var description: String { - switch self { - case .success: - return "SUCCESS" - case .failure: - return "FAILURE" - } - } -} - -// MARK: - CustomDebugStringConvertible - -extension Result: CustomDebugStringConvertible { - /// The debug textual representation used when written to an output stream, which includes whether the result was a - /// success or failure in addition to the value or error. - public var debugDescription: String { - switch self { - case .success(let value): - return "SUCCESS: \(value)" - case .failure(let error): - return "FAILURE: \(error)" - } - } -} - -// MARK: - Functional APIs - -extension Result { - /// Creates a `Result` instance from the result of a closure. - /// - /// A failure result is created when the closure throws, and a success result is created when the closure - /// succeeds without throwing an error. - /// - /// func someString() throws -> String { ... } - /// - /// let result = Result(value: { - /// return try someString() - /// }) - /// - /// // The type of result is Result - /// - /// The trailing closure syntax is also supported: - /// - /// let result = Result { try someString() } - /// - /// - parameter value: The closure to execute and create the result for. - public init(value: () throws -> Value) { - do { - self = try .success(value()) - } catch { - self = .failure(error) - } - } - - /// Returns the success value, or throws the failure error. - /// - /// let possibleString: Result = .success("success") - /// try print(possibleString.unwrap()) - /// // Prints "success" - /// - /// let noString: Result = .failure(error) - /// try print(noString.unwrap()) - /// // Throws error - public func unwrap() throws -> Value { - switch self { - case .success(let value): - return value - case .failure(let error): - throw error - } - } - - /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. - /// - /// Use the `map` method with a closure that does not throw. For example: - /// - /// let possibleData: Result = .success(Data()) - /// let possibleInt = possibleData.map { $0.count } - /// try print(possibleInt.unwrap()) - /// // Prints "0" - /// - /// let noData: Result = .failure(error) - /// let noInt = noData.map { $0.count } - /// try print(noInt.unwrap()) - /// // Throws error - /// - /// - parameter transform: A closure that takes the success value of the `Result` instance. - /// - /// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the - /// same failure. - public func map(_ transform: (Value) -> T) -> Result { - switch self { - case .success(let value): - return .success(transform(value)) - case .failure(let error): - return .failure(error) - } - } - - /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. - /// - /// Use the `flatMap` method with a closure that may throw an error. For example: - /// - /// let possibleData: Result = .success(Data(...)) - /// let possibleObject = possibleData.flatMap { - /// try JSONSerialization.jsonObject(with: $0) - /// } - /// - /// - parameter transform: A closure that takes the success value of the instance. - /// - /// - returns: A `Result` containing the result of the given closure. If this instance is a failure, returns the - /// same failure. - public func flatMap(_ transform: (Value) throws -> T) -> Result { - switch self { - case .success(let value): - do { - return try .success(transform(value)) - } catch { - return .failure(error) - } - case .failure(let error): - return .failure(error) - } - } - - /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `mapError` function with a closure that does not throw. For example: - /// - /// let possibleData: Result = .failure(someError) - /// let withMyError: Result = possibleData.mapError { MyError.error($0) } - /// - /// - Parameter transform: A closure that takes the error of the instance. - /// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns - /// the same instance. - public func mapError(_ transform: (Error) -> T) -> Result { - switch self { - case .failure(let error): - return .failure(transform(error)) - case .success: - return self - } - } - - /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `flatMapError` function with a closure that may throw an error. For example: - /// - /// let possibleData: Result = .success(Data(...)) - /// let possibleObject = possibleData.flatMapError { - /// try someFailableFunction(taking: $0) - /// } - /// - /// - Parameter transform: A throwing closure that takes the error of the instance. - /// - /// - Returns: A `Result` instance containing the result of the transform. If this instance is a success, returns - /// the same instance. - public func flatMapError(_ transform: (Error) throws -> T) -> Result { - switch self { - case .failure(let error): - do { - return try .failure(transform(error)) - } catch { - return .failure(error) - } - case .success: - return self - } - } - - /// Evaluates the specified closure when the `Result` is a success, passing the unwrapped value as a parameter. - /// - /// Use the `withValue` function to evaluate the passed closure without modifying the `Result` instance. - /// - /// - Parameter closure: A closure that takes the success value of this instance. - /// - Returns: This `Result` instance, unmodified. - @discardableResult - public func withValue(_ closure: (Value) throws -> Void) rethrows -> Result { - if case let .success(value) = self { try closure(value) } - - return self - } - - /// Evaluates the specified closure when the `Result` is a failure, passing the unwrapped error as a parameter. - /// - /// Use the `withError` function to evaluate the passed closure without modifying the `Result` instance. - /// - /// - Parameter closure: A closure that takes the success value of this instance. - /// - Returns: This `Result` instance, unmodified. - @discardableResult - public func withError(_ closure: (Error) throws -> Void) rethrows -> Result { - if case let .failure(error) = self { try closure(error) } - - return self - } - - /// Evaluates the specified closure when the `Result` is a success. - /// - /// Use the `ifSuccess` function to evaluate the passed closure without modifying the `Result` instance. - /// - /// - Parameter closure: A `Void` closure. - /// - Returns: This `Result` instance, unmodified. - @discardableResult - public func ifSuccess(_ closure: () throws -> Void) rethrows -> Result { - if isSuccess { try closure() } - - return self - } - - /// Evaluates the specified closure when the `Result` is a failure. - /// - /// Use the `ifFailure` function to evaluate the passed closure without modifying the `Result` instance. - /// - /// - Parameter closure: A `Void` closure. - /// - Returns: This `Result` instance, unmodified. - @discardableResult - public func ifFailure(_ closure: () throws -> Void) rethrows -> Result { - if isFailure { try closure() } - - return self - } -} diff --git a/Pods/Alamofire/Source/ServerTrustPolicy.swift b/Pods/Alamofire/Source/ServerTrustPolicy.swift deleted file mode 100644 index fccdc02..0000000 --- a/Pods/Alamofire/Source/ServerTrustPolicy.swift +++ /dev/null @@ -1,310 +0,0 @@ -// -// ServerTrustPolicy.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Responsible for managing the mapping of `ServerTrustPolicy` objects to a given host. -open class ServerTrustPolicyManager { - /// The dictionary of policies mapped to a particular host. - public let policies: [String: ServerTrustPolicy] - - /// Initializes the `ServerTrustPolicyManager` instance with the given policies. - /// - /// Since different servers and web services can have different leaf certificates, intermediate and even root - /// certficates, it is important to have the flexibility to specify evaluation policies on a per host basis. This - /// allows for scenarios such as using default evaluation for host1, certificate pinning for host2, public key - /// pinning for host3 and disabling evaluation for host4. - /// - /// - parameter policies: A dictionary of all policies mapped to a particular host. - /// - /// - returns: The new `ServerTrustPolicyManager` instance. - public init(policies: [String: ServerTrustPolicy]) { - self.policies = policies - } - - /// Returns the `ServerTrustPolicy` for the given host if applicable. - /// - /// By default, this method will return the policy that perfectly matches the given host. Subclasses could override - /// this method and implement more complex mapping implementations such as wildcards. - /// - /// - parameter host: The host to use when searching for a matching policy. - /// - /// - returns: The server trust policy for the given host if found. - open func serverTrustPolicy(forHost host: String) -> ServerTrustPolicy? { - return policies[host] - } -} - -// MARK: - - -extension URLSession { - private struct AssociatedKeys { - static var managerKey = "URLSession.ServerTrustPolicyManager" - } - - var serverTrustPolicyManager: ServerTrustPolicyManager? { - get { - return objc_getAssociatedObject(self, &AssociatedKeys.managerKey) as? ServerTrustPolicyManager - } - set (manager) { - objc_setAssociatedObject(self, &AssociatedKeys.managerKey, manager, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } -} - -// MARK: - ServerTrustPolicy - -/// The `ServerTrustPolicy` evaluates the server trust generally provided by an `NSURLAuthenticationChallenge` when -/// connecting to a server over a secure HTTPS connection. The policy configuration then evaluates the server trust -/// with a given set of criteria to determine whether the server trust is valid and the connection should be made. -/// -/// Using pinned certificates or public keys for evaluation helps prevent man-in-the-middle (MITM) attacks and other -/// vulnerabilities. Applications dealing with sensitive customer data or financial information are strongly encouraged -/// to route all communication over an HTTPS connection with pinning enabled. -/// -/// - performDefaultEvaluation: Uses the default server trust evaluation while allowing you to control whether to -/// validate the host provided by the challenge. Applications are encouraged to always -/// validate the host in production environments to guarantee the validity of the server's -/// certificate chain. -/// -/// - performRevokedEvaluation: Uses the default and revoked server trust evaluations allowing you to control whether to -/// validate the host provided by the challenge as well as specify the revocation flags for -/// testing for revoked certificates. Apple platforms did not start testing for revoked -/// certificates automatically until iOS 10.1, macOS 10.12 and tvOS 10.1 which is -/// demonstrated in our TLS tests. Applications are encouraged to always validate the host -/// in production environments to guarantee the validity of the server's certificate chain. -/// -/// - pinCertificates: Uses the pinned certificates to validate the server trust. The server trust is -/// considered valid if one of the pinned certificates match one of the server certificates. -/// By validating both the certificate chain and host, certificate pinning provides a very -/// secure form of server trust validation mitigating most, if not all, MITM attacks. -/// Applications are encouraged to always validate the host and require a valid certificate -/// chain in production environments. -/// -/// - pinPublicKeys: Uses the pinned public keys to validate the server trust. The server trust is considered -/// valid if one of the pinned public keys match one of the server certificate public keys. -/// By validating both the certificate chain and host, public key pinning provides a very -/// secure form of server trust validation mitigating most, if not all, MITM attacks. -/// Applications are encouraged to always validate the host and require a valid certificate -/// chain in production environments. -/// -/// - disableEvaluation: Disables all evaluation which in turn will always consider any server trust as valid. -/// -/// - customEvaluation: Uses the associated closure to evaluate the validity of the server trust. -public enum ServerTrustPolicy { - case performDefaultEvaluation(validateHost: Bool) - case performRevokedEvaluation(validateHost: Bool, revocationFlags: CFOptionFlags) - case pinCertificates(certificates: [SecCertificate], validateCertificateChain: Bool, validateHost: Bool) - case pinPublicKeys(publicKeys: [SecKey], validateCertificateChain: Bool, validateHost: Bool) - case disableEvaluation - case customEvaluation((_ serverTrust: SecTrust, _ host: String) -> Bool) - - // MARK: - Bundle Location - - /// Returns all certificates within the given bundle with a `.cer` file extension. - /// - /// - parameter bundle: The bundle to search for all `.cer` files. - /// - /// - returns: All certificates within the given bundle. - public static func certificates(in bundle: Bundle = Bundle.main) -> [SecCertificate] { - var certificates: [SecCertificate] = [] - - let paths = Set([".cer", ".CER", ".crt", ".CRT", ".der", ".DER"].map { fileExtension in - bundle.paths(forResourcesOfType: fileExtension, inDirectory: nil) - }.joined()) - - for path in paths { - if - let certificateData = try? Data(contentsOf: URL(fileURLWithPath: path)) as CFData, - let certificate = SecCertificateCreateWithData(nil, certificateData) - { - certificates.append(certificate) - } - } - - return certificates - } - - /// Returns all public keys within the given bundle with a `.cer` file extension. - /// - /// - parameter bundle: The bundle to search for all `*.cer` files. - /// - /// - returns: All public keys within the given bundle. - public static func publicKeys(in bundle: Bundle = Bundle.main) -> [SecKey] { - var publicKeys: [SecKey] = [] - - for certificate in certificates(in: bundle) { - if let publicKey = publicKey(for: certificate) { - publicKeys.append(publicKey) - } - } - - return publicKeys - } - - // MARK: - Evaluation - - /// Evaluates whether the server trust is valid for the given host. - /// - /// - parameter serverTrust: The server trust to evaluate. - /// - parameter host: The host of the challenge protection space. - /// - /// - returns: Whether the server trust is valid. - public func evaluate(_ serverTrust: SecTrust, forHost host: String) -> Bool { - var serverTrustIsValid = false - - switch self { - case let .performDefaultEvaluation(validateHost): - let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) - SecTrustSetPolicies(serverTrust, policy) - - serverTrustIsValid = trustIsValid(serverTrust) - case let .performRevokedEvaluation(validateHost, revocationFlags): - let defaultPolicy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) - let revokedPolicy = SecPolicyCreateRevocation(revocationFlags) - SecTrustSetPolicies(serverTrust, [defaultPolicy, revokedPolicy] as CFTypeRef) - - serverTrustIsValid = trustIsValid(serverTrust) - case let .pinCertificates(pinnedCertificates, validateCertificateChain, validateHost): - if validateCertificateChain { - let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) - SecTrustSetPolicies(serverTrust, policy) - - SecTrustSetAnchorCertificates(serverTrust, pinnedCertificates as CFArray) - SecTrustSetAnchorCertificatesOnly(serverTrust, true) - - serverTrustIsValid = trustIsValid(serverTrust) - } else { - let serverCertificatesDataArray = certificateData(for: serverTrust) - let pinnedCertificatesDataArray = certificateData(for: pinnedCertificates) - - outerLoop: for serverCertificateData in serverCertificatesDataArray { - for pinnedCertificateData in pinnedCertificatesDataArray { - if serverCertificateData == pinnedCertificateData { - serverTrustIsValid = true - break outerLoop - } - } - } - } - case let .pinPublicKeys(pinnedPublicKeys, validateCertificateChain, validateHost): - var certificateChainEvaluationPassed = true - - if validateCertificateChain { - let policy = SecPolicyCreateSSL(true, validateHost ? host as CFString : nil) - SecTrustSetPolicies(serverTrust, policy) - - certificateChainEvaluationPassed = trustIsValid(serverTrust) - } - - if certificateChainEvaluationPassed { - outerLoop: for serverPublicKey in ServerTrustPolicy.publicKeys(for: serverTrust) as [AnyObject] { - for pinnedPublicKey in pinnedPublicKeys as [AnyObject] { - if serverPublicKey.isEqual(pinnedPublicKey) { - serverTrustIsValid = true - break outerLoop - } - } - } - } - case .disableEvaluation: - serverTrustIsValid = true - case let .customEvaluation(closure): - serverTrustIsValid = closure(serverTrust, host) - } - - return serverTrustIsValid - } - - // MARK: - Private - Trust Validation - - private func trustIsValid(_ trust: SecTrust) -> Bool { - var isValid = false - - if #available(iOS 12, macOS 10.14, tvOS 12, watchOS 5, *) { - isValid = SecTrustEvaluateWithError(trust, nil) - } else { - var result = SecTrustResultType.invalid - let status = SecTrustEvaluate(trust, &result) - - if status == errSecSuccess { - let unspecified = SecTrustResultType.unspecified - let proceed = SecTrustResultType.proceed - - isValid = result == unspecified || result == proceed - } - } - - return isValid - } - - // MARK: - Private - Certificate Data - - private func certificateData(for trust: SecTrust) -> [Data] { - var certificates: [SecCertificate] = [] - - for index in 0.. [Data] { - return certificates.map { SecCertificateCopyData($0) as Data } - } - - // MARK: - Private - Public Key Extraction - - private static func publicKeys(for trust: SecTrust) -> [SecKey] { - var publicKeys: [SecKey] = [] - - for index in 0.. SecKey? { - var publicKey: SecKey? - - let policy = SecPolicyCreateBasicX509() - var trust: SecTrust? - let trustCreationStatus = SecTrustCreateWithCertificates(certificate, policy, &trust) - - if let trust = trust, trustCreationStatus == errSecSuccess { - publicKey = SecTrustCopyPublicKey(trust) - } - - return publicKey - } -} diff --git a/Pods/Alamofire/Source/SessionDelegate.swift b/Pods/Alamofire/Source/SessionDelegate.swift deleted file mode 100644 index 4964f1e..0000000 --- a/Pods/Alamofire/Source/SessionDelegate.swift +++ /dev/null @@ -1,725 +0,0 @@ -// -// SessionDelegate.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Responsible for handling all delegate callbacks for the underlying session. -open class SessionDelegate: NSObject { - - // MARK: URLSessionDelegate Overrides - - /// Overrides default behavior for URLSessionDelegate method `urlSession(_:didBecomeInvalidWithError:)`. - open var sessionDidBecomeInvalidWithError: ((URLSession, Error?) -> Void)? - - /// Overrides default behavior for URLSessionDelegate method `urlSession(_:didReceive:completionHandler:)`. - open var sessionDidReceiveChallenge: ((URLSession, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? - - /// Overrides all behavior for URLSessionDelegate method `urlSession(_:didReceive:completionHandler:)` and requires the caller to call the `completionHandler`. - open var sessionDidReceiveChallengeWithCompletion: ((URLSession, URLAuthenticationChallenge, @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) -> Void)? - - /// Overrides default behavior for URLSessionDelegate method `urlSessionDidFinishEvents(forBackgroundURLSession:)`. - open var sessionDidFinishEventsForBackgroundURLSession: ((URLSession) -> Void)? - - // MARK: URLSessionTaskDelegate Overrides - - /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)`. - open var taskWillPerformHTTPRedirection: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest) -> URLRequest?)? - - /// Overrides all behavior for URLSessionTaskDelegate method `urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)` and - /// requires the caller to call the `completionHandler`. - open var taskWillPerformHTTPRedirectionWithCompletion: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest, @escaping (URLRequest?) -> Void) -> Void)? - - /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:didReceive:completionHandler:)`. - open var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? - - /// Overrides all behavior for URLSessionTaskDelegate method `urlSession(_:task:didReceive:completionHandler:)` and - /// requires the caller to call the `completionHandler`. - open var taskDidReceiveChallengeWithCompletion: ((URLSession, URLSessionTask, URLAuthenticationChallenge, @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) -> Void)? - - /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:needNewBodyStream:)`. - open var taskNeedNewBodyStream: ((URLSession, URLSessionTask) -> InputStream?)? - - /// Overrides all behavior for URLSessionTaskDelegate method `urlSession(_:task:needNewBodyStream:)` and - /// requires the caller to call the `completionHandler`. - open var taskNeedNewBodyStreamWithCompletion: ((URLSession, URLSessionTask, @escaping (InputStream?) -> Void) -> Void)? - - /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:)`. - open var taskDidSendBodyData: ((URLSession, URLSessionTask, Int64, Int64, Int64) -> Void)? - - /// Overrides default behavior for URLSessionTaskDelegate method `urlSession(_:task:didCompleteWithError:)`. - open var taskDidComplete: ((URLSession, URLSessionTask, Error?) -> Void)? - - // MARK: URLSessionDataDelegate Overrides - - /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didReceive:completionHandler:)`. - open var dataTaskDidReceiveResponse: ((URLSession, URLSessionDataTask, URLResponse) -> URLSession.ResponseDisposition)? - - /// Overrides all behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didReceive:completionHandler:)` and - /// requires caller to call the `completionHandler`. - open var dataTaskDidReceiveResponseWithCompletion: ((URLSession, URLSessionDataTask, URLResponse, @escaping (URLSession.ResponseDisposition) -> Void) -> Void)? - - /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didBecome:)`. - open var dataTaskDidBecomeDownloadTask: ((URLSession, URLSessionDataTask, URLSessionDownloadTask) -> Void)? - - /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:didReceive:)`. - open var dataTaskDidReceiveData: ((URLSession, URLSessionDataTask, Data) -> Void)? - - /// Overrides default behavior for URLSessionDataDelegate method `urlSession(_:dataTask:willCacheResponse:completionHandler:)`. - open var dataTaskWillCacheResponse: ((URLSession, URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?)? - - /// Overrides all behavior for URLSessionDataDelegate method `urlSession(_:dataTask:willCacheResponse:completionHandler:)` and - /// requires caller to call the `completionHandler`. - open var dataTaskWillCacheResponseWithCompletion: ((URLSession, URLSessionDataTask, CachedURLResponse, @escaping (CachedURLResponse?) -> Void) -> Void)? - - // MARK: URLSessionDownloadDelegate Overrides - - /// Overrides default behavior for URLSessionDownloadDelegate method `urlSession(_:downloadTask:didFinishDownloadingTo:)`. - open var downloadTaskDidFinishDownloadingToURL: ((URLSession, URLSessionDownloadTask, URL) -> Void)? - - /// Overrides default behavior for URLSessionDownloadDelegate method `urlSession(_:downloadTask:didWriteData:totalBytesWritten:totalBytesExpectedToWrite:)`. - open var downloadTaskDidWriteData: ((URLSession, URLSessionDownloadTask, Int64, Int64, Int64) -> Void)? - - /// Overrides default behavior for URLSessionDownloadDelegate method `urlSession(_:downloadTask:didResumeAtOffset:expectedTotalBytes:)`. - open var downloadTaskDidResumeAtOffset: ((URLSession, URLSessionDownloadTask, Int64, Int64) -> Void)? - - // MARK: URLSessionStreamDelegate Overrides - -#if !os(watchOS) - - /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:readClosedFor:)`. - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - open var streamTaskReadClosed: ((URLSession, URLSessionStreamTask) -> Void)? { - get { - return _streamTaskReadClosed as? (URLSession, URLSessionStreamTask) -> Void - } - set { - _streamTaskReadClosed = newValue - } - } - - /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:writeClosedFor:)`. - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - open var streamTaskWriteClosed: ((URLSession, URLSessionStreamTask) -> Void)? { - get { - return _streamTaskWriteClosed as? (URLSession, URLSessionStreamTask) -> Void - } - set { - _streamTaskWriteClosed = newValue - } - } - - /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:betterRouteDiscoveredFor:)`. - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - open var streamTaskBetterRouteDiscovered: ((URLSession, URLSessionStreamTask) -> Void)? { - get { - return _streamTaskBetterRouteDiscovered as? (URLSession, URLSessionStreamTask) -> Void - } - set { - _streamTaskBetterRouteDiscovered = newValue - } - } - - /// Overrides default behavior for URLSessionStreamDelegate method `urlSession(_:streamTask:didBecome:outputStream:)`. - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - open var streamTaskDidBecomeInputAndOutputStreams: ((URLSession, URLSessionStreamTask, InputStream, OutputStream) -> Void)? { - get { - return _streamTaskDidBecomeInputStream as? (URLSession, URLSessionStreamTask, InputStream, OutputStream) -> Void - } - set { - _streamTaskDidBecomeInputStream = newValue - } - } - - var _streamTaskReadClosed: Any? - var _streamTaskWriteClosed: Any? - var _streamTaskBetterRouteDiscovered: Any? - var _streamTaskDidBecomeInputStream: Any? - -#endif - - // MARK: Properties - - var retrier: RequestRetrier? - weak var sessionManager: SessionManager? - - var requests: [Int: Request] = [:] - private let lock = NSLock() - - /// Access the task delegate for the specified task in a thread-safe manner. - open subscript(task: URLSessionTask) -> Request? { - get { - lock.lock() ; defer { lock.unlock() } - return requests[task.taskIdentifier] - } - set { - lock.lock() ; defer { lock.unlock() } - requests[task.taskIdentifier] = newValue - } - } - - // MARK: Lifecycle - - /// Initializes the `SessionDelegate` instance. - /// - /// - returns: The new `SessionDelegate` instance. - public override init() { - super.init() - } - - // MARK: NSObject Overrides - - /// Returns a `Bool` indicating whether the `SessionDelegate` implements or inherits a method that can respond - /// to a specified message. - /// - /// - parameter selector: A selector that identifies a message. - /// - /// - returns: `true` if the receiver implements or inherits a method that can respond to selector, otherwise `false`. - open override func responds(to selector: Selector) -> Bool { - #if !os(macOS) - if selector == #selector(URLSessionDelegate.urlSessionDidFinishEvents(forBackgroundURLSession:)) { - return sessionDidFinishEventsForBackgroundURLSession != nil - } - #endif - - #if !os(watchOS) - if #available(iOS 9.0, macOS 10.11, tvOS 9.0, *) { - switch selector { - case #selector(URLSessionStreamDelegate.urlSession(_:readClosedFor:)): - return streamTaskReadClosed != nil - case #selector(URLSessionStreamDelegate.urlSession(_:writeClosedFor:)): - return streamTaskWriteClosed != nil - case #selector(URLSessionStreamDelegate.urlSession(_:betterRouteDiscoveredFor:)): - return streamTaskBetterRouteDiscovered != nil - case #selector(URLSessionStreamDelegate.urlSession(_:streamTask:didBecome:outputStream:)): - return streamTaskDidBecomeInputAndOutputStreams != nil - default: - break - } - } - #endif - - switch selector { - case #selector(URLSessionDelegate.urlSession(_:didBecomeInvalidWithError:)): - return sessionDidBecomeInvalidWithError != nil - case #selector(URLSessionDelegate.urlSession(_:didReceive:completionHandler:)): - return (sessionDidReceiveChallenge != nil || sessionDidReceiveChallengeWithCompletion != nil) - case #selector(URLSessionTaskDelegate.urlSession(_:task:willPerformHTTPRedirection:newRequest:completionHandler:)): - return (taskWillPerformHTTPRedirection != nil || taskWillPerformHTTPRedirectionWithCompletion != nil) - case #selector(URLSessionDataDelegate.urlSession(_:dataTask:didReceive:completionHandler:)): - return (dataTaskDidReceiveResponse != nil || dataTaskDidReceiveResponseWithCompletion != nil) - default: - return type(of: self).instancesRespond(to: selector) - } - } -} - -// MARK: - URLSessionDelegate - -extension SessionDelegate: URLSessionDelegate { - /// Tells the delegate that the session has been invalidated. - /// - /// - parameter session: The session object that was invalidated. - /// - parameter error: The error that caused invalidation, or nil if the invalidation was explicit. - open func urlSession(_ session: URLSession, didBecomeInvalidWithError error: Error?) { - sessionDidBecomeInvalidWithError?(session, error) - } - - /// Requests credentials from the delegate in response to a session-level authentication request from the - /// remote server. - /// - /// - parameter session: The session containing the task that requested authentication. - /// - parameter challenge: An object that contains the request for authentication. - /// - parameter completionHandler: A handler that your delegate method must call providing the disposition - /// and credential. - open func urlSession( - _ session: URLSession, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - guard sessionDidReceiveChallengeWithCompletion == nil else { - sessionDidReceiveChallengeWithCompletion?(session, challenge, completionHandler) - return - } - - var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling - var credential: URLCredential? - - if let sessionDidReceiveChallenge = sessionDidReceiveChallenge { - (disposition, credential) = sessionDidReceiveChallenge(session, challenge) - } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { - let host = challenge.protectionSpace.host - - if - let serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicy(forHost: host), - let serverTrust = challenge.protectionSpace.serverTrust - { - if serverTrustPolicy.evaluate(serverTrust, forHost: host) { - disposition = .useCredential - credential = URLCredential(trust: serverTrust) - } else { - disposition = .cancelAuthenticationChallenge - } - } - } - - completionHandler(disposition, credential) - } - -#if !os(macOS) - - /// Tells the delegate that all messages enqueued for a session have been delivered. - /// - /// - parameter session: The session that no longer has any outstanding requests. - open func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) { - sessionDidFinishEventsForBackgroundURLSession?(session) - } - -#endif -} - -// MARK: - URLSessionTaskDelegate - -extension SessionDelegate: URLSessionTaskDelegate { - /// Tells the delegate that the remote server requested an HTTP redirect. - /// - /// - parameter session: The session containing the task whose request resulted in a redirect. - /// - parameter task: The task whose request resulted in a redirect. - /// - parameter response: An object containing the server’s response to the original request. - /// - parameter request: A URL request object filled out with the new location. - /// - parameter completionHandler: A closure that your handler should call with either the value of the request - /// parameter, a modified URL request object, or NULL to refuse the redirect and - /// return the body of the redirect response. - open func urlSession( - _ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest, - completionHandler: @escaping (URLRequest?) -> Void) - { - guard taskWillPerformHTTPRedirectionWithCompletion == nil else { - taskWillPerformHTTPRedirectionWithCompletion?(session, task, response, request, completionHandler) - return - } - - var redirectRequest: URLRequest? = request - - if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection { - redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request) - } - - completionHandler(redirectRequest) - } - - /// Requests credentials from the delegate in response to an authentication request from the remote server. - /// - /// - parameter session: The session containing the task whose request requires authentication. - /// - parameter task: The task whose request requires authentication. - /// - parameter challenge: An object that contains the request for authentication. - /// - parameter completionHandler: A handler that your delegate method must call providing the disposition - /// and credential. - open func urlSession( - _ session: URLSession, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - guard taskDidReceiveChallengeWithCompletion == nil else { - taskDidReceiveChallengeWithCompletion?(session, task, challenge, completionHandler) - return - } - - if let taskDidReceiveChallenge = taskDidReceiveChallenge { - let result = taskDidReceiveChallenge(session, task, challenge) - completionHandler(result.0, result.1) - } else if let delegate = self[task]?.delegate { - delegate.urlSession( - session, - task: task, - didReceive: challenge, - completionHandler: completionHandler - ) - } else { - urlSession(session, didReceive: challenge, completionHandler: completionHandler) - } - } - - /// Tells the delegate when a task requires a new request body stream to send to the remote server. - /// - /// - parameter session: The session containing the task that needs a new body stream. - /// - parameter task: The task that needs a new body stream. - /// - parameter completionHandler: A completion handler that your delegate method should call with the new body stream. - open func urlSession( - _ session: URLSession, - task: URLSessionTask, - needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) - { - guard taskNeedNewBodyStreamWithCompletion == nil else { - taskNeedNewBodyStreamWithCompletion?(session, task, completionHandler) - return - } - - if let taskNeedNewBodyStream = taskNeedNewBodyStream { - completionHandler(taskNeedNewBodyStream(session, task)) - } else if let delegate = self[task]?.delegate { - delegate.urlSession(session, task: task, needNewBodyStream: completionHandler) - } - } - - /// Periodically informs the delegate of the progress of sending body content to the server. - /// - /// - parameter session: The session containing the data task. - /// - parameter task: The data task. - /// - parameter bytesSent: The number of bytes sent since the last time this delegate method was called. - /// - parameter totalBytesSent: The total number of bytes sent so far. - /// - parameter totalBytesExpectedToSend: The expected length of the body data. - open func urlSession( - _ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) - { - if let taskDidSendBodyData = taskDidSendBodyData { - taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) - } else if let delegate = self[task]?.delegate as? UploadTaskDelegate { - delegate.URLSession( - session, - task: task, - didSendBodyData: bytesSent, - totalBytesSent: totalBytesSent, - totalBytesExpectedToSend: totalBytesExpectedToSend - ) - } - } - -#if !os(watchOS) - - /// Tells the delegate that the session finished collecting metrics for the task. - /// - /// - parameter session: The session collecting the metrics. - /// - parameter task: The task whose metrics have been collected. - /// - parameter metrics: The collected metrics. - @available(iOS 10.0, macOS 10.12, tvOS 10.0, *) - @objc(URLSession:task:didFinishCollectingMetrics:) - open func urlSession(_ session: URLSession, task: URLSessionTask, didFinishCollecting metrics: URLSessionTaskMetrics) { - self[task]?.delegate.metrics = metrics - } - -#endif - - /// Tells the delegate that the task finished transferring data. - /// - /// - parameter session: The session containing the task whose request finished transferring data. - /// - parameter task: The task whose request finished transferring data. - /// - parameter error: If an error occurred, an error object indicating how the transfer failed, otherwise nil. - open func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - /// Executed after it is determined that the request is not going to be retried - let completeTask: (URLSession, URLSessionTask, Error?) -> Void = { [weak self] session, task, error in - guard let strongSelf = self else { return } - - strongSelf.taskDidComplete?(session, task, error) - - strongSelf[task]?.delegate.urlSession(session, task: task, didCompleteWithError: error) - - var userInfo: [String: Any] = [Notification.Key.Task: task] - - if let data = (strongSelf[task]?.delegate as? DataTaskDelegate)?.data { - userInfo[Notification.Key.ResponseData] = data - } - - NotificationCenter.default.post( - name: Notification.Name.Task.DidComplete, - object: strongSelf, - userInfo: userInfo - ) - - strongSelf[task] = nil - } - - guard let request = self[task], let sessionManager = sessionManager else { - completeTask(session, task, error) - return - } - - // Run all validations on the request before checking if an error occurred - request.validations.forEach { $0() } - - // Determine whether an error has occurred - var error: Error? = error - - if request.delegate.error != nil { - error = request.delegate.error - } - - /// If an error occurred and the retrier is set, asynchronously ask the retrier if the request - /// should be retried. Otherwise, complete the task by notifying the task delegate. - if let retrier = retrier, let error = error { - retrier.should(sessionManager, retry: request, with: error) { [weak self] shouldRetry, timeDelay in - guard shouldRetry else { completeTask(session, task, error) ; return } - - DispatchQueue.utility.after(timeDelay) { [weak self] in - guard let strongSelf = self else { return } - - let retrySucceeded = strongSelf.sessionManager?.retry(request) ?? false - - if retrySucceeded, let task = request.task { - strongSelf[task] = request - return - } else { - completeTask(session, task, error) - } - } - } - } else { - completeTask(session, task, error) - } - } -} - -// MARK: - URLSessionDataDelegate - -extension SessionDelegate: URLSessionDataDelegate { - /// Tells the delegate that the data task received the initial reply (headers) from the server. - /// - /// - parameter session: The session containing the data task that received an initial reply. - /// - parameter dataTask: The data task that received an initial reply. - /// - parameter response: A URL response object populated with headers. - /// - parameter completionHandler: A completion handler that your code calls to continue the transfer, passing a - /// constant to indicate whether the transfer should continue as a data task or - /// should become a download task. - open func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) - { - guard dataTaskDidReceiveResponseWithCompletion == nil else { - dataTaskDidReceiveResponseWithCompletion?(session, dataTask, response, completionHandler) - return - } - - var disposition: URLSession.ResponseDisposition = .allow - - if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse { - disposition = dataTaskDidReceiveResponse(session, dataTask, response) - } - - completionHandler(disposition) - } - - /// Tells the delegate that the data task was changed to a download task. - /// - /// - parameter session: The session containing the task that was replaced by a download task. - /// - parameter dataTask: The data task that was replaced by a download task. - /// - parameter downloadTask: The new download task that replaced the data task. - open func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - didBecome downloadTask: URLSessionDownloadTask) - { - if let dataTaskDidBecomeDownloadTask = dataTaskDidBecomeDownloadTask { - dataTaskDidBecomeDownloadTask(session, dataTask, downloadTask) - } else { - self[downloadTask]?.delegate = DownloadTaskDelegate(task: downloadTask) - } - } - - /// Tells the delegate that the data task has received some of the expected data. - /// - /// - parameter session: The session containing the data task that provided data. - /// - parameter dataTask: The data task that provided data. - /// - parameter data: A data object containing the transferred data. - open func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - if let dataTaskDidReceiveData = dataTaskDidReceiveData { - dataTaskDidReceiveData(session, dataTask, data) - } else if let delegate = self[dataTask]?.delegate as? DataTaskDelegate { - delegate.urlSession(session, dataTask: dataTask, didReceive: data) - } - } - - /// Asks the delegate whether the data (or upload) task should store the response in the cache. - /// - /// - parameter session: The session containing the data (or upload) task. - /// - parameter dataTask: The data (or upload) task. - /// - parameter proposedResponse: The default caching behavior. This behavior is determined based on the current - /// caching policy and the values of certain received headers, such as the Pragma - /// and Cache-Control headers. - /// - parameter completionHandler: A block that your handler must call, providing either the original proposed - /// response, a modified version of that response, or NULL to prevent caching the - /// response. If your delegate implements this method, it must call this completion - /// handler; otherwise, your app leaks memory. - open func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - willCacheResponse proposedResponse: CachedURLResponse, - completionHandler: @escaping (CachedURLResponse?) -> Void) - { - guard dataTaskWillCacheResponseWithCompletion == nil else { - dataTaskWillCacheResponseWithCompletion?(session, dataTask, proposedResponse, completionHandler) - return - } - - if let dataTaskWillCacheResponse = dataTaskWillCacheResponse { - completionHandler(dataTaskWillCacheResponse(session, dataTask, proposedResponse)) - } else if let delegate = self[dataTask]?.delegate as? DataTaskDelegate { - delegate.urlSession( - session, - dataTask: dataTask, - willCacheResponse: proposedResponse, - completionHandler: completionHandler - ) - } else { - completionHandler(proposedResponse) - } - } -} - -// MARK: - URLSessionDownloadDelegate - -extension SessionDelegate: URLSessionDownloadDelegate { - /// Tells the delegate that a download task has finished downloading. - /// - /// - parameter session: The session containing the download task that finished. - /// - parameter downloadTask: The download task that finished. - /// - parameter location: A file URL for the temporary file. Because the file is temporary, you must either - /// open the file for reading or move it to a permanent location in your app’s sandbox - /// container directory before returning from this delegate method. - open func urlSession( - _ session: URLSession, - downloadTask: URLSessionDownloadTask, - didFinishDownloadingTo location: URL) - { - if let downloadTaskDidFinishDownloadingToURL = downloadTaskDidFinishDownloadingToURL { - downloadTaskDidFinishDownloadingToURL(session, downloadTask, location) - } else if let delegate = self[downloadTask]?.delegate as? DownloadTaskDelegate { - delegate.urlSession(session, downloadTask: downloadTask, didFinishDownloadingTo: location) - } - } - - /// Periodically informs the delegate about the download’s progress. - /// - /// - parameter session: The session containing the download task. - /// - parameter downloadTask: The download task. - /// - parameter bytesWritten: The number of bytes transferred since the last time this delegate - /// method was called. - /// - parameter totalBytesWritten: The total number of bytes transferred so far. - /// - parameter totalBytesExpectedToWrite: The expected length of the file, as provided by the Content-Length - /// header. If this header was not provided, the value is - /// `NSURLSessionTransferSizeUnknown`. - open func urlSession( - _ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) - { - if let downloadTaskDidWriteData = downloadTaskDidWriteData { - downloadTaskDidWriteData(session, downloadTask, bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) - } else if let delegate = self[downloadTask]?.delegate as? DownloadTaskDelegate { - delegate.urlSession( - session, - downloadTask: downloadTask, - didWriteData: bytesWritten, - totalBytesWritten: totalBytesWritten, - totalBytesExpectedToWrite: totalBytesExpectedToWrite - ) - } - } - - /// Tells the delegate that the download task has resumed downloading. - /// - /// - parameter session: The session containing the download task that finished. - /// - parameter downloadTask: The download task that resumed. See explanation in the discussion. - /// - parameter fileOffset: If the file's cache policy or last modified date prevents reuse of the - /// existing content, then this value is zero. Otherwise, this value is an - /// integer representing the number of bytes on disk that do not need to be - /// retrieved again. - /// - parameter expectedTotalBytes: The expected length of the file, as provided by the Content-Length header. - /// If this header was not provided, the value is NSURLSessionTransferSizeUnknown. - open func urlSession( - _ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) - { - if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset { - downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes) - } else if let delegate = self[downloadTask]?.delegate as? DownloadTaskDelegate { - delegate.urlSession( - session, - downloadTask: downloadTask, - didResumeAtOffset: fileOffset, - expectedTotalBytes: expectedTotalBytes - ) - } - } -} - -// MARK: - URLSessionStreamDelegate - -#if !os(watchOS) - -@available(iOS 9.0, macOS 10.11, tvOS 9.0, *) -extension SessionDelegate: URLSessionStreamDelegate { - /// Tells the delegate that the read side of the connection has been closed. - /// - /// - parameter session: The session. - /// - parameter streamTask: The stream task. - open func urlSession(_ session: URLSession, readClosedFor streamTask: URLSessionStreamTask) { - streamTaskReadClosed?(session, streamTask) - } - - /// Tells the delegate that the write side of the connection has been closed. - /// - /// - parameter session: The session. - /// - parameter streamTask: The stream task. - open func urlSession(_ session: URLSession, writeClosedFor streamTask: URLSessionStreamTask) { - streamTaskWriteClosed?(session, streamTask) - } - - /// Tells the delegate that the system has determined that a better route to the host is available. - /// - /// - parameter session: The session. - /// - parameter streamTask: The stream task. - open func urlSession(_ session: URLSession, betterRouteDiscoveredFor streamTask: URLSessionStreamTask) { - streamTaskBetterRouteDiscovered?(session, streamTask) - } - - /// Tells the delegate that the stream task has been completed and provides the unopened stream objects. - /// - /// - parameter session: The session. - /// - parameter streamTask: The stream task. - /// - parameter inputStream: The new input stream. - /// - parameter outputStream: The new output stream. - open func urlSession( - _ session: URLSession, - streamTask: URLSessionStreamTask, - didBecome inputStream: InputStream, - outputStream: OutputStream) - { - streamTaskDidBecomeInputAndOutputStreams?(session, streamTask, inputStream, outputStream) - } -} - -#endif diff --git a/Pods/Alamofire/Source/SessionManager.swift b/Pods/Alamofire/Source/SessionManager.swift deleted file mode 100644 index 02c36a7..0000000 --- a/Pods/Alamofire/Source/SessionManager.swift +++ /dev/null @@ -1,899 +0,0 @@ -// -// SessionManager.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Responsible for creating and managing `Request` objects, as well as their underlying `NSURLSession`. -open class SessionManager { - - // MARK: - Helper Types - - /// Defines whether the `MultipartFormData` encoding was successful and contains result of the encoding as - /// associated values. - /// - /// - Success: Represents a successful `MultipartFormData` encoding and contains the new `UploadRequest` along with - /// streaming information. - /// - Failure: Used to represent a failure in the `MultipartFormData` encoding and also contains the encoding - /// error. - public enum MultipartFormDataEncodingResult { - case success(request: UploadRequest, streamingFromDisk: Bool, streamFileURL: URL?) - case failure(Error) - } - - // MARK: - Properties - - /// A default instance of `SessionManager`, used by top-level Alamofire request methods, and suitable for use - /// directly for any ad hoc requests. - public static let `default`: SessionManager = { - let configuration = URLSessionConfiguration.default - configuration.httpAdditionalHeaders = SessionManager.defaultHTTPHeaders - - return SessionManager(configuration: configuration) - }() - - /// Creates default values for the "Accept-Encoding", "Accept-Language" and "User-Agent" headers. - public static let defaultHTTPHeaders: HTTPHeaders = { - // Accept-Encoding HTTP Header; see https://tools.ietf.org/html/rfc7230#section-4.2.3 - let acceptEncoding: String = "gzip;q=1.0, compress;q=0.5" - - // Accept-Language HTTP Header; see https://tools.ietf.org/html/rfc7231#section-5.3.5 - let acceptLanguage = Locale.preferredLanguages.prefix(6).enumerated().map { index, languageCode in - let quality = 1.0 - (Double(index) * 0.1) - return "\(languageCode);q=\(quality)" - }.joined(separator: ", ") - - // User-Agent Header; see https://tools.ietf.org/html/rfc7231#section-5.5.3 - // Example: `iOS Example/1.0 (org.alamofire.iOS-Example; build:1; iOS 10.0.0) Alamofire/4.0.0` - let userAgent: String = { - if let info = Bundle.main.infoDictionary { - let executable = info[kCFBundleExecutableKey as String] as? String ?? "Unknown" - let bundle = info[kCFBundleIdentifierKey as String] as? String ?? "Unknown" - let appVersion = info["CFBundleShortVersionString"] as? String ?? "Unknown" - let appBuild = info[kCFBundleVersionKey as String] as? String ?? "Unknown" - - let osNameVersion: String = { - let version = ProcessInfo.processInfo.operatingSystemVersion - let versionString = "\(version.majorVersion).\(version.minorVersion).\(version.patchVersion)" - - let osName: String = { - #if os(iOS) - return "iOS" - #elseif os(watchOS) - return "watchOS" - #elseif os(tvOS) - return "tvOS" - #elseif os(macOS) - return "OS X" - #elseif os(Linux) - return "Linux" - #else - return "Unknown" - #endif - }() - - return "\(osName) \(versionString)" - }() - - let alamofireVersion: String = { - guard - let afInfo = Bundle(for: SessionManager.self).infoDictionary, - let build = afInfo["CFBundleShortVersionString"] - else { return "Unknown" } - - return "Alamofire/\(build)" - }() - - return "\(executable)/\(appVersion) (\(bundle); build:\(appBuild); \(osNameVersion)) \(alamofireVersion)" - } - - return "Alamofire" - }() - - return [ - "Accept-Encoding": acceptEncoding, - "Accept-Language": acceptLanguage, - "User-Agent": userAgent - ] - }() - - /// Default memory threshold used when encoding `MultipartFormData` in bytes. - public static let multipartFormDataEncodingMemoryThreshold: UInt64 = 10_000_000 - - /// The underlying session. - public let session: URLSession - - /// The session delegate handling all the task and session delegate callbacks. - public let delegate: SessionDelegate - - /// Whether to start requests immediately after being constructed. `true` by default. - open var startRequestsImmediately: Bool = true - - /// The request adapter called each time a new request is created. - open var adapter: RequestAdapter? - - /// The request retrier called each time a request encounters an error to determine whether to retry the request. - open var retrier: RequestRetrier? { - get { return delegate.retrier } - set { delegate.retrier = newValue } - } - - /// The background completion handler closure provided by the UIApplicationDelegate - /// `application:handleEventsForBackgroundURLSession:completionHandler:` method. By setting the background - /// completion handler, the SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` closure implementation - /// will automatically call the handler. - /// - /// If you need to handle your own events before the handler is called, then you need to override the - /// SessionDelegate `sessionDidFinishEventsForBackgroundURLSession` and manually call the handler when finished. - /// - /// `nil` by default. - open var backgroundCompletionHandler: (() -> Void)? - - let queue = DispatchQueue(label: "org.alamofire.session-manager." + UUID().uuidString) - - // MARK: - Lifecycle - - /// Creates an instance with the specified `configuration`, `delegate` and `serverTrustPolicyManager`. - /// - /// - parameter configuration: The configuration used to construct the managed session. - /// `URLSessionConfiguration.default` by default. - /// - parameter delegate: The delegate used when initializing the session. `SessionDelegate()` by - /// default. - /// - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust - /// challenges. `nil` by default. - /// - /// - returns: The new `SessionManager` instance. - public init( - configuration: URLSessionConfiguration = URLSessionConfiguration.default, - delegate: SessionDelegate = SessionDelegate(), - serverTrustPolicyManager: ServerTrustPolicyManager? = nil) - { - self.delegate = delegate - self.session = URLSession(configuration: configuration, delegate: delegate, delegateQueue: nil) - - commonInit(serverTrustPolicyManager: serverTrustPolicyManager) - } - - /// Creates an instance with the specified `session`, `delegate` and `serverTrustPolicyManager`. - /// - /// - parameter session: The URL session. - /// - parameter delegate: The delegate of the URL session. Must equal the URL session's delegate. - /// - parameter serverTrustPolicyManager: The server trust policy manager to use for evaluating all server trust - /// challenges. `nil` by default. - /// - /// - returns: The new `SessionManager` instance if the URL session's delegate matches; `nil` otherwise. - public init?( - session: URLSession, - delegate: SessionDelegate, - serverTrustPolicyManager: ServerTrustPolicyManager? = nil) - { - guard delegate === session.delegate else { return nil } - - self.delegate = delegate - self.session = session - - commonInit(serverTrustPolicyManager: serverTrustPolicyManager) - } - - private func commonInit(serverTrustPolicyManager: ServerTrustPolicyManager?) { - session.serverTrustPolicyManager = serverTrustPolicyManager - - delegate.sessionManager = self - - delegate.sessionDidFinishEventsForBackgroundURLSession = { [weak self] session in - guard let strongSelf = self else { return } - DispatchQueue.main.async { strongSelf.backgroundCompletionHandler?() } - } - } - - deinit { - session.invalidateAndCancel() - } - - // MARK: - Data Request - - /// Creates a `DataRequest` to retrieve the contents of the specified `url`, `method`, `parameters`, `encoding` - /// and `headers`. - /// - /// - parameter url: The URL. - /// - parameter method: The HTTP method. `.get` by default. - /// - parameter parameters: The parameters. `nil` by default. - /// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - /// - returns: The created `DataRequest`. - @discardableResult - open func request( - _ url: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, - headers: HTTPHeaders? = nil) - -> DataRequest - { - var originalRequest: URLRequest? - - do { - originalRequest = try URLRequest(url: url, method: method, headers: headers) - let encodedURLRequest = try encoding.encode(originalRequest!, with: parameters) - return request(encodedURLRequest) - } catch { - return request(originalRequest, failedWith: error) - } - } - - /// Creates a `DataRequest` to retrieve the contents of a URL based on the specified `urlRequest`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter urlRequest: The URL request. - /// - /// - returns: The created `DataRequest`. - @discardableResult - open func request(_ urlRequest: URLRequestConvertible) -> DataRequest { - var originalRequest: URLRequest? - - do { - originalRequest = try urlRequest.asURLRequest() - let originalTask = DataRequest.Requestable(urlRequest: originalRequest!) - - let task = try originalTask.task(session: session, adapter: adapter, queue: queue) - let request = DataRequest(session: session, requestTask: .data(originalTask, task)) - - delegate[task] = request - - if startRequestsImmediately { request.resume() } - - return request - } catch { - return request(originalRequest, failedWith: error) - } - } - - // MARK: Private - Request Implementation - - private func request(_ urlRequest: URLRequest?, failedWith error: Error) -> DataRequest { - var requestTask: Request.RequestTask = .data(nil, nil) - - if let urlRequest = urlRequest { - let originalTask = DataRequest.Requestable(urlRequest: urlRequest) - requestTask = .data(originalTask, nil) - } - - let underlyingError = error.underlyingAdaptError ?? error - let request = DataRequest(session: session, requestTask: requestTask, error: underlyingError) - - if let retrier = retrier, error is AdaptError { - allowRetrier(retrier, toRetry: request, with: underlyingError) - } else { - if startRequestsImmediately { request.resume() } - } - - return request - } - - // MARK: - Download Request - - // MARK: URL Request - - /// Creates a `DownloadRequest` to retrieve the contents the specified `url`, `method`, `parameters`, `encoding`, - /// `headers` and save them to the `destination`. - /// - /// If `destination` is not specified, the contents will remain in the temporary location determined by the - /// underlying URL session. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter url: The URL. - /// - parameter method: The HTTP method. `.get` by default. - /// - parameter parameters: The parameters. `nil` by default. - /// - parameter encoding: The parameter encoding. `URLEncoding.default` by default. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. - /// - /// - returns: The created `DownloadRequest`. - @discardableResult - open func download( - _ url: URLConvertible, - method: HTTPMethod = .get, - parameters: Parameters? = nil, - encoding: ParameterEncoding = URLEncoding.default, - headers: HTTPHeaders? = nil, - to destination: DownloadRequest.DownloadFileDestination? = nil) - -> DownloadRequest - { - do { - let urlRequest = try URLRequest(url: url, method: method, headers: headers) - let encodedURLRequest = try encoding.encode(urlRequest, with: parameters) - return download(encodedURLRequest, to: destination) - } catch { - return download(nil, to: destination, failedWith: error) - } - } - - /// Creates a `DownloadRequest` to retrieve the contents of a URL based on the specified `urlRequest` and save - /// them to the `destination`. - /// - /// If `destination` is not specified, the contents will remain in the temporary location determined by the - /// underlying URL session. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter urlRequest: The URL request - /// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. - /// - /// - returns: The created `DownloadRequest`. - @discardableResult - open func download( - _ urlRequest: URLRequestConvertible, - to destination: DownloadRequest.DownloadFileDestination? = nil) - -> DownloadRequest - { - do { - let urlRequest = try urlRequest.asURLRequest() - return download(.request(urlRequest), to: destination) - } catch { - return download(nil, to: destination, failedWith: error) - } - } - - // MARK: Resume Data - - /// Creates a `DownloadRequest` from the `resumeData` produced from a previous request cancellation to retrieve - /// the contents of the original request and save them to the `destination`. - /// - /// If `destination` is not specified, the contents will remain in the temporary location determined by the - /// underlying URL session. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// On the latest release of all the Apple platforms (iOS 10, macOS 10.12, tvOS 10, watchOS 3), `resumeData` is broken - /// on background URL session configurations. There's an underlying bug in the `resumeData` generation logic where the - /// data is written incorrectly and will always fail to resume the download. For more information about the bug and - /// possible workarounds, please refer to the following Stack Overflow post: - /// - /// - http://stackoverflow.com/a/39347461/1342462 - /// - /// - parameter resumeData: The resume data. This is an opaque data blob produced by `URLSessionDownloadTask` - /// when a task is cancelled. See `URLSession -downloadTask(withResumeData:)` for - /// additional information. - /// - parameter destination: The closure used to determine the destination of the downloaded file. `nil` by default. - /// - /// - returns: The created `DownloadRequest`. - @discardableResult - open func download( - resumingWith resumeData: Data, - to destination: DownloadRequest.DownloadFileDestination? = nil) - -> DownloadRequest - { - return download(.resumeData(resumeData), to: destination) - } - - // MARK: Private - Download Implementation - - private func download( - _ downloadable: DownloadRequest.Downloadable, - to destination: DownloadRequest.DownloadFileDestination?) - -> DownloadRequest - { - do { - let task = try downloadable.task(session: session, adapter: adapter, queue: queue) - let download = DownloadRequest(session: session, requestTask: .download(downloadable, task)) - - download.downloadDelegate.destination = destination - - delegate[task] = download - - if startRequestsImmediately { download.resume() } - - return download - } catch { - return download(downloadable, to: destination, failedWith: error) - } - } - - private func download( - _ downloadable: DownloadRequest.Downloadable?, - to destination: DownloadRequest.DownloadFileDestination?, - failedWith error: Error) - -> DownloadRequest - { - var downloadTask: Request.RequestTask = .download(nil, nil) - - if let downloadable = downloadable { - downloadTask = .download(downloadable, nil) - } - - let underlyingError = error.underlyingAdaptError ?? error - - let download = DownloadRequest(session: session, requestTask: downloadTask, error: underlyingError) - download.downloadDelegate.destination = destination - - if let retrier = retrier, error is AdaptError { - allowRetrier(retrier, toRetry: download, with: underlyingError) - } else { - if startRequestsImmediately { download.resume() } - } - - return download - } - - // MARK: - Upload Request - - // MARK: File - - /// Creates an `UploadRequest` from the specified `url`, `method` and `headers` for uploading the `file`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter file: The file to upload. - /// - parameter url: The URL. - /// - parameter method: The HTTP method. `.post` by default. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - /// - returns: The created `UploadRequest`. - @discardableResult - open func upload( - _ fileURL: URL, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil) - -> UploadRequest - { - do { - let urlRequest = try URLRequest(url: url, method: method, headers: headers) - return upload(fileURL, with: urlRequest) - } catch { - return upload(nil, failedWith: error) - } - } - - /// Creates a `UploadRequest` from the specified `urlRequest` for uploading the `file`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter file: The file to upload. - /// - parameter urlRequest: The URL request. - /// - /// - returns: The created `UploadRequest`. - @discardableResult - open func upload(_ fileURL: URL, with urlRequest: URLRequestConvertible) -> UploadRequest { - do { - let urlRequest = try urlRequest.asURLRequest() - return upload(.file(fileURL, urlRequest)) - } catch { - return upload(nil, failedWith: error) - } - } - - // MARK: Data - - /// Creates an `UploadRequest` from the specified `url`, `method` and `headers` for uploading the `data`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter data: The data to upload. - /// - parameter url: The URL. - /// - parameter method: The HTTP method. `.post` by default. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - /// - returns: The created `UploadRequest`. - @discardableResult - open func upload( - _ data: Data, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil) - -> UploadRequest - { - do { - let urlRequest = try URLRequest(url: url, method: method, headers: headers) - return upload(data, with: urlRequest) - } catch { - return upload(nil, failedWith: error) - } - } - - /// Creates an `UploadRequest` from the specified `urlRequest` for uploading the `data`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter data: The data to upload. - /// - parameter urlRequest: The URL request. - /// - /// - returns: The created `UploadRequest`. - @discardableResult - open func upload(_ data: Data, with urlRequest: URLRequestConvertible) -> UploadRequest { - do { - let urlRequest = try urlRequest.asURLRequest() - return upload(.data(data, urlRequest)) - } catch { - return upload(nil, failedWith: error) - } - } - - // MARK: InputStream - - /// Creates an `UploadRequest` from the specified `url`, `method` and `headers` for uploading the `stream`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter stream: The stream to upload. - /// - parameter url: The URL. - /// - parameter method: The HTTP method. `.post` by default. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - /// - returns: The created `UploadRequest`. - @discardableResult - open func upload( - _ stream: InputStream, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil) - -> UploadRequest - { - do { - let urlRequest = try URLRequest(url: url, method: method, headers: headers) - return upload(stream, with: urlRequest) - } catch { - return upload(nil, failedWith: error) - } - } - - /// Creates an `UploadRequest` from the specified `urlRequest` for uploading the `stream`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter stream: The stream to upload. - /// - parameter urlRequest: The URL request. - /// - /// - returns: The created `UploadRequest`. - @discardableResult - open func upload(_ stream: InputStream, with urlRequest: URLRequestConvertible) -> UploadRequest { - do { - let urlRequest = try urlRequest.asURLRequest() - return upload(.stream(stream, urlRequest)) - } catch { - return upload(nil, failedWith: error) - } - } - - // MARK: MultipartFormData - - /// Encodes `multipartFormData` using `encodingMemoryThreshold` and calls `encodingCompletion` with new - /// `UploadRequest` using the `url`, `method` and `headers`. - /// - /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative - /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most - /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to - /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory - /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be - /// used for larger payloads such as video content. - /// - /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory - /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, - /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk - /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding - /// technique was used. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. - /// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. - /// `multipartFormDataEncodingMemoryThreshold` by default. - /// - parameter url: The URL. - /// - parameter method: The HTTP method. `.post` by default. - /// - parameter headers: The HTTP headers. `nil` by default. - /// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. - open func upload( - multipartFormData: @escaping (MultipartFormData) -> Void, - usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, - to url: URLConvertible, - method: HTTPMethod = .post, - headers: HTTPHeaders? = nil, - queue: DispatchQueue? = nil, - encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?) - { - do { - let urlRequest = try URLRequest(url: url, method: method, headers: headers) - - return upload( - multipartFormData: multipartFormData, - usingThreshold: encodingMemoryThreshold, - with: urlRequest, - queue: queue, - encodingCompletion: encodingCompletion - ) - } catch { - (queue ?? DispatchQueue.main).async { encodingCompletion?(.failure(error)) } - } - } - - /// Encodes `multipartFormData` using `encodingMemoryThreshold` and calls `encodingCompletion` with new - /// `UploadRequest` using the `urlRequest`. - /// - /// It is important to understand the memory implications of uploading `MultipartFormData`. If the cummulative - /// payload is small, encoding the data in-memory and directly uploading to a server is the by far the most - /// efficient approach. However, if the payload is too large, encoding the data in-memory could cause your app to - /// be terminated. Larger payloads must first be written to disk using input and output streams to keep the memory - /// footprint low, then the data can be uploaded as a stream from the resulting file. Streaming from disk MUST be - /// used for larger payloads such as video content. - /// - /// The `encodingMemoryThreshold` parameter allows Alamofire to automatically determine whether to encode in-memory - /// or stream from disk. If the content length of the `MultipartFormData` is below the `encodingMemoryThreshold`, - /// encoding takes place in-memory. If the content length exceeds the threshold, the data is streamed to disk - /// during the encoding process. Then the result is uploaded as data or as a stream depending on which encoding - /// technique was used. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter multipartFormData: The closure used to append body parts to the `MultipartFormData`. - /// - parameter encodingMemoryThreshold: The encoding memory threshold in bytes. - /// `multipartFormDataEncodingMemoryThreshold` by default. - /// - parameter urlRequest: The URL request. - /// - parameter encodingCompletion: The closure called when the `MultipartFormData` encoding is complete. - open func upload( - multipartFormData: @escaping (MultipartFormData) -> Void, - usingThreshold encodingMemoryThreshold: UInt64 = SessionManager.multipartFormDataEncodingMemoryThreshold, - with urlRequest: URLRequestConvertible, - queue: DispatchQueue? = nil, - encodingCompletion: ((MultipartFormDataEncodingResult) -> Void)?) - { - DispatchQueue.global(qos: .utility).async { - let formData = MultipartFormData() - multipartFormData(formData) - - var tempFileURL: URL? - - do { - var urlRequestWithContentType = try urlRequest.asURLRequest() - urlRequestWithContentType.setValue(formData.contentType, forHTTPHeaderField: "Content-Type") - - let isBackgroundSession = self.session.configuration.identifier != nil - - if formData.contentLength < encodingMemoryThreshold && !isBackgroundSession { - let data = try formData.encode() - - let encodingResult = MultipartFormDataEncodingResult.success( - request: self.upload(data, with: urlRequestWithContentType), - streamingFromDisk: false, - streamFileURL: nil - ) - - (queue ?? DispatchQueue.main).async { encodingCompletion?(encodingResult) } - } else { - let fileManager = FileManager.default - let tempDirectoryURL = URL(fileURLWithPath: NSTemporaryDirectory()) - let directoryURL = tempDirectoryURL.appendingPathComponent("org.alamofire.manager/multipart.form.data") - let fileName = UUID().uuidString - let fileURL = directoryURL.appendingPathComponent(fileName) - - tempFileURL = fileURL - - var directoryError: Error? - - // Create directory inside serial queue to ensure two threads don't do this in parallel - self.queue.sync { - do { - try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true, attributes: nil) - } catch { - directoryError = error - } - } - - if let directoryError = directoryError { throw directoryError } - - try formData.writeEncodedData(to: fileURL) - - let upload = self.upload(fileURL, with: urlRequestWithContentType) - - // Cleanup the temp file once the upload is complete - upload.delegate.queue.addOperation { - do { - try FileManager.default.removeItem(at: fileURL) - } catch { - // No-op - } - } - - (queue ?? DispatchQueue.main).async { - let encodingResult = MultipartFormDataEncodingResult.success( - request: upload, - streamingFromDisk: true, - streamFileURL: fileURL - ) - - encodingCompletion?(encodingResult) - } - } - } catch { - // Cleanup the temp file in the event that the multipart form data encoding failed - if let tempFileURL = tempFileURL { - do { - try FileManager.default.removeItem(at: tempFileURL) - } catch { - // No-op - } - } - - (queue ?? DispatchQueue.main).async { encodingCompletion?(.failure(error)) } - } - } - } - - // MARK: Private - Upload Implementation - - private func upload(_ uploadable: UploadRequest.Uploadable) -> UploadRequest { - do { - let task = try uploadable.task(session: session, adapter: adapter, queue: queue) - let upload = UploadRequest(session: session, requestTask: .upload(uploadable, task)) - - if case let .stream(inputStream, _) = uploadable { - upload.delegate.taskNeedNewBodyStream = { _, _ in inputStream } - } - - delegate[task] = upload - - if startRequestsImmediately { upload.resume() } - - return upload - } catch { - return upload(uploadable, failedWith: error) - } - } - - private func upload(_ uploadable: UploadRequest.Uploadable?, failedWith error: Error) -> UploadRequest { - var uploadTask: Request.RequestTask = .upload(nil, nil) - - if let uploadable = uploadable { - uploadTask = .upload(uploadable, nil) - } - - let underlyingError = error.underlyingAdaptError ?? error - let upload = UploadRequest(session: session, requestTask: uploadTask, error: underlyingError) - - if let retrier = retrier, error is AdaptError { - allowRetrier(retrier, toRetry: upload, with: underlyingError) - } else { - if startRequestsImmediately { upload.resume() } - } - - return upload - } - -#if !os(watchOS) - - // MARK: - Stream Request - - // MARK: Hostname and Port - - /// Creates a `StreamRequest` for bidirectional streaming using the `hostname` and `port`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter hostName: The hostname of the server to connect to. - /// - parameter port: The port of the server to connect to. - /// - /// - returns: The created `StreamRequest`. - @discardableResult - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - open func stream(withHostName hostName: String, port: Int) -> StreamRequest { - return stream(.stream(hostName: hostName, port: port)) - } - - // MARK: NetService - - /// Creates a `StreamRequest` for bidirectional streaming using the `netService`. - /// - /// If `startRequestsImmediately` is `true`, the request will have `resume()` called before being returned. - /// - /// - parameter netService: The net service used to identify the endpoint. - /// - /// - returns: The created `StreamRequest`. - @discardableResult - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - open func stream(with netService: NetService) -> StreamRequest { - return stream(.netService(netService)) - } - - // MARK: Private - Stream Implementation - - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - private func stream(_ streamable: StreamRequest.Streamable) -> StreamRequest { - do { - let task = try streamable.task(session: session, adapter: adapter, queue: queue) - let request = StreamRequest(session: session, requestTask: .stream(streamable, task)) - - delegate[task] = request - - if startRequestsImmediately { request.resume() } - - return request - } catch { - return stream(failedWith: error) - } - } - - @available(iOS 9.0, macOS 10.11, tvOS 9.0, *) - private func stream(failedWith error: Error) -> StreamRequest { - let stream = StreamRequest(session: session, requestTask: .stream(nil, nil), error: error) - if startRequestsImmediately { stream.resume() } - return stream - } - -#endif - - // MARK: - Internal - Retry Request - - func retry(_ request: Request) -> Bool { - guard let originalTask = request.originalTask else { return false } - - do { - let task = try originalTask.task(session: session, adapter: adapter, queue: queue) - - if let originalTask = request.task { - delegate[originalTask] = nil // removes the old request to avoid endless growth - } - - request.delegate.task = task // resets all task delegate data - - request.retryCount += 1 - request.startTime = CFAbsoluteTimeGetCurrent() - request.endTime = nil - - task.resume() - - return true - } catch { - request.delegate.error = error.underlyingAdaptError ?? error - return false - } - } - - private func allowRetrier(_ retrier: RequestRetrier, toRetry request: Request, with error: Error) { - DispatchQueue.utility.async { [weak self] in - guard let strongSelf = self else { return } - - retrier.should(strongSelf, retry: request, with: error) { shouldRetry, timeDelay in - guard let strongSelf = self else { return } - - guard shouldRetry else { - if strongSelf.startRequestsImmediately { request.resume() } - return - } - - DispatchQueue.utility.after(timeDelay) { - guard let strongSelf = self else { return } - - let retrySucceeded = strongSelf.retry(request) - - if retrySucceeded, let task = request.task { - strongSelf.delegate[task] = request - } else { - if strongSelf.startRequestsImmediately { request.resume() } - } - } - } - } - } -} diff --git a/Pods/Alamofire/Source/TaskDelegate.swift b/Pods/Alamofire/Source/TaskDelegate.swift deleted file mode 100644 index 5705737..0000000 --- a/Pods/Alamofire/Source/TaskDelegate.swift +++ /dev/null @@ -1,466 +0,0 @@ -// -// TaskDelegate.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// The task delegate is responsible for handling all delegate callbacks for the underlying task as well as -/// executing all operations attached to the serial operation queue upon task completion. -open class TaskDelegate: NSObject { - - // MARK: Properties - - /// The serial operation queue used to execute all operations after the task completes. - public let queue: OperationQueue - - /// The data returned by the server. - public var data: Data? { return nil } - - /// The error generated throughout the lifecyle of the task. - public var error: Error? - - var task: URLSessionTask? { - set { - taskLock.lock(); defer { taskLock.unlock() } - _task = newValue - } - get { - taskLock.lock(); defer { taskLock.unlock() } - return _task - } - } - - var initialResponseTime: CFAbsoluteTime? - var credential: URLCredential? - var metrics: AnyObject? // URLSessionTaskMetrics - - private var _task: URLSessionTask? { - didSet { reset() } - } - - private let taskLock = NSLock() - - // MARK: Lifecycle - - init(task: URLSessionTask?) { - _task = task - - self.queue = { - let operationQueue = OperationQueue() - - operationQueue.maxConcurrentOperationCount = 1 - operationQueue.isSuspended = true - operationQueue.qualityOfService = .utility - - return operationQueue - }() - } - - func reset() { - error = nil - initialResponseTime = nil - } - - // MARK: URLSessionTaskDelegate - - var taskWillPerformHTTPRedirection: ((URLSession, URLSessionTask, HTTPURLResponse, URLRequest) -> URLRequest?)? - var taskDidReceiveChallenge: ((URLSession, URLSessionTask, URLAuthenticationChallenge) -> (URLSession.AuthChallengeDisposition, URLCredential?))? - var taskNeedNewBodyStream: ((URLSession, URLSessionTask) -> InputStream?)? - var taskDidCompleteWithError: ((URLSession, URLSessionTask, Error?) -> Void)? - - @objc(URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:) - func urlSession( - _ session: URLSession, - task: URLSessionTask, - willPerformHTTPRedirection response: HTTPURLResponse, - newRequest request: URLRequest, - completionHandler: @escaping (URLRequest?) -> Void) - { - var redirectRequest: URLRequest? = request - - if let taskWillPerformHTTPRedirection = taskWillPerformHTTPRedirection { - redirectRequest = taskWillPerformHTTPRedirection(session, task, response, request) - } - - completionHandler(redirectRequest) - } - - @objc(URLSession:task:didReceiveChallenge:completionHandler:) - func urlSession( - _ session: URLSession, - task: URLSessionTask, - didReceive challenge: URLAuthenticationChallenge, - completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) - { - var disposition: URLSession.AuthChallengeDisposition = .performDefaultHandling - var credential: URLCredential? - - if let taskDidReceiveChallenge = taskDidReceiveChallenge { - (disposition, credential) = taskDidReceiveChallenge(session, task, challenge) - } else if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust { - let host = challenge.protectionSpace.host - - if - let serverTrustPolicy = session.serverTrustPolicyManager?.serverTrustPolicy(forHost: host), - let serverTrust = challenge.protectionSpace.serverTrust - { - if serverTrustPolicy.evaluate(serverTrust, forHost: host) { - disposition = .useCredential - credential = URLCredential(trust: serverTrust) - } else { - disposition = .cancelAuthenticationChallenge - } - } - } else { - if challenge.previousFailureCount > 0 { - disposition = .rejectProtectionSpace - } else { - credential = self.credential ?? session.configuration.urlCredentialStorage?.defaultCredential(for: challenge.protectionSpace) - - if credential != nil { - disposition = .useCredential - } - } - } - - completionHandler(disposition, credential) - } - - @objc(URLSession:task:needNewBodyStream:) - func urlSession( - _ session: URLSession, - task: URLSessionTask, - needNewBodyStream completionHandler: @escaping (InputStream?) -> Void) - { - var bodyStream: InputStream? - - if let taskNeedNewBodyStream = taskNeedNewBodyStream { - bodyStream = taskNeedNewBodyStream(session, task) - } - - completionHandler(bodyStream) - } - - @objc(URLSession:task:didCompleteWithError:) - func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) { - if let taskDidCompleteWithError = taskDidCompleteWithError { - taskDidCompleteWithError(session, task, error) - } else { - if let error = error { - if self.error == nil { self.error = error } - - if - let downloadDelegate = self as? DownloadTaskDelegate, - let resumeData = (error as NSError).userInfo[NSURLSessionDownloadTaskResumeData] as? Data - { - downloadDelegate.resumeData = resumeData - } - } - - queue.isSuspended = false - } - } -} - -// MARK: - - -class DataTaskDelegate: TaskDelegate, URLSessionDataDelegate { - - // MARK: Properties - - var dataTask: URLSessionDataTask { return task as! URLSessionDataTask } - - override var data: Data? { - if dataStream != nil { - return nil - } else { - return mutableData - } - } - - var progress: Progress - var progressHandler: (closure: Request.ProgressHandler, queue: DispatchQueue)? - - var dataStream: ((_ data: Data) -> Void)? - - private var totalBytesReceived: Int64 = 0 - private var mutableData: Data - - private var expectedContentLength: Int64? - - // MARK: Lifecycle - - override init(task: URLSessionTask?) { - mutableData = Data() - progress = Progress(totalUnitCount: 0) - - super.init(task: task) - } - - override func reset() { - super.reset() - - progress = Progress(totalUnitCount: 0) - totalBytesReceived = 0 - mutableData = Data() - expectedContentLength = nil - } - - // MARK: URLSessionDataDelegate - - var dataTaskDidReceiveResponse: ((URLSession, URLSessionDataTask, URLResponse) -> URLSession.ResponseDisposition)? - var dataTaskDidBecomeDownloadTask: ((URLSession, URLSessionDataTask, URLSessionDownloadTask) -> Void)? - var dataTaskDidReceiveData: ((URLSession, URLSessionDataTask, Data) -> Void)? - var dataTaskWillCacheResponse: ((URLSession, URLSessionDataTask, CachedURLResponse) -> CachedURLResponse?)? - - func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - didReceive response: URLResponse, - completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) - { - var disposition: URLSession.ResponseDisposition = .allow - - expectedContentLength = response.expectedContentLength - - if let dataTaskDidReceiveResponse = dataTaskDidReceiveResponse { - disposition = dataTaskDidReceiveResponse(session, dataTask, response) - } - - completionHandler(disposition) - } - - func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - didBecome downloadTask: URLSessionDownloadTask) - { - dataTaskDidBecomeDownloadTask?(session, dataTask, downloadTask) - } - - func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) { - if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() } - - if let dataTaskDidReceiveData = dataTaskDidReceiveData { - dataTaskDidReceiveData(session, dataTask, data) - } else { - if let dataStream = dataStream { - dataStream(data) - } else { - mutableData.append(data) - } - - let bytesReceived = Int64(data.count) - totalBytesReceived += bytesReceived - let totalBytesExpected = dataTask.response?.expectedContentLength ?? NSURLSessionTransferSizeUnknown - - progress.totalUnitCount = totalBytesExpected - progress.completedUnitCount = totalBytesReceived - - if let progressHandler = progressHandler { - progressHandler.queue.async { progressHandler.closure(self.progress) } - } - } - } - - func urlSession( - _ session: URLSession, - dataTask: URLSessionDataTask, - willCacheResponse proposedResponse: CachedURLResponse, - completionHandler: @escaping (CachedURLResponse?) -> Void) - { - var cachedResponse: CachedURLResponse? = proposedResponse - - if let dataTaskWillCacheResponse = dataTaskWillCacheResponse { - cachedResponse = dataTaskWillCacheResponse(session, dataTask, proposedResponse) - } - - completionHandler(cachedResponse) - } -} - -// MARK: - - -class DownloadTaskDelegate: TaskDelegate, URLSessionDownloadDelegate { - - // MARK: Properties - - var downloadTask: URLSessionDownloadTask { return task as! URLSessionDownloadTask } - - var progress: Progress - var progressHandler: (closure: Request.ProgressHandler, queue: DispatchQueue)? - - var resumeData: Data? - override var data: Data? { return resumeData } - - var destination: DownloadRequest.DownloadFileDestination? - - var temporaryURL: URL? - var destinationURL: URL? - - var fileURL: URL? { return destination != nil ? destinationURL : temporaryURL } - - // MARK: Lifecycle - - override init(task: URLSessionTask?) { - progress = Progress(totalUnitCount: 0) - super.init(task: task) - } - - override func reset() { - super.reset() - - progress = Progress(totalUnitCount: 0) - resumeData = nil - } - - // MARK: URLSessionDownloadDelegate - - var downloadTaskDidFinishDownloadingToURL: ((URLSession, URLSessionDownloadTask, URL) -> URL)? - var downloadTaskDidWriteData: ((URLSession, URLSessionDownloadTask, Int64, Int64, Int64) -> Void)? - var downloadTaskDidResumeAtOffset: ((URLSession, URLSessionDownloadTask, Int64, Int64) -> Void)? - - func urlSession( - _ session: URLSession, - downloadTask: URLSessionDownloadTask, - didFinishDownloadingTo location: URL) - { - temporaryURL = location - - guard - let destination = destination, - let response = downloadTask.response as? HTTPURLResponse - else { return } - - let result = destination(location, response) - let destinationURL = result.destinationURL - let options = result.options - - self.destinationURL = destinationURL - - do { - if options.contains(.removePreviousFile), FileManager.default.fileExists(atPath: destinationURL.path) { - try FileManager.default.removeItem(at: destinationURL) - } - - if options.contains(.createIntermediateDirectories) { - let directory = destinationURL.deletingLastPathComponent() - try FileManager.default.createDirectory(at: directory, withIntermediateDirectories: true) - } - - try FileManager.default.moveItem(at: location, to: destinationURL) - } catch { - self.error = error - } - } - - func urlSession( - _ session: URLSession, - downloadTask: URLSessionDownloadTask, - didWriteData bytesWritten: Int64, - totalBytesWritten: Int64, - totalBytesExpectedToWrite: Int64) - { - if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() } - - if let downloadTaskDidWriteData = downloadTaskDidWriteData { - downloadTaskDidWriteData( - session, - downloadTask, - bytesWritten, - totalBytesWritten, - totalBytesExpectedToWrite - ) - } else { - progress.totalUnitCount = totalBytesExpectedToWrite - progress.completedUnitCount = totalBytesWritten - - if let progressHandler = progressHandler { - progressHandler.queue.async { progressHandler.closure(self.progress) } - } - } - } - - func urlSession( - _ session: URLSession, - downloadTask: URLSessionDownloadTask, - didResumeAtOffset fileOffset: Int64, - expectedTotalBytes: Int64) - { - if let downloadTaskDidResumeAtOffset = downloadTaskDidResumeAtOffset { - downloadTaskDidResumeAtOffset(session, downloadTask, fileOffset, expectedTotalBytes) - } else { - progress.totalUnitCount = expectedTotalBytes - progress.completedUnitCount = fileOffset - } - } -} - -// MARK: - - -class UploadTaskDelegate: DataTaskDelegate { - - // MARK: Properties - - var uploadTask: URLSessionUploadTask { return task as! URLSessionUploadTask } - - var uploadProgress: Progress - var uploadProgressHandler: (closure: Request.ProgressHandler, queue: DispatchQueue)? - - // MARK: Lifecycle - - override init(task: URLSessionTask?) { - uploadProgress = Progress(totalUnitCount: 0) - super.init(task: task) - } - - override func reset() { - super.reset() - uploadProgress = Progress(totalUnitCount: 0) - } - - // MARK: URLSessionTaskDelegate - - var taskDidSendBodyData: ((URLSession, URLSessionTask, Int64, Int64, Int64) -> Void)? - - func URLSession( - _ session: URLSession, - task: URLSessionTask, - didSendBodyData bytesSent: Int64, - totalBytesSent: Int64, - totalBytesExpectedToSend: Int64) - { - if initialResponseTime == nil { initialResponseTime = CFAbsoluteTimeGetCurrent() } - - if let taskDidSendBodyData = taskDidSendBodyData { - taskDidSendBodyData(session, task, bytesSent, totalBytesSent, totalBytesExpectedToSend) - } else { - uploadProgress.totalUnitCount = totalBytesExpectedToSend - uploadProgress.completedUnitCount = totalBytesSent - - if let uploadProgressHandler = uploadProgressHandler { - uploadProgressHandler.queue.async { uploadProgressHandler.closure(self.uploadProgress) } - } - } - } -} diff --git a/Pods/Alamofire/Source/Timeline.swift b/Pods/Alamofire/Source/Timeline.swift deleted file mode 100644 index 596c1bd..0000000 --- a/Pods/Alamofire/Source/Timeline.swift +++ /dev/null @@ -1,136 +0,0 @@ -// -// Timeline.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -/// Responsible for computing the timing metrics for the complete lifecycle of a `Request`. -public struct Timeline { - /// The time the request was initialized. - public let requestStartTime: CFAbsoluteTime - - /// The time the first bytes were received from or sent to the server. - public let initialResponseTime: CFAbsoluteTime - - /// The time when the request was completed. - public let requestCompletedTime: CFAbsoluteTime - - /// The time when the response serialization was completed. - public let serializationCompletedTime: CFAbsoluteTime - - /// The time interval in seconds from the time the request started to the initial response from the server. - public let latency: TimeInterval - - /// The time interval in seconds from the time the request started to the time the request completed. - public let requestDuration: TimeInterval - - /// The time interval in seconds from the time the request completed to the time response serialization completed. - public let serializationDuration: TimeInterval - - /// The time interval in seconds from the time the request started to the time response serialization completed. - public let totalDuration: TimeInterval - - /// Creates a new `Timeline` instance with the specified request times. - /// - /// - parameter requestStartTime: The time the request was initialized. Defaults to `0.0`. - /// - parameter initialResponseTime: The time the first bytes were received from or sent to the server. - /// Defaults to `0.0`. - /// - parameter requestCompletedTime: The time when the request was completed. Defaults to `0.0`. - /// - parameter serializationCompletedTime: The time when the response serialization was completed. Defaults - /// to `0.0`. - /// - /// - returns: The new `Timeline` instance. - public init( - requestStartTime: CFAbsoluteTime = 0.0, - initialResponseTime: CFAbsoluteTime = 0.0, - requestCompletedTime: CFAbsoluteTime = 0.0, - serializationCompletedTime: CFAbsoluteTime = 0.0) - { - self.requestStartTime = requestStartTime - self.initialResponseTime = initialResponseTime - self.requestCompletedTime = requestCompletedTime - self.serializationCompletedTime = serializationCompletedTime - - self.latency = initialResponseTime - requestStartTime - self.requestDuration = requestCompletedTime - requestStartTime - self.serializationDuration = serializationCompletedTime - requestCompletedTime - self.totalDuration = serializationCompletedTime - requestStartTime - } -} - -// MARK: - CustomStringConvertible - -extension Timeline: CustomStringConvertible { - /// The textual representation used when written to an output stream, which includes the latency, the request - /// duration and the total duration. - public var description: String { - let latency = String(format: "%.3f", self.latency) - let requestDuration = String(format: "%.3f", self.requestDuration) - let serializationDuration = String(format: "%.3f", self.serializationDuration) - let totalDuration = String(format: "%.3f", self.totalDuration) - - // NOTE: Had to move to string concatenation due to memory leak filed as rdar://26761490. Once memory leak is - // fixed, we should move back to string interpolation by reverting commit 7d4a43b1. - let timings = [ - "\"Latency\": " + latency + " secs", - "\"Request Duration\": " + requestDuration + " secs", - "\"Serialization Duration\": " + serializationDuration + " secs", - "\"Total Duration\": " + totalDuration + " secs" - ] - - return "Timeline: { " + timings.joined(separator: ", ") + " }" - } -} - -// MARK: - CustomDebugStringConvertible - -extension Timeline: CustomDebugStringConvertible { - /// The textual representation used when written to an output stream, which includes the request start time, the - /// initial response time, the request completed time, the serialization completed time, the latency, the request - /// duration and the total duration. - public var debugDescription: String { - let requestStartTime = String(format: "%.3f", self.requestStartTime) - let initialResponseTime = String(format: "%.3f", self.initialResponseTime) - let requestCompletedTime = String(format: "%.3f", self.requestCompletedTime) - let serializationCompletedTime = String(format: "%.3f", self.serializationCompletedTime) - let latency = String(format: "%.3f", self.latency) - let requestDuration = String(format: "%.3f", self.requestDuration) - let serializationDuration = String(format: "%.3f", self.serializationDuration) - let totalDuration = String(format: "%.3f", self.totalDuration) - - // NOTE: Had to move to string concatenation due to memory leak filed as rdar://26761490. Once memory leak is - // fixed, we should move back to string interpolation by reverting commit 7d4a43b1. - let timings = [ - "\"Request Start Time\": " + requestStartTime, - "\"Initial Response Time\": " + initialResponseTime, - "\"Request Completed Time\": " + requestCompletedTime, - "\"Serialization Completed Time\": " + serializationCompletedTime, - "\"Latency\": " + latency + " secs", - "\"Request Duration\": " + requestDuration + " secs", - "\"Serialization Duration\": " + serializationDuration + " secs", - "\"Total Duration\": " + totalDuration + " secs" - ] - - return "Timeline: { " + timings.joined(separator: ", ") + " }" - } -} diff --git a/Pods/Alamofire/Source/Validation.swift b/Pods/Alamofire/Source/Validation.swift deleted file mode 100644 index 59e0bbb..0000000 --- a/Pods/Alamofire/Source/Validation.swift +++ /dev/null @@ -1,321 +0,0 @@ -// -// Validation.swift -// -// Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// - -import Foundation - -extension Request { - - // MARK: Helper Types - - fileprivate typealias ErrorReason = AFError.ResponseValidationFailureReason - - /// Used to represent whether validation was successful or encountered an error resulting in a failure. - /// - /// - success: The validation was successful. - /// - failure: The validation failed encountering the provided error. - public enum ValidationResult { - case success - case failure(Error) - } - - fileprivate struct MIMEType { - let type: String - let subtype: String - - var isWildcard: Bool { return type == "*" && subtype == "*" } - - init?(_ string: String) { - let components: [String] = { - let stripped = string.trimmingCharacters(in: .whitespacesAndNewlines) - - #if swift(>=3.2) - let split = stripped[..<(stripped.range(of: ";")?.lowerBound ?? stripped.endIndex)] - #else - let split = stripped.substring(to: stripped.range(of: ";")?.lowerBound ?? stripped.endIndex) - #endif - - return split.components(separatedBy: "/") - }() - - if let type = components.first, let subtype = components.last { - self.type = type - self.subtype = subtype - } else { - return nil - } - } - - func matches(_ mime: MIMEType) -> Bool { - switch (type, subtype) { - case (mime.type, mime.subtype), (mime.type, "*"), ("*", mime.subtype), ("*", "*"): - return true - default: - return false - } - } - } - - // MARK: Properties - - fileprivate var acceptableStatusCodes: [Int] { return Array(200..<300) } - - fileprivate var acceptableContentTypes: [String] { - if let accept = request?.value(forHTTPHeaderField: "Accept") { - return accept.components(separatedBy: ",") - } - - return ["*/*"] - } - - // MARK: Status Code - - fileprivate func validate( - statusCode acceptableStatusCodes: S, - response: HTTPURLResponse) - -> ValidationResult - where S.Iterator.Element == Int - { - if acceptableStatusCodes.contains(response.statusCode) { - return .success - } else { - let reason: ErrorReason = .unacceptableStatusCode(code: response.statusCode) - return .failure(AFError.responseValidationFailed(reason: reason)) - } - } - - // MARK: Content Type - - fileprivate func validate( - contentType acceptableContentTypes: S, - response: HTTPURLResponse, - data: Data?) - -> ValidationResult - where S.Iterator.Element == String - { - guard let data = data, data.count > 0 else { return .success } - - guard - let responseContentType = response.mimeType, - let responseMIMEType = MIMEType(responseContentType) - else { - for contentType in acceptableContentTypes { - if let mimeType = MIMEType(contentType), mimeType.isWildcard { - return .success - } - } - - let error: AFError = { - let reason: ErrorReason = .missingContentType(acceptableContentTypes: Array(acceptableContentTypes)) - return AFError.responseValidationFailed(reason: reason) - }() - - return .failure(error) - } - - for contentType in acceptableContentTypes { - if let acceptableMIMEType = MIMEType(contentType), acceptableMIMEType.matches(responseMIMEType) { - return .success - } - } - - let error: AFError = { - let reason: ErrorReason = .unacceptableContentType( - acceptableContentTypes: Array(acceptableContentTypes), - responseContentType: responseContentType - ) - - return AFError.responseValidationFailed(reason: reason) - }() - - return .failure(error) - } -} - -// MARK: - - -extension DataRequest { - /// A closure used to validate a request that takes a URL request, a URL response and data, and returns whether the - /// request was valid. - public typealias Validation = (URLRequest?, HTTPURLResponse, Data?) -> ValidationResult - - /// Validates the request, using the specified closure. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter validation: A closure to validate the request. - /// - /// - returns: The request. - @discardableResult - public func validate(_ validation: @escaping Validation) -> Self { - let validationExecution: () -> Void = { [unowned self] in - if - let response = self.response, - self.delegate.error == nil, - case let .failure(error) = validation(self.request, response, self.delegate.data) - { - self.delegate.error = error - } - } - - validations.append(validationExecution) - - return self - } - - /// Validates that the response has a status code in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter range: The range of acceptable status codes. - /// - /// - returns: The request. - @discardableResult - public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { - return validate { [unowned self] _, response, _ in - return self.validate(statusCode: acceptableStatusCodes, response: response) - } - } - - /// Validates that the response has a content type in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. - /// - /// - returns: The request. - @discardableResult - public func validate(contentType acceptableContentTypes: S) -> Self where S.Iterator.Element == String { - return validate { [unowned self] _, response, data in - return self.validate(contentType: acceptableContentTypes, response: response, data: data) - } - } - - /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content - /// type matches any specified in the Accept HTTP header field. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - returns: The request. - @discardableResult - public func validate() -> Self { - let contentTypes = { [unowned self] in - self.acceptableContentTypes - } - return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) - } -} - -// MARK: - - -extension DownloadRequest { - /// A closure used to validate a request that takes a URL request, a URL response, a temporary URL and a - /// destination URL, and returns whether the request was valid. - public typealias Validation = ( - _ request: URLRequest?, - _ response: HTTPURLResponse, - _ temporaryURL: URL?, - _ destinationURL: URL?) - -> ValidationResult - - /// Validates the request, using the specified closure. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter validation: A closure to validate the request. - /// - /// - returns: The request. - @discardableResult - public func validate(_ validation: @escaping Validation) -> Self { - let validationExecution: () -> Void = { [unowned self] in - let request = self.request - let temporaryURL = self.downloadDelegate.temporaryURL - let destinationURL = self.downloadDelegate.destinationURL - - if - let response = self.response, - self.delegate.error == nil, - case let .failure(error) = validation(request, response, temporaryURL, destinationURL) - { - self.delegate.error = error - } - } - - validations.append(validationExecution) - - return self - } - - /// Validates that the response has a status code in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter range: The range of acceptable status codes. - /// - /// - returns: The request. - @discardableResult - public func validate(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int { - return validate { [unowned self] _, response, _, _ in - return self.validate(statusCode: acceptableStatusCodes, response: response) - } - } - - /// Validates that the response has a content type in the specified sequence. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - parameter contentType: The acceptable content types, which may specify wildcard types and/or subtypes. - /// - /// - returns: The request. - @discardableResult - public func validate(contentType acceptableContentTypes: S) -> Self where S.Iterator.Element == String { - return validate { [unowned self] _, response, _, _ in - let fileURL = self.downloadDelegate.fileURL - - guard let validFileURL = fileURL else { - return .failure(AFError.responseValidationFailed(reason: .dataFileNil)) - } - - do { - let data = try Data(contentsOf: validFileURL) - return self.validate(contentType: acceptableContentTypes, response: response, data: data) - } catch { - return .failure(AFError.responseValidationFailed(reason: .dataFileReadFailed(at: validFileURL))) - } - } - } - - /// Validates that the response has a status code in the default acceptable range of 200...299, and that the content - /// type matches any specified in the Accept HTTP header field. - /// - /// If validation fails, subsequent calls to response handlers will have an associated error. - /// - /// - returns: The request. - @discardableResult - public func validate() -> Self { - let contentTypes = { [unowned self] in - self.acceptableContentTypes - } - return validate(statusCode: acceptableStatusCodes).validate(contentType: contentTypes()) - } -} diff --git a/Pods/CwlUtils/LICENSE.txt b/Pods/CwlUtils/LICENSE.txt deleted file mode 100644 index b3f1584..0000000 --- a/Pods/CwlUtils/LICENSE.txt +++ /dev/null @@ -1,85 +0,0 @@ -ISC License - -Copyright © 2017 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Testing targets (not the release build of CwlUtils) include code under the following two licenses: - -/* - A C-program for MT19937-64 (2004/9/29 version). - Coded by Takuji Nishimura and Makoto Matsumoto. - - This is a 64-bit version of Mersenne Twister pseudorandom number - generator. - - Before using, initialize the state by using init_genrand64(seed) - or init_by_array64(init_key, key_length). - - Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - References: - T. Nishimura, ``Tables of 64-bit Mersenne Twisters'' - ACM Transactions on Modeling and - Computer Simulation 10. (2000) 348--357. - M. Matsumoto and T. Nishimura, - ``Mersenne Twister: a 623-dimensionally equidistributed - uniform pseudorandom number generator'' - ACM Transactions on Modeling and - Computer Simulation 8. (Jan. 1998) 3--30. - - Any feedback is very welcome. - http://www.math.hiroshima-u.ac.jp/~m-mat/MT/emt.html - email: m-mat @ math.sci.hiro - - - -/* Written in 2016 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See . */ -shima-u.ac.jp (remove spaces) -*/ diff --git a/Pods/CwlUtils/README.md b/Pods/CwlUtils/README.md deleted file mode 100644 index 7f80ff7..0000000 --- a/Pods/CwlUtils/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# CwlUtils - -A collection of utilities written as part of articles on [Cocoa with Love](https://www.cocoawithlove.com) - -## Included functionality - -The following features are included in the library. - -* [CwlStackFrame.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlStackFrame.swift) from [Better stack traces in Swift](https://cocoawithlove.com/blog/2016/02/28/stack-traces-in-swift.html) -* [CwlSysctl.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlSysctl.swift) from [Gathering system information in Swift with sysctl](https://www.cocoawithlove.com/blog/2016/03/08/swift-wrapper-for-sysctl.html) -* [CwlUnanticipatedError.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlUnanticipatedError.swift) from [Presenting unanticipated errors to users](https://www.cocoawithlove.com/blog/2016/04/14/error-recovery-attempter.html) -* [CwlScalarScanner.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlScalarScanner.swift) from [Swift name demangling: C++ vs Swift for parsing](https://www.cocoawithlove.com/blog/2016/05/01/swift-name-demangling.html) -* [CwlRandom.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlRandom.swift) from [Random number generators in Swift](https://www.cocoawithlove.com/blog/2016/05/19/random-numbers.html) -* [CwlMutex.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlMutex.swift) from [Mutexes and closure capture in Swift](https://www.cocoawithlove.com/blog/2016/06/02/threads-and-mutexes.html) -* [CwlDispatch.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlDispatch.swift) from [Design patterns for safe timer usage](https://www.cocoawithlove.com/blog/2016/07/30/timer-problems.html) -* [CwlResult.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlResult.swift) from [Values and errors, part 1: 'Result' in Swift](https://www.cocoawithlove.com/blog/2016/08/21/result-types-part-one.html) -* [CwlDeque.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlDeque.swift) from [Optimizing a copy-on-write double-ended queue in Swift](https://www.cocoawithlove.com/blog/2016/09/22/deque.html) -* [CwlExec.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlExec.swift) from [Specifying function execution contexts](https://www.cocoawithlove.com/blog/specifying-execution-contexts.html) -* [CwlDebugContext.swift](https://github.com/mattgallagher/CwlUtils/blob/master/Sources/CwlUtils/CwlDebugContext.swift) from [Testing actions over time](https://www.cocoawithlove.com/blog/testing-actions-over-time.html) - -## Adding to your project - -This project can be included in your projects in a number of different ways: - - * [Manually included framework](#manual-framework-inclusion) - * [Statically included files](#statically-included-files) - * [Swift Package Manager](#swift-package-manager) - * [CocoaPods](#cocoapods) - * [Carthage](#carthage) - -The standard restrictions for each of these approaches apply so you'll need to pick an approach based on your situation and preferences. - -Minimum requirements are iOS 8 or macOS 10.10. - -## Manual inclusion - -1. In a subdirectory of your project's directory, run `git clone https://github.com/mattgallagher/CwlUtils.git` -2. Drag the "CwlUtils.xcodeproj" file from the Finder to somewhere your in own project's file tree in Xcode -3. Drag the "CwlUtils.framework" from the "Products" folder of the "CwlUtils" project to the "Copy Files (Frameworks)" build phases of any target that you want to include this module. - -## Statically included files - -This approach generates a concatenated files named CwlUtils.swift that can simply be added to another project (no dynamic frameworks, libraries or other settings required). - -> This approach will omit the CwlStackFrame.swift, CwlAddressInfo.swift, CwlUnanticipatedError.swift and CwlFrameAddress.c files (since they cannot be included via a single-file approach). If you need these files, please use one of the other inclusion strategies. - -1. Get the latest version of CwlUtils by running `git clone https://github.com/mattgallagher/CwlUtils.git` on the command-line. -2. Open the CwlUtils.xcodeproj in Xcode and select the CwlCwlUtilsConcat scheme with a destination of "My Mac" (choose from the Scheme popup in the toolbar or from the "Product" → "Scheme" and "Product" → "Destination" menus in the menubar. -3. Build the scheme (Command-B or "Product" → "Build") -4. Open the "Products" folder by right-clicking (or Control-click) on the "Products" folder in the project's file tree in Xcode and select "Show in Finder" and open the "Debug" folder in the "Products" folder that this reveals. - -Inside a folder located "Concat_internal" should the file "CwlUtils_internal.swift". You can copy this file and include it in any of your own projects, like any other file. - -A folder named "Concat_public" should also be present. This version is almost identical to the "Concat_internal" version except that where the "Concat_internal" version strips `public` and `open` specifiers, the "Concat_public" version leaves these in-place. This allows the "Concat_public" version to be use in the "Sources" folder of Swift playgrounds or otherwise used where the features need to be exported from a module. - -## Swift Package Manager - -Add the following to the `dependencies` array in your "Package.swift" file: - - .Package(url: "https://github.com/mattgallagher/CwlUtils.git", majorVersion: 1), - -Or, if you're using the `swift-tools-version:4.0` package manager, add the following to the `dependencies` array in your "Package.swift" file: - - .package(url: "https://github.com/mattgallagher/CwlUtils.git", majorVersion: 1) - -> NOTE: even though this git repository includes its dependencies in the Dependencies folder, building via the Swift Package manager fetches and builds these dependencies independently. - -## CocoaPods - -Add the following to your target in your "Podfile": - - pod 'CwlUtils', :git => 'https://github.com/mattgallagher/CwlUtils.git' - -## Carthage - -Add the following line to your Cartfile: - - git "https://github.com/mattgallagher/CwlUtils.git" "master" diff --git a/Pods/CwlUtils/Sources/CwlFrameAddress/CwlFrameAddress.c b/Pods/CwlUtils/Sources/CwlFrameAddress/CwlFrameAddress.c deleted file mode 100644 index 42c7d55..0000000 --- a/Pods/CwlUtils/Sources/CwlFrameAddress/CwlFrameAddress.c +++ /dev/null @@ -1,26 +0,0 @@ -// -// CwlFrameAddress.c -// CwlUtils -// -// Created by Matt Gallagher on 2016/02/26. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -#include "CwlFrameAddress.h" - -uintptr_t frame_address() -{ - return (uintptr_t)__builtin_frame_address(1); -} diff --git a/Pods/CwlUtils/Sources/CwlFrameAddress/include/CwlFrameAddress.h b/Pods/CwlUtils/Sources/CwlFrameAddress/include/CwlFrameAddress.h deleted file mode 100644 index 04b55a0..0000000 --- a/Pods/CwlUtils/Sources/CwlFrameAddress/include/CwlFrameAddress.h +++ /dev/null @@ -1,28 +0,0 @@ -// -// CwlFrameAddress.h -// CwlUtils -// -// Created by Matt Gallagher on 2016/02/26. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -#include - -#ifndef CwlFrameAddress_h -#define CwlFrameAddress_h - -uintptr_t frame_address(void); - -#endif /* CwlFrameAddress_h */ diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlAddressInfo.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlAddressInfo.swift deleted file mode 100644 index 62aee72..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlAddressInfo.swift +++ /dev/null @@ -1,90 +0,0 @@ -// -// CwlAddressInfo.swift -// CwlUtils -// -// Created by Matt Gallagher on 2016/02/26. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// A wrapper around dl_info, used for symbolicating instruction addresses. -public struct AddressInfo { - private let info: dl_info - - /// Address for which this struct was constructed - public let address: UInt - - /// Construct for an address - public init(address: UInt) { - self.address = address - - var i = dl_info() - dladdr(UnsafeRawPointer(bitPattern: address), &i) - self.info = i - } - - /// -returns: the "image" (shared object pathname) for the instruction - public var image: String { - if let dli_fname = info.dli_fname, let fname = String(validatingUTF8: dli_fname), let _ = fname.range(of: "/", options: .backwards, range: nil, locale: nil) { - return (fname as NSString).lastPathComponent - } else { - return "???" - } - } - - /// - returns: the symbol nearest the address - public var symbol: String { - if let dli_sname = info.dli_sname, let sname = String(validatingUTF8: dli_sname) { - return sname - } else if let dli_fname = info.dli_fname, let _ = String(validatingUTF8: dli_fname) { - return self.image - } else { - return String(format: "0x%1x", UInt(bitPattern: info.dli_saddr)) - } - } - - /// - returns: the address' offset relative to the nearest symbol - public var offset: Int { - if let dli_sname = info.dli_sname, let _ = String(validatingUTF8: dli_sname) { - return Int(address - UInt(bitPattern: info.dli_saddr)) - } else if let dli_fname = info.dli_fname, let _ = String(validatingUTF8: dli_fname) { - return Int(address - UInt(bitPattern: info.dli_fbase)) - } else { - return Int(address - UInt(bitPattern: info.dli_saddr)) - } - } - - /// - parameter index: the stack frame index - /// - returns: a formatted string matching that used by NSThread.callStackSymbols - public func formattedDescription(index: Int) -> String { - return self.image.utf8CString.withUnsafeBufferPointer { (imageBuffer: UnsafeBufferPointer) -> String in - #if arch(x86_64) || arch(arm64) - return String(format: "%-4ld%-35s 0x%016llx %@ + %ld", index, UInt(bitPattern: imageBuffer.baseAddress), self.address, self.symbol, self.offset) - #else - return String(format: "%-4d%-35s 0x%08lx %@ + %d", index, UInt(bitPattern: imageBuffer.baseAddress), self.address, self.symbol, self.offset) - #endif - } - } -} - -/// When applied to the output of callStackReturnAddresses, produces identical output to the execinfo function "backtrace_symbols" or NSThread.callStackSymbols -/// - parameter addresses: an array of memory addresses, generally as produced by `callStackReturnAddresses` -/// - returns: an array of formatted, symbolicated stack frame descriptions. -public func symbolsForCallStack(addresses: [UInt]) -> [String] { - return Array(addresses.enumerated().map { tuple -> String in - return AddressInfo(address: tuple.element).formattedDescription(index: tuple.offset) - }) -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlCaseNameCodable.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlCaseNameCodable.swift deleted file mode 100644 index bfc6198..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlCaseNameCodable.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// CwlCaseNameCodable.swift -// CwlUtils -// -// Created by Matt Gallagher on 9/3/19. -// Copyright © 2019 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// - -import Foundation - -private struct EmptyKeyedDecodingContainer: KeyedDecodingContainerProtocol { - typealias Key = K - - var codingPath: [CodingKey] { return [] } - var allKeys: [K] { return [] } - - func contains(_ key: K) -> Bool { - return false - } - - private func keyNotFoundError(_ key: K) -> Error { - return DecodingError.keyNotFound(key, DecodingError.Context.init(codingPath: [], debugDescription: "EmptyKeyedDecodingContainer contains no values")) - } - - func decodeNil(forKey key: K) throws -> Bool { throw keyNotFoundError(key) } - func decode(_ type: Bool.Type, forKey key: K) throws -> Bool { throw keyNotFoundError(key) } - func decode(_ type: String.Type, forKey key: K) throws -> String { throw keyNotFoundError(key) } - func decode(_ type: Double.Type, forKey key: K) throws -> Double { throw keyNotFoundError(key) } - func decode(_ type: Float.Type, forKey key: K) throws -> Float { throw keyNotFoundError(key) } - func decode(_ type: Int.Type, forKey key: K) throws -> Int { throw keyNotFoundError(key) } - func decode(_ type: Int8.Type, forKey key: K) throws -> Int8 { throw keyNotFoundError(key) } - func decode(_ type: Int16.Type, forKey key: K) throws -> Int16 { throw keyNotFoundError(key) } - func decode(_ type: Int32.Type, forKey key: K) throws -> Int32 { throw keyNotFoundError(key) } - func decode(_ type: Int64.Type, forKey key: K) throws -> Int64 { throw keyNotFoundError(key) } - func decode(_ type: UInt.Type, forKey key: K) throws -> UInt { throw keyNotFoundError(key) } - func decode(_ type: UInt8.Type, forKey key: K) throws -> UInt8 { throw keyNotFoundError(key) } - func decode(_ type: UInt16.Type, forKey key: K) throws -> UInt16 { throw keyNotFoundError(key) } - func decode(_ type: UInt32.Type, forKey key: K) throws -> UInt32 { throw keyNotFoundError(key) } - func decode(_ type: UInt64.Type, forKey key: K) throws -> UInt64 { throw keyNotFoundError(key) } - func decode(_ type: T.Type, forKey key: K) throws -> T where T : Decodable { throw keyNotFoundError(key) } - func nestedContainer(keyedBy type: NestedKey.Type, forKey key: K) throws -> KeyedDecodingContainer where NestedKey : CodingKey { throw keyNotFoundError(key) } - func nestedUnkeyedContainer(forKey key: K) throws -> UnkeyedDecodingContainer { throw keyNotFoundError(key) } - func superDecoder() throws -> Decoder { fatalError() } - func superDecoder(forKey key: K) throws -> Decoder { throw keyNotFoundError(key) } -} - -public extension KeyedDecodingContainer { - static func empty() -> KeyedDecodingContainer { - return KeyedDecodingContainer(EmptyKeyedDecodingContainer()) - } -} - -/// A protocol that enums with associated values can adopt to help in implementing Codable conformance. -/// The downside is that there are some runtime enforced requirements: -/// 1. the `CaseName` associated type must be raw constructible from each of the case names in `CaseNameCodable` -/// 2. the `decode(from:)` method must validly construct each `CaseNameCodable` -/// NOTE: the encoded value will be `nil` if the associated value has no contents or there is no associated value. In these cases, you shouldn't attempt to read the value. -public protocol CaseNameCodable: Codable { - associatedtype CaseName: CaseNameDecoder where CaseName.AssociatedEnum == Self -} - -public protocol CaseNameDecoder: Codable, CodingKey, RawRepresentable where RawValue == String { - associatedtype AssociatedEnum - func decode(from container: KeyedDecodingContainer) throws -> AssociatedEnum -} - -public extension CaseNameCodable { - private func caseName(from mirror: Mirror) -> CaseName { - let label = mirror.children.first?.label ?? String(describing: self) - guard let key = CaseName(rawValue: label) else { - fatalError("Unable to find a CaseName for \(self) matching \(label)") - } - return key - } - - var caseName: CaseName { - return caseName(from: Mirror(reflecting: self)) - } - - func encode(to encoder: Encoder) throws { - let mirror = Mirror(reflecting: self) - let key = caseName(from: mirror) - var container = encoder.container(keyedBy: CaseName.self) - if let value = mirror.children.first?.value as? Encodable { - try container.encode(EncodableWrapper(value: value), forKey: key) - } else { - try container.encodeNil(forKey: key) - } - } - - init(from decoder: Decoder) throws { - let container = try decoder.container(keyedBy: CaseName.self) - guard let key = container.allKeys.first else { - throw DecodingError.dataCorrupted(DecodingError.Context.init(codingPath: decoder.codingPath, debugDescription: "Missing enum key")) - } - self = try key.decode(from: container) - } -} - -private struct EncodableWrapper: Encodable { - let value: Encodable - - func encode(to encoder: Encoder) throws { - try value.encode(to: encoder) - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlCollection.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlCollection.swift deleted file mode 100644 index 718feed..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlCollection.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// CwlCollection.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -extension Optional { - /// Reurns true if the current optional is nil. Useful for testing for nil at a specific point during chained unwrapping of nested optionals. - public var isNil: Bool { - return self == nil - } -} - -extension Collection { - /// Returns the element at the specified index iff it is within bounds, otherwise nil. - public func at(_ i: Index) -> Iterator.Element? { - return (i >= startIndex && i < endIndex) ? self[i] : nil - } -} - -extension Collection { - /// Constrains the range to the indices of self and returns a SubSequence. - public func at(_ range: Range) -> SubSequence { - let start = (range.lowerBound >= startIndex) ? (range.lowerBound < endIndex ? range.lowerBound : endIndex) : startIndex - let end = (range.upperBound < endIndex) ? (range.upperBound > startIndex ? range.upperBound : startIndex) : endIndex - return self[start..) -> SubSequence { - let start = (range.lowerBound >= startIndex) ? (range.lowerBound < endIndex ? range.lowerBound : endIndex) : startIndex - let end = (range.upperBound < endIndex) ? (range.upperBound > startIndex ? range.upperBound : startIndex) : endIndex - return self[start.. Self { - var result = self - result.append(newElement) - return result - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlCustomExecutionContext.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlCustomExecutionContext.swift deleted file mode 100644 index ae25c8c..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlCustomExecutionContext.swift +++ /dev/null @@ -1,150 +0,0 @@ -// -// CwlExecutionContext.swift -// CwlUtils -// -// Created by Matt Gallagher on 19/1/19. -// Copyright © 2019 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// An abstraction of common execution context concepts -public protocol CustomExecutionContext { - /// A description about how functions will be invoked on an execution context. - var type: ExecutionType { get } - - /// Run `execute` normally on the execution context - func invoke(_ execute: @escaping () -> Void) - - /// Run `execute` asynchronously on the execution context - /// NOTE: a default implementation of this is provided that, if `type.isImmediate` is false, directly calls `invoke`, otherwise it runs an asynchronous block on the global dispatch queue and calls `invoke` from there. - func invokeAsync(_ execute: @escaping () -> Void) - - /// Run `execute` on the execution context but don't return from this function until the provided function is complete. - /// NOTE: a default implementation of this is provided that, if `type.isImmediate` is true, simply calls `invoke`, otherwise it calls `invoke` and blocks waiting on a semaphore in the calling context until `invoke` completes. Creating a semphore for every call is inefficient so you should implement this a different way, if possible. - func invokeSync(_ execute: () throws -> Return) rethrows -> Return - - /// A context that can be used to safely escape the current context. - /// NOTE: a default implementation of this function is provided that calls `DispatchQueue.global().async`. - /// - Parameter qos: The desired DispatchQoS.QoSClass for the new context. If `nil`, then inherit from `self` where possible - func relativeAsync(qos: DispatchQoS.QoSClass?) -> Exec - - /// Run `execute` on the execution context after `interval` (plus `leeway`) unless the returned `Lifetime` is cancelled or released before running occurs. - /// NOTE: a default implementation of this function is provided that runs the timer on the global dispatch queue and calls `invoke` when it fires. This implementation is likely sufficient for most cases but may not be appropriate if your context has strict timing or serialization requirements. - func singleTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, unless the returned `Lifetime` is cancelled or released before running occurs. - /// NOTE: a default implementation of this function is provided that runs the timer on the global dispatch queue and calls `invoke` when it fires. This implementation is likely sufficient for most cases but may not be appropriate if your context has strict timing or serialization requirements. - func singleTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime - - /// Run `execute` on the execution context after `interval` (plus `leeway`), and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - /// NOTE: a default implementation of this function is provided that runs the timer on the global dispatch queue and calls `invoke` when it fires. This implementation is likely sufficient for most cases but may not be appropriate if your context has strict timing or serialization requirements. - func periodicTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - /// NOTE: a default implementation of this function is provided that runs the timer on the global dispatch queue and calls `invoke` when it fires. This implementation is likely sufficient for most cases but may not be appropriate if your context has strict timing or serialization requirements. - func periodicTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime - - /// Gets a timestamp representing the host uptime the in the current context - /// NOTE: a default implementation of this function is provided that calls `DispatchTime.now()`. With the exception of debug, test and other host-isolated contexts, this is usually sufficient. - func timestamp() -> DispatchTime -} - -/// Many of the ExecutionContext functions returns a `Lifetime` and in most cases, that lifetime is just a dispatch timer. Annoyingly, a `DispatchSourceTimer` is an existential, so we can't extend it to conform to `Lifetime` (a limitation of Swift 4). -/// In these cases, you can force cast to DispatchSource and use this extension. -extension DispatchSource: Lifetime { -} - -// Since it's not possible to have default parameters in protocols (yet) the "leeway" free functions are all default-implemented to call the "leeway" functions with a 0 second leeway. -public extension CustomExecutionContext { - func singleTimer(interval: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - return singleTimer(interval: interval, leeway: .seconds(0), handler: handler) - } - func singleTimer(parameter: T, interval: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - return singleTimer(parameter: parameter, interval: interval, leeway: .seconds(0), handler: handler) - } - func periodicTimer(interval: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - return periodicTimer(interval: interval, leeway: .seconds(0), handler: handler) - } - func periodicTimer(parameter: T, interval: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - return periodicTimer(parameter: parameter, interval: interval, leeway: .seconds(0), handler: handler) - } -} - -public extension CustomExecutionContext { - var isImmediateInCurrentContext: Bool { return type.isImmediateInCurrentContext } - var isAsyncInCurrentContext: Bool { return type.isAsyncInCurrentContext } - var isImmediateAlways: Bool { return type.isImmediateAlways } - var isPotentiallyAsync: Bool { return type.isPotentiallyAsync } - var isReentrant: Bool { return type.isReentrant } - var isNonReentrant: Bool { return type.isNonReentrant } - var isConcurrent: Bool { return type.isConcurrent } - var isSerial: Bool { return type.isSerial } - - - func timestamp() -> DispatchTime { - return DispatchTime.now() - } - - func invokeAsync(_ execute: @escaping () -> Void) { - if type.isImmediateInCurrentContext == false { - invoke(execute) - } else { - DispatchQueue.global().async { self.invoke(execute) } - } - } - - func invokeSync(_ execute: () -> Return) -> Return { - return withoutActuallyEscaping(execute) { ex in - var r: Return? = nil - if type.isImmediateInCurrentContext == true { - invoke { - r = ex() - } - } else { - let s = DispatchSemaphore(value: 0) - self.invoke { - r = ex() - s.signal() - } - s.wait() - } - return r! - } - } - - func relativeAsync(qos: DispatchQoS.QoSClass?) -> Exec { - return Exec.global(qos: qos ?? .default) - } - - func singleTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - return DispatchSource.singleTimer(interval: interval, leeway: leeway, queue: DispatchQueue.global(), handler: { self.invoke(handler) }) as! DispatchSource - } - - func singleTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - return DispatchSource.singleTimer(parameter: parameter, interval: interval, leeway: leeway, queue: DispatchQueue.global(), handler: { p in self.invoke{ handler(p) } }) as! DispatchSource - } - - func periodicTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - return DispatchSource.repeatingTimer(interval: interval, leeway: leeway, queue: DispatchQueue.global(), handler: { self.invoke(handler) }) as! DispatchSource - } - - func periodicTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - return DispatchSource.repeatingTimer(parameter: parameter, interval: interval, leeway: leeway, queue: DispatchQueue.global(), handler: { p in self.invoke{ handler(p) } }) as! DispatchSource - } -} - -@available(*, deprecated, message: "Use Exec for variables or CustomExecutionContext for conformances used in the `custom` case of Exec") -public typealias ExecutionContext = CustomExecutionContext diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlDebugContext.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlDebugContext.swift deleted file mode 100644 index 5b88e2b..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlDebugContext.swift +++ /dev/null @@ -1,429 +0,0 @@ -// -// CwlDebugContext.swift -// CwlUtils -// -// Created by Matt Gallagher on 2016/05/15. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// A set of identifiers for the different queues in the DebugContextCoordinator -/// -/// - unspecified: used when a initial DebugContextThread is not specified on startup (not used otherwise) -/// - main: used by `main` and `mainAsync` contexts -/// - `global`: used for a concurrent queues and for timers on direct -/// - custom: any custom queue -public enum DebugContextThread: Hashable { - case unspecified - case main - case global - case custom(String) - - /// Convenience test to determine if an `Exec` instance wraps a `DebugContext` identifying `self` as its `thread`. - public func matches(_ exec: Exec) -> Bool { - if case .custom(let debugContext as DebugContext) = exec, debugContext.thread == self { - return true - } else { - return false - } - } -} - -/// Basic equality tests for `DebugContextThread` -/// -/// - Parameters: -/// - left: a `DebugContextThread` -/// - right: another `DebugContextThread` -/// - Returns: true if they are equal value -public func ==(left: DebugContextThread, right: DebugContextThread) -> Bool { - switch (left, right) { - case (.custom(let l), .custom(let r)) where l == r: return true - case (.unspecified, .unspecified): return true - case (.main, .main): return true - case (.global, .global): return true - default: return false - } -} - -/// Simulates running a series of blocks across threads over time by instead queuing the blocks and running them serially in time priority order, incrementing the `currentTime` to reflect the time priority of the last run block. -/// The result is a deterministic simulation of time scheduled blocks, which is otherwise subject to thread scheduling non-determinism. -public class DebugContextCoordinator { - // We use DispatchTime for time calculations but time 0 is treated as a special value ("now") so we start at time = 1, internally, and subtract 1 when returning through the public `currentTime` accessor. - var internalTime: UInt64 = 1 - var queues: Dictionary = [:] - var stopRequested: Bool = false - - /// Returns the current simulated time in nanoseconds - public var currentTime: UInt64 { return internalTime - 1 } - - /// Returns the last runs simulated thread - fileprivate (set) public var currentThread: DebugContextThread - - /// Constructs an empty instance - public init() { - currentThread = .unspecified - } - - /// Constructs an empty instance - public init(initialThread: DebugContextThread) { - self.currentThread = initialThread - } - - /// Implementation mimicking Exec.direct but returning an Exec.custom(DebugContext) - public var direct: Exec { - return .custom(DebugContext(type: .immediate, thread: .global, coordinator: self)) - } - - /// Implementation mimicking Exec.main but returning an Exec.custom(DebugContext) - public var main: Exec { - return .custom(DebugContext(type: .thread { [weak self] in self?.currentThread == .main }, thread: .main, coordinator: self)) - } - - /// Implementation mimicking Exec.mainAsync but returning an Exec.custom(DebugContext) - public var mainAsync: Exec { - return .custom(DebugContext(type: .threadAsync { [weak self] in self?.currentThread == .main }, thread: .main, coordinator: self)) - } - - /// Implementation mimicking Exec.default but returning an Exec.custom(DebugContext) - public var global: Exec { - return .custom(DebugContext(type: .concurrentAsync, thread: .global, coordinator: self)) - } - - /// Implementation mimicking Exec.syncQueue but returning an Exec.custom(DebugContext) - public func syncQueue() -> Exec { - let uuidString = CFUUIDCreateString(nil, CFUUIDCreate(nil)) as String? ?? "" - return .custom(DebugContext(type: .mutex, thread: .custom(uuidString), coordinator: self)) - } - - /// Implementation mimicking Exec.asyncQueue but returning an Exec.custom(DebugContext) - public func asyncQueue() -> Exec { - let uuidString = CFUUIDCreateString(nil, CFUUIDCreate(nil)) as String? ?? "" - return .custom(DebugContext(type: .serialAsync, thread: .custom(uuidString), coordinator: self)) - } - - /// Performs all scheduled actions in a serial loop. - /// - /// - parameter stoppingAfter: If nil, loop will continue until `stop` invoked or until no actions remain. If non-nil, loop will abort after an action matching Lifetime is completed. - public func runScheduledTasks(stoppingAfter: (AnyObject & Lifetime)? = nil) { - stopRequested = false - currentThread = .unspecified - while !stopRequested, let nextTimer = runNextTask() { - if stoppingAfter != nil, stoppingAfter === nextTimer { - break - } - } - if stopRequested { - // Since releasing `queues` will likely cause the release of closures and items held by the queue, which might lead to nested calls to remove items from `queues` violating ownership rules... - // We copy queues to a non-shared stack location, clear `queues` and *then* release the contents. - withExtendedLifetime(queues) { queues = [:] } - } - } - - /// Performs all scheduled actions in a serial loop. - /// - /// - parameter stoppingAfter: If nil, loop will continue until `stop` invoked or until no actions remain. If non-nil, loop will abort after an action matching Lifetime is completed. - public func runScheduledTasks(untilTime: UInt64) { - stopRequested = false - currentThread = .unspecified - while !stopRequested, let (threadIndex, time) = nextTask(), time <= untilTime { - _ = runTask(threadIndex: threadIndex, time: time) - } - if stopRequested { - // Since releasing `queues` will likely cause the release of closures and items held by the queue, which might lead to nested calls to remove items from `queues` violating ownership rules... - // We copy queues to a non-shared stack location, clear `queues` and *then* release the contents. - withExtendedLifetime(queues) { queues = [:] } - } - } - - /// Causes `runScheduledTasks` to exit as soon as possible, if it is running. - public func stop() { - stopRequested = true - } - - /// Discards all scheduled actions and resets time to 1. Useful if the `DebugContextCoordinator` is to be reused. - public func reset() { - internalTime = 1 - - // Since releasing `queues` will likely cause the release of closures and items held by the queue, which might lead to nested calls to remove items from `queues` violating ownership rules... - // We copy queues to a non-shared stack location, clear `queues` and *then* release the contents. - withExtendedLifetime(queues) { queues = [:] } - } - - func getOrCreateQueue(forName: DebugContextThread) -> DebugContextQueue { - if let t = queues[forName] { - return t - } - let t = DebugContextQueue() - - // Since releasing `queues` will likely cause the release of closures and items held by the queue, which might lead to nested calls to remove items from `queues` violating ownership rules... - // We copy queues to a non-shared stack location, clear `queues` and *then* release the contents. - withExtendedLifetime(queues[forName]) { queues[forName] = t } - - return t - } - - // Fundamental method for scheduling a block on the coordinator for later invocation. - func schedule(block: @escaping () -> Void, thread: DebugContextThread, timeInterval interval: Int64, repeats: Bool) -> DebugContextTimer { - let i = interval > 0 ? UInt64(interval) : 0 as UInt64 - let debugContextTimer = DebugContextTimer(thread: thread, rescheduleInterval: repeats ? i : nil, coordinator: self) - getOrCreateQueue(forName: thread).schedule(pending: PendingBlock(time: internalTime + i, timer: debugContextTimer, block: block)) - return debugContextTimer - } - - // Remove a block from the scheduler - func cancelTimer(_ toCancel: DebugContextTimer) { - if let t = queues[toCancel.thread] { - t.cancelTimer(toCancel) - } - } - - func nextTask() -> (DebugContextThread, UInt64)? { - var lowestTime = UInt64.max - var selectedIndex = DebugContextThread.unspecified - - // We want a deterministic ordering, so we'll iterate over the queues by key sorted by hashValue - for index in queues.keys.sorted(by: { (left, right) -> Bool in left.hashValue < right.hashValue }) { - if let t = queues[index], t.nextTime < lowestTime { - selectedIndex = index - lowestTime = t.nextTime - } - } - if lowestTime == UInt64.max { - return nil - } - - return (selectedIndex, lowestTime) - } - - func runTask(threadIndex: DebugContextThread, time: UInt64) -> DebugContextTimer? { - (currentThread, internalTime) = (threadIndex, time) - return queues[threadIndex]?.popAndInvokeNext() - } - - // Run the next event. If nil is returned, no further events remain. If - func runNextTask() -> DebugContextTimer? { - if let (threadIndex, time) = nextTask() { - return runTask(threadIndex: threadIndex, time: time) - } - return nil - } -} - -// This structure is used to represent scheduled actions in the DebugContextCoordinator. -struct PendingBlock { - let time: UInt64 - weak var timer: DebugContextTimer? - let block: () -> Void - - init(time: UInt64, timer: DebugContextTimer?, block: @escaping () -> Void) { - self.time = time - self.timer = timer - self.block = block - } - - var nextInterval: PendingBlock? { - if let t = timer, let i = t.rescheduleInterval, t.coordinator != nil { - return PendingBlock(time: time + i, timer: t, block: block) - } - return nil - } -} - -// A `DebugContextQueue` is just an array of `PendingBlock`, sorted by scheduled time. It represents the blocks queued for execution on a thread in the `DebugContextCoordinator`. -class DebugContextQueue { - var pendingBlocks: Array = [] - - init() { - } - - // Insert a block in scheduled order - func schedule(pending: PendingBlock) { - var insertionIndex = 0 - while pendingBlocks.count > insertionIndex && pendingBlocks[insertionIndex].time <= pending.time { - insertionIndex += 1 - } - - pendingBlocks.insert(pending, at: insertionIndex) - } - - // Remove a block - func cancelTimer(_ toCancel: DebugContextTimer) { - if let index = pendingBlocks.firstIndex(where: { tuple -> Bool in tuple.timer === toCancel }) { - pendingBlocks.remove(at: index) - } - } - - // Return the earliest scheduled time in the queue - var nextTime: UInt64 { - return pendingBlocks.first?.time ?? UInt64.max - } - - // Runs the next block in the queue - func popAndInvokeNext() -> DebugContextTimer? { - if let next = pendingBlocks.first { - pendingBlocks.remove(at: 0) - next.block() - if let nextInterval = next.nextInterval { - schedule(pending: nextInterval) - } - - // We ran a block, don't return nil (next.timer may return nil if it has self-cancelled) - return next.timer ?? DebugContextTimer() - } - - return nil - } -} - -/// An implementation of `ExecutionContext` that schedules its non-immediate actions on a `DebugContextCoordinator`. This type is constructed using the `Exec` mimicking properties and functions on `DebugContextCoordinator`. -public struct DebugContext: CustomExecutionContext { - public let type: ExecutionType - public let thread: DebugContextThread - weak var coordinator: DebugContextCoordinator? - - init(type: ExecutionType, thread: DebugContextThread, coordinator: DebugContextCoordinator) { - self.type = type - self.thread = thread - self.coordinator = coordinator - } - - /// Run `execute` normally on the execution context - public func invoke(_ execute: @escaping () -> Void) { - guard let c = coordinator else { return } - if type.isImmediateInCurrentContext { - let previousThread = c.currentThread - if !type.isConcurrent { - c.currentThread = thread - } - execute() - if !type.isConcurrent { - c.currentThread = previousThread - } - } else { - invokeAsync(execute) - } - } - - /// Run `execute` asynchronously on the execution context - public func invokeAsync(_ execute: @escaping () -> Void) { - _ = coordinator?.schedule(block: execute, thread: thread, timeInterval: 1, repeats: false) - } - - @available(*, deprecated, message: "Use invokeSync instead") - public func invokeAndWait(_ execute: @escaping () -> Void) { - _ = invokeSync(execute) - } - - /// Run `execute` on the execution context but don't return from this function until the provided function is complete. - /// - /// If the debug coordinator is nil or has completed before this block is run, the block will be directly invoked instead of running in the debug context. - /// In general this shouldn't matter since the debug context is generally just a synchronous invocation. - /// - /// - Parameter execute: the block to run - /// - Returns: the return value from running the block - public func invokeSync(_ execute: () throws -> Return) rethrows -> Return { - guard let c = coordinator else { - return try execute() - } - if type.isImmediateInCurrentContext { - let previousThread = c.currentThread - if !type.isConcurrent { - c.currentThread = thread - } - let r = try execute() - if !type.isConcurrent { - c.currentThread = previousThread - } - return r - } else { - let result = try withoutActuallyEscaping(execute) { ex throws -> Return? in - var rr: Result? = nil - c.runScheduledTasks(stoppingAfter: c.schedule(block: { - rr = Result { try ex() } - }, thread: thread, timeInterval: 1, repeats: false)) - return try rr?.get() - } - guard let r = result else { return try execute() } - return r - } - } - - public func relativeAsync(qos: DispatchQoS.QoSClass?) -> Exec { - guard let c = coordinator else { - return Exec.direct - } - return c.global - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`) unless the returned `Lifetime` is cancelled or released before running occurs. - public func singleTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - guard let c = coordinator else { return DebugContextTimer() } - return c.schedule(block: handler, thread: thread, timeInterval: interval.nanoseconds, repeats: false) - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, unless the returned `Lifetime` is cancelled or released before running occurs. - public func singleTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - guard let c = coordinator else { return DebugContextTimer() } - return c.schedule(block: { handler(parameter) }, thread: thread, timeInterval: interval.nanoseconds, repeats: false) - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - public func periodicTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - guard let c = coordinator else { return DebugContextTimer() } - return c.schedule(block: handler, thread: thread, timeInterval: interval.nanoseconds, repeats: true) - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - public func periodicTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - guard let c = coordinator else { return DebugContextTimer() } - return c.schedule(block: { handler(parameter) }, thread: thread, timeInterval: interval.nanoseconds, repeats: true) - } - - /// Gets a timestamp representing the host uptime the in the current context - public func timestamp() -> DispatchTime { - guard let c = coordinator else { return DispatchTime.now() } - return DispatchTime(uptimeNanoseconds: c.currentTime) - } -} - -// All actions scheduled with a `DebugContextCoordinator` are referenced by a DebugContextTimer (even those actions that are simply asynchronous invocations without a delay). -class DebugContextTimer: Lifetime { - let thread: DebugContextThread - let rescheduleInterval: UInt64? - weak var coordinator: DebugContextCoordinator? - - init() { - thread = .unspecified - coordinator = nil - rescheduleInterval = nil - } - - init(thread: DebugContextThread, rescheduleInterval: UInt64?, coordinator: DebugContextCoordinator) { - self.thread = thread - self.coordinator = coordinator - self.rescheduleInterval = rescheduleInterval - } - - /// Lifetime implementation - public func cancel() { - coordinator?.cancelTimer(self) - coordinator = nil - } - - deinit { - cancel() - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlDeferredWork.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlDeferredWork.swift deleted file mode 100644 index c234ade..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlDeferredWork.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// CwlDeferredWork.swift -// CwlUtils -// -// Created by Matt Gallagher on 5/10/2015. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -// This type is designed for guarding against mutex re-entrancy by following two simple rules: -// -// 1. No user "work" (functions or closures) should be invoked inside a private mutex -// 2. No user supplied data should be released inside a private mutex -// -// To facilitate these requirements, any user "work" or data ownership should be handled inside `DeferredWork` blocks. These blocks allow this user code to be queued in the desired order but since the `runWork` function should only be called outside the mutex, these blocks run safely outside the mutex. -// -// This pattern has two associated risks: -// 1. If the deferred work calls back into the mutex, it must be able to ensure that it is still relevant (hasn't been superceded by an action that may have occurred between the end of the mutex and the performing of the `DeferredWork`. This may involve a token (inside the mutex, only the most recent token is accepted) or the mutex queueing further requests until the most recent `DeferredWork` completes. -// 2. The `runWork` must be manually invoked. Automtic invocation (e.g in the `deinit` of a lifetime managed `class` instance) would add heap allocation overhead and would also be easy to accidentally release at the wrong point (inside the mutex) causing erratic problems. Instead, the `runWork` is guarded with a `DEBUG`-only `OnDelete` check that ensures that the `runWork` has been correctly invoked by the time the `DeferredWork` falls out of scope. -public struct DeferredWork { - typealias PossibleWork = Few<() -> Void> - - var work: PossibleWork - - #if DEBUG - let invokeCheck: OnDelete = { () -> OnDelete in - var sourceStack = Thread.callStackReturnAddresses - return OnDelete { - let symbols = symbolsForCallStack(addresses: sourceStack.map { $0.uintValue }) - preconditionFailure("Failed to perform work deferred at location:\n" + symbols.joined(separator: "\n")) - } - }() - #endif - - public init() { - work = .none - } - - public init(initial: @escaping () -> Void) { - work = .single(initial) - } - - public mutating func append(_ other: DeferredWork) { - #if DEBUG - precondition(invokeCheck.isValid && other.invokeCheck.isValid, "Work appended to an already cancelled/invoked DeferredWork") - other.invokeCheck.invalidate() - #endif - - switch other.work { - case .none: break - case .single(let otherWork): self.append(otherWork) - case .array(let otherWork): - switch work { - case .none: work = .array(otherWork) - case .single(let existing): - var newWork: Array<() -> Void> = [existing] - newWork.append(contentsOf: otherWork) - work = .array(newWork) - case .array(var existing): - work = .none - existing.append(contentsOf: otherWork) - work = .array(existing) - } - } - } - - public mutating func append(_ additionalWork: @escaping () -> Void) { - #if DEBUG - precondition(invokeCheck.isValid, "Work appended to an already cancelled/invoked DeferredWork") - #endif - - switch work { - case .none: work = .single(additionalWork) - case .single(let existing): work = .array([existing, additionalWork]) - case .array(var existing): - work = .none - existing.append(additionalWork) - work = .array(existing) - } - } - - public mutating func runWork() { - #if DEBUG - precondition(invokeCheck.isValid, "Work run multiple times") - invokeCheck.invalidate() - #endif - - switch work { - case .none: break - case .single(let w): w() - case .array(let ws): - for w in ws { - w() - } - } - work = .none - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlDeque.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlDeque.swift deleted file mode 100644 index 0c2beac..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlDeque.swift +++ /dev/null @@ -1,495 +0,0 @@ -// -// CwlDeque.swift -// CwlUtils -// -// Created by Matt Gallagher on 2016/09/13. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// This is a basic "circular-buffer" style Double-Ended Queue. -public struct Deque: RandomAccessCollection, MutableCollection, RangeReplaceableCollection, ExpressibleByArrayLiteral, CustomDebugStringConvertible { - public typealias Index = Int - public typealias Indices = CountableRange - public typealias Element = T - - private let overAllocateFactor = 2 - private let downsizeTriggerFactor = 16 - private let defaultMinimumCapacity = 5 - - private var buffer: DequeBuffer? = nil - private var minCapacity: Int - - /// Implementation of RangeReplaceableCollection function - public init() { - self.minCapacity = defaultMinimumCapacity - } - - /// Allocate with a minimum capacity - public init(minCapacity: Int) { - self.minCapacity = minCapacity - } - - /// Implementation of ExpressibleByArrayLiteral function - public init(arrayLiteral: T...) { - self.minCapacity = defaultMinimumCapacity - replaceSubrange(0..<0, with: arrayLiteral) - } - - /// Implementation of CustomDebugStringConvertible function - public var debugDescription: String { - var result = "\(type(of: self))([" - var iterator = makeIterator() - if let next = iterator.next() { - debugPrint(next, terminator: "", to: &result) - while let n = iterator.next() { - result += ", " - debugPrint(n, terminator: "", to: &result) - } - } - result += "])" - return result - } - - #if swift(>=4.1) - public subscript(bounds: Range) -> Slice> { - return Slice>(base: self, bounds: bounds) - } - #else - public subscript(bounds: Range) -> RangeReplaceableRandomAccessSlice> { - return RangeReplaceableRandomAccessSlice>(base: self, bounds: bounds) - } - #endif - - /// Implementation of RandomAccessCollection function - public subscript(_ at: Index) -> T { - get { - return buffer!.withUnsafeMutablePointers { headerPtr, bodyPtr -> T in - precondition(at >= 0 && at < headerPtr.pointee.count) - var offset = headerPtr.pointee.offset + at - if offset >= headerPtr.pointee.capacity { - offset -= headerPtr.pointee.capacity - } - return bodyPtr[offset] - } - } - set { - buffer!.withUnsafeMutablePointers { headerPtr, bodyPtr in - precondition(at >= 0 && at < headerPtr.pointee.count) - var offset = headerPtr.pointee.offset + at - if offset >= headerPtr.pointee.capacity { - offset -= headerPtr.pointee.capacity - } - bodyPtr[offset] = newValue - } - } - } - - /// Implementation of Collection function - public var startIndex: Index { - return 0 - } - - /// Implementation of Collection function - public var endIndex: Index { - return buffer?.withUnsafeMutablePointerToHeader { headerPtr in headerPtr.pointee.count } ?? 0 - } - - /// Implementation of Collection function - public var isEmpty: Bool { - return buffer?.withUnsafeMutablePointerToHeader { headerPtr in headerPtr.pointee.count == 0 } ?? true - } - - /// Implementation of Collection function - public var count: Int { - return endIndex - } - - /// Optimized implementation of RangeReplaceableCollection function - public mutating func append(_ newElement: T) { - let done = buffer?.withUnsafeMutablePointers { headerPtr, bodyPtr -> Bool in - guard headerPtr.pointee.capacity >= headerPtr.pointee.count + 1 else { return false } - var index = headerPtr.pointee.offset + headerPtr.pointee.count - if index >= headerPtr.pointee.capacity { - index -= headerPtr.pointee.capacity - } - bodyPtr.advanced(by: index).initialize(to: newElement) - headerPtr.pointee.count += 1 - return true - } ?? false - - if done { - return - } - - let index = endIndex - return replaceSubrange(index.. Bool in - guard at == 0, headerPtr.pointee.capacity >= headerPtr.pointee.count + 1 else { return false } - var index = headerPtr.pointee.offset - 1 - if index < 0 { - index += headerPtr.pointee.capacity - } - bodyPtr.advanced(by: index).initialize(to: newElement) - headerPtr.pointee.count += 1 - headerPtr.pointee.offset = index - return true - } ?? false - - if done { - return - } - - return replaceSubrange(at.. Bool in - if at == headerPtr.pointee.count - 1 { - headerPtr.pointee.count -= 1 - return true - } else if at == 0, headerPtr.pointee.count > 0 { - headerPtr.pointee.offset += 1 - if headerPtr.pointee.offset >= headerPtr.pointee.capacity { - headerPtr.pointee.offset -= headerPtr.pointee.capacity - } - headerPtr.pointee.count -= 1 - return true - } - return false - } ?? false - - if done { - return - } - - return replaceSubrange(at...at, with: EmptyCollection()) - } - - /// Optimized implementation of RangeReplaceableCollection function - public mutating func removeFirst() -> T { - return buffer!.withUnsafeMutablePointers { headerPtr, bodyPtr -> T in - precondition(headerPtr.pointee.count > 0, "Index beyond bounds") - let result = bodyPtr[headerPtr.pointee.offset] - #if swift(>=4.1) - bodyPtr.advanced(by: headerPtr.pointee.offset).deinitialize(count: 1) - #else - bodyPtr.advanced(by: headerPtr.pointee.offset).deinitialize() - #endif - headerPtr.pointee.offset += 1 - if headerPtr.pointee.offset >= headerPtr.pointee.capacity { - headerPtr.pointee.offset -= headerPtr.pointee.capacity - } - headerPtr.pointee.count -= 1 - return result - } - } - - // Used when removing a range from the collection or deiniting self. - private static func deinitialize(range: CountableRange, header: UnsafeMutablePointer, body: UnsafeMutablePointer) { - let splitRange = header.pointee.splitRangeIndices(inRange: range) - body.advanced(by: splitRange.low.startIndex).deinitialize(count: splitRange.low.count) - body.advanced(by: splitRange.high.startIndex).deinitialize(count: splitRange.high.count) - } - - // Move from an initialized to an uninitialized location, deinitializing the source. - // - // NOTE: the terms "preMapped" and "postMapped" are used. "preMapped" refer to the public indices exposed by this type (zero based, contiguous), and "postMapped" refers to internal offsets within the buffer (not necessarily zero based and may wrap around). This function will only handle a single, contiguous block of "postMapped" indices so the caller must ensure that this function is invoked separately for each contiguous block. - private static func moveInitialize(preMappedSourceRange: CountableRange, postMappedDestinationRange: CountableRange, sourceHeader: UnsafeMutablePointer, sourceBody: UnsafeMutablePointer, destinationBody: UnsafeMutablePointer) { - let sourceSplitRange = sourceHeader.pointee.splitRangeIndices(inRange: preMappedSourceRange) - - assert(sourceSplitRange.low.startIndex >= 0 && (sourceSplitRange.low.startIndex < sourceHeader.pointee.capacity || sourceSplitRange.low.startIndex == sourceSplitRange.low.endIndex)) - assert(sourceSplitRange.low.endIndex >= 0 && sourceSplitRange.low.endIndex <= sourceHeader.pointee.capacity) - - assert(sourceSplitRange.high.startIndex >= 0 && (sourceSplitRange.high.startIndex < sourceHeader.pointee.capacity || sourceSplitRange.high.startIndex == sourceSplitRange.high.endIndex)) - assert(sourceSplitRange.high.endIndex >= 0 && sourceSplitRange.high.endIndex <= sourceHeader.pointee.capacity) - - destinationBody.advanced(by: postMappedDestinationRange.startIndex).moveInitialize(from: sourceBody.advanced(by: sourceSplitRange.low.startIndex), count: sourceSplitRange.low.count) - destinationBody.advanced(by: postMappedDestinationRange.startIndex + sourceSplitRange.low.count).moveInitialize(from: sourceBody.advanced(by: sourceSplitRange.high.startIndex), count: sourceSplitRange.high.count) - } - - // Copy from an initialized to an uninitialized location, leaving the source initialized. - // - // NOTE: the terms "preMapped" and "postMapped" are used. "preMapped" refer to the public indices exposed by this type (zero based, contiguous), and "postMapped" refers to internal offsets within the buffer (not necessarily zero based and may wrap around). This function will only handle a single, contiguous block of "postMapped" indices so the caller must ensure that this function is invoked separately for each contiguous block. - private static func copyInitialize(preMappedSourceRange: CountableRange, postMappedDestinationRange: CountableRange, sourceHeader: UnsafeMutablePointer, sourceBody: UnsafeMutablePointer, destinationBody: UnsafeMutablePointer) { - let sourceSplitRange = sourceHeader.pointee.splitRangeIndices(inRange: preMappedSourceRange) - - assert(sourceSplitRange.low.startIndex >= 0 && (sourceSplitRange.low.startIndex < sourceHeader.pointee.capacity || sourceSplitRange.low.startIndex == sourceSplitRange.low.endIndex)) - assert(sourceSplitRange.low.endIndex >= 0 && sourceSplitRange.low.endIndex <= sourceHeader.pointee.capacity) - - assert(sourceSplitRange.high.startIndex >= 0 && (sourceSplitRange.high.startIndex < sourceHeader.pointee.capacity || sourceSplitRange.high.startIndex == sourceSplitRange.high.endIndex)) - assert(sourceSplitRange.high.endIndex >= 0 && sourceSplitRange.high.endIndex <= sourceHeader.pointee.capacity) - - destinationBody.advanced(by: postMappedDestinationRange.startIndex).initialize(from: sourceBody.advanced(by: sourceSplitRange.low.startIndex), count: sourceSplitRange.low.count) - destinationBody.advanced(by: postMappedDestinationRange.startIndex + sourceSplitRange.low.count).initialize(from: sourceBody.advanced(by: sourceSplitRange.high.startIndex), count: sourceSplitRange.high.count) - } - - // Internal implementation of replaceSubrange(_:with:) when no reallocation - // of the underlying buffer is required - private static func mutateWithoutReallocate(info: DequeMutationInfo2, elements newElements: C, header: UnsafeMutablePointer, body: UnsafeMutablePointer) where C: Collection, C.Iterator.Element == T { - if info.removed > 0 { - Deque.deinitialize(range: info.start..<(info.start + info.removed), header: header, body: body) - } - - if info.removed != info.inserted { - if info.start < header.pointee.count - (info.start + info.removed) { - let oldOffset = header.pointee.offset - header.pointee.offset -= info.inserted - info.removed - if header.pointee.offset < 0 { - header.pointee.offset += header.pointee.capacity - } else if header.pointee.offset >= header.pointee.capacity { - header.pointee.offset -= header.pointee.capacity - } - let delta = oldOffset - header.pointee.offset - if info.start != 0 { - let destinationSplitIndices = header.pointee.splitRangeIndices(inRange: 0..= header.pointee.capacity - header.pointee.offset { - body.advanced(by: info.start - header.pointee.capacity + header.pointee.offset).initialize(to: e) - } else { - body.advanced(by: header.pointee.offset + info.start).initialize(to: e) - } - } else if info.inserted > 0 { - let inserted = header.pointee.splitRangeIndices(inRange: info.start..<(info.start + info.inserted)) - var iterator = newElements.makeIterator() - for i in inserted.low { - if let n = iterator.next() { - body.advanced(by: i).initialize(to: n) - } - } - for i in inserted.high { - if let n = iterator.next() { - body.advanced(by: i).initialize(to: n) - } - } - } - } - - // Internal implementation of replaceSubrange(_:with:) when reallocation - // of the underlying buffer is required. Can handle no previous buffer or - // previous buffer too small or previous buffer too big or previous buffer - // non-unique. - private mutating func reallocateAndMutate(info: DequeMutationInfo2, elements newElements: C, header: UnsafeMutablePointer?, body: UnsafeMutablePointer?, deletePrevious: Bool) where C: Collection, C.Iterator.Element == T { - if info.newCount == 0 { - // Let the regular deallocation handle the deinitialize - buffer = nil - } else { - let newCapacity: Int - let oldCapacity = header?.pointee.capacity ?? 0 - if info.newCount > oldCapacity || info.newCount <= oldCapacity / downsizeTriggerFactor { - newCapacity = Swift.max(minCapacity, info.newCount * overAllocateFactor) - } else { - newCapacity = oldCapacity - } - - let newBuffer = DequeBuffer.create(minimumCapacity: newCapacity) { (buffer: ManagedBuffer) in - return DequeHeader(offset: 0, count: info.newCount, capacity: newCapacity) - } as! DequeBuffer - if let headerPtr = header, let bodyPtr = body { - if deletePrevious, info.removed > 0 { - Deque.deinitialize(range: info.start..<(info.start + info.removed), header: headerPtr, body: bodyPtr) - } - - newBuffer.withUnsafeMutablePointerToElements { newBody in - if info.start != 0 { - if deletePrevious { - Deque.moveInitialize(preMappedSourceRange: 0.. 0 { - newBuffer.withUnsafeMutablePointerToElements { newBody in - #if swift(>=3.1) - let umbp = UnsafeMutableBufferPointer(start: newBody.advanced(by: info.start), count: info.inserted) - _ = umbp.initialize(from: newElements) - #else - // Insert the new subrange - newBody.advanced(by: info.start).initialize(from: newElements) - #endif - } - } - - buffer = newBuffer - } - } - - /// Implemetation of the RangeReplaceableCollection function. Internally - /// implemented using either mutateWithoutReallocate or reallocateAndMutate. - public mutating func replaceSubrange(_ subrange: Range, with newElements: C) where C: Collection, C.Iterator.Element == T { - precondition(subrange.lowerBound >= 0, "Subrange lowerBound is negative") - - if isKnownUniquelyReferenced(&buffer), let b = buffer { - b.withUnsafeMutablePointers { headerPtr, bodyPtr in - let info = DequeMutationInfo2(subrange: subrange, previousCount: headerPtr.pointee.count, insertedCount: numericCast(newElements.count)) - if info.newCount <= headerPtr.pointee.capacity && (info.newCount < minCapacity || info.newCount > headerPtr.pointee.capacity / downsizeTriggerFactor) { - Deque.mutateWithoutReallocate(info: info, elements: newElements, header: headerPtr, body: bodyPtr) - } else { - reallocateAndMutate(info: info, elements: newElements, header: headerPtr, body: bodyPtr, deletePrevious: true) - } - } - } else if let b = buffer { - b.withUnsafeMutablePointers { headerPtr, bodyPtr in - let info = DequeMutationInfo2(subrange: subrange, previousCount: headerPtr.pointee.count, insertedCount: numericCast(newElements.count)) - reallocateAndMutate(info: info, elements: newElements, header: headerPtr, body: bodyPtr, deletePrevious: false) - } - } else { - let info = DequeMutationInfo2(subrange: subrange, previousCount: 0, insertedCount: numericCast(newElements.count)) - reallocateAndMutate(info: info, elements: newElements, header: nil, body: nil, deletePrevious: true) - } - } -} - -// Internal state for the Deque -private struct DequeHeader { - var offset: Int - var count: Int - var capacity: Int - - // Translate from preMapped to postMapped indices. - // - // "preMapped" refer to the public indices exposed by this type (zero based, contiguous), and "postMapped" refers to internal offsets within the buffer (not necessarily zero based and may wrap around). - // - // Since "postMapped" indices are not necessarily contiguous, two separate, contiguous ranges are returned. Both `startIndex` and `endIndex` in the `high` range will equal the `endIndex` in the `low` range if the range specified by `inRange` is continuous after mapping. - func splitRangeIndices(inRange: CountableRange) -> (low: CountableRange, high: CountableRange) { - let limit = capacity - offset - if inRange.startIndex >= limit { - return (low: (inRange.startIndex - limit)..<(inRange.endIndex - limit), high: (inRange.endIndex - limit)..<(inRange.endIndex - limit)) - } else if inRange.endIndex > limit { - return (low: (inRange.startIndex + offset)..(_:with:) -// and reallocateAndMutate or mutateWithoutReallocate -private struct DequeMutationInfo2 { - let start: Int - let removed: Int - let inserted: Int - let newCount: Int - - init(subrange: Range, previousCount: Int, insertedCount: Int) { - precondition(subrange.upperBound <= previousCount, "Subrange upperBound is out of range") - - self.start = subrange.lowerBound - self.removed = subrange.count - self.inserted = insertedCount - self.newCount = previousCount - self.removed + self.inserted - } -} - -// Private reimplementation of function with same name from stdlib/public/core/BuiltIn.swift -private func roundUp(_ offset: UInt, toAlignment alignment: Int) -> UInt { - let x = offset + UInt(bitPattern: alignment) &- 1 - return x & ~(UInt(bitPattern: alignment) &- 1) -} - -// Private reimplementation of definition from stdlib/public/SwiftShims/HeapObject.h -private struct HeapObject { - let metadata: Int = 0 - let strongRefCount: UInt32 = 0 - let weakRefCount: UInt32 = 0 -} - -// An implementation of DequeBuffer using ManagedBufferPointer to allocate the -// storage and then using raw pointer offsets into self to access contents -// (avoiding the ManagedBufferPointer accessors which are a performance problem -// in Swift 3). -private final class DequeBuffer: ManagedBuffer { - #if true - private static var headerOffset: Int { - return Int(roundUp(UInt(MemoryLayout.size), toAlignment: MemoryLayout.alignment)) - } - - private static var elementOffset: Int { - return Int(roundUp(UInt(headerOffset) + UInt(MemoryLayout.size), toAlignment: MemoryLayout.alignment)) - } - - private var bodyPtr: UnsafeMutablePointer { - return Unmanaged>.passUnretained(self).toOpaque().advanced(by: DequeBuffer.elementOffset).assumingMemoryBound(to: T.self) - } - - private var headerPtr: UnsafeMutablePointer { - return Unmanaged>.passUnretained(self).toOpaque().advanced(by: DequeBuffer.headerOffset).assumingMemoryBound(to: DequeHeader.self) - } - #endif - - deinit { - #if true - // We need to assert this in case some of our dirty assumptions stop being true - assert(ManagedBufferPointer(unsafeBufferObject: self).withUnsafeMutablePointers { (header, body) in - self.headerPtr == header && self.bodyPtr == body - }) - - let splitRange = headerPtr.pointee.splitRangeIndices(inRange: 0.. Void) -> DispatchSourceTimer { - let result = DispatchSource.makeTimerSource(queue: queue) - result.setEventHandler(handler: handler) - #if swift(>=4) - result.schedule(deadline: DispatchTime.now() + interval, leeway: leeway) - #else - result.scheduleOneshot(deadline: DispatchTime.now() + interval, leeway: leeway) - #endif - result.resume() - return result - } - - // An overload of timer that always uses the default global queue (because it is intended to enter the appropriate mutex as a separate step) and passes a user-supplied Int to the handler function to allow ignoring callbacks if cancelled or rescheduled before mutex acquisition. - class func singleTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), queue: DispatchQueue = DispatchQueue.global(), handler: @escaping (T) -> Void) -> DispatchSourceTimer { - let result = DispatchSource.makeTimerSource(queue: queue) - result.scheduleOneshot(parameter: parameter, interval: interval, leeway: leeway, handler: handler) - result.resume() - return result - } - - // An overload of timer that immediately sets the handler and schedules the timer - class func repeatingTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), queue: DispatchQueue = DispatchQueue.global(), handler: @escaping () -> Void) -> DispatchSourceTimer { - let result = DispatchSource.makeTimerSource(queue: queue) - result.setEventHandler(handler: handler) - #if swift(>=4) - result.schedule(deadline: DispatchTime.now() + interval, repeating: interval, leeway: leeway) - #else - result.scheduleRepeating(deadline: DispatchTime.now() + interval, interval: interval, leeway: leeway) - #endif - result.resume() - return result - } - - // An overload of timer that always uses the default global queue (because it is intended to enter the appropriate mutex as a separate step) and passes a user-supplied Int to the handler function to allow ignoring callbacks if cancelled or rescheduled before mutex acquisition. - class func repeatingTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), queue: DispatchQueue = DispatchQueue.global(), handler: @escaping (T) -> Void) -> DispatchSourceTimer { - let result = DispatchSource.makeTimerSource(queue: queue) - result.scheduleRepeating(parameter: parameter, interval: interval, leeway: leeway, handler: handler) - result.resume() - return result - } -} - -public extension DispatchSourceTimer { - // An overload of scheduleOneshot that updates the handler function with a new user-supplied parameter when it changes the expiry deadline - func scheduleOneshot(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), handler: @escaping (T) -> Void) { - suspend() - setEventHandler { handler(parameter) } - #if swift(>=4) - schedule(deadline: DispatchTime.now() + interval, leeway: leeway) - #else - scheduleOneshot(deadline: DispatchTime.now() + interval, leeway: leeway) - #endif - resume() - } - - // An overload of scheduleOneshot that updates the handler function with a new user-supplied parameter when it changes the expiry deadline - func scheduleRepeating(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), handler: @escaping (T) -> Void) { - suspend() - setEventHandler { handler(parameter) } - #if swift(>=4) - schedule(deadline: DispatchTime.now() + interval, repeating: interval, leeway: leeway) - #else - scheduleRepeating(deadline: DispatchTime.now() + interval, interval: interval, leeway: leeway) - #endif - resume() - } -} - -public extension DispatchTime { - func since(_ previous: DispatchTime) -> DispatchTimeInterval { - return .nanoseconds(Int(uptimeNanoseconds - previous.uptimeNanoseconds)) - } -} - -public extension DispatchTimeInterval { - static func interval(_ seconds: TimeInterval) -> DispatchTimeInterval { - if MemoryLayout.size < 8 { - return .milliseconds(Int(seconds * Double(NSEC_PER_SEC / NSEC_PER_MSEC))) - } else { - return .nanoseconds(Int(seconds * Double(NSEC_PER_SEC))) - } - } - - var seconds: Double { - #if swift (>=3.2) - switch self { - case .seconds(let t): return Double(t) - case .milliseconds(let t): return (Double(NSEC_PER_MSEC) / Double(NSEC_PER_SEC)) * Double(t) - case .microseconds(let t): return (Double(NSEC_PER_USEC) / Double(NSEC_PER_SEC)) * Double(t) - case .nanoseconds(let t): return (1.0 / Double(NSEC_PER_SEC)) * Double(t) - case .never: return Double.infinity - #if swift (>=5) - default: fatalError("Unknown case") - #endif - } - #else - switch self { - case .seconds(let t): return Double(t) - case .milliseconds(let t): return (Double(NSEC_PER_MSEC) / Double(NSEC_PER_SEC)) * Double(t) - case .microseconds(let t): return (Double(NSEC_PER_USEC) / Double(NSEC_PER_SEC)) * Double(t) - case .nanoseconds(let t): return (1.0 / Double(NSEC_PER_SEC)) * Double(t) - } - #endif - } - - var nanoseconds: Int64 { - #if swift (>=3.2) - switch self { - case .seconds(let t): return Int64(NSEC_PER_SEC) * Int64(t) - case .milliseconds(let t): return Int64(NSEC_PER_MSEC) * Int64(t) - case .microseconds(let t): return Int64(NSEC_PER_USEC) * Int64(t) - case .nanoseconds(let t): return Int64(t) - case .never: return Int64.max - #if swift (>=5) - default: fatalError("Unknown case") - #endif - } - #else - switch self { - case .seconds(let t): return Int64(NSEC_PER_SEC) * Int64(t) - case .milliseconds(let t): return Int64(NSEC_PER_MSEC) * Int64(t) - case .microseconds(let t): return Int64(NSEC_PER_USEC) * Int64(t) - case .nanoseconds(let t): return Int64(t) - } - #endif - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlExec.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlExec.swift deleted file mode 100644 index ff06918..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlExec.swift +++ /dev/null @@ -1,221 +0,0 @@ -// -// CwlExec.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// `Exec` is a representation of an arbitrary execution context and offers the ability to interrogate properties of the execution context or to invoke blocks within the context in a number of different ways. The base enum implements the three most common types of execution context in Swift. Switching over these pre-defined cases enables the caller to perform appropriate optimizations (e.g. avoiding calling `invoke` on Exec.direct). -/// -/// - direct: the context will directly call any supplied block with no other action taken -/// - main: the context will invoke on the main thread, preferring synchronous invocation where possible. -/// - queue: the context will invoke on a DispatchQueue with details descrbied in the `ExecutionType` -/// - custom: a `CustomExecutionContext` handles all interrogation and invoking -public enum Exec { - /// Invoked directly from the caller's context - case direct - - /// Invoked on the main thread, directly if the current thread is the main thread, otherwise asynchronously (unless invokeSync is used) - case main - - /// Invoked using a Dispatch Queue - case queue(DispatchQueue, ExecutionType) - - /// Invoked using the wrapped existential. - case custom(CustomExecutionContext) -} - -public extension Exec { - /// If this context is concurrent, returns a serialization around this context, otherwise returns this context. - func serialized() -> Exec { - return self.type.isConcurrent ? Exec.custom(SerializingContext(concurrentContext: self)) : self - } - - /// Invoked on the main thread, always asynchronously (unless invokeSync is used) - static var mainAsync: Exec { - return .queue(.main, .threadAsync { Thread.isMainThread }) - } - - /// Invoked asynchronously in the global queue with QOS_CLASS_DEFAULT priority - static var global: Exec { - return .queue(.global(), .concurrentAsync) - } - - /// Invoked asynchronously in the global queue with QOS_CLASS_DEFAULT priority - static func global(qos: DispatchQoS.QoSClass) -> Exec { - return .queue(.global(qos: qos), .concurrentAsync) - } - - /// Invoked asynchronously in the global queue with QOS_CLASS_USER_INTERACTIVE priority - static var interactive: Exec { - return .queue(.global(qos: .userInteractive), .concurrentAsync) - } - - /// Invoked asynchronously in the global queue with QOS_CLASS_USER_INITIATED priority - static var user: Exec { - return .queue(.global(qos: .userInitiated), .concurrentAsync) - } - - /// Invoked asynchronously in the global queue with QOS_CLASS_UTILITY priority - static var utility: Exec { - return .queue(.global(qos: .utility), .concurrentAsync) - } - - /// Invoked asynchronously in the global queue with QOS_CLASS_BACKGROUND priority - static var background: Exec { - return .queue(.global(qos: .background), .concurrentAsync) - } - - /// Constructs an Exec.queue configured as an ExecutionType.recursiveMutex - static func syncQueue(qos: DispatchQoS.QoSClass = .default) -> Exec { - return Exec.queue(DispatchQueue(label: ""), ExecutionType.mutex) - } - - /// Constructs an Exec.queue configured as an ExecutionType.recursiveAsync - static func asyncQueue(qos: DispatchQoS.QoSClass = .default) -> Exec { - return Exec.queue(DispatchQueue(label: ""), ExecutionType.serialAsync) - } -} - -extension Exec: CustomExecutionContext { - /// A description about how functions will be invoked on an execution context. - public var type: ExecutionType { - switch self { - case .direct: return .immediate - case .main: return .thread { Thread.isMainThread } - case .custom(let c): return c.type - case .queue(_, let t): return t - } - } - - /// Run `execute` normally on the execution context - public func invoke(_ execute: @escaping () -> Void) { - switch self { - case .direct: execute() - case .main where Thread.isMainThread: execute() - case .main: DispatchQueue.main.async(execute: execute) - case .queue(_, .thread(let test)) where test(): execute() - case .queue(_, .recursiveMutex(let test)) where test(): execute() - case .queue(let q, let t) where t.isImmediateInCurrentContext: q.sync(execute: execute) - case .queue(let q, _): q.async(execute: execute) - case .custom(let c): c.invoke(execute) - } - } - - /// Run `execute` asynchronously on the execution context - public func invokeAsync(_ execute: @escaping () -> Void) { - switch self { - case .direct: DispatchQueue.global().async(execute: execute) - case .custom(let c): c.invokeAsync(execute) - case .main: DispatchQueue.main.async(execute: execute) - case .queue(let q, _): q.async(execute: execute) - } - } - - /// Run `execute` on the execution context but don't return from this function until the provided function is complete. - public func invokeSync(_ execute: () throws -> Result) rethrows -> Result { - switch self { - case .direct: return try execute() - case .main where Thread.isMainThread: return try execute() - case .main: return try DispatchQueue.main.sync(execute: execute) - case .queue(_, .thread(let test)) where test(): return try execute() - case .queue(_, .threadAsync(let test)) where test(): return try execute() - case .queue(_, .recursiveMutex(let test)) where test(): return try execute() - case .queue(let q, _): return try withoutActuallyEscaping(execute) { e in try q.sync(execute: e) } - case .custom(let c): return try c.invokeSync(execute) - } - } - - /// Invokes in a global concurrent context. This context can be used to safely "escape" self. - /// - /// - Parameter qos: the QoSClass for the new async context. If `nil`, the QoSClass will be derived from the properties of `self` - /// - Returns: a context that is asynchronous and can be used to escape self - public func relativeAsync(qos: DispatchQoS.QoSClass? = nil) -> Exec { - switch self { - case .custom(let c): return c.relativeAsync(qos: qos) - case .main: return Exec.global(qos: .userInteractive) - case .queue(let q, _): return Exec.global(qos: q.qos.qosClass) - case .direct: return Exec.global - } - } - - private var timerQueue: DispatchQueue { - switch self { - case .direct: return DispatchQueue.global() - case .main: return DispatchQueue.main - case .queue(let q, _): return q - case .custom: fatalError() - } - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`) unless the returned `Lifetime` is cancelled or released before running occurs. - public func singleTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), handler: @escaping () -> Void) -> Lifetime { - if case .custom(let c) = self { - return c.singleTimer(interval: interval, leeway: leeway, handler: handler) - } - return DispatchSource.singleTimer(interval: interval, leeway: leeway, queue: timerQueue, handler: handler) as! DispatchSource - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, unless the returned `Lifetime` is cancelled or released before running occurs. - public func singleTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), handler: @escaping (T) -> Void) -> Lifetime { - if case .custom(let c) = self { - return c.singleTimer(parameter: parameter, interval: interval, leeway: leeway, handler: handler) - } - return DispatchSource.singleTimer(parameter: parameter, interval: interval, leeway: leeway, queue: timerQueue, handler: handler) as! DispatchSource - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - public func periodicTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), handler: @escaping () -> Void) -> Lifetime { - if case .custom(let c) = self { - return c.periodicTimer(interval: interval, leeway: leeway, handler: handler) - } - return DispatchSource.repeatingTimer(interval: interval, leeway: leeway, queue: timerQueue, handler: handler) as! DispatchSource - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - public func periodicTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval = .nanoseconds(0), handler: @escaping (T) -> Void) -> Lifetime { - if case .custom(let c) = self { - return c.periodicTimer(parameter: parameter, interval: interval, leeway: leeway, handler: handler) - } - return DispatchSource.repeatingTimer(parameter: parameter, interval: interval, leeway: leeway, queue: timerQueue, handler: handler) as! DispatchSource - } - - /// Gets a timestamp representing the host uptime the in the current context - public func timestamp() -> DispatchTime { - if case .custom(let c) = self { - return c.timestamp() - } - return DispatchTime.now() - } -} - -public extension Exec { - @available(*, deprecated, message: "Use invokeSync instead") - func invokeAndWait(_ execute: @escaping () -> Void) { - _ = invokeSync(execute) - } - - @available(*, deprecated, message:"Values returned from this may be misleading. Perform your own switch to precisely get the information you need.") - var dispatchQueue: DispatchQueue { - switch self { - case .direct, .custom: return DispatchQueue.global() - case .main: return DispatchQueue.main - case .queue(let q, _): return q - } - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlExecutionType.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlExecutionType.swift deleted file mode 100644 index 8a6f70b..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlExecutionType.swift +++ /dev/null @@ -1,142 +0,0 @@ -// -// CwlExecutionType.swift -// CwlUtils -// -// Created by Matt Gallagher on 30/1/19. -// Copyright © 2019 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any purpose with or without -// fee is hereby granted, provided that the above copyright notice and this permission notice -// appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -// SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -// AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -// OF THIS SOFTWARE. -// - -/// Describes 7 key execution context types. The six most common exist as a pair between a sychronous and asynchronous version: -/// * immediate and concurrentAsync -/// * mutex and serialAsync -/// * thread and threadAsync -/// With the final context being an additional variation on mutex: -/// * recursiveMutex -/// -/// This list of of execution context types should *not* be considered exhaustive so in general, it is better to interrogate the boolean properties in which you're interested. -/// These properties are currently: -/// * isImmediate[InCurrentContext|Always] -/// * isReentrant -/// * isConcurrent -public enum ExecutionType { - /// This execution type models a simple function invocation. - /// * completes before `invoke` returns (immediate) - /// * applies no mutex so nested calls to `invoke` will succeed (reentrant) - /// * will let parallel calls run at the same time (concurrent) - /// * invocation always inherits the caller's context (nest always) - /// e.g. directly calling - case immediate - - /// This execution type models a global concurrent work pool. - /// * runs outside the current context and might not complete before `invoke` returns (asynchronous) - /// * involves no mutex so nested calls to `invokeSync` are permitted (reentrant) - /// * will let parallel calls run at the same time (concurrent) - /// * normally async but `invokeSync` is invoked from the calling context (sync nests) - /// e.g. DispatchQueue.global().async - case concurrentAsync - - /// This execution type models a scoped non-recursive mutex. - /// * completes before `invoke` returns (immediate) - /// * applies a non-reentrant mutex so nested calls to `invoke` will deadlock (non-reentrant) - /// * will serialize parallel calls to run one at a time (serial) - /// * invocation always inherits the caller's context (nest always) - /// e.g. dispatchQueue.sync - case mutex - - /// This execution type models a scoped recursive mutex. The associated test function returns `true` if the `invoke` or `invokeSync` function can be elided (replaced by direct invocation, since the current context is known to be inside the mutex). - /// * completes before `invoke` returns (immediate) - /// * applies a mutex but a nested `invoke` will safely re-enter the mutex (reentrant) - /// * will serialize parallel calls to run one at a time (serial) - /// * invocation always inherits the caller's context (nest always) - /// e.g. NSRecursiveLock.lock(before:) - case recursiveMutex(() -> Bool) - - /// This execution type models a thread. The associated test function returns `true` if the `invoke` or `invokeSync` function can be elided (replaced by direct invocation, since the current context is known to be inside the thread). - /// * if test function returns true, then `invoke` is immediate in the current context, otherwise asychronous (immediate/asynchronous) - /// * nested calls to `invoke` are permitted since they will simply be run immediately (reentrant) - /// * will serialize parallel calls to run one at a time (serial) - /// * invocation only inherits the caller's context if test function returns true in current context (nest thread) - /// e.g. `if Thread.isMainThread { /* do work */ } else { DispatchQueue.main.async { /* do work */ }` - case thread(() -> Bool) - - /// This execution type models a thread on which work is typically performed asynchronously. The associated test function returns `true` if the `invoke` or `invokeSync` function can be elided (replaced by direct invocation, since the current context is known to be inside the thread). - /// * `invoke` is always asynchronous (asynchronous) - /// * detects when it is already on the current thread so nested calls to `invokeSync` will not deadlock (reentrant) - /// * will serialize parallel calls to run one at a time (serial) - /// * normally async but `invokeSync` nests if already on its thread (nest syncThread) - /// e.g. DispatchQueue.main.async - case threadAsync(() -> Bool) - - /// This execution type models an asynchronous resource that lacks any synchronous access. - /// * runs outside the current context and might not complete before `invoke` returns (asynchronous) - /// * applies a non-reentrant mutex so nested calls to `invokeSync` will deadlock (non-reentrant) - /// * will serialize parallel calls to run one at a time (serial) - /// * invocation never inherits the caller's context (nest no) - /// e.g. a serial resource that offers a `performAsync(_:() -> Void)` but doesn't offer a `performSync(_:() -> Void)` - case serialAsync -} - -public extension ExecutionType { - /// Returns true if a block executed with `invoke` is guaranteed to complete before `invoke` returns in the current context. - /// The inverse of this value is "isAsyncInCurrentContext". - /// - /// NOTE: this property runs a function for case `.thread` to see if the current thread is the target thread. Any change queue/thread may break the guarantee (the name "thread" is representative-only and might not refer to a literal thread). - var isImmediateInCurrentContext: Bool { - switch self { - case .immediate, .mutex, .recursiveMutex: return true - case .thread(let isCurrent): return isCurrent() - case .serialAsync, .concurrentAsync, .threadAsync: return false - } - } - - /// Inverse of `isImmediateInCurrentContext` - var isAsyncInCurrentContext: Bool { return !isImmediateInCurrentContext } - - /// Returns true if a block executed with `invoke` is always guaranteed to complete before `invoke` returns. - /// The inverse of this value is "isPotentiallyAsync" - var isImmediateAlways: Bool { - switch self { - case .immediate, .mutex, .recursiveMutex: return true - case .thread, .serialAsync, .concurrentAsync, .threadAsync: return false - } - } - - /// Inverse of `isImmediateAlways` - var isPotentiallyAsync: Bool { return !isImmediateInCurrentContext } - - /// Returns true if calling `invoke` or `invokeSync` within an executed block will succeed (not deadlock). - /// The inverse of this value is "non-reentrant" - var isReentrant: Bool { - switch self { - case .immediate, .recursiveMutex, .thread, .threadAsync, .concurrentAsync: return true - case .mutex, .serialAsync: return false - } - } - - /// Inverse of `isReentrant` - var isNonReentrant: Bool { return !isReentrant } - - /// Returns true if calling `invoke` simultaneously on separate threads may result in simultaneous execution. - /// The inverse of this value is "serial" - var isConcurrent: Bool { - switch self { - case .immediate, .concurrentAsync: return true - case .mutex, .recursiveMutex, .serialAsync, .thread, .threadAsync: return false - } - } - - /// Inverse of `isConcurrent` - var isSerial: Bool { return !isConcurrent } -} - diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlFew.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlFew.swift deleted file mode 100644 index b77cbc4..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlFew.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// CwlFew.swift -// CwlUtils -// -// Created by Matt Gallagher on 29/1/19. -// Copyright © 2019 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any purpose with or without -// fee is hereby granted, provided that the above copyright notice and this permission notice -// appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -// SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -// AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -// OF THIS SOFTWARE. -// - -import Foundation - -public enum Few { - case none - case single(T) - case array(Array) -} - -extension Few: Collection { - public func index(after i: Int) -> Int { - return i + 1 - } - - public var count: Int { - switch self { - case .none: return 0 - case .single: return 1 - case .array(let a): return a.count - } - } - - public var startIndex: Int { - return 0 - } - - public var endIndex: Int { - switch self { - case .none: return 0 - case .single: return 1 - case .array(let a): return a.endIndex - } - } - - public subscript(key: Int) -> T { - switch self { - case .none: fatalError() - case .single(let value): return value - case .array(let a): return a[key] - } - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlKeyValueObserver.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlKeyValueObserver.swift deleted file mode 100644 index 6ab91ad..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlKeyValueObserver.swift +++ /dev/null @@ -1,294 +0,0 @@ -// -// CwlKeyValueObserver.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// A wrapper around key-value observing so that you: -/// 1. don't need to implement `observeValue` yourself, you can instead handle changes in a closure -/// 2. you get a `CallbackReason` for each change which includes `valueChanged`, `pathChanged`, `sourceDeleted`. -/// 3. observation is automatically cancelled if you release the KeyValueObserver or the source is released -/// -/// While Swift 4 offers an `observe(...) -> NSKeyValueObservation` function which avoids the need for (1), this wrapper continues to offer an advantage on points (2) and (3). -/// -/// A majority of the complexity in this class comes from the fact that we turn key-value observing on keyPaths into a series of chained KeyValueObservers that we manage ourselves. This gives us more information when things change but we're re-implementing a number of things that Cococa key-value observing normally gives us for free. Generally in this class, anything involving the `tailPath` is managing observations of the path. -/// -/// THREAD SAFETY: -/// This class is memory safe even when observations are triggered concurrently from different threads. -/// Do note though that while all changes are registered under the mutex, callbacks are invoked *outside* the mutex, so it is possible for callbacks to be invoked in a different order than the internal synchronized order. -/// In general, this shouldn't be a problem (since key-value observing is not itself synchronized so there *isn't* an authoritative ordering). However, this may cause unexpected behavior if you invoke `cancel` on this class. If you `cancel` the `KeyValueObserver` while it is concurrently processing changes on another thread, this might result in callback invocations occurring *after* the call to `cancel`. This will only happen if the changes associated with those callbacks were received *before* the `cancel` - it's just the callback that's getting invoked later. -@available(*, deprecated, message:"Use Swift's native KeyPath and observe(_:, options:, changeHandler:) instead") -public class KeyValueObserver: NSObject, Lifetime { - public typealias Callback = (_ change: [NSKeyValueChangeKey: Any], _ reason: CallbackReason) -> Void - - // This is the user-supplied callback function - private var callback: Callback? - - // When observing a keyPath, we use a separate KeyValueObserver for each component of the path. The `tailObserver` is the `KeyValueObserver` for the *next* element in the path. - private var tailObserver: KeyValueObserver? - - // This is the key that we're observing on `source` - private let key: String - - // This is any path beyond the key. - private let tailPath: String? - - // This is the set of options passed on construction - private let options: NSKeyValueObservingOptions - - // Used to ensure memory safety for the callback and tailObserver. - private let mutex = DispatchQueue(label: "") - - // Our "deletionBlock" is called to notify us that the source is being deallocated (so we can remove the key value observation before a warning is logged) and this happens during the source's "objc_destructinstance" function. At this point, a `weak` var will be `nil` and an `unowned` will trigger a `_swift_abortRetainUnowned` failure. - // So we're left with `Unmanaged`. Careful cancellation before the source is deallocated is necessary to ensure we don't access an invalid memory location. - private let source: Unmanaged - - /// The `CallbackReason` explains the location in the path where the change occurred. - /// - /// - valueChanged: the observed value changed - /// - pathChanged: one of the connected elements in the path changed - /// - sourceDeleted: the observed source was deallocated - /// - cancelled: will never be sent - public enum CallbackReason { - case valueChanged - case pathChanged - case sourceDeleted - case cancelled - } - - /// Establish the key value observing. - /// - /// - Parameters: - /// - source: object on which there's a property we wish to observe - /// - keyPath: a key or keyPath identifying the property we wish to observe - /// - options: same as for the normal `addObserver` method - /// - callback: will be invoked on each change with the change dictionary and the change reason - public init(source: NSObject, keyPath: String, options: NSKeyValueObservingOptions = NSKeyValueObservingOptions.new.union(NSKeyValueObservingOptions.initial), callback: @escaping Callback) { - self.callback = callback - self.source = Unmanaged.passUnretained(source) - self.options = options - - // Look for "." indicating a key path - var range = keyPath.range(of: ".") - - // If we have a collection operator, consider the next path component as part of this key - if let r = range, keyPath.hasPrefix("@") { - range = keyPath.range(of: ".", range: keyPath.index(after: r.lowerBound)..=4) - self.key = String(keyPath[.. Callback? in - updateTailObserver(onValue: nil, isInitial: false) - return self.callback - }) - c?(change, self.isObservingTail ? .valueChanged : .pathChanged) - default: - let c = mutex.sync { self.callback } - c?(change, reason) - } - } - - // The method returns `false` if there are subsequent `KeyValueObserver`s observing part of the path between us and the observed property and `true` if we are directly observing the property. - // - // Mutex notes: Safe for invocation in or out of mutex - private var isObservingTail: Bool { - return tailPath == nil || tailPath == "self" - } - - // Weak properties need `self` observed, as well as the property, to correctly detect changes. - // - // Mutex notes: Safe for invocation in or out of mutex - private var needsWeakTailObserver: Bool { - return tailPath == "self" - } - - // Accessor for the observed property value. This will correctly get the value from the end of the key path if we are using a tailObserver. - // - // Mutex notes: Method must be called from *INSIDE* mutex. - private func sourceValue() -> Any? { - if let t = tailObserver, !isObservingTail { - return t.sourceValue() - } else { - return source.takeUnretainedValue().value(forKeyPath: key) - } - } - - // If we're observing a key path, then we need to update our chain of KeyValueObservers when part of the path changes. This starts that process from the change point. - // - // Mutex notes: Method must be called from *INSIDE* mutex. - private func updateTailObserverGivenChangeDictionary(change: [NSKeyValueChangeKey: Any]) { - if let newValue = change[NSKeyValueChangeKey.newKey] as? NSObject { - let value: NSObject? = newValue == NSNull() ? nil : newValue - updateTailObserver(onValue: value, isInitial: false) - } else { - updateTailObserver(onValue: sourceValue() as? NSObject, isInitial: false) - } - } - - // Implementation of standard key-value observing method. - public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { - if context != Unmanaged.passUnretained(self).toOpaque() { - super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) - } - - guard let c = change else { - assertionFailure("Expected change dictionary") - return - } - - if self.isObservingTail { - let cb = mutex.sync { () -> Callback? in - if needsWeakTailObserver { - updateTailObserverGivenChangeDictionary(change: c) - } - return self.callback - } - cb?(c, .valueChanged) - - } else { - let tuple = mutex.sync { () -> (Callback, [NSKeyValueChangeKey: Any])? in - var transmittedChange: [NSKeyValueChangeKey: Any] = [:] - if !options.intersection(NSKeyValueObservingOptions.old).isEmpty { - transmittedChange[NSKeyValueChangeKey.oldKey] = tailObserver?.sourceValue() - } - if let _ = c[NSKeyValueChangeKey.notificationIsPriorKey] as? Bool { - transmittedChange[NSKeyValueChangeKey.notificationIsPriorKey] = true - } - updateTailObserverGivenChangeDictionary(change: c) - if !options.intersection(NSKeyValueObservingOptions.new).isEmpty { - transmittedChange[NSKeyValueChangeKey.newKey] = tailObserver?.sourceValue() - } - if let c = callback { - return (c, transmittedChange) - } - return nil - } - if let (cb, tc) = tuple { - cb(tc, .pathChanged) - } - } - } - - /// Stop observing. - public func cancel() { - cancel(.cancelled) - } - - // Mutex notes: Method is called *OUTSIDE* mutex - private func cancel(_ reason: CallbackReason) { - let cb = mutex.sync { () -> Callback? in - guard let c = callback else { return nil } - - // Flag as inactive - callback = nil - - // Remove the observations from this object - if key != "self" { - source.takeUnretainedValue().removeObserver(self, forKeyPath: key, context: Unmanaged.passUnretained(self).toOpaque()) - } - - // Cancel the OnDelete object - let unknown = objc_getAssociatedObject(source, Unmanaged.passUnretained(self).toOpaque()) - if let deletionObject = unknown as? OnDelete { - deletionObject.cancel() - } - - // And clear the associated object - objc_setAssociatedObject(source, Unmanaged.passUnretained(self).toOpaque(), nil, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN); - - // Remove tail observers - updateTailObserver(onValue: nil, isInitial: false) - - // Send notifications - return reason != .cancelled ? c : nil - } - - cb?([:], reason) - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlLifetime.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlLifetime.swift deleted file mode 100644 index af72fe2..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlLifetime.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// CwlLifetime.swift -// CwlUtils -// -// Created by Matt Gallagher on 2017/04/18. -// Copyright © 2017 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// This protocol exists to keep alive and terminate-at-will asynchronous and ongoing tasks. It is an -/// implementation of the "Disposable" pattern. -/// -/// While conformance to this protocol requires just one function, conforming to this protocol also signals three important traits: -/// 1. instances manage an underlying resource -/// 2. the resource will last until one the first of the following end-conditions occurs: -/// a. The resource terminates on its own -/// b. All references to the Lifetime instance are released -/// c. The `cancel()` function is invoked -/// -/// ideally, as well: -/// -/// 3. no further effects or actions of any kind will occur after the first end-condition is registered in the -/// resource's context, no further messages or notifications sent or received, no resurrection possible -/// 4. any subsequent end conditions after the first are safe and have no effect -/// 5. if Self is a reference type, `cancel` should be explicitly invoked on deinit -/// 6. `cancel` should invoke `cancel` on any owned child Lifetime instances -/// -/// Examples of violations of the last 4 points exist be should be kept rare. -public protocol Lifetime { - /// Immediately set the resource managed by this instance to an "end-of-life" state. - /// This a mutating method and should be called only in executation contexts where changing `self` is threadsafe. - mutating func cancel() -} - -public typealias Cancellable = Lifetime - -/// An array of Lifetime that conforms to Lifetime. Note that a conditional conformance on Array can't properly conform -// to Lifetime since it would permit adding new lifetimes after the aggregate was cancelled. -public class AggregateLifetime: Lifetime { - private var lifetimes: [Lifetime]? - public init(lifetimes: [Lifetime] = []) { - self.lifetimes = lifetimes - } - public func cancel() { - if var ls = lifetimes { - for i in ls.indices { - ls[i].cancel() - } - lifetimes = nil - } - } - public static func +=(left: AggregateLifetime, right: Lifetime) { - left.lifetimes?.append(right) - } - deinit { - cancel() - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlMutex.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlMutex.swift deleted file mode 100644 index 4b73cab..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlMutex.swift +++ /dev/null @@ -1,129 +0,0 @@ -// -// CwlMutex.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -#if os(Linux) - import Glibc -#else - import Darwin -#endif - -/// A basic mutex protocol that requires nothing more than "performing work inside the mutex". -public protocol ScopedMutex { - /// Perform work inside the mutex - func sync(execute work: () throws -> R) rethrows -> R - - /// Perform work inside the mutex, returning immediately if the mutex is in-use - func trySync(execute work: () throws -> R) rethrows -> R? -} - -/// A more specific kind of mutex that assume an underlying primitive and unbalanced lock/trylock/unlock operators -public protocol RawMutex: ScopedMutex { - associatedtype MutexPrimitive - - var underlyingMutex: MutexPrimitive { get set } - - func unbalancedLock() - func unbalancedTryLock() -> Bool - func unbalancedUnlock() -} - -extension RawMutex { - public func sync(execute work: () throws -> R) rethrows -> R { - unbalancedLock() - defer { unbalancedUnlock() } - return try work() - } - public func trySync(execute work: () throws -> R) rethrows -> R? { - guard unbalancedTryLock() else { return nil } - defer { unbalancedUnlock() } - return try work() - } -} - -/// A basic wrapper around the "NORMAL" and "RECURSIVE" `pthread_mutex_t` (a general purpose mutex). This type is a "class" type to take advantage of the "deinit" method and prevent accidental copying of the `pthread_mutex_t`. -public final class PThreadMutex: RawMutex { - public typealias MutexPrimitive = pthread_mutex_t - - // Non-recursive "PTHREAD_MUTEX_NORMAL" and recursive "PTHREAD_MUTEX_RECURSIVE" mutex types. - public enum PThreadMutexType { - case normal - case recursive - } - - public var underlyingMutex = pthread_mutex_t() - - /// Default constructs as ".Normal" or ".Recursive" on request. - public init(type: PThreadMutexType = .normal) { - var attr = pthread_mutexattr_t() - guard pthread_mutexattr_init(&attr) == 0 else { - preconditionFailure() - } - switch type { - case .normal: - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_NORMAL) - case .recursive: - pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) - } - guard pthread_mutex_init(&underlyingMutex, &attr) == 0 else { - preconditionFailure() - } - pthread_mutexattr_destroy(&attr) - } - - deinit { - pthread_mutex_destroy(&underlyingMutex) - } - - public func unbalancedLock() { - pthread_mutex_lock(&underlyingMutex) - } - - public func unbalancedTryLock() -> Bool { - return pthread_mutex_trylock(&underlyingMutex) == 0 - } - - public func unbalancedUnlock() { - pthread_mutex_unlock(&underlyingMutex) - } -} - -/// A basic wrapper around `os_unfair_lock` (a non-FIFO, high performance lock that offers safety against priority inversion). This type is a "class" type to prevent accidental copying of the `os_unfair_lock`. -@available(OSX 10.12, iOS 10, tvOS 10, watchOS 3, *) -public final class UnfairLock: RawMutex { - public typealias MutexPrimitive = os_unfair_lock - - public init() { - } - - /// Exposed as an "unsafe" public property so non-scoped patterns can be implemented, if required. - public var underlyingMutex = os_unfair_lock() - - public func unbalancedLock() { - os_unfair_lock_lock(&underlyingMutex) - } - - public func unbalancedTryLock() -> Bool { - return os_unfair_lock_trylock(&underlyingMutex) - } - - public func unbalancedUnlock() { - os_unfair_lock_unlock(&underlyingMutex) - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlOnDelete.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlOnDelete.swift deleted file mode 100644 index 4f60957..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlOnDelete.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// CwlOnDelete.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Swift - -public final class OnDelete: Lifetime { - var block: (() -> Void)? - - public init(_ b: @escaping () -> Void) { - block = b - } - - public func invalidate() { - block = nil - } - - public func cancel() { - block?() - block = nil - } - - public var isValid: Bool { - return block != nil - } - - deinit { - cancel() - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlRandom.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlRandom.swift deleted file mode 100644 index 8351bad..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlRandom.swift +++ /dev/null @@ -1,229 +0,0 @@ -// -// CwlRandom.swift -// CwlUtils -// -// Created by Matt Gallagher on 2016/05/17. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -#if !swift(>=4.2) - public protocol RandomNumberGenerator { - mutating func next() -> UInt64 - } - public struct SystemRandomNumberGenerator: RandomNumberGenerator { - public init() {} - public mutating func next() -> UInt64 { - var value: UInt64 = 0 - arc4random_buf(&value, MemoryLayout.size) - return value - } - } -#endif - -public protocol RandomGenerator: RandomNumberGenerator { - mutating func randomize(buffer: UnsafeMutableRawBufferPointer) -} - -extension RandomGenerator { - public mutating func randomize(value: inout Value) { - withUnsafeMutablePointer(to: &value) { ptr in - self.randomize(buffer: UnsafeMutableRawBufferPointer(start: ptr, count: MemoryLayout.size)) - } - } -} - -public struct DevRandom: RandomGenerator { - class FileDescriptor { - let value: CInt - init() { - value = open("/dev/urandom", O_RDONLY) - precondition(value >= 0) - } - deinit { - close(value) - } - } - - let fd: FileDescriptor - public init() { - fd = FileDescriptor() - } - - public mutating func randomize(buffer: UnsafeMutableRawBufferPointer) { - let result = read(fd.value, buffer.baseAddress, buffer.count) - precondition(result == buffer.count) - } - - public mutating func next() -> UInt64 { - var bits: UInt64 = 0 - withUnsafeMutablePointer(to: &bits) { ptr in - self.randomize(buffer: UnsafeMutableRawBufferPointer(start: ptr, count: MemoryLayout.size)) - } - return bits - } -} - -public struct Xoshiro: RandomNumberGenerator { - public typealias StateType = (UInt64, UInt64, UInt64, UInt64) - - private var state: StateType = (0, 0, 0, 0) - - public init() { - var dr = DevRandom() - dr.randomize(value: &state) - } - - public init(seed: StateType) { - self.state = seed - } - - public mutating func next() -> UInt64 { - // Derived from public domain implementation of xoshiro256** here: - // http://xoshiro.di.unimi.it - // by David Blackman and Sebastiano Vigna - let x = state.1 &* 5 - let result = ((x &<< 7) | (x &>> 57)) &* 9 - let t = state.1 &<< 17 - state.2 ^= state.0 - state.3 ^= state.1 - state.1 ^= state.2 - state.0 ^= state.3 - state.2 ^= t - state.3 = (state.3 &<< 45) | (state.3 &>> 19) - return result - } -} - -public struct MersenneTwister: RandomNumberGenerator { - // 312 words of storage is 13 x 6 x 4 - private typealias StateType = ( - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, - UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64, UInt64 - ) - - private var state_internal: StateType = ( - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - ) - private var index: Int - private static let stateCount: Int = 312 - - public init() { - var dr = DevRandom() - dr.randomize(value: &state_internal) - index = MersenneTwister.stateCount - } - - public init(seed: UInt64) { - index = MersenneTwister.stateCount - withUnsafeMutablePointer(to: &state_internal) { $0.withMemoryRebound(to: UInt64.self, capacity: MersenneTwister.stateCount) { state in - state[0] = seed - for i in 1..> 62)) &+ UInt64(i) - } - } } - } - - public mutating func next() -> UInt64 { - if index == MersenneTwister.stateCount { - withUnsafeMutablePointer(to: &state_internal) { $0.withMemoryRebound(to: UInt64.self, capacity: MersenneTwister.stateCount) { state in - let n = MersenneTwister.stateCount - let m = n / 2 - let a: UInt64 = 0xB5026F5AA96619E9 - let lowerMask: UInt64 = (1 << 31) - 1 - let upperMask: UInt64 = ~lowerMask - var (i, j, stateM) = (0, m, state[m]) - repeat { - let x1 = (state[i] & upperMask) | (state[i &+ 1] & lowerMask) - state[i] = state[i &+ m] ^ (x1 >> 1) ^ ((state[i &+ 1] & 1) &* a) - let x2 = (state[j] & upperMask) | (state[j &+ 1] & lowerMask) - state[j] = state[j &- m] ^ (x2 >> 1) ^ ((state[j &+ 1] & 1) &* a) - (i, j) = (i &+ 1, j &+ 1) - } while i != m &- 1 - - let x3 = (state[m &- 1] & upperMask) | (stateM & lowerMask) - state[m &- 1] = state[n &- 1] ^ (x3 >> 1) ^ ((stateM & 1) &* a) - let x4 = (state[n &- 1] & upperMask) | (state[0] & lowerMask) - state[n &- 1] = state[m &- 1] ^ (x4 >> 1) ^ ((state[0] & 1) &* a) - } } - - index = 0 - } - - var result = withUnsafePointer(to: &state_internal) { $0.withMemoryRebound(to: UInt64.self, capacity: MersenneTwister.stateCount) { ptr in - return ptr[index] - } } - index = index &+ 1 - - result ^= (result >> 29) & 0x5555555555555555 - result ^= (result << 17) & 0x71D67FFFEDA60000 - result ^= (result << 37) & 0xFFF7EEE000000000 - result ^= result >> 43 - - return result - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlResult.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlResult.swift deleted file mode 100644 index 0888b94..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlResult.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// CwlResult.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// Either a Success value or an Failure error -public extension Result { - /// Convenience tester/getter for the value - var value: Success? { - switch self { - case .success(let s): return s - case .failure: return nil - } - } - - /// Convenience tester/getter for the error - var error: Failure? { - switch self { - case .success: return nil - case .failure(let f): return f - } - } - - /// Test whether the result is an error. - var isSuccess: Bool { - return !isFailure - } - - /// Test whether the result is an error. - var isFailure: Bool { - switch self { - case .success: return false - case .failure: return true - } - } -} - -public extension Result where Failure == Swift.Error { - /// Chains another Result to this one. In the event that this Result is a .Success, the provided transformer closure is used to transform the value into another value (of a potentially new type) and a new Result is made from that value. In the event that this Result is a .Failure, the next Result will have the same error as this one. - func mapThrows(_ transform: (Success) throws -> U) -> Result { - switch self { - case .success(let val): return Result { try transform(val) } - case .failure(let e): return .failure(e) - } - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlScalarScanner.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlScalarScanner.swift deleted file mode 100644 index bbef1d5..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlScalarScanner.swift +++ /dev/null @@ -1,464 +0,0 @@ -// -// CwlScalarScanner.swift -// CwlWhitespace -// -// Created by Matt Gallagher on 2016/01/05. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Swift - -/// A type for representing the different possible failure conditions when using ScalarScanner -public enum ScalarScannerError: Error { - /// The scalar at the specified index doesn't match the expected grammar - case unexpected(at: Int) - - /// Expected `wanted` at offset `at` - case matchFailed(wanted: String, at: Int) - - /// Expected numerals at offset `at` - case expectedInt(at: Int) - - /// Attempted to read `count` scalars from position `at` but hit the end of the sequence - case endedPrematurely(count: Int, at: Int) - - /// Unable to find search patter `wanted` at or after `after` in the sequence - case searchFailed(wanted: String, after: Int) -} - -extension UnicodeScalar { - /// Tests if the scalar is within a range - public func isInRange(_ range: ClosedRange) -> Bool { - return range.contains(self) - } - - /// Tests if the scalar is a plain ASCII digit - public var isDigit: Bool { - return ("0"..."9").contains(self) - } - - /// Tests if the scalar is a plain ASCII English alphabet lowercase letter - public var isLower: Bool { - return ("a"..."z").contains(self) - } - - /// Tests if the scalar is a plain ASCII English alphabet uppercase letter - public var isUpper: Bool { - return ("A"..."Z").contains(self) - } - - /// Tests if the scalar is a plain ASCII English alphabet letter - public var isLetter: Bool { - return isLower || isUpper - } -} - -/// A structure for traversing a `String.UnicodeScalarView`. -/// -/// **UNICODE WARNING**: this struct ignores all Unicode combining rules and parses each scalar individually. The rules for parsing must allow combined characters to be parsed separately or better yet, forbid combining characters at critical parse locations. If your data structure does not include these types of rule then you should be iterating over the `Character` elements in a `String` rather than using this struct. -public struct ScalarScanner where C.Iterator.Element == UnicodeScalar { - /// The underlying storage - public let scalars: C - - /// Current scanning index - public var index: C.Index - - /// Number of scalars consumed up to `index` (since String.UnicodeScalarView.Index is not a RandomAccessIndex, this makes determining the position *much* easier) - public var consumed: Int - - /// Construct from a String.UnicodeScalarView and a context value - public init(scalars: C) { - self.scalars = scalars - self.index = self.scalars.startIndex - self.consumed = 0 - } - - /// Sets the index back to the beginning and clears the consumed count - public mutating func reset() { - index = scalars.startIndex - consumed = 0 - } - - /// Throw if the scalars at the current `index` don't match the scalars in `scalars`. Advance the `index` to the end of the match. - /// WARNING: `string` is used purely for its `unicodeScalars` property and matching is purely based on direct scalar comparison (no decomposition or normalization is performed). - public mutating func match(string: String) throws { - let (newIndex, newConsumed) = try string.unicodeScalars.reduce((index: index, count: 0)) { (tuple: (index: C.Index, count: Int), scalar: UnicodeScalar) in - if tuple.index == self.scalars.endIndex || scalar != self.scalars[tuple.index] { - throw ScalarScannerError.matchFailed(wanted: string, at: consumed) - } - return (index: self.scalars.index(after: tuple.index), count: tuple.count + 1) - } - index = newIndex - consumed += newConsumed - } - - /// Throw if the next scalar at the current `index` fails to match the next scalar in `scalars`. Advance the `index` to the end of the match. - public mutating func match(scalar: UnicodeScalar) throws { - if index == scalars.endIndex || scalars[index] != scalar { - throw ScalarScannerError.matchFailed(wanted: String(scalar), at: consumed) - } - index = self.scalars.index(after: index) - consumed += 1 - } - - /// Throw if the next scalar at the current `index` fails to match the next scalar in `scalars`. Advance the `index` to the end of the match. - public mutating func match(where test: (UnicodeScalar) -> Bool) throws { - if index == scalars.endIndex || !test(scalars[index]) { - try withoutActuallyEscaping(test) { t in - throw ScalarScannerError.matchFailed(wanted: String(describing: t), at: consumed) - } - } - index = self.scalars.index(after: index) - consumed += 1 - } - - /// Throw if the scalars at the current `index` don't match the scalars in `value`. Advance the `index` to the end of the match. - mutating func read(where test: (UnicodeScalar) -> Bool) throws -> UnicodeScalar { - if index == scalars.endIndex || !test(scalars[index]) { - try withoutActuallyEscaping(test) { t in - throw ScalarScannerError.matchFailed(wanted: String(describing: t), at: consumed) - } - } - let s = scalars[index] - index = self.scalars.index(after: index) - consumed += 1 - return s - } - - /// Consume scalars from the contained collection, up to but not including the first instance of `scalar` found. `index` is advanced to immediately before `scalar`. Returns all scalars consumed prior to `scalar` as a `String`. Throws if `scalar` is never found. - public mutating func readUntil(scalar: UnicodeScalar) throws -> String { - var i = index - let previousConsumed = consumed - try skipUntil(scalar: scalar) - - var result = "" - result.reserveCapacity(consumed - previousConsumed) - while i != index { - result.unicodeScalars.append(scalars[i]) - i = scalars.index(after: i) - } - - return result - } - - /// Consume scalars from the contained collection, up to but not including the first instance of `string` found. `index` is advanced to immediately before `string`. Returns all scalars consumed prior to `string` as a `String`. Throws if `string` is never found. - /// WARNING: `string` is used purely for its `unicodeScalars` property and matching is purely based on direct scalar comparison (no decomposition or normalization is performed). - public mutating func readUntil(string: String) throws -> String { - var i = index - let previousConsumed = consumed - try skipUntil(string: string) - - var result = "" - result.reserveCapacity(consumed - previousConsumed) - while i != index { - result.unicodeScalars.append(scalars[i]) - i = scalars.index(after: i) - } - - return result - } - - /// Consume scalars from the contained collection, up to but not including the first instance of any character in `set` found. `index` is advanced to immediately before `string`. Returns all scalars consumed prior to `string` as a `String`. Throws if no matching characters are ever found. - public mutating func readUntil(set inSet: Set) throws -> String { - var i = index - let previousConsumed = consumed - try skipUntil(set: inSet) - - var result = "" - result.reserveCapacity(consumed - previousConsumed) - while i != index { - result.unicodeScalars.append(scalars[i]) - i = scalars.index(after: i) - } - - return result - } - - /// Peeks at the scalar at the current `index`, testing it with function `f`. If `f` returns `true`, the scalar is appended to a `String` and the `index` increased. The `String` is returned at the end. - public mutating func readWhile(true test: (UnicodeScalar) -> Bool) -> String { - var string = "" - while index != scalars.endIndex { - if !test(scalars[index]) { - break - } - string.unicodeScalars.append(scalars[index]) - index = self.scalars.index(after: index) - consumed += 1 - } - return string - } - - /// Repeatedly peeks at the scalar at the current `index`, testing it with function `f`. If `f` returns `true`, the `index` increased. If `false`, the function returns. - public mutating func skipWhile(true test: (UnicodeScalar) -> Bool) { - while index != scalars.endIndex { - if !test(scalars[index]) { - return - } - index = self.scalars.index(after: index) - consumed += 1 - } - } - - /// Consume scalars from the contained collection, up to but not including the first instance of `scalar` found. `index` is advanced to immediately before `scalar`. Throws if `scalar` is never found. - public mutating func skipUntil(scalar: UnicodeScalar) throws { - var i = index - var c = 0 - while i != scalars.endIndex && scalars[i] != scalar { - i = self.scalars.index(after: i) - c += 1 - } - if i == scalars.endIndex { - throw ScalarScannerError.searchFailed(wanted: String(scalar), after: consumed) - } - index = i - consumed += c - } - - /// Consume scalars from the contained collection, up to but not including the first instance of any scalar from `set` is found. `index` is advanced to immediately before `scalar`. Throws if `scalar` is never found. - public mutating func skipUntil(set inSet: Set) throws { - var i = index - var c = 0 - while i != scalars.endIndex && !inSet.contains(scalars[i]) { - i = self.scalars.index(after: i) - c += 1 - } - if i == scalars.endIndex { - throw ScalarScannerError.searchFailed(wanted: "One of: \(inSet.sorted())", after: consumed) - } - index = i - consumed += c - } - - /// Consume scalars from the contained collection, up to but not including the first instance of `string` found. `index` is advanced to immediately before `string`. Throws if `string` is never found. - /// WARNING: `string` is used purely for its `unicodeScalars` property and matching is purely based on direct scalar comparison (no decomposition or normalization is performed). - public mutating func skipUntil(string: String) throws { - let match = string.unicodeScalars - guard let first = match.first else { return } - if match.count == 1 { - return try skipUntil(scalar: first) - } - var i = index - var j = index - var c = 0 - var d = 0 - let remainder = match[match.index(after: match.startIndex).. 0 { - if i == scalars.endIndex { - throw ScalarScannerError.endedPrematurely(count: count, at: consumed) - } - i = self.scalars.index(after: i) - c -= 1 - } - index = i - consumed += count - } - } - - /// Attempt to advance the `index` by count, returning `false` and `index` unchanged if `index` would advance past the end, otherwise returns `true` and `index` is advanced. - public mutating func backtrack(count: Int = 1) throws { - if count <= consumed { - if count == 1 { - index = scalars.index(index, offsetBy: -1) - consumed -= 1 - } else { - let limit = consumed - count - while consumed != limit { - index = scalars.index(index, offsetBy: -1) - consumed -= 1 - } - } - } else { - throw ScalarScannerError.endedPrematurely(count: -count, at: consumed) - } - } - - /// Returns all content after the current `index`. `index` is advanced to the end. - public mutating func remainder() -> String { - var string: String = "" - while index != scalars.endIndex { - string.unicodeScalars.append(scalars[index]) - index = scalars.index(after: index) - consumed += 1 - } - return string - } - - /// If the next scalars after the current `index` match `scalars`, advance over them and return `true`, otherwise, leave `index` unchanged and return `false`. - /// WARNING: `string` is used purely for its `unicodeScalars` property and matching is purely based on direct scalar comparison (no decomposition or normalization is performed). - public mutating func conditional(string: String) -> Bool { - var i = index - var c = 0 - for s in string.unicodeScalars { - if i == scalars.endIndex || s != scalars[i] { - return false - } - i = self.scalars.index(after: i) - c += 1 - } - index = i - consumed += c - return true - } - - /// If the next scalar after the current `index` match `scalars`, advance over it and return `true`, otherwise, leave `index` unchanged and return `false`. - public mutating func conditional(scalar: UnicodeScalar) -> Bool { - if index == scalars.endIndex || scalar != scalars[index] { - return false - } - index = self.scalars.index(after: index) - consumed += 1 - return true - } - - /// If the next scalar after the current `index` match `value`, advance over it and return `true`, otherwise, leave `index` unchanged and return `false`. - public mutating func conditional(where test: (UnicodeScalar) -> Bool) -> UnicodeScalar? { - if index == scalars.endIndex || !test(scalars[index]) { - return nil - } - let s = scalars[index] - index = self.scalars.index(after: index) - consumed += 1 - return s - } - - /// If the `index` is at the end, throw, otherwise, return the next scalar at the current `index` without advancing `index`. - public func requirePeek() throws -> UnicodeScalar { - if index == scalars.endIndex { - throw ScalarScannerError.endedPrematurely(count: 1, at: consumed) - } - return scalars[index] - } - - /// If `index` + `ahead` is within bounds, return the scalar at that location, otherwise return `nil`. The `index` will not be changed in any case. - public func peek(skipCount: Int = 0) -> UnicodeScalar? { - var i = index - var c = skipCount - while c > 0 && i != scalars.endIndex { - i = self.scalars.index(after: i) - c -= 1 - } - if i == scalars.endIndex { - return nil - } - return scalars[i] - } - - /// If the `index` is at the end, throw, otherwise, return the next scalar at the current `index`, advancing `index` by one. - public mutating func readScalar() throws -> UnicodeScalar { - if index == scalars.endIndex { - throw ScalarScannerError.endedPrematurely(count: 1, at: consumed) - } - let result = scalars[index] - index = self.scalars.index(after: index) - consumed += 1 - return result - } - - /// Throws if scalar at the current `index` is not in the range `"0"` to `"9"`. Consume scalars `"0"` to `"9"` until a scalar outside that range is encountered. Return the integer representation of the value scanned, interpreted as a base 10 integer. `index` is advanced to the end of the number. - public mutating func readInt() throws -> Int { - let result = conditionalInt() - guard let r = result else { - throw ScalarScannerError.expectedInt(at: consumed) - } - return r - } - - /// Throws if scalar at the current `index` is not in the range `"0"` to `"9"`. Consume scalars `"0"` to `"9"` until a scalar outside that range is encountered. Return the integer representation of the value scanned, interpreted as a base 10 integer. `index` is advanced to the end of the number. - public mutating func conditionalInt() -> Int? { - var result = 0 - var i = index - var c = 0 - while i != scalars.endIndex && scalars[i].isDigit { - let digit = Int(scalars[i].value - UnicodeScalar("0").value) - // Avoid overflow - if (Int.max - digit) / 10 < result { - return nil - } - result = result * 10 + digit - i = self.scalars.index(after: i) - c += 1 - } - if i == index { - return nil - } - index = i - consumed += c - return result - } - - /// Consume and return `count` scalars. `index` will be advanced by count. Throws if end of `scalars` occurs before consuming `count` scalars. - public mutating func readScalars(count: Int) throws -> String { - var result = String() - result.reserveCapacity(count) - var i = index - for _ in 0.. ScalarScannerError { - return ScalarScannerError.unexpected(at: consumed) - } - - public var isAtEnd: Bool { - return index == scalars.endIndex - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlSerializingContext.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlSerializingContext.swift deleted file mode 100644 index 420ade0..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlSerializingContext.swift +++ /dev/null @@ -1,165 +0,0 @@ -// -// CwlSerializingContext.swift -// CwlUtils -// -// Created by Matt Gallagher on 19/1/19. -// Copyright © 2019 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any purpose with or without -// fee is hereby granted, provided that the above copyright notice and this permission notice -// appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS -// SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -// AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -// NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -// OF THIS SOFTWARE. -// - -import Foundation - -/// An `ExecutionContext` wraps a mutex around calls invoked by an underlying execution context. The effect is to serialize concurrent contexts (immediate or concurrent). -public struct SerializingContext: CustomExecutionContext { - public let underlying: Exec - public let mutex = PThreadMutex(type: .recursive) - - public init(concurrentContext: Exec) { - underlying = concurrentContext - } - - public var type: ExecutionType { - switch underlying.type { - case .immediate: return .mutex - case .concurrentAsync: return .serialAsync - case .mutex, .recursiveMutex, .thread, .threadAsync, .serialAsync: return underlying.type - } - } - - public func invoke(_ execute: @escaping () -> Void) { - if case .direct = underlying { - mutex.sync(execute: execute) - } else { - underlying.invoke { [mutex] in mutex.sync(execute: execute) } - } - } - - public func invokeAsync(_ execute: @escaping () -> Void) { - underlying.invokeAsync { [mutex] in mutex.sync(execute: execute) } - } - - @available(*, deprecated, message: "Use invokeSync instead") - public func invokeAndWait(_ execute: @escaping () -> Void) { - _ = invokeSync(execute) - } - - public func invokeSync(_ execute: () throws -> Return) rethrows -> Return { - if case .direct = underlying { - return try mutex.sync(execute: execute) - } else { - return try underlying.invokeSync { [mutex] () throws -> Return in try mutex.sync(execute: execute) } - } - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`) unless the returned `Lifetime` is cancelled or released before running occurs. - public func singleTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - return mutex.sync { () -> Lifetime in - let wrapper = MutexWrappedLifetime(mutex: mutex) - let lifetime = underlying.singleTimer(interval: interval, leeway: leeway) { [weak wrapper] in - if let w = wrapper { - w.mutex.sync { - // Need to perform this double check since the timer may have been cancelled/changed before we managed to enter the mutex - if w.lifetime != nil { - handler() - } - } - } - } - wrapper.lifetime = lifetime - return wrapper - } - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, unless the returned `Lifetime` is cancelled or released before running occurs. - public func singleTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - return mutex.sync { () -> Lifetime in - let wrapper = MutexWrappedLifetime(mutex: mutex) - let lifetime = underlying.singleTimer(parameter: parameter, interval: interval, leeway: leeway) { [weak wrapper] p in - if let w = wrapper { - w.mutex.sync { - // Need to perform this double check since the timer may have been cancelled/changed before we managed to enter the mutex - if w.lifetime != nil { - handler(p) - } - } - } - } - wrapper.lifetime = lifetime - return wrapper - } - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - public func periodicTimer(interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping () -> Void) -> Lifetime { - return mutex.sync { () -> Lifetime in - let wrapper = MutexWrappedLifetime(mutex: mutex) - let lifetime = underlying.periodicTimer(interval: interval, leeway: leeway) { [weak wrapper] in - if let w = wrapper { - w.mutex.sync { - // Need to perform this double check since the timer may have been cancelled/changed before we managed to enter the mutex - if w.lifetime != nil { - handler() - } - } - } - } - wrapper.lifetime = lifetime - return wrapper - } - } - - /// Run `execute` on the execution context after `interval` (plus `leeway`), passing the `parameter` value as an argument, and again every `interval` (within a `leeway` margin of error) unless the returned `Lifetime` is cancelled or released before running occurs. - public func periodicTimer(parameter: T, interval: DispatchTimeInterval, leeway: DispatchTimeInterval, handler: @escaping (T) -> Void) -> Lifetime { - return mutex.sync { () -> Lifetime in - let wrapper = MutexWrappedLifetime(mutex: mutex) - let lifetime = underlying.periodicTimer(parameter: parameter, interval: interval, leeway: leeway) { [weak wrapper] p in - if let w = wrapper { - w.mutex.sync { - if w.lifetime != nil { - handler(p) - } - } - } - } - wrapper.lifetime = lifetime - return wrapper - } - } - - /// Gets a timestamp representing the host uptime the in the current context - public func timestamp() -> DispatchTime { - return underlying.timestamp() - } -} - -/// A wrapper around Lifetime that applies a mutex on the cancel operation. -/// This is a class so that `SerializingContext` can pass it weakly to the timer closure, avoiding having the timer keep itself alive. -private class MutexWrappedLifetime: Lifetime { - var lifetime: Lifetime? = nil - let mutex: PThreadMutex - - init(mutex: PThreadMutex) { - self.mutex = mutex - } - - func cancel() { - mutex.sync { - lifetime?.cancel() - lifetime = nil - } - } - - deinit { - cancel() - } -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlStackFrame.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlStackFrame.swift deleted file mode 100644 index a3f66a3..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlStackFrame.swift +++ /dev/null @@ -1,137 +0,0 @@ -// -// CwlStackFrame.swift -// CwlUtils -// -// Created by Matt Gallagher on 2016/02/26. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Darwin - -#if SWIFT_PACKAGE -import CwlFrameAddress -#endif - -/// A utility class for walking through stack frames. -public struct StackFrame { - /// The underlying data of the struct is a basic UInt. A value of 0 represents an invalid frame. - public let address: UInt - - /// The return address is pushed onto the stack immediately ahead of the previous frame pointer. If `self.address` is `0` this will return `0` - /// - returns: the return address for the stack frame identified by `address` - public var returnAddress: UInt { get { - guard address != 0 else { return 0 } - return UnsafeMutablePointer(bitPattern: address)!.advanced(by: FP_LINK_OFFSET).pointee - } } - - /// Preferred constructor gives the "current" StackFrame (where "current" refers to the frame that invokes this function). Also returns the `stackBounds` for use in subsequent calls to `next`. - /// - returns: a `StackFrame` representing the caller's stack frame and `stackBounds` which should be passed into any future calls to `next`. - @inline(never) - public static func current() -> (frame: StackFrame, stackBounds: ClosedRange) { - let stackBounds = currentStackBounds() - let frame = StackFrame(address: frame_address()) - - if !stackBounds.contains(frame.address) || !isAligned(frame.address) { - return (StackFrame(address: 0), stackBounds: stackBounds); - } - - return (frame: frame.next(inBounds: stackBounds), stackBounds: stackBounds) - } - - /// Follow the frame link pointer and return the result as another StackFrame. - /// - returns: a `StackFrame` representing the stack frame after self, if it exists and is valid. - public func next(inBounds stackBounds: ClosedRange) -> StackFrame { - guard address != 0 else { return self } - let nextFrameAddress = UnsafeMutablePointer(bitPattern: address)?.pointee - if !stackBounds.contains(nextFrameAddress!) || !isAligned(nextFrameAddress!) || (nextFrameAddress ?? 0) <= address { - return StackFrame(address: 0) - } - - return StackFrame(address: nextFrameAddress!) - } -} - -/// Traverses the frames on current stack and gathers the return addresses for traversed stack frames as an array of UInt. -/// - parameter skip: number of stack frames to skip over before copying return addresses to the result array. -/// - parameter maximumAddresses: limit on the number of return addresses to return (default is `Int.max`) -/// - returns: The array of return addresses on the current stack within the skip/maximumAddresses bounds. -@inline(never) -public func callStackReturnAddresses(skip: UInt = 0, maximumAddresses: Int = Int.max) -> [UInt] { - guard maximumAddresses > 0 else { return [] } - - var result = [UInt]() - var skipsRemaining = skip - var addressesRemaining = maximumAddresses - - let maximumReserve = 32 - result.reserveCapacity(maximumAddresses < maximumReserve ? maximumAddresses : maximumReserve) - - var (frame, bounds) = StackFrame.current() - var returnAddress = frame.returnAddress - - while returnAddress != 0 && addressesRemaining > 0 { - if skipsRemaining > 0 { - skipsRemaining -= 1 - } else { - result.append(returnAddress) - addressesRemaining -= 1 - } - frame = frame.next(inBounds: bounds) - returnAddress = frame.returnAddress - } - - return result -} - -// These values come from: -// http://www.opensource.apple.com/source/Libc/Libc-997.90.3/gen/thread_stack_pcs.c -#if arch(x86_64) - let ISALIGNED_MASK: UInt = 0xf - let ISALIGNED_RESULT: UInt = 0 - let FP_LINK_OFFSET = 1 -#elseif arch(i386) - let ISALIGNED_MASK: UInt = 0xf - let ISALIGNED_RESULT: UInt = 8 - let FP_LINK_OFFSET = 1 -#else - let ISALIGNED_MASK: UInt = 0x1 - let ISALIGNED_RESULT: UInt = 0 - let FP_LINK_OFFSET = 1 -#endif - -/// Use the pthread functions to get the bounds of the current stack as a closed interval. -/// - returns: a closed interval containing the memory address range for the current stack -private func currentStackBounds() -> ClosedRange { - let currentThread = pthread_self() - let t = UInt(bitPattern: pthread_get_stackaddr_np(currentThread)) - return ((t - UInt(bitPattern: pthread_get_stacksize_np(currentThread))) ... t) -} - -/// We traverse the stack using "downstack links". To avoid problems with these links, we ensure that frame pointers are "aligned" (valid stack frames are 16 byte aligned on x86 and 2 byte aligned on ARM). -/// - parameter address: the address to analyze -/// - returns: true if `address` is aligned according to stack rules for the current architecture -private func isAligned(_ address: UInt) -> Bool { - return (address & ISALIGNED_MASK) == ISALIGNED_RESULT -} - -/// Get the calling function's address and look it up, attempting to find the symbol. -/// NOTE: This is mostly useful in debug environements. Outside this, non-public functions and images without symbols will return incomplete information. -/// - parameter skipCount: the number of stack frames to skip over before analyzing -/// - returns: the `dladdr` identifier for the specified frame, if one exists -@inline(never) -public func callingFunctionIdentifier(skipCount: UInt = 0) -> String { - let address = callStackReturnAddresses(skip: skipCount + 1, maximumAddresses: 1).first ?? 0 - return AddressInfo(address: address).symbol -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlSysctl.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlSysctl.swift deleted file mode 100644 index e502919..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlSysctl.swift +++ /dev/null @@ -1,169 +0,0 @@ -// -// CwlSysctl.swift -// CwlUtils -// -// Created by Matt Gallagher on 2016/02/03. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// A "static"-only namespace around a series of functions that operate on buffers returned from the `Darwin.sysctl` function -public struct Sysctl { - /// Possible errors. - public enum Error: Swift.Error { - case unknown - case malformedUTF8 - case invalidSize - case posixError(POSIXErrorCode) - } - - /// Access the raw data for an array of sysctl identifiers. - public static func data(for keys: [Int32]) throws -> [Int8] { - return try keys.withUnsafeBufferPointer() { keysPointer throws -> [Int8] in - // Preflight the request to get the required data size - var requiredSize = 0 - let preFlightResult = Darwin.sysctl(UnsafeMutablePointer(mutating: keysPointer.baseAddress), UInt32(keys.count), nil, &requiredSize, nil, 0) - if preFlightResult != 0 { - throw POSIXErrorCode(rawValue: errno).map { - print($0.rawValue) - return Error.posixError($0) - } ?? Error.unknown - } - - // Run the actual request with an appropriately sized array buffer - let data = Array(repeating: 0, count: requiredSize) - let result = data.withUnsafeBufferPointer() { dataBuffer -> Int32 in - return Darwin.sysctl(UnsafeMutablePointer(mutating: keysPointer.baseAddress), UInt32(keys.count), UnsafeMutableRawPointer(mutating: dataBuffer.baseAddress), &requiredSize, nil, 0) - } - if result != 0 { - throw POSIXErrorCode(rawValue: errno).map { Error.posixError($0) } ?? Error.unknown - } - - return data - } - } - - /// Convert a sysctl name string like "hw.memsize" to the array of `sysctl` identifiers (e.g. [CTL_HW, HW_MEMSIZE]) - public static func keys(for name: String) throws -> [Int32] { - var keysBufferSize = Int(CTL_MAXNAME) - var keysBuffer = Array(repeating: 0, count: keysBufferSize) - try keysBuffer.withUnsafeMutableBufferPointer { (lbp: inout UnsafeMutableBufferPointer) throws in - try name.withCString { (nbp: UnsafePointer) throws in - guard sysctlnametomib(nbp, lbp.baseAddress, &keysBufferSize) == 0 else { - throw POSIXErrorCode(rawValue: errno).map { Error.posixError($0) } ?? Error.unknown - } - } - } - if keysBuffer.count > keysBufferSize { - keysBuffer.removeSubrange(keysBufferSize..(ofType: T.Type, forKeys keys: [Int32]) throws -> T { - let buffer = try data(for: keys) - if buffer.count != MemoryLayout.size { - throw Error.invalidSize - } - return try buffer.withUnsafeBufferPointer() { bufferPtr throws -> T in - guard let baseAddress = bufferPtr.baseAddress else { throw Error.unknown } - return baseAddress.withMemoryRebound(to: T.self, capacity: 1) { $0.pointee } - } - } - - /// Invoke `sysctl` with an array of identifers, interpreting the returned buffer as the specified type. This function will throw `Error.invalidSize` if the size of buffer returned from `sysctl` fails to match the size of `T`. - public static func value(ofType type: T.Type, forKeys keys: Int32...) throws -> T { - return try value(ofType: type, forKeys: keys) - } - - /// Invoke `sysctl` with the specified name, interpreting the returned buffer as the specified type. This function will throw `Error.invalidSize` if the size of buffer returned from `sysctl` fails to match the size of `T`. - public static func value(ofType type: T.Type, forName name: String) throws -> T { - return try value(ofType: type, forKeys: keys(for: name)) - } - - /// Invoke `sysctl` with an array of identifers, interpreting the returned buffer as a `String`. This function will throw `Error.malformedUTF8` if the buffer returned from `sysctl` cannot be interpreted as a UTF8 buffer. - public static func string(for keys: [Int32]) throws -> String { - let optionalString = try data(for: keys).withUnsafeBufferPointer() { dataPointer -> String? in - dataPointer.baseAddress.flatMap { String(validatingUTF8: $0) } - } - guard let s = optionalString else { - throw Error.malformedUTF8 - } - return s - } - - /// Invoke `sysctl` with an array of identifers, interpreting the returned buffer as a `String`. This function will throw `Error.malformedUTF8` if the buffer returned from `sysctl` cannot be interpreted as a UTF8 buffer. - public static func string(for keys: Int32...) throws -> String { - return try string(for: keys) - } - - /// Invoke `sysctl` with the specified name, interpreting the returned buffer as a `String`. This function will throw `Error.malformedUTF8` if the buffer returned from `sysctl` cannot be interpreted as a UTF8 buffer. - public static func string(for name: String) throws -> String { - return try string(for: keys(for: name)) - } - - /// e.g. "MyComputer.local" (from System Preferences -> Sharing -> Computer Name) or - /// "My-Name-iPhone" (from Settings -> General -> About -> Name) - public static var hostName: String { return try! Sysctl.string(for: [CTL_KERN, KERN_HOSTNAME]) } - - /// e.g. "x86_64" or "N71mAP" - /// NOTE: this is *corrected* on iOS devices to fetch hw.model - public static var machine: String { - #if os(iOS) && !arch(x86_64) && !arch(i386) - return try! Sysctl.string(for: [CTL_HW, HW_MODEL]) - #else - return try! Sysctl.string(for: [CTL_HW, HW_MACHINE]) - #endif - } - - /// e.g. "MacPro4,1" or "iPhone8,1" - /// NOTE: this is *corrected* on iOS devices to fetch hw.machine - public static var model: String { - #if os(iOS) && !arch(x86_64) && !arch(i386) - return try! Sysctl.string(for: [CTL_HW, HW_MACHINE]) - #else - return try! Sysctl.string(for: [CTL_HW, HW_MODEL]) - #endif - } - - /// e.g. "8" or "2" - public static var activeCPUs: Int32 { return try! Sysctl.value(ofType: Int32.self, forKeys: [CTL_HW, HW_AVAILCPU]) } - - /// e.g. "15.3.0" or "15.0.0" - public static var osRelease: String { return try! Sysctl.string(for: [CTL_KERN, KERN_OSRELEASE]) } - - /// e.g. "Darwin" or "Darwin" - public static var osType: String { return try! Sysctl.string(for: [CTL_KERN, KERN_OSTYPE]) } - - /// e.g. "15D21" or "13D20" - public static var osVersion: String { return try! Sysctl.string(for: [CTL_KERN, KERN_OSVERSION]) } - - /// e.g. "Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64" or - /// "Darwin Kernel Version 15.0.0: Wed Dec 9 22:19:38 PST 2015; root:xnu-3248.31.3~2/RELEASE_ARM64_S8000" - public static var version: String { return try! Sysctl.string(for: [CTL_KERN, KERN_VERSION]) } - - #if os(macOS) - /// e.g. 199506 (not available on iOS) - public static var osRev: Int32 { return try! Sysctl.value(ofType: Int32.self, forKeys: [CTL_KERN, KERN_OSREV]) } - - /// e.g. 2659000000 (not available on iOS) - public static var cpuFreq: Int64 { return try! Sysctl.value(ofType: Int64.self, forName: "hw.cpufrequency") } - - /// e.g. 25769803776 (not available on iOS) - public static var memSize: UInt64 { return try! Sysctl.value(ofType: UInt64.self, forKeys: [CTL_HW, HW_MEMSIZE]) } - #endif -} diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlUnanticipatedError.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlUnanticipatedError.swift deleted file mode 100644 index af66021..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlUnanticipatedError.swift +++ /dev/null @@ -1,174 +0,0 @@ -// -// CwlUnanticipatedError.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/03/05. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -#if os(macOS) -import Cocoa -#elseif os(iOS) -import UIKit -import MobileCoreServices -#endif - -public extension Error { - /// Return an NSError with the same properties as this error but with an `UnanticipatedErrorRecoveryAttempter` attached. - func withUnanticipatedErrorRecoveryAttempter(file: String = #file, line: Int = #line) -> NSError { - let e = self as NSError - var userInfo: [String: Any] = e.userInfo - - // Move any existing NSLocalizedRecoverySuggestionErrorKey to a new key (we want to replace it but don't want to lose potentially useful information) - if let previousSuggestion = userInfo[NSLocalizedRecoverySuggestionErrorKey] { - userInfo[UnanticipatedErrorRecoveryAttempter.previousRecoverySuggestionKey] = previousSuggestion - } - - // Attach a new NSLocalizedRecoverySuggestionErrorKey and our recovery attempter and options - let directory = ((file as NSString).deletingLastPathComponent as NSString).lastPathComponent - let filename = (file as NSString).lastPathComponent - let suggestion = String(format: NSLocalizedString("The error occurred at line %ld of the %@/%@ file in the program's code.", comment: ""), line, directory, filename) - userInfo[NSLocalizedDescriptionKey] = self.localizedDescription - userInfo[NSLocalizedRecoverySuggestionErrorKey] = suggestion - userInfo[NSLocalizedRecoveryOptionsErrorKey] = UnanticipatedErrorRecoveryAttempter.localizedRecoveryOptions() - userInfo[NSRecoveryAttempterErrorKey] = UnanticipatedErrorRecoveryAttempter() - - // Attach the call stack - userInfo[UnanticipatedErrorRecoveryAttempter.callStackSymbols] = Thread.callStackSymbols - - return NSError(domain: e.domain, code: e.code, userInfo: userInfo) - } -} - -// A function that returns an `Error` of a non-public type, that already has `withUnanticipatedErrorRecoveryAttempter` -public func undeclaredError(file: String = #file, line: Int = #line) -> Error { - struct UndeclaredError: LocalizedError { - var errorDescription: String? { return NSLocalizedString("An unspecified error occurred.", comment: "") } - } - return UndeclaredError().withUnanticipatedErrorRecoveryAttempter(file: file, line: line ) -} - -/// A convenience wrapper that applies `withUnanticipatedErrorRecoveryAttempter` to any error thrown by the wrapped function -public func rethrowUnanticipated(file: String = #file, line: Int = #line, execute: () throws -> T) throws -> T { - do { - return try execute() - } catch { - throw error.withUnanticipatedErrorRecoveryAttempter(file: file, line: line) - } -} - -/// Class usable as the NSRecoveryAttempterErrorKey object in an NSError that presents the 'Unexpected' error and gives the option of copying the full error to the pasteboard. -public class UnanticipatedErrorRecoveryAttempter: NSObject { - /// Key used in NSError.userInfo dictionaries to store call stack addresses - public static let callStackSymbols = "CwlUtils.CallStackReturnAddresses" - - /// Key used in NSError.userInfo dictionaries to store an OnDelete object that raises a fatal error if not cancelled - public static let previousRecoverySuggestionKey = "CwlUtils.PreviousRecoverySuggestion" - - /// Present two buttons: "Copy details" and "OK" - fileprivate class func localizedRecoveryOptions() -> [String] { - return [NSLocalizedString("OK", comment:""), NSLocalizedString("Copy details", comment:"")] - } - - /// There are two possible `attemptRecoveryFromError` methods. This one just feeds into the other. - public override func attemptRecovery(fromError error: Error, optionIndex: Int, delegate: Any?, didRecoverSelector: Selector?, contextInfo: UnsafeMutableRawPointer?) -> Void { - _ = self.attemptRecovery(fromError: error, optionIndex: optionIndex) - } - - /// Generate the "detailed" information for the pasteboard (the error dialog itself will show the brief details) - private func extendedErrorInformation(_ error: NSError) -> String { - var userInfo = error.userInfo - - // Fetch and format diagnostic information for display - let callStackSymbols = (userInfo[UnanticipatedErrorRecoveryAttempter.callStackSymbols] as? [String]).map { $0.joined(separator: "\n") } ?? NSLocalizedString("(Call stack unavailable)", comment: "") - let localizedDescription = error.localizedDescription - let localizedRecoverySuggestion = error.localizedRecoverySuggestion ?? "" - let applicationName = (Bundle.main.infoDictionary?[kCFBundleNameKey as String] as? String) ?? ProcessInfo.processInfo.processName - let applicationVersion = (Bundle.main.infoDictionary?[kCFBundleVersionKey as String] as? String) ?? NSLocalizedString("(App version unavailable)", comment: "") - let locales = Locale.preferredLanguages.joined(separator: ", ") - let machineInfo = "\(Sysctl.machine)/\(Sysctl.model), \(ProcessInfo.processInfo.operatingSystemVersionString)" - - // Remove already handled keys from the userInfo. Anything not yet handled will be output as part of the diagnostic information. - userInfo.removeValue(forKey: NSLocalizedRecoverySuggestionErrorKey) - userInfo.removeValue(forKey: NSLocalizedRecoveryOptionsErrorKey) - userInfo.removeValue(forKey: NSRecoveryAttempterErrorKey) - userInfo.removeValue(forKey: UnanticipatedErrorRecoveryAttempter.previousRecoverySuggestionKey) - userInfo.removeValue(forKey: UnanticipatedErrorRecoveryAttempter.callStackSymbols) - - return "\(applicationName)/\(applicationVersion), \(machineInfo), \(locales)\n\n\(localizedDescription)\n\(localizedRecoverySuggestion)\n\n\(error.domain): \(error.code). \(userInfo)\n\n\(callStackSymbols)" - } - - /// When a button is tapped, either close the dialog or copy the error details as appropriate. - public override func attemptRecovery(fromError error: Error, optionIndex: Int) -> Bool { - // The "Copy details" button is index 1 in the buttons array. - let copyDetailsButtonIndex = 1 - - switch optionIndex { - case copyDetailsButtonIndex: - #if os(macOS) - #if swift(>=4) - NSPasteboard.general.clearContents() - NSPasteboard.general.setString(extendedErrorInformation(error as NSError), forType:NSPasteboard.PasteboardType.string) - #else - NSPasteboard.general().clearContents() - NSPasteboard.general().setString(extendedErrorInformation(error as NSError), forType:NSPasteboardTypeString) - #endif - #elseif os(iOS) - UIPasteboard.general.string = extendedErrorInformation(error as NSError) - #endif - return true - default: - return false; - } - } -} - -#if os(iOS) - -/// A protocol to provide functionality similar to NSResponder.presentError on Mac OS X. -public protocol ErrorPresenter { - func presentError(_ error: NSError, _ completion: (() -> Void)?) -} - -// Implement the ErrorPresent on UIViewController rather than UIResponder since presenting a `UIAlertController` requires a parent `UIViewController` -extension UIViewController: ErrorPresenter { - /// An adapter function that allows the UnanticipatedErrorRecoveryAttempter to be used on iOS to present errors over a UIViewController. - public func presentError(_ error: NSError, _ completion: (() -> Void)? = nil) { - #if swift(>=4.2) - let alert = UIAlertController(title: error.localizedDescription, message: error.localizedRecoverySuggestion ?? error.localizedFailureReason, preferredStyle: UIAlertController.Style.alert) - - if let ro = error.localizedRecoveryOptions, let ra = error.recoveryAttempter as? UnanticipatedErrorRecoveryAttempter { - for (index, option) in ro.enumerated() { - alert.addAction(UIAlertAction(title: option, style: UIAlertAction.Style.default, handler: { (action: UIAlertAction?) -> Void in - _ = ra.attemptRecovery(fromError: error, optionIndex: index) - })) - } - } - #else - let alert = UIAlertController(title: error.localizedDescription, message: error.localizedRecoverySuggestion ?? error.localizedFailureReason, preferredStyle: UIAlertControllerStyle.alert) - - if let ro = error.localizedRecoveryOptions, let ra = error.recoveryAttempter as? UnanticipatedErrorRecoveryAttempter { - for (index, option) in ro.enumerated() { - alert.addAction(UIAlertAction(title: option, style: UIAlertActionStyle.default, handler: { (action: UIAlertAction?) -> Void in - _ = ra.attemptRecovery(fromError: error, optionIndex: index) - })) - } - } - #endif - self.present(alert, animated: true, completion: completion) - } -} - -#endif diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlUtils.h b/Pods/CwlUtils/Sources/CwlUtils/CwlUtils.h deleted file mode 100644 index 682a633..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlUtils.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// CwlUtils.h -// CwlUtils -// -// Created by Matt Gallagher on 2016/02/26. -// Copyright © 2016 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -#import - -//! Project version number for CwlUtils. -FOUNDATION_EXPORT double CwlUtilsVersionNumber; - -//! Project version string for CwlUtils. -FOUNDATION_EXPORT const unsigned char CwlUtilsVersionString[]; - -#import "CwlFrameAddress.h" diff --git a/Pods/CwlUtils/Sources/CwlUtils/CwlWrappers.swift b/Pods/CwlUtils/Sources/CwlUtils/CwlWrappers.swift deleted file mode 100644 index ded1ccd..0000000 --- a/Pods/CwlUtils/Sources/CwlUtils/CwlWrappers.swift +++ /dev/null @@ -1,140 +0,0 @@ -// -// CwlWrappers.swift -// CwlUtils -// -// Created by Matt Gallagher on 2015/02/03. -// Copyright © 2015 Matt Gallagher ( https://www.cocoawithlove.com ). All rights reserved. -// -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -// - -import Foundation - -/// A class wrapper around a type (usually a value type) so it can be moved without copying. -public class Box { - public fileprivate(set) var value: T - public init(_ t: T) { - value = t - } -} - -//// A class wrapper around a type (usually a value type) so changes to it can be shared (usually as an ad hoc communication channel). NOTE: this version is *not* threadsafe, use AtomicBox for that. -public final class MutableBox: Box { - public override var value: T { get { return super.value } set { super.value = newValue } } - public override init(_ t: T) { - super.init(t) - } -} - -// A class wrapper around a type (usually a value type) so changes to it can be shared in a thread-safe manner (usually as an ad hoc communication channel). -/// "Atomic" in this sense refers to the semantics, not the implementation. This uses a pthread mutex, not CAS-style atomic operations. -public final class AtomicBox { - private var mutex = PThreadMutex() - private var internalValue: T - - public init(_ t: T) { - internalValue = t - } - - public var value: T { - get { - mutex.unbalancedLock() - defer { mutex.unbalancedUnlock() } - return internalValue - } - } - - @discardableResult - public func mutate(_ f: (inout T) throws -> Void) rethrows -> T { - mutex.unbalancedLock() - defer { mutex.unbalancedUnlock() } - try f(&internalValue) - return internalValue - } -} - -/// A struct wrapper around an optional and a construction function that presents the optional through the `value()` function as though it's a lazy var. Unlike a true lazy var, you can query if the value has been initialized. -public struct Lazy { - var valueIfInitialized: T? - let valueConstructor: () -> T - - public init(valueConstructor: @escaping () -> T) { - self.valueConstructor = valueConstructor - } - public var isInitialized: Bool { return valueIfInitialized != nil } - public mutating func value() -> T { - if let v = valueIfInitialized { - return v - } - let v = valueConstructor() - valueIfInitialized = v - return v - } -} - -/// A wrapper around a type (usually a class type) so it can be weakly referenced from an Array or other strong container. -public struct Weak { - public weak var value: T? - - public init(_ value: T?) { - self.value = value - } - - public func contains(_ other: T) -> Bool { - if let v = value { - return v === other - } else { - return false - } - } -} - -/// A wrapper around a type (usually a class type) so it can be referenced unowned from an Array or other strong container. -public struct Unowned { - public unowned let value: T - public init(_ value: T) { - self.value = value - } -} - -/// A enum wrapper around a type (usually a class type) so its ownership can be set at runtime. -public enum PossiblyWeak { - case strong(T) - case weak(Weak) - - public init(strong value: T) { - self = PossiblyWeak.strong(value) - } - - public init(weak value: T) { - self = PossiblyWeak.weak(Weak(value)) - } - - public var value: T? { - switch self { - case .strong(let t): return t - case .weak(let weakT): return weakT.value - } - } - - public func contains(_ other: T) -> Bool { - switch self { - case .strong(let t): return t === other - case .weak(let weakT): - if let wt = weakT.value { - return wt === other - } - return false - } - } -} diff --git a/Pods/Down/LICENSE b/Pods/Down/LICENSE deleted file mode 100644 index 2e9e440..0000000 --- a/Pods/Down/LICENSE +++ /dev/null @@ -1,218 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Rob Phillips. - -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. - ------ - -cmark - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c, -html_unescape.gperf, html_unescape.h - -derive from https://github.com/vmg/houdini (with some modifications) - -Copyright (C) 2012 Vicent Martí - -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. - ------ - -buffer.h, buffer.c, chunk.h - -are derived from code (C) 2012 Github, Inc. - -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. - ------ - -utf8.c and utf8.c - -are derived from utf8proc -(), -(C) 2009 Public Software Group e. V., Berlin, Germany. - -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. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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. - ------ - -The CommonMark spec (test/spec.txt) is - -Copyright (C) 2014-15 John MacFarlane - -Released under the Creative Commons CC-BY-SA 4.0 license: -. - ------ - -The test software in test/ is - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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. \ No newline at end of file diff --git a/Pods/Down/README.md b/Pods/Down/README.md deleted file mode 100644 index e858d6f..0000000 --- a/Pods/Down/README.md +++ /dev/null @@ -1,266 +0,0 @@ -## Down -[![Build Status](https://travis-ci.org/iwasrobbed/Down.svg?branch=master)](https://travis-ci.org/iwasrobbed/Down) -[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/iwasrobbed/Down/blob/master/LICENSE) -[![CocoaPods](https://img.shields.io/cocoapods/v/Down.svg?maxAge=10800)]() -[![Swift 5](https://img.shields.io/badge/language-Swift-blue.svg)](https://swift.org) -[![macOS](https://img.shields.io/badge/OS-macOS-orange.svg)](https://developer.apple.com/macos/) -[![iOS](https://img.shields.io/badge/OS-iOS-orange.svg)](https://developer.apple.com/ios/) -[![tvOS](https://img.shields.io/badge/OS-tvOS-orange.svg)](https://developer.apple.com/tvos/) -[![Linux](https://img.shields.io/badge/OS-Linux-orange.svg)](https://www.linux.org/) -[![Code Coverage](https://codecov.io/gh/iwasrobbed/Down/branch/master/graph/badge.svg)](https://codecov.io/gh/iwasrobbed/Down) - -Blazing fast Markdown (CommonMark) rendering in Swift, built upon [cmark v0.29.0](https://github.com/commonmark/cmark). - -Is your app using it? [Let us know!](mailto:rob@robphillips.me) - -#### Maintainers - -- [Rob Phillips](https://github.com/iwasrobbed) -- [John Nguyen](https://github.com/johnxnguyen) -- [Keaton Burleson](https://github.com/128keaton) -- [phoney](https://github.com/phoney) -- [Tony Arnold](https://github.com/tonyarnold) -- [Ken Harris](https://github.com/kengruven) -- [Chris Zielinski](https://github.com/chriszielinski) -- [Other contributors](https://github.com/iwasrobbed/Down/graphs/contributors) 🙌 - -### Installation - -Note: Swift support is summarized in the table below. - -|Swift Version|Tag| -| --- | --- | -| Swift 5.1 | >= 0.9.0 | -| Swift 5.0 | >= 0.8.1 | -| Swift 4 | >= 0.4.x | -| Swift 3 | 0.3.x | - - now on the `master` branch and any tag >= 0.8.1 (Swift 4 is >= 0.4.x, Swift 3 is 0.3.x) - -#### Quickly install using [CocoaPods](https://cocoapods.org): - -```ruby -pod 'Down' -``` - -#### Install using [Carthage](https://github.com/Carthage/Carthage): - -``` -github "iwasrobbed/Down" -``` -Due to limitations in Carthage regarding platform specification, you need to define the platform with Carthage. - -e.g. - -```carthage update --platform iOS``` - -#### Install using [Swift Package Manager](https://github.com/apple/swift-package-manager): - -To add *Down* to your project, select `File → Swift Packages → Add Package Dependency` and enter the GitHub URL for *Down*. -See [Adding Package Dependencies to Your App](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app) for detailed instructions. - -#### Or manually install: - -1. Clone this repository -2. Drag and drop the Down project into your workspace file, adding the framework in the embedded framework section -2. Build and run your app -4. ? -5. Profit - -### Robust Performance - ->[cmark](https://github.com/commonmark/cmark) can render a Markdown version of War and Peace in the blink of an eye (127 milliseconds on a ten year old laptop, vs. 100-400 milliseconds for an eye blink). In our [benchmarks](https://github.com/commonmark/cmark/blob/master/benchmarks.md), cmark is 10,000 times faster than the original Markdown.pl, and on par with the very fastest available Markdown processors. - -> The library has been extensively fuzz-tested using [american fuzzy lop](http://lcamtuf.coredump.cx/afl). The test suite includes pathological cases that bring many other Markdown parsers to a crawl (for example, thousands-deep nested bracketed text or block quotes). - -### Output Formats -* Web View (see DownView class) -* HTML -* XML -* LaTeX -* groff man -* CommonMark Markdown -* NSAttributedString -* AST (abstract syntax tree) - -### View Rendering - -The `DownView` class offers a very simple way to parse a UTF-8 encoded string with Markdown and convert it to a web view that can be added to any view: - -```swift -let downView = try? DownView(frame: self.view.bounds, markdownString: "**Oh Hai**") { - // Optional callback for loading finished -} -// Now add to view or constrain w/ Autolayout -// Or you could optionally update the contents at some point: -try? downView?.update(markdownString: "## [Google](https://google.com)") { - // Optional callback for loading finished -} -``` - -Meta example of rendering this README: - -![Example gif](Images/ohhai.gif) - -### Parsing API - -The `Down` struct has everything you need if you just want out-of-the-box setup for parsing and conversion. - -```swift -let down = Down(markdownString: "## [Down](https://github.com/iwasrobbed/Down)") - -// Convert to HTML -let html = try? down.toHTML() -// "

Down

\n" - -// Convert to XML -let xml = try? down.toXML() -// "\n\n\n \n \n Down\n \n \n\n" - -// Convert to groff man -let man = try? down.toGroff() -// ".SS\nDown (https://github.com/iwasrobbed/Down)\n" - -// Convert to LaTeX -let latex = try? down.toLaTeX() -// "\\subsection{\\href{https://github.com/iwasrobbed/Down}{Down}}\n" - -// Convert to CommonMark Markdown -let commonMark = try? down.toCommonMark() -// "## [Down](https://github.com/iwasrobbed/Down)\n" - -// Convert to an attributed string -let attributedString = try? down.toAttributedString() -// NSAttributedString representation of the rendered HTML; -// by default, uses a stylesheet that matches NSAttributedString's default font, -// but you can override this by passing in your own, using the 'stylesheet:' parameter. - -// Convert to abstract syntax tree -let ast = try? down.toAST() -// Returns pointer to AST that you can manipulate - -``` - -### Rendering Granularity - -If you'd like more granularity for the output types you want to support, you can create your own struct conforming to at least one of the renderable protocols: - -* DownHTMLRenderable -* DownXMLRenderable -* DownLaTeXRenderable -* DownGroffRenderable -* DownCommonMarkRenderable -* DownASTRenderable -* DownAttributedStringRenderable - -Example: - -```swift -public struct MarkdownToHTML: DownHTMLRenderable { - /** - A string containing CommonMark Markdown - */ - public var markdownString: String - - /** - Initializes the container with a CommonMark Markdown string which can then be rendered as HTML using `toHTML()` - - - parameter markdownString: A string containing CommonMark Markdown - - - returns: An instance of Self - */ - @warn_unused_result - public init(markdownString: String) { - self.markdownString = markdownString - } -} -``` - -### Configuration of `DownView` - -`DownView` can be configured with a custom bundle using your own HTML / CSS or to do things like supporting -Dynamic Type or custom fonts, etc. It's completely configurable. - -This option can be found in [DownView's instantiation function](https://github.com/iwasrobbed/Down/blob/master/Source/Views/DownView.swift#L26). - -##### Prevent zoom - -The default implementation of the `DownView` allows for zooming in the rendered content. If you want to disable this, then you’ll need to instantiate the `DownView` with a custom bundle where the `viewport` in `index.html` has been assigned `user-scalable=no`. More info can be found [here](https://github.com/iwasrobbed/Down/pull/30). - -### Options - -Each protocol has options that will influence either rendering or parsing: - -```swift -/** - Default options -*/ -public static let `default` = DownOptions(rawValue: 0) - -// MARK: - Rendering Options - -/** - Include a `data-sourcepos` attribute on all block elements -*/ -public static let sourcePos = DownOptions(rawValue: 1 << 1) - -/** - Render `softbreak` elements as hard line breaks. -*/ -public static let hardBreaks = DownOptions(rawValue: 1 << 2) - -/** - Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`, - `file:`, and `data:`, except for `image/png`, `image/gif`, - `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced - by a placeholder HTML comment. Unsafe links are replaced by - empty strings. Note that this option is provided for backwards - compatibility, but safe mode is now the default. -*/ -public static let safe = DownOptions(rawValue: 1 << 3) - -/** - Allow raw HTML and unsafe links. Note that safe mode is now - the default, and the unsafe option must be used if rendering - of raw HTML and unsafe links is desired. -*/ -public static let unsafe = DownOptions(rawValue: 1 << 17) - -// MARK: - Parsing Options - -/** - Normalize tree by consolidating adjacent text nodes. -*/ -public static let normalize = DownOptions(rawValue: 1 << 4) - -/** - Validate UTF-8 in the input before parsing, replacing illegal - sequences with the replacement character U+FFFD. -*/ -public static let validateUTF8 = DownOptions(rawValue: 1 << 5) - -/** - Convert straight quotes to curly, --- to em dashes, -- to en dashes. -*/ -public static let smart = DownOptions(rawValue: 1 << 6) - -/** - Combine smart typography with HTML rendering. -*/ -public static let smartUnsaFe = DownOptions(rawValue: (1 << 17) + (1 << 6)) -``` - -### Supports -Swift; iOS 9+, tvOS 9+, macOS 10.11+ - -### Markdown Specification - -Down is built upon the [CommonMark](http://commonmark.org) specification. - -### A little help from my friends -Please feel free to fork and create a pull request for bug fixes or improvements, being sure to maintain the general coding style, adding tests, and adding comments as necessary. - -### Credit -This library is a wrapper around [cmark](https://github.com/commonmark/cmark), which is built upon the [CommonMark](http://commonmark.org) Markdown specification. - -[cmark](https://github.com/commonmark/cmark) is Copyright (c) 2014, John MacFarlane. View [full license](https://github.com/commonmark/cmark/blob/master/COPYING). diff --git a/Pods/Down/Resources/DownView.bundle/css/down.min.css b/Pods/Down/Resources/DownView.bundle/css/down.min.css deleted file mode 100644 index 6098715..0000000 --- a/Pods/Down/Resources/DownView.bundle/css/down.min.css +++ /dev/null @@ -1,8 +0,0 @@ -/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */progress,sub,sup{vertical-align:baseline}button,hr,input{overflow:visible}[type=checkbox],[type=radio],legend{box-sizing:border-box;padding:0}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} - -/* Modified version of github.com/sindresorhus/github-markdown-css | MIT License */ -/* Unminify it @ unminify.com */ -hr,img{box-sizing:content-box}body:after,body:before,hr::after,hr::before{display:table;content:""}a,a:not([href]){text-decoration:none}blockquote,h6{color:#777}hr,svg:not(:root){overflow:hidden}dl,dl dt,hr,td,th{padding:0}img,table tr{background-color:#fff}pre,pre code{word-wrap:normal}body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;color:#333;font-family:"Helvetica Neue",Helvetica,"Segoe UI",Arial,freesans,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1.5em;line-height:1.6;word-wrap:break-word;padding:2rem}a{background-color:transparent;-webkit-text-decoration-skip:objects;color:#4078c0}a:active,a:hover{outline-width:0;text-decoration:underline}strong{font-weight:bolder}h1{margin:.67em 0}img{border-style:none;max-width:100%}h1,h2{padding-bottom:.3em;border-bottom:1px solid #eee}input{margin:0;overflow:visible;font:13px/1.4 Helvetica,arial,nimbussansl,liberationsans,freesans,clean,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:ButtonText dotted 1px}[type=checkbox]{box-sizing:border-box;padding:0}table{border-spacing:0;border-collapse:collapse;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}*{box-sizing:border-box}body:after,hr::after{clear:both}blockquote{margin:0;padding:0 15px;border-left:4px solid #ddd}ol ol,ul ol{list-style-type:lower-roman}ol ol ol,ol ul ol,ul ol ol,ul ul ol{list-style-type:lower-alpha}dd{margin-left:0}code,pre{font:.9em Consolas,"Liberation Mono",Menlo,Courier,monospace}dl dt,table th{font-weight:700}body>:first-child{margin-top:0!important}dl dt,li>p{margin-top:16px}body>:last-child{margin-bottom:0!important}a:not([href]){color:inherit}h1,h2,h3,h4,h5,h6{margin-top:1em;margin-bottom:16px;font-weight:700;line-height:1.4}h1{font-size:2.25em;line-height:1.2}h2{font-size:1.75em;line-height:1.225}h3{font-size:1.5em;line-height:1.43}h4{font-size:1.25em}dl dt,h5,h6{font-size:1em}blockquote,dl,ol,p,pre,table,ul{margin-top:0;margin-bottom:16px}hr{background:#e7e7e7;height:4px;margin:16px 0;border:0}ol,ul{padding-left:2em}ol ol,ol ul,ul ol,ul ul{margin-top:0;margin-bottom:0}dl dt{font-style:italic}dl dd{padding:0 16px;margin-bottom:16px}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}table td,table th{padding:6px 13px;border:1px solid #ddd}table tr{border-top:1px solid #ccc}table tr:nth-child(2n){background-color:#f8f8f8}code{padding:.2em 0;margin:0;font-size:85%;background-color:rgba(0,0,0,.04);border-radius:3px}pre code,pre>code{padding:0;margin:0;border:0}code:after,code:before{letter-spacing:-.2em;content:"\00a0"}pre>code{font-size:100%;word-break:normal;white-space:pre;background:0 0}pre code{display:inline;max-width:initial;overflow:initial;line-height:inherit;background-color:transparent}pre code:after,pre code:before{content:normal}kbd{display:inline-block;padding:3px 5px;font:11px Consolas,"Liberation Mono",Menlo,Courier,monospace;line-height:10px;color:#555;vertical-align:middle;background-color:#fcfcfc;border:1px solid #ccc;border-bottom-color:#bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb}:checked+.radio-label{position:relative;z-index:1;border-color:#4078c0}hr{border-bottom-color:#eee} - -/*! highlightjs */ -.hljs{display:block;overflow-x:auto;padding:.5em;background:#1d1f21;color:#c5c8c6}.hljs span::selection,.hljs::selection{background:#373b41}.hljs span::-moz-selection,.hljs::-moz-selection{background:#373b41}.hljs-name,.hljs-title{color:#f0c674}.hljs-comment,.hljs-meta,.hljs-meta .hljs-keyword{color:#707880}.hljs-deletion,.hljs-link,.hljs-literal,.hljs-number,.hljs-symbol{color:#c66}.hljs-addition,.hljs-doctag,.hljs-regexp,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-string{color:#b5bd68}.hljs-attribute,.hljs-code,.hljs-selector-id{color:#b294bb}.hljs-bullet,.hljs-keyword,.hljs-selector-tag,.hljs-tag{color:#81a2be}.hljs-subst,.hljs-template-tag,.hljs-template-variable,.hljs-variable{color:#8abeb7}.hljs-built_in,.hljs-builtin-name,.hljs-quote,.hljs-section,.hljs-selector-class,.hljs-type{color:#de935f}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} \ No newline at end of file diff --git a/Pods/Down/Resources/DownView.bundle/index.html b/Pods/Down/Resources/DownView.bundle/index.html deleted file mode 100644 index d365aba..0000000 --- a/Pods/Down/Resources/DownView.bundle/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - DOWN_HTML - - \ No newline at end of file diff --git a/Pods/Down/Resources/DownView.bundle/js/down.js b/Pods/Down/Resources/DownView.bundle/js/down.js deleted file mode 100644 index e2f4f43..0000000 --- a/Pods/Down/Resources/DownView.bundle/js/down.js +++ /dev/null @@ -1 +0,0 @@ -hljs.initHighlightingOnLoad(); \ No newline at end of file diff --git a/Pods/Down/Resources/DownView.bundle/js/highlight.min.js b/Pods/Down/Resources/DownView.bundle/js/highlight.min.js deleted file mode 100644 index 48ecd9c..0000000 --- a/Pods/Down/Resources/DownView.bundle/js/highlight.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! highlight.js v9.4.0 | BSD3 License | git.io/hljslicense */ -!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/gm,"&").replace(//gm,">")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}function a(e){return/^(no-?highlight|plain|text)$/i.test(e)}function i(e){var n,t,r,i=e.className+" ";if(i+=e.parentNode?e.parentNode.className:"",t=/\blang(?:uage)?-([\w-]+)\b/i.exec(i))return w(t[1])?t[1]:"no-highlight";for(i=i.split(/\s+/),n=0,r=i.length;r>n;n++)if(w(i[n])||a(i[n]))return i[n]}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3==i.nodeType?a+=i.nodeValue.length:1==i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[0].offset?e[0].offset"}function u(e){f+=""}function c(e){("start"==e.event?o:u)(e.node)}for(var s=0,f="",l=[];e.length||r.length;){var g=i();if(f+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g==e){l.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g==e&&g.length&&g[0].offset==s);l.reverse().forEach(o)}else"start"==g[0].event?l.push(g[0].node):l.pop(),c(g.splice(0,1)[0])}return f+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):Object.keys(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),void 0===a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"==e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var f=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=f.length?t(f.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){for(var t=0;t";return i+=e+'">',i+n+o}function h(){if(!k.k)return n(M);var e="",t=0;k.lR.lastIndex=0;for(var r=k.lR.exec(M);r;){e+=n(M.substr(t,r.index-t));var a=g(k,r);a?(B+=a[1],e+=p(a[0],n(r[0]))):e+=n(r[0]),t=k.lR.lastIndex,r=k.lR.exec(M)}return e+n(M.substr(t))}function d(){var e="string"==typeof k.sL;if(e&&!R[k.sL])return n(M);var t=e?f(k.sL,M,!0,y[k.sL]):l(M,k.sL.length?k.sL:void 0);return k.r>0&&(B+=t.r),e&&(y[k.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){L+=void 0!==k.sL?d():h(),M=""}function v(e,n){L+=e.cN?p(e.cN,"",!0):"",k=Object.create(e,{parent:{value:k}})}function m(e,n){if(M+=e,void 0===n)return b(),0;var t=o(n,k);if(t)return t.skip?M+=n:(t.eB&&(M+=n),b(),t.rB||t.eB||(M=n)),v(t,n),t.rB?0:n.length;var r=u(k,n);if(r){var a=k;a.skip?M+=n:(a.rE||a.eE||(M+=n),b(),a.eE&&(M=n));do k.cN&&(L+=""),k.skip||(B+=k.r),k=k.parent;while(k!=r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,k))throw new Error('Illegal lexeme "'+n+'" for mode "'+(k.cN||"")+'"');return M+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var x,k=i||N,y={},L="";for(x=k;x!=N;x=x.parent)x.cN&&(L=p(x.cN,"",!0)+L);var M="",B=0;try{for(var C,j,I=0;;){if(k.t.lastIndex=I,C=k.t.exec(t),!C)break;j=m(t.substr(I,C.index-I),C[0]),I=C.index+j}for(m(t.substr(I)),x=k;x.parent;x=x.parent)x.cN&&(L+="");return{r:B,value:L,language:e,top:k}}catch(O){if(-1!=O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function l(e,t){t=t||E.languages||Object.keys(R);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function g(e){return E.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,function(e,n){return n.replace(/\t/g,E.tabReplace)})),E.useBR&&(e=e.replace(/\n/g,"
")),e}function p(e,n,t){var r=n?x[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function h(e){var n=i(e);if(!a(n)){var t;E.useBR?(t=document.createElementNS("http://www.w3.org/1999/xhtml","div"),t.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):t=e;var r=t.textContent,o=n?f(n,r,!0):l(r),s=u(t);if(s.length){var h=document.createElementNS("http://www.w3.org/1999/xhtml","div");h.innerHTML=o.value,o.value=c(s,u(h),r)}o.value=g(o.value),e.innerHTML=o.value,e.className=p(e.className,n,o.language),e.result={language:o.language,re:o.r},o.second_best&&(e.second_best={language:o.second_best.language,re:o.second_best.r})}}function d(e){E=o(E,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");Array.prototype.forEach.call(e,h)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=R[n]=t(e);r.aliases&&r.aliases.forEach(function(e){x[e]=n})}function N(){return Object.keys(R)}function w(e){return e=(e||"").toLowerCase(),R[e]||R[x[e]]}var E={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},R={},x={};return e.highlight=f,e.highlightAuto=l,e.fixMarkup=g,e.highlightBlock=h,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("swift",function(e){var t={keyword:"__COLUMN__ __FILE__ __FUNCTION__ __LINE__ as as! as? associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},i={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:t,c:[]},a={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0},o=e.inherit(e.QSM,{c:[r,e.BE]});return r.c=[a],{k:t,c:[o,e.CLCM,n,i,a,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b://},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:t,c:["self",a,o,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:t,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/})]},{cN:"meta",b:"(@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{bK:"import",e:/$/,c:[e.CLCM,n]}]}});hljs.registerLanguage("yaml",function(e){var a={literal:"{ } true false yes no Yes No True False null"},b="^[ \\-]*",r="[a-zA-Z_][\\w\\-]*",t={cN:"attr",v:[{b:b+r+":"},{b:b+'"'+r+'":'},{b:b+"'"+r+"':"}]},c={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},l={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/}],c:[e.BE,c]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[t,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:l.c,e:t.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},l,e.HCM,e.CNM],k:a}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("java",function(e){var t=e.UIR+"(<"+e.UIR+"(\\s*,\\s*"+e.UIR+")*>)?",a="false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports",r="\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?",s={cN:"number",b:r,r:0};return{aliases:["jsp"],k:a,i:/<\/|#/,c:[e.C("/\\*\\*","\\*/",{r:0,c:[{b:/\w+@/,r:0},{cN:"doctag",b:"@[A-Za-z]+"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:"class",bK:"class interface",e:/[{;=]/,eE:!0,k:"class interface",i:/[:"\[\]]/,c:[{bK:"extends implements"},e.UTM]},{bK:"new throw return else",r:0},{cN:"function",b:"("+t+"\\s+)+"+e.UIR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+"\\s*\\(",rB:!0,r:0,c:[e.UTM]},{cN:"params",b:/\(/,e:/\)/,k:a,r:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},s,{cN:"meta",b:"@[A-Za-z]+"}]}});hljs.registerLanguage("php",function(e){var c={b:"\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*"},i={cN:"meta",b:/<\?(php)?|\?>/},t={cN:"string",c:[e.BE,i],v:[{b:'b"',e:'"'},{b:"b'",e:"'"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:["php3","php4","php5","php6"],cI:!0,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally",c:[e.HCM,e.C("//","$",{c:[i]}),e.C("/\\*","\\*/",{c:[{cN:"doctag",b:"@[A-Za-z]+"}]}),e.C("__halt_compiler.+?;",!1,{eW:!0,k:"__halt_compiler",l:e.UIR}),{cN:"string",b:/<<<['"]?\w+['"]?$/,e:/^\w+;?$/,c:[e.BE,{cN:"subst",v:[{b:/\$\w+/},{b:/\{\$/,e:/\}/}]}]},i,{cN:"keyword",b:/\$this\b/},c,{b:/(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/},{cN:"function",bK:"function",e:/[;{]/,eE:!0,i:"\\$|\\[|%",c:[e.UTM,{cN:"params",b:"\\(",e:"\\)",c:["self",c,e.CBCM,t,a]}]},{cN:"class",bK:"class interface",e:"{",eE:!0,i:/[:\(\$"]/,c:[{bK:"extends implements"},e.UTM]},{bK:"namespace",e:";",i:/[\.']/,c:[e.UTM]},{bK:"use",e:";",c:[e.UTM]},{b:"=>"},t,a]}});hljs.registerLanguage("objectivec",function(e){var t={cN:"built_in",b:"\\b(AV|CA|CF|CG|CI|MK|MP|NS|UI|XC)\\w+"},i={keyword:"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required",literal:"false true FALSE TRUE nil YES NO NULL",built_in:"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once"},n=/[a-zA-Z@][a-zA-Z0-9_]*/,o="@interface @class @protocol @implementation";return{aliases:["mm","objc","obj-c"],k:i,l:n,i:""}]}]},{cN:"class",b:"("+o.split(" ").join("|")+")\\b",e:"({|$)",eE:!0,k:o,l:n,c:[e.UTM]},{b:"\\."+e.UIR,r:0}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/=====/,e:/=====$/},{b:/^\-\-\-/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+\+\+/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("coffeescript",function(e){var c={keyword:"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super then unless until loop of by when and or is isnt not",literal:"true false null undefined yes no on off",built_in:"npm require console print module global window document"},n="[A-Za-z$_][0-9A-Za-z$_]*",r={cN:"subst",b:/#\{/,e:/}/,k:c},s=[e.BNM,e.inherit(e.CNM,{starts:{e:"(\\s*/)?",r:0}}),{cN:"string",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/"""/,e:/"""/,c:[e.BE,r]},{b:/"/,e:/"/,c:[e.BE,r]}]},{cN:"regexp",v:[{b:"///",e:"///",c:[r,e.HCM]},{b:"//[gim]*",r:0},{b:/\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/}]},{b:"@"+n},{b:"`",e:"`",eB:!0,eE:!0,sL:"javascript"}];r.c=s;var i=e.inherit(e.TM,{b:n}),t="(\\(.*\\))?\\s*\\B[-=]>",o={cN:"params",b:"\\([^\\(]",rB:!0,c:[{b:/\(/,e:/\)/,k:c,c:["self"].concat(s)}]};return{aliases:["coffee","cson","iced"],k:c,i:/\/\*/,c:s.concat([e.C("###","###"),e.HCM,{cN:"function",b:"^\\s*"+n+"\\s*=\\s*"+t,e:"[-=]>",rB:!0,c:[i,o]},{b:/[:\(,=]\s*/,r:0,c:[{cN:"function",b:t,e:"[-=]>",rB:!0,c:[o]}]},{cN:"class",bK:"class",e:"$",i:/[:="\[\]]/,c:[{bK:"extends",eW:!0,i:/[:="\[\]]/,c:[i]},i]},{b:n+":",e:":",rB:!0,rE:!0,r:0}])}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("css",function(e){var c="[a-zA-Z-][a-zA-Z0-9_-]*",t={b:/[A-Z\_\.\-]+\s*:/,rB:!0,e:";",eW:!0,c:[{cN:"attribute",b:/\S/,e:":",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\w-]+\(/,rB:!0,c:[{cN:"built_in",b:/[\w-]+/},{b:/\(/,e:/\)/,c:[e.ASM,e.QSM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"number",b:"#[0-9A-Fa-f]+"},{cN:"meta",b:"!important"}]}}]};return{cI:!0,i:/[=\/|'\$]/,c:[e.CBCM,{cN:"selector-id",b:/#[A-Za-z0-9_-]+/},{cN:"selector-class",b:/\.[A-Za-z0-9_-]+/},{cN:"selector-attr",b:/\[/,e:/\]/,i:"$"},{cN:"selector-pseudo",b:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{b:"@",e:"[{;]",i:/:/,c:[{cN:"keyword",b:/\w+/},{b:/\s/,eW:!0,eE:!0,r:0,c:[e.ASM,e.QSM,e.CSSNM]}]},{cN:"selector-tag",b:c,r:0},{b:"{",e:"}",i:/\S/,c:[e.CBCM,t]}]}});hljs.registerLanguage("ruby",function(e){var r="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",b={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:b},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:b},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:r}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:r}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:b},{b:"("+e.RSR+")\\s*",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:b,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("perl",function(e){var t="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when",r={cN:"subst",b:"[$@]\\{",e:"\\}",k:t},s={b:"->{",e:"}"},n={v:[{b:/\$\d/},{b:/[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/},{b:/[\$%@][^\s\w{]/,r:0}]},i=[e.BE,r,n],o=[n,e.HCM,e.C("^\\=\\w","\\=cut",{eW:!0}),s,{cN:"string",c:i,v:[{b:"q[qwxr]?\\s*\\(",e:"\\)",r:5},{b:"q[qwxr]?\\s*\\[",e:"\\]",r:5},{b:"q[qwxr]?\\s*\\{",e:"\\}",r:5},{b:"q[qwxr]?\\s*\\|",e:"\\|",r:5},{b:"q[qwxr]?\\s*\\<",e:"\\>",r:5},{b:"qw\\s+q",e:"q",r:5},{b:"'",e:"'",c:[e.BE]},{b:'"',e:'"'},{b:"`",e:"`",c:[e.BE]},{b:"{\\w+}",c:[],r:0},{b:"-?\\w+\\s*\\=\\>",c:[],r:0}]},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\/\\/|"+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"function",bK:"sub",e:"(\\s*\\(.*?\\))?[;{]",eE:!0,r:5,c:[e.TM]},{b:"-\\w\\b",r:0},{b:"^__DATA__$",e:"^__END__$",sL:"mojolicious",c:[{b:"^@@.*",e:"$",cN:"comment"}]}];return r.c=o,s.c=o,{aliases:["pl","pm"],l:/[\w\.]+/,k:t,c:o}});hljs.registerLanguage("python",function(e){var r={cN:"meta",b:/^(>>>|\.\.\.) /},b={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[r],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[r],r:10},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},e.ASM,e.QSM]},a={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},l={cN:"params",b:/\(/,e:/\)/,c:["self",r,a,b]};return{aliases:["py","gyp"],k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},i:/(<\/|->|\?)/,c:[r,a,b,e.HCM,{v:[{cN:"function",bK:"def",r:10},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,l,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("apache",function(e){var r={cN:"number",b:"[\\$%]\\d+"};return{aliases:["apacheconf"],cI:!0,c:[e.HCM,{cN:"section",b:""},{cN:"attribute",b:/\w+/,r:0,k:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{e:/$/,r:0,k:{literal:"on off all"},c:[{cN:"meta",b:"\\s\\[",e:"\\]$"},{cN:"variable",b:"[\\$%]\\{",e:"\\}",c:["self",r]},r,e.QSM]}}],i:/\S/}});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("javascript",function(e){return{aliases:["js","jsx"],k:{keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:["self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:[e.CLCM,e.CBCM]}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[t.inherit(t.QSM,{b:'((u8?|U)|L)?"'}),{b:'(u8?|U)?R"',e:'"',c:[t.BE]},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},{b:t.CNR}],r:0},i={cN:"meta",b:/#[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:"<",e:">",i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using class asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e]},t.CLCM,t.CBCM,i]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("http",function(e){var t="HTTP/[0-9\\.]+";return{aliases:["https"],i:"\\S",c:[{b:"^"+t,e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{b:"^[A-Z]+ (.*?) "+t+"$",rB:!0,e:"$",c:[{cN:"string",b:" ",e:" ",eB:!0,eE:!0},{b:t},{cN:"keyword",b:"[A-Z]+"}]},{cN:"attribute",b:"^\\w",e:": ",eE:!0,i:"\\n|\\s|=",starts:{e:"$",r:0}},{b:"\\n\\n",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage("makefile",function(e){var a={cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]};return{aliases:["mk","mak"],c:[e.HCM,{b:/^\w+\s*\W*=/,rB:!0,r:0,starts:{e:/\s*\W*=/,eE:!0,starts:{e:/$/,r:0,c:[a]}}},{cN:"section",b:/^[\w]+:\s*$/},{cN:"meta",b:/^\.PHONY:/,e:/$/,k:{"meta-keyword":".PHONY"},l:/[\.\w]+/},{b:/^\t+/,e:/$/,r:0,c:[e.QSM,a]}]}});hljs.registerLanguage("nginx",function(e){var r={cN:"variable",v:[{b:/\$\d+/},{b:/\$\{/,e:/}/},{b:"[\\$\\@]"+e.UIR}]},b={eW:!0,l:"[a-z/_]+",k:{literal:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[e.HCM,{cN:"string",c:[e.BE,r],v:[{b:/"/,e:/"/},{b:/'/,e:/'/}]},{b:"([a-z]+):/",e:"\\s",eW:!0,eE:!0,c:[r]},{cN:"regexp",c:[e.BE,r],v:[{b:"\\s\\^",e:"\\s|{|;",rE:!0},{b:"~\\*?\\s+",e:"\\s|{|;",rE:!0},{b:"\\*(\\.[a-z\\-]+)+"},{b:"([a-z\\-]+\\.)+\\*"}]},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0},r]};return{aliases:["nginxconf"],c:[e.HCM,{b:e.UIR+"\\s+{",rB:!0,e:"{",c:[{cN:"section",b:e.UIR}],r:0},{b:e.UIR+"\\s",e:";|{",rB:!0,c:[{cN:"attribute",b:e.UIR,starts:b}],r:0}],i:"[^\\s\\}]"}});hljs.registerLanguage("scss",function(e){var t="[a-zA-Z-][a-zA-Z0-9_-]*",i={cN:"variable",b:"(\\$"+t+")\\b"},r={cN:"number",b:"#[0-9A-Fa-f]+"};({cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:!0,i:"[^\\s]",starts:{eW:!0,eE:!0,c:[r,e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:"meta",b:"!important"}]}});return{cI:!0,i:"[=/|']",c:[e.CLCM,e.CBCM,{cN:"selector-id",b:"\\#[A-Za-z0-9_-]+",r:0},{cN:"selector-class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"selector-attr",b:"\\[",e:"\\]",i:"$"},{cN:"selector-tag",b:"\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b",r:0},{b:":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)"},{b:"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)"},i,{cN:"attribute",b:"\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b",i:"[^\\s]"},{b:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{b:":",e:";",c:[i,r,e.CSSNM,e.QSM,e.ASM,{cN:"meta",b:"!important"}]},{b:"@",e:"[{;]",k:"mixin include extend for if else each while charset import debug media page content font-face namespace warn",c:[i,e.QSM,e.ASM,r,e.CSSNM,{b:"\\s[A-Za-z0-9_.-]+",r:0}]}]}});hljs.registerLanguage("cs",function(e){var i={keyword:"abstract as base bool break byte case catch char checked const continue decimal dynamic default delegate do double else enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long when object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual volatile void while async nameof ascending descending from get group into join let orderby partial select set value var where yield",literal:"null false true"},r={cN:"string",b:'@"',e:'"',c:[{b:'""'}]},t=e.inherit(r,{i:/\n/}),n={cN:"subst",b:"{",e:"}",k:i},c=e.inherit(n,{i:/\n/}),a={cN:"string",b:/\$"/,e:'"',i:/\n/,c:[{b:"{{"},{b:"}}"},e.BE,c]},s={cN:"string",b:/\$@"/,e:'"',c:[{b:"{{"},{b:"}}"},{b:'""'},n]},o=e.inherit(s,{i:/\n/,c:[{b:"{{"},{b:"}}"},{b:'""'},c]});n.c=[s,a,r,e.ASM,e.QSM,e.CNM,e.CBCM],c.c=[o,a,t,e.ASM,e.QSM,e.CNM,e.inherit(e.CBCM,{i:/\n/})];var l={v:[s,a,r,e.ASM,e.QSM]},b=e.IR+"(<"+e.IR+">)?(\\[\\])?";return{aliases:["csharp"],k:i,i:/::/,c:[e.C("///","$",{rB:!0,c:[{cN:"doctag",v:[{b:"///",r:0},{b:""},{b:""}]}]}),e.CLCM,e.CBCM,{cN:"meta",b:"#",e:"$",k:{"meta-keyword":"if else elif endif define undef warning error line region endregion pragma checksum"}},l,e.CNM,{bK:"class interface",e:/[{;=]/,i:/[^\s:]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:"namespace",e:/[{;=]/,i:/[^\s:]/,c:[e.inherit(e.TM,{b:"[a-zA-Z](\\.?\\w)*"}),e.CLCM,e.CBCM]},{bK:"new return throw await",r:0},{cN:"function",b:"("+b+"\\s+)+"+e.IR+"\\s*\\(",rB:!0,e:/[{;=]/,eE:!0,k:i,c:[{b:e.IR+"\\s*\\(",rB:!0,c:[e.TM],r:0},{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:i,r:0,c:[l,e.CNM,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/-?[a-z\.]+/,k:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}}); \ No newline at end of file diff --git a/Pods/Down/Source/AST/Nodes/BaseNode.swift b/Pods/Down/Source/AST/Nodes/BaseNode.swift deleted file mode 100644 index 87aba1e..0000000 --- a/Pods/Down/Source/AST/Nodes/BaseNode.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// BaseNode.swift -// Down -// -// Created by John Nguyen on 21.04.19. -// -// - -import Foundation -import libcmark - -public class BaseNode: Node { - - public let cmarkNode: CMarkNode - - public private(set) lazy var children: [Node] = Array(childSequence) - - public private(set) lazy var nestDepth: Int = { - var depth = 0 - var next = cmarkNode.parent - - while let current = next { - depth += current.type == cmarkNode.type ? 1 : 0 - next = current.parent - } - return depth - }() - - init(cmarkNode: CMarkNode) { - self.cmarkNode = cmarkNode - } - -} diff --git a/Pods/Down/Source/AST/Nodes/BlockQuote.swift b/Pods/Down/Source/AST/Nodes/BlockQuote.swift deleted file mode 100644 index 2152f7b..0000000 --- a/Pods/Down/Source/AST/Nodes/BlockQuote.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// BlockQuote.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class BlockQuote: BaseNode {} - -// MARK: - Debug - -extension BlockQuote: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Block Quote" - } -} diff --git a/Pods/Down/Source/AST/Nodes/ChildSequence.swift b/Pods/Down/Source/AST/Nodes/ChildSequence.swift deleted file mode 100644 index d306c9a..0000000 --- a/Pods/Down/Source/AST/Nodes/ChildSequence.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// ChildSequence.swift -// Down -// -// Created by Sven Weidauer on 05.10.2020 -// - -import libcmark - -/// Sequence of child nodes -public struct ChildSequence: Sequence { - let node: CMarkNode - - public struct Iterator: IteratorProtocol { - var node: CMarkNode? - - public mutating func next() -> Node? { - guard let node = node else { return nil } - defer { self.node = cmark_node_next(node) } - - guard let result = node.wrap() else { - assertionFailure("Couldn't wrap node of type: \(node.type)") - return nil - } - - return result - } - } - - public func makeIterator() -> Iterator { - return Iterator(node: cmark_node_first_child(node)) - } -} - diff --git a/Pods/Down/Source/AST/Nodes/Code.swift b/Pods/Down/Source/AST/Nodes/Code.swift deleted file mode 100644 index da2b9e5..0000000 --- a/Pods/Down/Source/AST/Nodes/Code.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// Code.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Code: BaseNode { - - /// The code content, if present. - public private(set) lazy var literal: String? = cmarkNode.literal - -} - -// MARK: - Debug - -extension Code: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Code - \(literal ?? "nil")" - } -} diff --git a/Pods/Down/Source/AST/Nodes/CodeBlock.swift b/Pods/Down/Source/AST/Nodes/CodeBlock.swift deleted file mode 100644 index 2ee306a..0000000 --- a/Pods/Down/Source/AST/Nodes/CodeBlock.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// CodeBlock.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class CodeBlock: BaseNode { - - /// The code content, if present. - public private(set) lazy var literal: String? = cmarkNode.literal - - /// The fence info is an optional string that trails the opening sequence of backticks. - /// It can be used to provide some contextual information about the block, such as - /// the name of a programming language. - /// - /// For example: - /// ``` - /// ''' - /// - /// ''' - /// ``` - /// - public private(set) lazy var fenceInfo: String? = cmarkNode.fenceInfo - -} - -// MARK: - Debug - -extension CodeBlock: CustomDebugStringConvertible { - - public var debugDescription: String { - let content = (literal ?? "nil").replacingOccurrences(of: "\n", with: "\\n") - return "Code Block - fenceInfo: \(fenceInfo ?? "nil"), content: \(content)" - } -} diff --git a/Pods/Down/Source/AST/Nodes/CustomBlock.swift b/Pods/Down/Source/AST/Nodes/CustomBlock.swift deleted file mode 100644 index 2ea85db..0000000 --- a/Pods/Down/Source/AST/Nodes/CustomBlock.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// CustomBlock.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class CustomBlock: BaseNode { - - /// The custom content, if present. - public private(set) lazy var literal: String? = cmarkNode.literal - -} - -// MARK: - Debug - -extension CustomBlock: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Custom Block - \(literal ?? "nil")" - } -} diff --git a/Pods/Down/Source/AST/Nodes/CustomInline.swift b/Pods/Down/Source/AST/Nodes/CustomInline.swift deleted file mode 100644 index ac524c6..0000000 --- a/Pods/Down/Source/AST/Nodes/CustomInline.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// CustomInline.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class CustomInline: BaseNode { - - /// The custom content, if present. - public private(set) lazy var literal: String? = cmarkNode.literal -} - -// MARK: - Debug - -extension CustomInline: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Custom Inline - \(literal ?? "nil")" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Document.swift b/Pods/Down/Source/AST/Nodes/Document.swift deleted file mode 100644 index 747513f..0000000 --- a/Pods/Down/Source/AST/Nodes/Document.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// Document.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Document: BaseNode { - - deinit { - // Frees the node and all its children. - cmark_node_free(cmarkNode) - } - - /// Accepts the given visitor and return its result. - @discardableResult - public func accept(_ visitor: T) -> T.Result { - return visitor.visit(document: self) - } - -} - - -// MARK: - Debug - -extension Document: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Document" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Emphasis.swift b/Pods/Down/Source/AST/Nodes/Emphasis.swift deleted file mode 100644 index 518f29f..0000000 --- a/Pods/Down/Source/AST/Nodes/Emphasis.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// Emphasis.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Emphasis: BaseNode {} - -// MARK: - Debug - -extension Emphasis: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Emphasis" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Heading.swift b/Pods/Down/Source/AST/Nodes/Heading.swift deleted file mode 100644 index 0c4df7b..0000000 --- a/Pods/Down/Source/AST/Nodes/Heading.swift +++ /dev/null @@ -1,24 +0,0 @@ -// -// Heading.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Heading: BaseNode { - - /// The level of the heading, a value between 1 and 6. - public private(set) lazy var headingLevel: Int = cmarkNode.headingLevel -} - -// MARK: - Debug - -extension Heading: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Heading - L\(headingLevel)" - } -} diff --git a/Pods/Down/Source/AST/Nodes/HtmlBlock.swift b/Pods/Down/Source/AST/Nodes/HtmlBlock.swift deleted file mode 100644 index 181c5ea..0000000 --- a/Pods/Down/Source/AST/Nodes/HtmlBlock.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// HtmlBlock.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class HtmlBlock: BaseNode { - - /// The html content, if present. - public private(set) lazy var literal: String? = cmarkNode.literal - -} - -// MARK: - Debug - -extension HtmlBlock: CustomDebugStringConvertible { - - public var debugDescription: String { - let content = (literal ?? "nil").replacingOccurrences(of: "\n", with: "\\n") - return "Html Block - content: \(content)" - } -} diff --git a/Pods/Down/Source/AST/Nodes/HtmlInline.swift b/Pods/Down/Source/AST/Nodes/HtmlInline.swift deleted file mode 100644 index c5be36c..0000000 --- a/Pods/Down/Source/AST/Nodes/HtmlInline.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// HtmlInline.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class HtmlInline: BaseNode { - - /// The html tag, if present. - public private(set) lazy var literal: String? = cmarkNode.literal - -} - -// MARK: - Debug - -extension HtmlInline: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Html Inline - \(literal ?? "nil")" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Image.swift b/Pods/Down/Source/AST/Nodes/Image.swift deleted file mode 100644 index 07c57f0..0000000 --- a/Pods/Down/Source/AST/Nodes/Image.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// Image.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Image: BaseNode { - - /// The title of the image, if present. - /// - /// In the example below, the first line is a reference link, with the reference at the - /// bottom. `` is literal text belonging to children nodes. The title occurs - /// after the url and is optional. - /// - /// ``` - /// ![][] - /// ... - /// []: "" - /// ``` - /// - public private(set) lazy var title: String? = cmarkNode.title - - /// The url of the image, if present. - /// - /// For example: - /// - /// ``` - /// ![<text>](<url>) - /// ``` - /// - public private(set) lazy var url: String? = cmarkNode.url - -} - -// MARK: - Debug - -extension Image: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Image - title: \(title ?? "nil"), url: \(url ?? "nil"))" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Item.swift b/Pods/Down/Source/AST/Nodes/Item.swift deleted file mode 100644 index 272592c..0000000 --- a/Pods/Down/Source/AST/Nodes/Item.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// Item.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Item: BaseNode {} - -// MARK: - Debug - -extension Item: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Item" - } -} diff --git a/Pods/Down/Source/AST/Nodes/LineBreak.swift b/Pods/Down/Source/AST/Nodes/LineBreak.swift deleted file mode 100644 index 675227e..0000000 --- a/Pods/Down/Source/AST/Nodes/LineBreak.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// LineBreak.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class LineBreak: BaseNode {} - -// MARK: - Debug - -extension LineBreak: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Line Break" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Link.swift b/Pods/Down/Source/AST/Nodes/Link.swift deleted file mode 100644 index 84a1758..0000000 --- a/Pods/Down/Source/AST/Nodes/Link.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// Link.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Link: BaseNode { - - /// The title of the link, if present. - /// - /// In the example below, the first line is a reference link, with the reference at the - /// bottom. `<text>` is literal text belonging to children nodes. The title occurs - /// after the url and is optional. - /// - /// ``` - /// [<text>][<id>] - /// ... - /// [<id>]: <url> "<title>" - /// ``` - /// - public private(set) lazy var title: String? = cmarkNode.title - - /// The url of the link, if present. - /// - /// For example: - /// - /// ``` - /// [<text>](<url>) - /// ``` - /// - public private(set) lazy var url: String? = cmarkNode.url - -} - -// MARK: - Debug - -extension Link: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Link - title: \(title ?? "nil"), url: \(url ?? "nil"))" - } -} diff --git a/Pods/Down/Source/AST/Nodes/List.swift b/Pods/Down/Source/AST/Nodes/List.swift deleted file mode 100644 index 37c3a88..0000000 --- a/Pods/Down/Source/AST/Nodes/List.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// List.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class List: BaseNode { - - /// The type of the list, either bullet or ordered. - public lazy var listType: ListType = { - guard let type = ListType(cmarkNode: cmarkNode) else { - assertionFailure("Unsupported or missing list type. Defaulting to .bullet.") - return .bullet - } - - return type - }() - - /// The number of items in the list. - public lazy var numberOfItems: Int = children.count - - /// Whether the list is "tight". - /// - /// If any of the list items are separated by a blank line, then this property is `false`. This value is - /// a hint to render the list with more (loose) or less (tight) spacing between items. - - public lazy var isTight: Bool = cmark_node_get_list_tight(cmarkNode) == 1 -} - -// MARK: - List Type - -public extension List { - - enum ListType: CustomDebugStringConvertible { - case bullet - case ordered(start: Int) - - public var debugDescription: String { - switch self { - case .bullet: return "Bullet" - case .ordered(let start): return "Ordered (start: \(start))" - } - } - - init?(cmarkNode: CMarkNode) { - switch cmarkNode.listType { - case CMARK_BULLET_LIST: self = .bullet - case CMARK_ORDERED_LIST: self = .ordered(start: cmarkNode.listStart) - default: return nil - } - } - } -} - -// MARK: - Debug - -extension List: CustomDebugStringConvertible { - - public var debugDescription: String { - return "List - type: \(listType), isTight: \(isTight)" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Node.swift b/Pods/Down/Source/AST/Nodes/Node.swift deleted file mode 100644 index 947c2cd..0000000 --- a/Pods/Down/Source/AST/Nodes/Node.swift +++ /dev/null @@ -1,111 +0,0 @@ -// -// Node.swift -// Down -// -// Created by John Nguyen on 07.04.19. -// - -import Foundation -import libcmark - -/// A node is a wrapper of a raw `CMarkNode` belonging to the abstract syntax tree -/// generated by cmark. -public protocol Node { - /// The wrapped node. - var cmarkNode: CMarkNode { get } - - /// The wrapped child nodes. - var children: [Node] { get } -} - -public extension Node { - /// True iff the node has a sibling that succeeds it. - var hasSuccessor: Bool { - return cmark_node_next(cmarkNode) != nil - } - - /// Sequence of wrapped child nodes. - var childSequence: ChildSequence { - return ChildSequence(node: cmarkNode) - } -} - -// MARK: - Helper extensions - -public typealias CMarkNode = UnsafeMutablePointer<cmark_node> - -public extension UnsafeMutablePointer where Pointee == cmark_node { - - /// Wraps the cmark node referred to by this pointer. - func wrap() -> Node? { - switch type { - case CMARK_NODE_DOCUMENT: return Document(cmarkNode: self) - case CMARK_NODE_BLOCK_QUOTE: return BlockQuote(cmarkNode: self) - case CMARK_NODE_LIST: return List(cmarkNode: self) - case CMARK_NODE_ITEM: return Item(cmarkNode: self) - case CMARK_NODE_CODE_BLOCK: return CodeBlock(cmarkNode: self) - case CMARK_NODE_HTML_BLOCK: return HtmlBlock(cmarkNode: self) - case CMARK_NODE_CUSTOM_BLOCK: return CustomBlock(cmarkNode: self) - case CMARK_NODE_PARAGRAPH: return Paragraph(cmarkNode: self) - case CMARK_NODE_HEADING: return Heading(cmarkNode: self) - case CMARK_NODE_THEMATIC_BREAK: return ThematicBreak(cmarkNode: self) - case CMARK_NODE_TEXT: return Text(cmarkNode: self) - case CMARK_NODE_SOFTBREAK: return SoftBreak(cmarkNode: self) - case CMARK_NODE_LINEBREAK: return LineBreak(cmarkNode: self) - case CMARK_NODE_CODE: return Code(cmarkNode: self) - case CMARK_NODE_HTML_INLINE: return HtmlInline(cmarkNode: self) - case CMARK_NODE_CUSTOM_INLINE: return CustomInline(cmarkNode: self) - case CMARK_NODE_EMPH: return Emphasis(cmarkNode: self) - case CMARK_NODE_STRONG: return Strong(cmarkNode: self) - case CMARK_NODE_LINK: return Link(cmarkNode: self) - case CMARK_NODE_IMAGE: return Image(cmarkNode: self) - default: return nil - } - } - - var parent: CMarkNode? { - return cmark_node_parent(self) - } - - var type: cmark_node_type { - return cmark_node_get_type(self) - } - - var literal: String? { - return String(cString: cmark_node_get_literal(self)) - } - - var fenceInfo: String? { - return String(cString: cmark_node_get_fence_info(self)) - } - - var headingLevel: Int { - return Int(cmark_node_get_heading_level(self)) - } - - var listType: cmark_list_type { - return cmark_node_get_list_type(self) - } - - var listStart: Int { - return Int(cmark_node_get_list_start(self)) - } - - var url: String? { - return String(cString: cmark_node_get_url(self)) - } - - var title: String? { - return String(cString: cmark_node_get_title(self)) - } -} - -private extension String { - - init?(cString: UnsafePointer<Int8>?) { - guard let unwrapped = cString else { return nil } - let result = String(cString: unwrapped) - guard !result.isEmpty else { return nil } - self = result - } -} diff --git a/Pods/Down/Source/AST/Nodes/Paragraph.swift b/Pods/Down/Source/AST/Nodes/Paragraph.swift deleted file mode 100644 index d710d6a..0000000 --- a/Pods/Down/Source/AST/Nodes/Paragraph.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// Paragraph.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Paragraph: BaseNode {} - -// MARK: - Debug - -extension Paragraph: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Paragraph" - } -} diff --git a/Pods/Down/Source/AST/Nodes/SoftBreak.swift b/Pods/Down/Source/AST/Nodes/SoftBreak.swift deleted file mode 100644 index 1c61f4e..0000000 --- a/Pods/Down/Source/AST/Nodes/SoftBreak.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// SoftBreak.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class SoftBreak: BaseNode {} - -// MARK: - Debug - -extension SoftBreak: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Soft Break" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Strong.swift b/Pods/Down/Source/AST/Nodes/Strong.swift deleted file mode 100644 index 74ab339..0000000 --- a/Pods/Down/Source/AST/Nodes/Strong.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// Strong.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Strong: BaseNode {} - -// MARK: - Debug - -extension Strong: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Strong" - } -} diff --git a/Pods/Down/Source/AST/Nodes/Text.swift b/Pods/Down/Source/AST/Nodes/Text.swift deleted file mode 100644 index dd8bb55..0000000 --- a/Pods/Down/Source/AST/Nodes/Text.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// Text.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class Text: BaseNode { - - /// The text content, if present. - public private(set) lazy var literal: String? = cmarkNode.literal - -} - -// MARK: - Debug - -extension Text: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Text - \(literal ?? "nil")" - } -} diff --git a/Pods/Down/Source/AST/Nodes/ThematicBreak.swift b/Pods/Down/Source/AST/Nodes/ThematicBreak.swift deleted file mode 100644 index df20d79..0000000 --- a/Pods/Down/Source/AST/Nodes/ThematicBreak.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// ThematicBreak.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation -import libcmark - -public class ThematicBreak: BaseNode {} - -// MARK: - Debug - -extension ThematicBreak: CustomDebugStringConvertible { - - public var debugDescription: String { - return "Thematic Break" - } -} diff --git a/Pods/Down/Source/AST/Styling/Attribute Collections/ColorCollection.swift b/Pods/Down/Source/AST/Styling/Attribute Collections/ColorCollection.swift deleted file mode 100644 index 16d0577..0000000 --- a/Pods/Down/Source/AST/Styling/Attribute Collections/ColorCollection.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// ColorCollection.swift -// Down -// -// Created by John Nguyen on 27.07.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit -public typealias DownColor = UIColor - -#elseif canImport(AppKit) - -import AppKit -public typealias DownColor = NSColor - -#endif - -public protocol ColorCollection { - - var heading1: DownColor { get } - var heading2: DownColor { get } - var heading3: DownColor { get } - var heading4: DownColor { get } - var heading5: DownColor { get } - var heading6: DownColor { get } - var body: DownColor { get } - var code: DownColor { get } - var link: DownColor { get } - var quote: DownColor { get } - var quoteStripe: DownColor { get } - var thematicBreak: DownColor { get } - var listItemPrefix: DownColor { get } - var codeBlockBackground: DownColor { get } -} - -public struct StaticColorCollection: ColorCollection { - - public var heading1: DownColor - public var heading2: DownColor - public var heading3: DownColor - public var heading4: DownColor - public var heading5: DownColor - public var heading6: DownColor - public var body: DownColor - public var code: DownColor - public var link: DownColor - public var quote: DownColor - public var quoteStripe: DownColor - public var thematicBreak: DownColor - public var listItemPrefix: DownColor - public var codeBlockBackground: DownColor - - public init( - heading1: DownColor = .black, - heading2: DownColor = .black, - heading3: DownColor = .black, - heading4: DownColor = .black, - heading5: DownColor = .black, - heading6: DownColor = .black, - body: DownColor = .black, - code: DownColor = .black, - link: DownColor = .blue, - quote: DownColor = .darkGray, - quoteStripe: DownColor = .darkGray, - thematicBreak: DownColor = .init(white: 0.9, alpha: 1), - listItemPrefix: DownColor = .lightGray, - codeBlockBackground: DownColor = .init(red: 0.96, green: 0.97, blue: 0.98, alpha: 1) - ) { - self.heading1 = heading1 - self.heading2 = heading2 - self.heading3 = heading3 - self.heading4 = heading4 - self.heading5 = heading5 - self.heading6 = heading6 - self.body = body - self.code = code - self.link = link - self.quote = quote - self.quoteStripe = quoteStripe - self.thematicBreak = thematicBreak - self.listItemPrefix = listItemPrefix - self.codeBlockBackground = codeBlockBackground - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Attribute Collections/FontCollection.swift b/Pods/Down/Source/AST/Styling/Attribute Collections/FontCollection.swift deleted file mode 100644 index 26ef66d..0000000 --- a/Pods/Down/Source/AST/Styling/Attribute Collections/FontCollection.swift +++ /dev/null @@ -1,71 +0,0 @@ -// -// FontCollection.swift -// Down -// -// Created by John Nguyen on 22.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit -public typealias DownFont = UIFont - -#elseif canImport(AppKit) - -import AppKit -public typealias DownFont = NSFont - -#endif - -public protocol FontCollection { - - var heading1: DownFont { get } - var heading2: DownFont { get } - var heading3: DownFont { get } - var heading4: DownFont { get } - var heading5: DownFont { get } - var heading6: DownFont { get } - var body: DownFont { get } - var code: DownFont { get } - var listItemPrefix: DownFont { get } -} - -public struct StaticFontCollection: FontCollection { - - public var heading1: DownFont - public var heading2: DownFont - public var heading3: DownFont - public var heading4: DownFont - public var heading5: DownFont - public var heading6: DownFont - public var body: DownFont - public var code: DownFont - public var listItemPrefix: DownFont - - public init( - heading1: DownFont = .boldSystemFont(ofSize: 28), - heading2: DownFont = .boldSystemFont(ofSize: 24), - heading3: DownFont = .boldSystemFont(ofSize: 20), - heading4: DownFont = .boldSystemFont(ofSize: 20), - heading5: DownFont = .boldSystemFont(ofSize: 20), - heading6: DownFont = .boldSystemFont(ofSize: 20), - body: DownFont = .systemFont(ofSize: 17), - code: DownFont = DownFont(name: "menlo", size: 17) ?? .systemFont(ofSize: 17), - listItemPrefix: DownFont = DownFont.monospacedDigitSystemFont(ofSize: 17, weight: .regular) - ) { - self.heading1 = heading1 - self.heading2 = heading2 - self.heading3 = heading3 - self.heading4 = heading4 - self.heading5 = heading5 - self.heading6 = heading6 - self.body = body - self.code = code - self.listItemPrefix = listItemPrefix - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Attribute Collections/ParagraphStyleCollection.swift b/Pods/Down/Source/AST/Styling/Attribute Collections/ParagraphStyleCollection.swift deleted file mode 100644 index 808bcc1..0000000 --- a/Pods/Down/Source/AST/Styling/Attribute Collections/ParagraphStyleCollection.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// ParagraphStyleCollection.swift -// Down -// -// Created by John Nguyen on 27.07.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -public protocol ParagraphStyleCollection { - - var heading1: NSParagraphStyle { get } - var heading2: NSParagraphStyle { get } - var heading3: NSParagraphStyle { get } - var heading4: NSParagraphStyle { get } - var heading5: NSParagraphStyle { get } - var heading6: NSParagraphStyle { get } - var body: NSParagraphStyle { get } - var code: NSParagraphStyle { get } -} - -public struct StaticParagraphStyleCollection: ParagraphStyleCollection { - - public var heading1: NSParagraphStyle - public var heading2: NSParagraphStyle - public var heading3: NSParagraphStyle - public var heading4: NSParagraphStyle - public var heading5: NSParagraphStyle - public var heading6: NSParagraphStyle - public var body: NSParagraphStyle - public var code: NSParagraphStyle - - public init() { - let headingStyle = NSMutableParagraphStyle() - headingStyle.paragraphSpacing = 8 - - let bodyStyle = NSMutableParagraphStyle() - bodyStyle.paragraphSpacingBefore = 8 - bodyStyle.paragraphSpacing = 8 - bodyStyle.lineSpacing = 8 - - let codeStyle = NSMutableParagraphStyle() - codeStyle.paragraphSpacingBefore = 8 - codeStyle.paragraphSpacing = 8 - - heading1 = headingStyle - heading2 = headingStyle - heading3 = headingStyle - heading4 = headingStyle - heading5 = headingStyle - heading6 = headingStyle - body = bodyStyle - code = codeStyle - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Custom Attributes/BlockBackgroundColorAttribute.swift b/Pods/Down/Source/AST/Styling/Custom Attributes/BlockBackgroundColorAttribute.swift deleted file mode 100644 index d5ff2f7..0000000 --- a/Pods/Down/Source/AST/Styling/Custom Attributes/BlockBackgroundColorAttribute.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// BlockBackgroundColorAttribute.swift -// Down -// -// Created by John Nguyen on 11.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -struct BlockBackgroundColorAttribute { - - var color: DownColor - var inset: CGFloat -} - -extension NSAttributedString.Key { - - static let blockBackgroundColor = NSAttributedString.Key("blockBackgroundColor") -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Custom Attributes/QuoteStripeAttribute.swift b/Pods/Down/Source/AST/Styling/Custom Attributes/QuoteStripeAttribute.swift deleted file mode 100644 index e2b2ca2..0000000 --- a/Pods/Down/Source/AST/Styling/Custom Attributes/QuoteStripeAttribute.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// QuoteStripeAttrbute.swift -// Down -// -// Created by John Nguyen on 03.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -struct QuoteStripeAttribute { - - var color: DownColor - var thickness: CGFloat - var spacingAfter: CGFloat - var locations: [CGFloat] - - var layoutWidth: CGFloat { - return thickness + spacingAfter - } -} - -extension QuoteStripeAttribute { - - init(level: Int, color: DownColor, options: QuoteStripeOptions) { - self.init(color: color, thickness: options.thickness, spacingAfter: options.spacingAfter, locations: []) - locations = (0..<level).map { CGFloat($0) * layoutWidth } - } - - func indented(by indentation: CGFloat) -> QuoteStripeAttribute { - var copy = self - copy.locations = locations.map { $0 + indentation } - return copy - } -} - -extension NSAttributedString.Key { - - static let quoteStripe = NSAttributedString.Key(rawValue: "quoteStripe") -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Custom Attributes/ThematicBreakAttribute.swift b/Pods/Down/Source/AST/Styling/Custom Attributes/ThematicBreakAttribute.swift deleted file mode 100644 index 2c280d6..0000000 --- a/Pods/Down/Source/AST/Styling/Custom Attributes/ThematicBreakAttribute.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// ThematicBreaAttributek.swift -// Down -// -// Created by John Nguyen on 02.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -struct ThematicBreakAttribute { - - var thickness: CGFloat - var color: DownColor -} - -extension NSAttributedString.Key { - - static let thematicBreak = NSAttributedString.Key(rawValue: "thematicBreak") -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Helpers/Extensions/CGPoint+Translate.swift b/Pods/Down/Source/AST/Styling/Helpers/Extensions/CGPoint+Translate.swift deleted file mode 100644 index 2ecb5a0..0000000 --- a/Pods/Down/Source/AST/Styling/Helpers/Extensions/CGPoint+Translate.swift +++ /dev/null @@ -1,28 +0,0 @@ -// -// CGPoint+Translate.swift -// Down -// -// Created by John Nguyen on 12.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -extension CGPoint { - - func translated(by point: CGPoint) -> CGPoint { - return CGPoint(x: x + point.x, y: y + point.y) - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Helpers/Extensions/CGRect+Helpers.swift b/Pods/Down/Source/AST/Styling/Helpers/Extensions/CGRect+Helpers.swift deleted file mode 100644 index 57b2f2c..0000000 --- a/Pods/Down/Source/AST/Styling/Helpers/Extensions/CGRect+Helpers.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// CGRect+Helpers.swift -// Down -// -// Created by John Nguyen on 12.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -extension CGRect { - - init(minX: CGFloat, minY: CGFloat, maxX: CGFloat, maxY: CGFloat) { - self.init(x: minX, y: minY, width: maxX - minX, height: maxY - minY) - } - - func translated(by point: CGPoint) -> CGRect { - return CGRect(origin: origin.translated(by: point), size: size) - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Helpers/Extensions/NSAttributedString+Helpers.swift b/Pods/Down/Source/AST/Styling/Helpers/Extensions/NSAttributedString+Helpers.swift deleted file mode 100644 index 643f71b..0000000 --- a/Pods/Down/Source/AST/Styling/Helpers/Extensions/NSAttributedString+Helpers.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// NSAttributedString+Helpers.swift -// Down -// -// Created by John Nguyen on 22.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -extension NSAttributedString { - - typealias Attributes = [NSAttributedString.Key: Any] - - var wholeRange: NSRange { - return NSRange(location: 0, length: length) - } - - func ranges(of key: Key) -> [NSRange] { - return ranges(of: key, in: wholeRange) - } - - func ranges(of key: Key, in range: NSRange) -> [NSRange] { - return ranges(for: key, in: range, where: { $0 != nil }) - } - - func rangesMissingAttribute(for key: Key) -> [NSRange] { - return rangesMissingAttribute(for: key, in: wholeRange) - } - - func rangesMissingAttribute(for key: Key, in range: NSRange) -> [NSRange] { - return ranges(for: key, in: range, where: { $0 == nil }) - } - - private func ranges(for key: Key, in range: NSRange, where p: (Any?) -> Bool) -> [NSRange] { - var ranges = [NSRange]() - - enumerateAttribute(key, in: range, options: []) { value, attrRange, _ in - if p(value) { - ranges.append(attrRange) - } - } - - return ranges - } - - func paragraphRanges() -> [NSRange] { - guard length > 0 else { return [] } - - func nextParagraphRange(at location: Int) -> NSRange { - return NSString(string: string).paragraphRange(for: NSRange(location: location, length: 1)) - } - - var result = [nextParagraphRange(at: 0)] - - while let currentLocation = result.last?.upperBound, currentLocation < length { - result.append(nextParagraphRange(at: currentLocation)) - } - - return result.filter { $0.length > 1 } - } - - func enumerateAttributes<A>(for key: Key, block: (_ attr: A, _ range: NSRange) -> Void) { - enumerateAttributes(for: key, in: wholeRange, block: block) - } - - func enumerateAttributes<A>(for key: Key, in range: NSRange, block: (_ attr: A, _ range: NSRange) -> Void) { - enumerateAttribute(key, in: range, options: []) { value, range, _ in - if let value = value as? A { - block(value, range) - } - } - } -} diff --git a/Pods/Down/Source/AST/Styling/Helpers/Extensions/NSMutableAttributedString+Attributes.swift b/Pods/Down/Source/AST/Styling/Helpers/Extensions/NSMutableAttributedString+Attributes.swift deleted file mode 100644 index 7045306..0000000 --- a/Pods/Down/Source/AST/Styling/Helpers/Extensions/NSMutableAttributedString+Attributes.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// NSMutableAttributedString+Attributes.swift -// Down -// -// Created by John Nguyen on 22.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -extension NSMutableAttributedString { - - func setAttributes(_ attrs: Attributes) { - setAttributes(attrs, range: wholeRange) - } - - func addAttributes(_ attrs: Attributes) { - addAttributes(attrs, range: wholeRange) - } - - func addAttribute(for key: Key, value: Any) { - addAttribute(key, value: value, range: wholeRange) - } - - func removeAttribute(for key: Key) { - removeAttribute(key, range: wholeRange) - } - - func replaceAttribute(for key: Key, value: Any) { - replaceAttribute(for: key, value: value, inRange: wholeRange) - } - - func replaceAttribute(for key: Key, value: Any, inRange range: NSRange) { - removeAttribute(key, range: range) - addAttribute(key, value: value, range: range) - } - - func updateExistingAttributes<A>(for key: Key, using f: (A) -> A) { - updateExistingAttributes(for: key, in: wholeRange, using: f) - } - - func updateExistingAttributes<A>(for key: Key, in range: NSRange, using f: (A) -> A) { - var existingValues = [(value: A, range: NSRange)]() - enumerateAttributes(for: key, in: range) { existingValues.append(($0, $1)) } - existingValues.forEach { addAttribute(key, value: f($0.0), range: $0.1) } - } - - func addAttributeInMissingRanges<A>(for key: Key, value: A) { - addAttributeInMissingRanges(for: key, value: value, within: wholeRange) - } - - func addAttributeInMissingRanges<A>(for key: Key, value: A, within range: NSRange) { - rangesMissingAttribute(for: key, in: range).forEach { - addAttribute(key, value: value, range: $0) - } - } -} diff --git a/Pods/Down/Source/AST/Styling/Helpers/Extensions/UIFont+Traits.swift b/Pods/Down/Source/AST/Styling/Helpers/Extensions/UIFont+Traits.swift deleted file mode 100644 index 72dc056..0000000 --- a/Pods/Down/Source/AST/Styling/Helpers/Extensions/UIFont+Traits.swift +++ /dev/null @@ -1,91 +0,0 @@ -// -// UIFont+Traits.swift -// Down -// -// Created by John Nguyen on 22.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit -public typealias DownFontDescriptor = UIFontDescriptor - -#elseif canImport(AppKit) - -import AppKit -public typealias DownFontDescriptor = NSFontDescriptor - -#endif - -extension DownFont { - - var isStrong: Bool { - return contains(.strong) - } - - var isEmphasized: Bool { - return contains(.emphasis) - } - - var isMonospace: Bool { - return contains(.monoSpace) - } - - var strong: DownFont { - return with(.strong) ?? self - } - - var emphasis: DownFont { - return with(.emphasis) ?? self - } - - var monospace: DownFont { - return with(.monoSpace) ?? self - } - - private func with(_ trait: DownFontDescriptor.SymbolicTraits) -> DownFont? { - guard !contains(trait) else { return self } - - var traits = fontDescriptor.symbolicTraits - traits.insert(trait) - - #if canImport(UIKit) - guard let newDescriptor = fontDescriptor.withSymbolicTraits(traits) else { return self } - return DownFont(descriptor: newDescriptor, size: pointSize) - - #elseif canImport(AppKit) - let newDescriptor = fontDescriptor.withSymbolicTraits(traits) - return DownFont(descriptor: newDescriptor, size: pointSize) - - #endif - } - - private func contains(_ trait: DownFontDescriptor.SymbolicTraits) -> Bool { - return fontDescriptor.symbolicTraits.contains(trait) - } -} - -#if canImport(UIKit) - -private extension DownFontDescriptor.SymbolicTraits { - - static let strong = DownFontDescriptor.SymbolicTraits.traitBold - static let emphasis = DownFontDescriptor.SymbolicTraits.traitItalic - static let monoSpace = DownFontDescriptor.SymbolicTraits.traitMonoSpace -} - -#elseif canImport(AppKit) - -private extension DownFontDescriptor.SymbolicTraits { - - static let strong = DownFontDescriptor.SymbolicTraits.bold - static let emphasis = DownFontDescriptor.SymbolicTraits.italic - static let monoSpace = DownFontDescriptor.SymbolicTraits.monoSpace -} - -#endif - -#endif diff --git a/Pods/Down/Source/AST/Styling/Helpers/ListItemParagraphStyler.swift b/Pods/Down/Source/AST/Styling/Helpers/ListItemParagraphStyler.swift deleted file mode 100644 index 1dd37c2..0000000 --- a/Pods/Down/Source/AST/Styling/Helpers/ListItemParagraphStyler.swift +++ /dev/null @@ -1,103 +0,0 @@ -// -// ParagraphStyler.swift -// Down -// -// Created by John Nguyen on 25.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -/// A convenient class used to format lists, such that list item prefixes -/// are right aligned and list item content left aligns. -public class ListItemParagraphStyler { - - public var indentation: CGFloat { - return largestPrefixWidth + options.spacingAfterPrefix - } - - /// The paragraph style intended for all paragraphs excluding the first. - public var trailingParagraphStyle: NSParagraphStyle { - let contentIndentation = indentation - let style = baseStyle - style.firstLineHeadIndent = contentIndentation - style.headIndent = contentIndentation - return style - } - - private let options: ListItemOptions - private let largestPrefixWidth: CGFloat - - private var baseStyle: NSMutableParagraphStyle { - let style = NSMutableParagraphStyle() - style.paragraphSpacingBefore = options.spacingAbove - style.paragraphSpacing = options.spacingBelow - return style - } - - public init(options: ListItemOptions, prefixFont: DownFont) { - self.options = options - self.largestPrefixWidth = prefixFont.widthOfNumberedPrefix(digits: options.maxPrefixDigits) - } - - - /// The paragraph style intended for the first paragraph of the list item. - /// - /// - Parameter prefixWidth: the width (in points) of the list item prefix. - public func leadingParagraphStyle(prefixWidth: CGFloat) -> NSParagraphStyle { - let contentIndentation = indentation - let prefixIndentation: CGFloat = contentIndentation - options.spacingAfterPrefix - prefixWidth - let prefixSpill = max(0, prefixWidth - largestPrefixWidth) - let firstLineContentIndentation = contentIndentation + prefixSpill - - let style = baseStyle - style.firstLineHeadIndent = prefixIndentation - style.tabStops = [tabStop(at: firstLineContentIndentation)] - style.headIndent = contentIndentation - return style - } - - private func tabStop(at location: CGFloat) -> NSTextTab { - return NSTextTab(textAlignment: .left, location: location, options: [:]) - } -} - -// MARK: - Helpers - -private extension DownFont { - - func widthOfNumberedPrefix(digits: UInt) -> CGFloat { - return widthOfLargestDigit * CGFloat(digits) + widthOfPeriod - } - - private var widthOfLargestDigit: CGFloat { - return Int.decimalDigits - .map { NSAttributedString(string: "\($0)", attributes: [.font: self]).size().width } - .max()! - } - - private var widthOfPeriod: CGFloat { - return NSAttributedString(string: ".", attributes: [.font: self]) - .size() - .width - } -} - -private extension Int { - - static var decimalDigits: [Int] { - return Array(0...9) - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Layout Managers/DownDebugLayoutManager.swift b/Pods/Down/Source/AST/Styling/Layout Managers/DownDebugLayoutManager.swift deleted file mode 100644 index e96835d..0000000 --- a/Pods/Down/Source/AST/Styling/Layout Managers/DownDebugLayoutManager.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// DownDebugLayoutManager.swift -// Down -// -// Created by John Nguyen on 06.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -/// A layout manager that draws the line fragments. -/// -/// Line fragments are the areas with a document that contain lines of text. There -/// are two types. -/// -/// 1. A *line rect* (drawn in red) indicates the maximum rect enclosing the line. -/// This inlcudes not only the textual content, but also the padding (if any) around that text. -/// 2. A *line used rect* (drawn in blue) is the smallest rect enclosing the textual content. -/// -/// The visualization of these rects is useful when determining the paragraph styles -/// of a `DownStyler`. -/// -/// Insert this into a TextKit stack manually, or use the provided `DownDebugTextView`. -public class DownDebugLayoutManager: DownLayoutManager { - - override public func drawGlyphs(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) { - super.drawGlyphs(forGlyphRange: glyphsToShow, at: origin) - drawLineFragments(forGlyphRange: glyphsToShow, at: origin) - } - - private func drawLineFragments(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) { - enumerateLineFragments(forGlyphRange: glyphsToShow) { rect, usedRect, textContainer, glyphRange, _ in - [(usedRect, DownColor.blue), (rect, DownColor.red)].forEach { rectToDraw, color in - let adjustedRect = rectToDraw.translated(by: origin) - self.drawRect(adjustedRect, color: color.cgColor) - } - } - } - - private func drawRect(_ rect: CGRect, color: CGColor) { - guard let context = context else { return } - push(context: context) - defer { popContext() } - - context.setStrokeColor(color) - context.stroke(rect) - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Layout Managers/DownLayoutManager.swift b/Pods/Down/Source/AST/Styling/Layout Managers/DownLayoutManager.swift deleted file mode 100644 index dea1078..0000000 --- a/Pods/Down/Source/AST/Styling/Layout Managers/DownLayoutManager.swift +++ /dev/null @@ -1,212 +0,0 @@ -// -// DownLayoutManager.swift -// Down -// -// Created by John Nguyen on 02.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -/// A layout manager capable of drawing the custom attributes set by the `DownStyler`. -/// -/// Insert this into a TextKit stack manually, or use the provided `DownTextView`. -public class DownLayoutManager: NSLayoutManager { - - #if canImport(UIKit) - var context: CGContext? { - return UIGraphicsGetCurrentContext() - } - - func push(context: CGContext) { - UIGraphicsPushContext(context) - } - - func popContext() { - UIGraphicsPopContext() - } - - #elseif canImport(AppKit) - var context: CGContext? { - return NSGraphicsContext.current?.cgContext - } - - func push(context: CGContext) { - NSGraphicsContext.saveGraphicsState() - } - - func popContext() { - NSGraphicsContext.restoreGraphicsState() - } - - #endif - - override public func drawGlyphs(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) { - drawCustomBackgrounds(forGlyphRange: glyphsToShow, at: origin) - super.drawGlyphs(forGlyphRange: glyphsToShow, at: origin) - drawCustomAttributes(forGlyphRange: glyphsToShow, at: origin) - } - - private func drawCustomBackgrounds(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) { - guard let context = context else { return } - push(context: context) - defer { popContext() } - - guard let textStorage = textStorage else { return } - - let characterRange = self.characterRange(forGlyphRange: glyphsToShow, actualGlyphRange: nil) - - textStorage.enumerateAttributes(for: .blockBackgroundColor, in: characterRange) { (attr: BlockBackgroundColorAttribute, blockRange) in - - let inset = attr.inset - - context.setFillColor(attr.color.cgColor) - - let allBlockColorRanges = glyphRanges(for: .blockBackgroundColor, in: textStorage, inCharacterRange: blockRange) - let blockColorGlyphRange = glyphRange(forCharacterRange: blockRange, actualCharacterRange: nil) - - enumerateLineFragments(forGlyphRange: blockColorGlyphRange) { lineRect, lineUsedRect, container, lineGlyphRange, _ in - - let isLineStartOfBlock = allBlockColorRanges.contains { - lineGlyphRange.overlapsStart(of: $0) - } - - let isLineEndOfBlock = allBlockColorRanges.contains { - lineGlyphRange.overlapsEnd(of: $0) - } - - let minX = lineUsedRect.minX + container.lineFragmentPadding - inset - let maxX = lineRect.maxX - let minY = isLineStartOfBlock ? lineUsedRect.minY - inset : lineRect.minY - let maxY = isLineEndOfBlock ? lineUsedRect.maxY + inset : lineUsedRect.maxY - let blockRect = CGRect(minX: minX, minY: minY, maxX: maxX, maxY: maxY).translated(by: origin) - - context.fill(blockRect) - } - } - } - - private func drawCustomAttributes(forGlyphRange glyphsToShow: NSRange, at origin: CGPoint) { - let characterRange = self.characterRange(forGlyphRange: glyphsToShow, actualGlyphRange: nil) - drawThematicBreakIfNeeded(in: characterRange, at: origin) - drawQuoteStripeIfNeeded(in: characterRange, at: origin) - } - - private func drawThematicBreakIfNeeded(in characterRange: NSRange, at origin: CGPoint) { - guard let context = context else { return } - push(context: context) - defer { popContext() } - - textStorage?.enumerateAttributes(for: .thematicBreak, in: characterRange) { (attr: ThematicBreakAttribute, range) in - let firstGlyphIndex = glyphIndexForCharacter(at: range.lowerBound) - - let lineRect = lineFragmentRect(forGlyphAt: firstGlyphIndex, effectiveRange: nil) - let usedRect = lineFragmentUsedRect(forGlyphAt: firstGlyphIndex, effectiveRange: nil) - - let lineStart = usedRect.minX + fragmentPadding(forGlyphAt: firstGlyphIndex) - - let boundingRect = CGRect(x: lineStart, y: lineRect.minY, width: lineRect.width - lineStart, height: lineRect.height) - let adjustedLineRect = boundingRect.translated(by: origin) - - drawThematicBreak(with: context, in: adjustedLineRect, attr: attr) - } - } - - private func fragmentPadding(forGlyphAt glyphIndex: Int) -> CGFloat { - let textContainer = self.textContainer(forGlyphAt: glyphIndex, effectiveRange: nil) - return textContainer?.lineFragmentPadding ?? 0 - } - - private func drawThematicBreak(with context: CGContext, in rect: CGRect, attr: ThematicBreakAttribute) { - context.setStrokeColor(attr.color.cgColor) - context.setLineWidth(attr.thickness) - context.move(to: CGPoint(x: rect.minX, y: rect.midY)) - context.addLine(to: CGPoint(x: rect.maxX, y: rect.midY)) - context.strokePath() - } - - private func drawQuoteStripeIfNeeded(in characterRange: NSRange, at origin: CGPoint) { - guard let context = context else { return } - push(context: context) - defer { popContext() } - - textStorage?.enumerateAttributes(for: .quoteStripe, in: characterRange) { (attr: QuoteStripeAttribute, quoteRange) in - context.setFillColor(attr.color.cgColor) - - let glyphRangeOfQuote = self.glyphRange(forCharacterRange: quoteRange, actualCharacterRange: nil) - - enumerateLineFragments(forGlyphRange: glyphRangeOfQuote) { lineRect, _, container, _, _ in - let locations = attr.locations.map { - CGPoint(x: $0 + container.lineFragmentPadding, y: 0) - .translated(by: lineRect.origin) - .translated(by: origin) - } - - let stripeSize = CGSize(width: attr.thickness, height: lineRect.height) - self.drawQuoteStripes(with: context, locations: locations, size: stripeSize) - } - } - } - - private func drawQuoteStripes(with context: CGContext, locations: [CGPoint], size: CGSize) { - locations.forEach { - let stripeRect = CGRect(origin: $0, size: size) - context.fill(stripeRect) - } - } - - private func glyphRanges(for key: NSAttributedString.Key, in storage: NSTextStorage, inCharacterRange range: NSRange) -> [NSRange] { - return storage - .ranges(of: key, in: range) - .map { self.glyphRange(forCharacterRange: $0, actualCharacterRange: nil) } - .mergeNeighbors() - } -} - -// MARK: - Helpers - -private extension NSRange { - - func overlapsStart(of range: NSRange) -> Bool { - return lowerBound <= range.lowerBound && upperBound > range.lowerBound - } - - func overlapsEnd(of range: NSRange) -> Bool { - return lowerBound < range.upperBound && upperBound >= range.upperBound - } -} - -private extension Array where Element == NSRange { - - func mergeNeighbors() -> [Element] { - let sorted = self.sorted { $0.lowerBound <= $1.lowerBound } - - let result = sorted.reduce(into: [NSRange]()) { acc, next in - guard let last = acc.popLast() else { - acc.append(next) - return - } - - guard last.upperBound == next.lowerBound else { - acc.append(contentsOf: [last, next]) - return - } - - acc.append(NSRange(location: last.lowerBound, length: next.upperBound - last.lowerBound)) - } - - return result - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Options/CodeBlockOptions.swift b/Pods/Down/Source/AST/Styling/Options/CodeBlockOptions.swift deleted file mode 100644 index b0a25bd..0000000 --- a/Pods/Down/Source/AST/Styling/Options/CodeBlockOptions.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// CodeBlockOptions.swift -// Down -// -// Created by John Nguyen on 12.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -public struct CodeBlockOptions { - - public var containerInset: CGFloat - - public init(containerInset: CGFloat = 8) { - self.containerInset = containerInset - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Options/ListItemOptions.swift b/Pods/Down/Source/AST/Styling/Options/ListItemOptions.swift deleted file mode 100644 index d34c1b9..0000000 --- a/Pods/Down/Source/AST/Styling/Options/ListItemOptions.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// ListItemOptions.swift -// Down -// -// Created by John Nguyen on 04.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -public struct ListItemOptions { - - public var maxPrefixDigits: UInt - public var spacingAfterPrefix: CGFloat - public var spacingAbove: CGFloat - public var spacingBelow: CGFloat - - public init(maxPrefixDigits: UInt = 2, - spacingAfterPrefix: CGFloat = 8, - spacingAbove: CGFloat = 4, - spacingBelow: CGFloat = 8 - ) { - self.maxPrefixDigits = maxPrefixDigits - self.spacingAfterPrefix = spacingAfterPrefix - self.spacingAbove = spacingAbove - self.spacingBelow = spacingBelow - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Options/QuoteStripeOptions.swift b/Pods/Down/Source/AST/Styling/Options/QuoteStripeOptions.swift deleted file mode 100644 index 9dd70a9..0000000 --- a/Pods/Down/Source/AST/Styling/Options/QuoteStripeOptions.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// QuoteStripeOptions.swift -// Down -// -// Created by John Nguyen on 04.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -public struct QuoteStripeOptions { - - public var thickness: CGFloat - public var spacingAfter: CGFloat - - public init(thickness: CGFloat = 2, spacingAfter: CGFloat = 8) { - self.thickness = thickness - self.spacingAfter = spacingAfter - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Options/ThematicBreakOptions.swift b/Pods/Down/Source/AST/Styling/Options/ThematicBreakOptions.swift deleted file mode 100644 index 4e901b5..0000000 --- a/Pods/Down/Source/AST/Styling/Options/ThematicBreakOptions.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// ThematicBreakOptions.swift -// Down -// -// Created by John Nguyen on 04.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -public struct ThematicBreakOptions { - - public var thickness: CGFloat - public var indentation: CGFloat - - public init(thickness: CGFloat = 1, indentation: CGFloat = 0) { - self.thickness = thickness - self.indentation = indentation - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Stylers/DownStyler.swift b/Pods/Down/Source/AST/Styling/Stylers/DownStyler.swift deleted file mode 100644 index 1e15e64..0000000 --- a/Pods/Down/Source/AST/Styling/Stylers/DownStyler.swift +++ /dev/null @@ -1,299 +0,0 @@ -// -// DownStyler.swift -// Down -// -// Created by John Nguyen on 22.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -/// A default `Styler` implementation that supports a variety of configurable -/// properties for font, text color and paragraph styling, as well as formatting -/// of nested lists and quotes. -open class DownStyler: Styler { - - // MARK: - Properties - - public let fonts: FontCollection - public let colors: ColorCollection - public let paragraphStyles: ParagraphStyleCollection - - public let quoteStripeOptions: QuoteStripeOptions - public let thematicBreakOptions: ThematicBreakOptions - public let codeBlockOptions: CodeBlockOptions - - private let itemParagraphStyler: ListItemParagraphStyler - - private var listPrefixAttributes: [NSAttributedString.Key : Any] {[ - .font: fonts.listItemPrefix, - .foregroundColor: colors.listItemPrefix] - } - - // MARK: - Init - - public init(configuration: DownStylerConfiguration = DownStylerConfiguration()) { - fonts = configuration.fonts - colors = configuration.colors - paragraphStyles = configuration.paragraphStyles - quoteStripeOptions = configuration.quoteStripeOptions - thematicBreakOptions = configuration.thematicBreakOptions - codeBlockOptions = configuration.codeBlockOptions - itemParagraphStyler = ListItemParagraphStyler(options: configuration.listItemOptions, prefixFont: fonts.listItemPrefix) - } - - // MARK: - Styling - - open func style(document str: NSMutableAttributedString) { - - } - - open func style(blockQuote str: NSMutableAttributedString, nestDepth: Int) { - let stripeAttribute = QuoteStripeAttribute(level: nestDepth + 1, color: colors.quoteStripe, options: quoteStripeOptions) - - str.updateExistingAttributes(for: .paragraphStyle) { (style: NSParagraphStyle) in - style.indented(by: stripeAttribute.layoutWidth) - } - - str.addAttributeInMissingRanges(for: .quoteStripe, value: stripeAttribute) - str.addAttribute(for: .foregroundColor, value: colors.quote) - } - - open func style(list str: NSMutableAttributedString, nestDepth: Int) { - - } - - open func style(listItemPrefix str: NSMutableAttributedString) { - str.setAttributes(listPrefixAttributes) - } - - open func style(item str: NSMutableAttributedString, prefixLength: Int) { - let paragraphRanges = str.paragraphRanges() - - guard let leadingParagraphRange = paragraphRanges.first else { return } - - indentListItemLeadingParagraph(in: str, prefixLength: prefixLength, inRange: leadingParagraphRange) - - paragraphRanges.dropFirst().forEach { - indentListItemTrailingParagraph(in: str, inRange: $0) - } - } - - open func style(codeBlock str: NSMutableAttributedString, fenceInfo: String?) { - styleGenericCodeBlock(in: str) - } - - open func style(htmlBlock str: NSMutableAttributedString) { - styleGenericCodeBlock(in: str) - } - - open func style(customBlock str: NSMutableAttributedString) { - - } - - open func style(paragraph str: NSMutableAttributedString) { - str.addAttribute(for: .paragraphStyle, value: paragraphStyles.body) - } - - open func style(heading str: NSMutableAttributedString, level: Int) { - let (font, color, paragraphStyle) = headingAttributes(for: level) - - str.updateExistingAttributes(for: .font) { (currentFont: DownFont) in - var newFont = font - - if (currentFont.isMonospace) { - newFont = newFont.monospace - } - - if (currentFont.isEmphasized) { - newFont = newFont.emphasis - } - - if (currentFont.isStrong) { - newFont = newFont.strong - } - - return newFont - } - - str.addAttributes([ - .foregroundColor: color, - .paragraphStyle: paragraphStyle]) - } - - open func style(thematicBreak str: NSMutableAttributedString) { - let paragraphStyle = NSMutableParagraphStyle() - paragraphStyle.firstLineHeadIndent = thematicBreakOptions.indentation - let attr = ThematicBreakAttribute(thickness: thematicBreakOptions.thickness, color: colors.thematicBreak) - str.addAttribute(for: .thematicBreak, value: attr) - str.addAttribute(for: .paragraphStyle, value: paragraphStyle) - } - - open func style(text str: NSMutableAttributedString) { - str.setAttributes([ - .font: fonts.body, - .foregroundColor: colors.body]) - } - - open func style(softBreak str: NSMutableAttributedString) { - - } - - open func style(lineBreak str: NSMutableAttributedString) { - - } - - open func style(code str: NSMutableAttributedString) { - styleGenericInlineCode(in: str) - } - - open func style(htmlInline str: NSMutableAttributedString) { - styleGenericInlineCode(in: str) - } - - open func style(customInline str: NSMutableAttributedString) { - - } - - open func style(emphasis str: NSMutableAttributedString) { - str.updateExistingAttributes(for: .font) { (font: DownFont) in - font.emphasis - } - } - - open func style(strong str: NSMutableAttributedString) { - str.updateExistingAttributes(for: .font) { (font: DownFont) in - font.strong - } - } - - open func style(link str: NSMutableAttributedString, title: String?, url: String?) { - guard let url = url else { return } - styleGenericLink(in: str, url: url) - } - - open func style(image str: NSMutableAttributedString, title: String?, url: String?) { - guard let url = url else { return } - styleGenericLink(in: str, url: url) - } - - // MARK: - Common Styling - - private func styleGenericCodeBlock(in str: NSMutableAttributedString) { - let blockBackgroundAttribute = BlockBackgroundColorAttribute( - color: colors.codeBlockBackground, - inset: codeBlockOptions.containerInset) - - let adjustedParagraphStyle = paragraphStyles.code.inset(by: blockBackgroundAttribute.inset) - - str.setAttributes([ - .font: fonts.code, - .foregroundColor: colors.code, - .paragraphStyle: adjustedParagraphStyle, - .blockBackgroundColor: blockBackgroundAttribute]) - } - - private func styleGenericInlineCode(in str: NSMutableAttributedString) { - str.setAttributes([ - .font: fonts.code, - .foregroundColor: colors.code]) - } - - private func styleGenericLink(in str: NSMutableAttributedString, url: String) { - str.addAttributes([ - .link: url, - .foregroundColor: colors.link]) - } - - // MARK: - Helpers - - private func headingAttributes(for level: Int) -> (DownFont, DownColor, NSParagraphStyle) { - switch level { - case 1: return (fonts.heading1, colors.heading1, paragraphStyles.heading1) - case 2: return (fonts.heading2, colors.heading2, paragraphStyles.heading2) - case 3: return (fonts.heading3, colors.heading3, paragraphStyles.heading3) - case 4: return (fonts.heading4, colors.heading4, paragraphStyles.heading4) - case 5: return (fonts.heading5, colors.heading5, paragraphStyles.heading5) - case 6: return (fonts.heading6, colors.heading6, paragraphStyles.heading6) - default: return (fonts.heading1, colors.heading1, paragraphStyles.heading1) - } - } - - private func indentListItemLeadingParagraph(in str: NSMutableAttributedString, prefixLength: Int, inRange range: NSRange) { - str.updateExistingAttributes(for: .paragraphStyle, in: range) { (existingStyle: NSParagraphStyle) in - existingStyle.indented(by: itemParagraphStyler.indentation) - } - - let attributedPrefix = str.prefix(with: prefixLength) - let prefixWidth = attributedPrefix.size().width - - let defaultStyle = itemParagraphStyler.leadingParagraphStyle(prefixWidth: prefixWidth) - str.addAttributeInMissingRanges(for: .paragraphStyle, value: defaultStyle, within: range) - } - - private func indentListItemTrailingParagraph(in str: NSMutableAttributedString, inRange range: NSRange) { - str.updateExistingAttributes(for: .paragraphStyle, in: range) { (existingStyle: NSParagraphStyle) in - existingStyle.indented(by: itemParagraphStyler.indentation) - } - - let defaultStyle = itemParagraphStyler.trailingParagraphStyle - str.addAttributeInMissingRanges(for: .paragraphStyle, value: defaultStyle, within: range) - - indentListItemQuotes(in: str, inRange: range) - } - - private func indentListItemQuotes(in str: NSMutableAttributedString, inRange range: NSRange) { - str.updateExistingAttributes(for: .quoteStripe, in: range) { (stripe: QuoteStripeAttribute) in - stripe.indented(by: itemParagraphStyler.indentation) - } - } - -} - -// MARK: - Helper Extensions - -private extension NSParagraphStyle { - - func indented(by indentation: CGFloat) -> NSParagraphStyle { - let result = mutableCopy() as! NSMutableParagraphStyle - result.firstLineHeadIndent += indentation - result.headIndent += indentation - - result.tabStops = tabStops.map { - NSTextTab(textAlignment: $0.alignment, location: $0.location + indentation, options: $0.options) - } - - return result - } - - func inset(by amount: CGFloat) -> NSParagraphStyle { - let result = mutableCopy() as! NSMutableParagraphStyle - result.paragraphSpacingBefore += amount - result.paragraphSpacing += amount - result.firstLineHeadIndent += amount - result.headIndent += amount - result.tailIndent = -amount - return result - } -} - -private extension NSAttributedString { - - func prefix(with length: Int) -> NSAttributedString { - guard length <= self.length else { return self } - guard length > 0 else { return NSAttributedString() } - return attributedSubstring(from: NSMakeRange(0, length)) - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Stylers/DownStylerConfiguration.swift b/Pods/Down/Source/AST/Styling/Stylers/DownStylerConfiguration.swift deleted file mode 100644 index 8f42491..0000000 --- a/Pods/Down/Source/AST/Styling/Stylers/DownStylerConfiguration.swift +++ /dev/null @@ -1,41 +0,0 @@ -// -// DownStylerConfiguration.swift -// Down -// -// Created by John Nguyen on 10.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -/// A configuration object used to initialze the `DownStyler`. -public struct DownStylerConfiguration { - - public var fonts: FontCollection - public var colors: ColorCollection - public var paragraphStyles: ParagraphStyleCollection - - public var listItemOptions: ListItemOptions - public var quoteStripeOptions: QuoteStripeOptions - public var thematicBreakOptions: ThematicBreakOptions - public var codeBlockOptions: CodeBlockOptions - - public init(fonts: FontCollection = StaticFontCollection(), - colors: ColorCollection = StaticColorCollection(), - paragraphStyles: ParagraphStyleCollection = StaticParagraphStyleCollection(), - listItemOptions: ListItemOptions = ListItemOptions(), - quoteStripeOptions: QuoteStripeOptions = QuoteStripeOptions(), - thematicBreakOptions: ThematicBreakOptions = ThematicBreakOptions(), - codeBlockOptions: CodeBlockOptions = CodeBlockOptions() - ) { - self.fonts = fonts - self.colors = colors - self.paragraphStyles = paragraphStyles - self.listItemOptions = listItemOptions - self.quoteStripeOptions = quoteStripeOptions - self.thematicBreakOptions = thematicBreakOptions - self.codeBlockOptions = codeBlockOptions - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Stylers/Styler.swift b/Pods/Down/Source/AST/Styling/Stylers/Styler.swift deleted file mode 100644 index df5bdb4..0000000 --- a/Pods/Down/Source/AST/Styling/Stylers/Styler.swift +++ /dev/null @@ -1,164 +0,0 @@ -// -// Styler.swift -// Down -// -// Created by John Nguyen on 13.04.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -/// A styler is an object that manipulates the appearance of attributed strings generated -/// for each particular markdown node. The attributed string passed into each method is -/// mutable, so new attributes can be added and/or existing attributes modified or removed. -/// -/// When applying paragraph styles to a string, take care not to cause any conflicts with -/// existing paragraph styles, as this can lead to visual bugs that are difficult to -/// understand. -/// -/// A styler is used in conjunction with an instance of `AttributedStringVisitor` in order -/// to generate an NSAttributedString from an abstract syntax tree. -public protocol Styler { - - /// Styles the content of the document in the given string. - /// - /// - Parameter str: the document content. - func style(document str: NSMutableAttributedString) - - - /// Styles the content of the block quote contained in the given string. - /// - /// - Parameter str: the quote content. - /// - Parameter nestDepth: the zero indexed nesting depth of the block quote node. - func style(blockQuote str: NSMutableAttributedString, nestDepth: Int) - - - /// Styles the content of the list contained in the given string. - /// - /// - Parameter str: the list content. - /// - Parameter nestDepth: the zero indexed nesting depth of the list node. - func style(list str: NSMutableAttributedString, nestDepth: Int) - - - /// Styles the number or bullet list item prefix. - /// - /// - Parameter str: the list item prefix. - func style(listItemPrefix str: NSMutableAttributedString) - - - /// Styles the content of the list item contained in the given string, including the - /// number or bullet prefix. - /// - /// - Parameter str: the item content. - /// - Parameter prefixLength: the character length of the number or bullet prefix. - func style(item str: NSMutableAttributedString, prefixLength: Int) - - - /// Styles the content of the code block in the given string. - /// - /// An example use case for `fenceInfo` is to specify a programming language name, - /// which could be used to support syntax highlighting. - /// - /// - Parameter str: the code content. - /// - Parameter fenceInfo: the string that trails the initial ``` ticks. - func style(codeBlock str: NSMutableAttributedString, fenceInfo: String?) - - - /// Styles the content of the html block contained in the given string. - /// - /// - Parameter str: the html content. - func style(htmlBlock str: NSMutableAttributedString) - - - /// Styles the content of the custom block contained in the given string. - /// - /// - Parameter str: the content. - func style(customBlock str: NSMutableAttributedString) - - - /// Styles the content of the paragraph in the given string. - /// - /// - Parameter str: the paragraph content. - func style(paragraph str: NSMutableAttributedString) - - - /// Styles the content of the heading in the given string. - /// - /// - Parameter str: the heading content. - /// - Parameter level: the heading level [1, 6] - func style(heading str: NSMutableAttributedString, level: Int) - - - /// Styles the content of the thematic break in the given string. - /// - /// - Parameter str: the thematic break. - func style(thematicBreak str: NSMutableAttributedString) - - - /// Styles the content of the inline text node in the given string. - /// - /// The text nodes are always the leaves of the AST, thus they - /// contain the base style upon which other nodes can work with. - /// - /// - Parameter str: the text content. - func style(text str: NSMutableAttributedString) - - - /// Styles the content of the soft break in the given string. - /// - /// - Parameter str: the soft break. - func style(softBreak str: NSMutableAttributedString) - - - /// Styles the content of the line break in the given string. - /// - /// - Parameter str: the line break. - func style(lineBreak str: NSMutableAttributedString) - - - /// Styles the content of the inline code in the given string. - /// - /// - Parameter str: the code content. - func style(code str: NSMutableAttributedString) - - - /// Styles the content of the inline html tags in the given string. - /// - /// Note, the content does not include text between matching tags. - /// - /// - Parameter str: the html content. - func style(htmlInline str: NSMutableAttributedString) - - - /// Styles the content of the inline custom node in the given string. - /// - /// - Parameter str: the custom content. - func style(customInline str: NSMutableAttributedString) - - - /// Styles the content of the inline emphasis node in the given string. - /// - /// - Parameter str: the ephasized content. - func style(emphasis str: NSMutableAttributedString) - - - /// Styles the content of the inline strong node in the given string. - /// - /// - Parameter str: the strong content. - func style(strong str: NSMutableAttributedString) - - - /// Styles the content of the inline link node in the given string. - /// - /// - Parameter str: the link content. - /// - Parameter title: the link title. - /// - Parameter url: the linked url. - func style(link str: NSMutableAttributedString, title: String?, url: String?) - - /// Styles the content of the inline image node in the given string. - /// - /// - Parameter str: the link content. - /// - Parameter title: the link title. - /// - Parameter url: the linked url. - func style(image str: NSMutableAttributedString, title: String?, url: String?) -} diff --git a/Pods/Down/Source/AST/Styling/Text Views/DownDebugTextView.swift b/Pods/Down/Source/AST/Styling/Text Views/DownDebugTextView.swift deleted file mode 100644 index 8c97b64..0000000 --- a/Pods/Down/Source/AST/Styling/Text Views/DownDebugTextView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// DownDebugTextView.swift -// Down -// -// Created by John Nguyen on 06.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit - -#elseif canImport(AppKit) - -import AppKit - -#endif - -/// A text view capable of parsing and rendering markdown via the AST, as well as line fragments. -/// -/// See `DownDebugLayoutManager`. -public class DownDebugTextView: DownTextView { - - public init(frame: CGRect, styler: Styler = DownStyler()) { - super.init(frame: frame, styler: styler, layoutManager: DownDebugLayoutManager()) - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } -} - -#endif diff --git a/Pods/Down/Source/AST/Styling/Text Views/DownTextView.swift b/Pods/Down/Source/AST/Styling/Text Views/DownTextView.swift deleted file mode 100644 index 9db44d6..0000000 --- a/Pods/Down/Source/AST/Styling/Text Views/DownTextView.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// DownTextView.swift -// Down -// -// Created by John Nguyen on 03.08.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(watchOS) && !os(Linux) - -#if canImport(UIKit) - -import UIKit -public typealias TextView = UITextView - -#elseif canImport(AppKit) - -import AppKit -public typealias TextView = NSTextView - -#endif - -/// A text view capable of parsing and rendering markdown via the AST. -open class DownTextView: TextView { - - // MARK: - Properties - - open var styler: Styler - - #if canImport(UIKit) - - open override var text: String! { - didSet { - guard oldValue != text else { return } - try? render() - } - } - - #elseif canImport(AppKit) - - open override var string: String { - didSet { - guard oldValue != string else { return } - try? render() - } - } - - #endif - - - // MARK: - Init - - public convenience init(frame: CGRect, styler: Styler = DownStyler()) { - self.init(frame: frame, styler: styler, layoutManager: DownLayoutManager()) - } - - init(frame: CGRect, styler: Styler, layoutManager: NSLayoutManager) { - self.styler = styler - - let textStorage = NSTextStorage() - let textContainer = NSTextContainer() - - textStorage.addLayoutManager(layoutManager) - layoutManager.addTextContainer(textContainer) - - super.init(frame: frame, textContainer: textContainer) - - // We don't want the text view to overwrite link attributes set - // by the styler. - linkTextAttributes = [:] - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Methods - - open func render() throws { - #if canImport(UIKit) - let down = Down(markdownString: text) - let markdown = try down.toAttributedString(styler: styler) - attributedText = markdown - - #elseif canImport(AppKit) - guard let textStorage = textStorage else { return } - let down = Down(markdownString: string) - let markdown = try down.toAttributedString(styler: styler) - textStorage.replaceCharacters(in: textStorage.wholeRange, with: markdown) - - #endif - } -} - -#endif diff --git a/Pods/Down/Source/AST/Visitors/AttributedStringVisitor.swift b/Pods/Down/Source/AST/Visitors/AttributedStringVisitor.swift deleted file mode 100644 index 5134e0a..0000000 --- a/Pods/Down/Source/AST/Visitors/AttributedStringVisitor.swift +++ /dev/null @@ -1,226 +0,0 @@ -// -// AttributedStringVisitor.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -#if !os(Linux) - -import Foundation - -/// This class is used to generated an `NSMutableAttributedString` from the abstract syntax -/// tree produced by a markdown string. It traverses the tree to construct substrings -/// represented at each node and uses an instance of `Styler` to apply the visual attributes. -/// These substrings are joined together to produce the final result. -public class AttributedStringVisitor { - - private let styler: Styler - private let options: DownOptions - private var listPrefixGenerators = [ListItemPrefixGenerator]() - - /// Creates a new instance with the given styler and options. - /// - /// - parameters: - /// - styler: used to style the markdown elements. - /// - options: may be used to modify rendering. - public init(styler: Styler, options: DownOptions = .default) { - self.styler = styler - self.options = options - } -} - -extension AttributedStringVisitor: Visitor { - public typealias Result = NSMutableAttributedString - - public func visit(document node: Document) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - styler.style(document: s) - return s - } - - public func visit(blockQuote node: BlockQuote) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(blockQuote: s, nestDepth: node.nestDepth) - return s - } - - public func visit(list node: List) -> NSMutableAttributedString { - listPrefixGenerators.append(ListItemPrefixGenerator(list: node)) - defer { listPrefixGenerators.removeLast() } - - let items = visitChildren(of: node) - - let s = items.joined - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(list: s, nestDepth: node.nestDepth) - return s - } - - public func visit(item node: Item) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - - let prefix = listPrefixGenerators.last?.next() ?? "•" - let attributedPrefix = "\(prefix)\t".attributed - styler.style(listItemPrefix: attributedPrefix) - s.insert(attributedPrefix, at: 0) - - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(item: s, prefixLength: (prefix as NSString).length) - return s - } - - public func visit(codeBlock node: CodeBlock) -> NSMutableAttributedString { - guard let literal = node.literal else { return .empty } - let s = literal.replacingNewlinesWithLineSeparators().attributed - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(codeBlock: s, fenceInfo: node.fenceInfo) - return s - } - - public func visit(htmlBlock node: HtmlBlock) -> NSMutableAttributedString { - guard let literal = node.literal else { return .empty } - let s = literal.replacingNewlinesWithLineSeparators().attributed - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(htmlBlock: s) - return s - } - - public func visit(customBlock node: CustomBlock) -> NSMutableAttributedString { - guard let s = node.literal?.attributed else { return .empty } - styler.style(customBlock: s) - return s - } - - public func visit(paragraph node: Paragraph) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(paragraph: s) - return s - } - - public func visit(heading node: Heading) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - if node.hasSuccessor { s.append(.paragraphSeparator) } - styler.style(heading: s, level: node.headingLevel) - return s - } - - public func visit(thematicBreak node: ThematicBreak) -> NSMutableAttributedString { - let s = "\(String.zeroWidthSpace)\n".attributed - styler.style(thematicBreak: s) - return s - } - - public func visit(text node: Text) -> NSMutableAttributedString { - guard let s = node.literal?.attributed else { return .empty } - styler.style(text: s) - return s - } - - public func visit(softBreak node: SoftBreak) -> NSMutableAttributedString { - let s = (options.contains(.hardBreaks) ? String.lineSeparator : " ").attributed - styler.style(softBreak: s) - return s - } - - public func visit(lineBreak node: LineBreak) -> NSMutableAttributedString { - let s = String.lineSeparator.attributed - styler.style(lineBreak: s) - return s - } - - public func visit(code node: Code) -> NSMutableAttributedString { - guard let s = node.literal?.attributed else { return .empty } - styler.style(code: s) - return s - } - - public func visit(htmlInline node: HtmlInline) -> NSMutableAttributedString { - guard let s = node.literal?.attributed else { return .empty } - styler.style(htmlInline: s) - return s - } - - public func visit(customInline node: CustomInline) -> NSMutableAttributedString { - guard let s = node.literal?.attributed else { return .empty } - styler.style(customInline: s) - return s - } - - public func visit(emphasis node: Emphasis) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - styler.style(emphasis: s) - return s - } - - public func visit(strong node: Strong) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - styler.style(strong: s) - return s - } - - public func visit(link node: Link) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - styler.style(link: s, title: node.title, url: node.url) - return s - } - - public func visit(image node: Image) -> NSMutableAttributedString { - let s = visitChildren(of: node).joined - styler.style(image: s, title: node.title, url: node.url) - return s - } -} - -// MARK: - Helper extensions - -private extension Sequence where Iterator.Element == NSMutableAttributedString { - - var joined: NSMutableAttributedString { - return reduce(into: NSMutableAttributedString()) { $0.append($1) } - } -} - -private extension NSMutableAttributedString { - - static var empty: NSMutableAttributedString { - return "".attributed - } -} - -private extension NSAttributedString { - - static var paragraphSeparator: NSAttributedString { - return String.paragraphSeparator.attributed - } -} - -private extension String { - - var attributed: NSMutableAttributedString { - return NSMutableAttributedString(string: self) - } - - // This codepoint marks the end of a paragraph and the start of the next. - static var paragraphSeparator: String { - return "\u{2029}" - } - - // This code point allows line breaking, without starting a new paragraph. - static var lineSeparator: String { - return "\u{2028}" - } - - static var zeroWidthSpace: String { - return "\u{200B}" - } - - func replacingNewlinesWithLineSeparators() -> String { - let trimmed = trimmingCharacters(in: .newlines) - let lines = trimmed.components(separatedBy: .newlines) - return lines.joined(separator: .lineSeparator) - } -} -#endif // !os(Linux) diff --git a/Pods/Down/Source/AST/Visitors/DebugVisitor.swift b/Pods/Down/Source/AST/Visitors/DebugVisitor.swift deleted file mode 100644 index 9554b69..0000000 --- a/Pods/Down/Source/AST/Visitors/DebugVisitor.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// DebugVisitor.swift -// Down -// -// Created by John Nguyen on 09.04.19. -// - -import Foundation - -/// This visitor will generate the debug description of an entire abstract syntax tree, -/// indicating relationships between nodes with indentation. -public class DebugVisitor: Visitor { - - private var depth = 0 - - private var indent: String { - return String(repeating: " ", count: depth) - } - - public init() {} - - private func report(_ node: Node) -> String { - return "\(indent)\(node is Document ? "" : "↳ ")\(String(reflecting: node))\n" - } - - private func reportWithChildren(_ node: Node) -> String { - let thisNode = report(node) - depth += 1 - let children = visitChildren(of: node).joined() - depth -= 1 - return "\(thisNode)\(children)" - } - - // MARK: - Visitor - - public typealias Result = String - - public func visit(document node: Document) -> String { - return reportWithChildren(node) - } - - public func visit(blockQuote node: BlockQuote) -> String { - return reportWithChildren(node) - } - - public func visit(list node: List) -> String { - return reportWithChildren(node) - } - - public func visit(item node: Item) -> String { - return reportWithChildren(node) - } - - public func visit(codeBlock node: CodeBlock) -> String { - return reportWithChildren(node) - } - - public func visit(htmlBlock node: HtmlBlock) -> String { - return reportWithChildren(node) - } - - public func visit(customBlock node: CustomBlock) -> String { - return reportWithChildren(node) - } - - public func visit(paragraph node: Paragraph) -> String { - return reportWithChildren(node) - } - - public func visit(heading node: Heading) -> String { - return reportWithChildren(node) - } - - public func visit(thematicBreak node: ThematicBreak) -> String { - return report(node) - } - - public func visit(text node: Text) -> String { - return report(node) - } - - public func visit(softBreak node: SoftBreak) -> String { - return report(node) - } - - public func visit(lineBreak node: LineBreak) -> String { - return report(node) - } - - public func visit(code node: Code) -> String { - return report(node) - } - - public func visit(htmlInline node: HtmlInline) -> String { - return report(node) - } - - public func visit(customInline node: CustomInline) -> String { - return report(node) - } - - public func visit(emphasis node: Emphasis) -> String { - return reportWithChildren(node) - } - - public func visit(strong node: Strong) -> String { - return reportWithChildren(node) - } - - public func visit(link node: Link) -> String { - return reportWithChildren(node) - } - - public func visit(image node: Image) -> String { - return reportWithChildren(node) - } -} - diff --git a/Pods/Down/Source/AST/Visitors/ListItemPrefixGenerator.swift b/Pods/Down/Source/AST/Visitors/ListItemPrefixGenerator.swift deleted file mode 100644 index 4bc1464..0000000 --- a/Pods/Down/Source/AST/Visitors/ListItemPrefixGenerator.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// ListItemPrefixGenerator.swift -// Down -// -// Created by John Nguyen on 23.06.19. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -class ListItemPrefixGenerator { - - private var prefixes: IndexingIterator<[String]> - - convenience init(list: List) { - self.init(listType: list.listType, numberOfItems: list.numberOfItems) - } - - init(listType: List.ListType, numberOfItems: Int) { - switch listType { - case .bullet: - prefixes = [String](repeating: "•", count: numberOfItems) - .makeIterator() - - case .ordered(let start): - prefixes = (start..<(start + numberOfItems)) - .map { "\($0)." } - .makeIterator() - } - } - - func next() -> String? { - prefixes.next() - } -} diff --git a/Pods/Down/Source/AST/Visitors/Visitor.swift b/Pods/Down/Source/AST/Visitors/Visitor.swift deleted file mode 100644 index 0c9072c..0000000 --- a/Pods/Down/Source/AST/Visitors/Visitor.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// Vistor.swift -// Down -// -// Created by John Nguyen on 07.04.19. -// - -import Foundation - -/// Visitor describes a type that is able to traverse the abstract syntax tree. It visits -/// each node of the tree and produces some result for that node. A visitor is "accepted" by -/// the root node (of type `Document`), which will start the traversal by first invoking -/// `visit(document:)`. -public protocol Visitor { - associatedtype Result - func visit(document node: Document) -> Result - func visit(blockQuote node: BlockQuote) -> Result - func visit(list node: List) -> Result - func visit(item node: Item) -> Result - func visit(codeBlock node: CodeBlock) -> Result - func visit(htmlBlock node: HtmlBlock) -> Result - func visit(customBlock node: CustomBlock) -> Result - func visit(paragraph node: Paragraph) -> Result - func visit(heading node: Heading) -> Result - func visit(thematicBreak node: ThematicBreak) -> Result - func visit(text node: Text) -> Result - func visit(softBreak node: SoftBreak) -> Result - func visit(lineBreak node: LineBreak) -> Result - func visit(code node: Code) -> Result - func visit(htmlInline node: HtmlInline) -> Result - func visit(customInline node: CustomInline) -> Result - func visit(emphasis node: Emphasis) -> Result - func visit(strong node: Strong) -> Result - func visit(link node: Link) -> Result - func visit(image node: Image) -> Result - func visitChildren(of node: Node) -> [Result] -} - -extension Visitor { - public func visitChildren(of node: Node) -> [Result] { - return node.childSequence.compactMap { child in - switch child { - case let child as Document: return visit(document: child) - case let child as BlockQuote: return visit(blockQuote: child) - case let child as List: return visit(list: child) - case let child as Item: return visit(item: child) - case let child as CodeBlock: return visit(codeBlock: child) - case let child as HtmlBlock: return visit(htmlBlock: child) - case let child as CustomBlock: return visit(customBlock: child) - case let child as Paragraph: return visit(paragraph: child) - case let child as Heading: return visit(heading: child) - case let child as ThematicBreak: return visit(thematicBreak: child) - case let child as Text: return visit(text: child) - case let child as SoftBreak: return visit(softBreak: child) - case let child as LineBreak: return visit(lineBreak: child) - case let child as Code: return visit(code: child) - case let child as HtmlInline: return visit(htmlInline: child) - case let child as CustomInline: return visit(customInline: child) - case let child as Emphasis: return visit(emphasis: child) - case let child as Strong: return visit(strong: child) - case let child as Link: return visit(link: child) - case let child as Image: return visit(image: child) - default: - assertionFailure("Unexpected child") - return nil - } - } - } -} diff --git a/Pods/Down/Source/Down.h b/Pods/Down/Source/Down.h deleted file mode 100644 index 1854068..0000000 --- a/Pods/Down/Source/Down.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// Down.h -// Down -// -// Created by Rob Phillips on 6/1/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -@import Foundation; - -//! Project version number for Down. -FOUNDATION_EXPORT double DownVersionNumber; - -//! Project version string for Down. -FOUNDATION_EXPORT const unsigned char DownVersionString[]; diff --git a/Pods/Down/Source/Down.swift b/Pods/Down/Source/Down.swift deleted file mode 100644 index 22d695e..0000000 --- a/Pods/Down/Source/Down.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// Down.swift -// Down -// -// Created by Rob Phillips on 5/28/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -public struct Down: DownASTRenderable, DownHTMLRenderable, DownXMLRenderable, - DownLaTeXRenderable, DownGroffRenderable, DownCommonMarkRenderable { - /// A string containing CommonMark Markdown - public var markdownString: String - - /// Initializes the container with a CommonMark Markdown string which can then be rendered depending on protocol conformance - /// - /// - Parameter markdownString: A string containing CommonMark Markdown - public init(markdownString: String) { - self.markdownString = markdownString - } -} - -#if !os(Linux) -extension Down: DownAttributedStringRenderable { } -#endif // !os(Linux) diff --git a/Pods/Down/Source/Enums & Options/DownErrors.swift b/Pods/Down/Source/Enums & Options/DownErrors.swift deleted file mode 100644 index 4d215dc..0000000 --- a/Pods/Down/Source/Enums & Options/DownErrors.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// DownErrors.swift -// Down -// -// Created by Rob Phillips on 5/28/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -public enum DownErrors: Error { - /// Thrown when there was an issue converting the Markdown into an abstract syntax tree - case markdownToASTError - - /// Thrown when the abstract syntax tree could not be rendered into another format - case astRenderingError - - /// Thrown when an HTML string cannot be converted into an `NSData` representation - case htmlDataConversionError - - #if os(macOS) - /// Thrown when a custom template bundle has a non-standard bundle format. - /// - /// Specifically, the file URL of the bundle’s subdirectory containing resource files could not be found (i.e. the bundle's `resourceURL` property is nil). - case nonStandardBundleFormatError - #endif -} diff --git a/Pods/Down/Source/Enums & Options/DownOptions.swift b/Pods/Down/Source/Enums & Options/DownOptions.swift deleted file mode 100644 index 52d73a8..0000000 --- a/Pods/Down/Source/Enums & Options/DownOptions.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// DownOptions.swift -// Down -// -// Created by Rob Phillips on 5/28/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public struct DownOptions: OptionSet { - public let rawValue: Int32 - public init(rawValue: Int32) { self.rawValue = rawValue } - - /// Default options - public static let `default` = DownOptions(rawValue: CMARK_OPT_DEFAULT) - - // MARK: - Rendering Options - - /// Include a `data-sourcepos` attribute on all block elements - public static let sourcePos = DownOptions(rawValue: CMARK_OPT_SOURCEPOS) - - /// Render `softbreak` elements as hard line breaks. - public static let hardBreaks = DownOptions(rawValue: CMARK_OPT_HARDBREAKS) - - /// Suppress raw HTML and unsafe links (`javascript:`, `vbscript:`, - /// `file:`, and `data:`, except for `image/png`, `image/gif`, - /// `image/jpeg`, or `image/webp` mime types). Raw HTML is replaced - /// by a placeholder HTML comment. Unsafe links are replaced by - /// empty strings. - /// - /// Note: this is the default option as of cmark v0.29.0. Use `unsafe` - /// to disable this behavior. - public static let safe = DownOptions(rawValue: CMARK_OPT_SAFE) - - /// Render raw HTML and unsafe links (`javascript:`, `vbscript:`, - /// `file:`, and `data:`, except for `image/png`, `image/gif`, - /// `image/jpeg`, or `image/webp` mime types). By default, - /// raw HTML is replaced by a placeholder HTML comment. Unsafe - /// links are replaced by empty strings. - /// - /// Note: `safe` is the default as of cmark v0.29.0 - public static let unsafe = DownOptions(rawValue: CMARK_OPT_UNSAFE) - - // MARK: - Parsing Options - - /// Normalize tree by consolidating adjacent text nodes. - public static let normalize = DownOptions(rawValue: CMARK_OPT_NORMALIZE) - - /// Validate UTF-8 in the input before parsing, replacing illegal - /// sequences with the replacement character U+FFFD. - public static let validateUTF8 = DownOptions(rawValue: CMARK_OPT_VALIDATE_UTF8) - - /// Convert straight quotes to curly, --- to em dashes, -- to en dashes. - public static let smart = DownOptions(rawValue: CMARK_OPT_SMART) - - // MARK: - Combo Options - - /// Combines 'unsafe' and 'smart' to render raw HTML and produce smart typography. - public static let smartUnsafe = DownOptions(rawValue: CMARK_OPT_SMART + CMARK_OPT_UNSAFE) - -} diff --git a/Pods/Down/Source/Extensions/NSAttributedString+HTML.swift b/Pods/Down/Source/Extensions/NSAttributedString+HTML.swift deleted file mode 100644 index c480757..0000000 --- a/Pods/Down/Source/Extensions/NSAttributedString+HTML.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// NSAttributedString+HTML.swift -// Down -// -// Created by Rob Phillips on 6/1/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(Linux) - -#if os(macOS) - import AppKit -#else - import UIKit -#endif - - -extension NSAttributedString { - - /// Instantiates an attributed string with the given HTML string - /// - /// - Parameter htmlString: An HTML string - /// - Throws: `HTMLDataConversionError` or an instantiation error - convenience init(htmlString: String) throws { - guard let data = htmlString.data(using: String.Encoding.utf8) else { - throw DownErrors.htmlDataConversionError - } - - let options: [NSAttributedString.DocumentReadingOptionKey: Any] = [ - .documentType: NSAttributedString.DocumentType.html, - .characterEncoding: NSNumber(value: String.Encoding.utf8.rawValue) - ] - try self.init(data: data, options: options, documentAttributes: nil) - } - -} -#endif // !os(Linux) diff --git a/Pods/Down/Source/Extensions/String+ToHTML.swift b/Pods/Down/Source/Extensions/String+ToHTML.swift deleted file mode 100644 index 3691c8b..0000000 --- a/Pods/Down/Source/Extensions/String+ToHTML.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// String+ToHTML.swift -// Down -// -// Created by Rob Phillips on 6/1/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -extension String { - - /// Generates an HTML string from the contents of the string (self), which should contain CommonMark Markdown - /// - /// - Parameter options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: HTML string - /// - Throws: `DownErrors` depending on the scenario - public func toHTML(_ options: DownOptions = .default) throws -> String { - let ast = try DownASTRenderer.stringToAST(self, options: options) - let html = try DownHTMLRenderer.astToHTML(ast, options: options) - cmark_node_free(ast) - return html - } - -} diff --git a/Pods/Down/Source/Renderers/DownASTRenderable.swift b/Pods/Down/Source/Renderers/DownASTRenderable.swift deleted file mode 100644 index 43e6079..0000000 --- a/Pods/Down/Source/Renderers/DownASTRenderable.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// DownASTRenderable.swift -// Down -// -// Created by Rob Phillips on 5/31/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public protocol DownASTRenderable: DownRenderable { - func toAST(_ options: DownOptions) throws -> UnsafeMutablePointer<cmark_node> -} - -extension DownASTRenderable { - /// Generates an abstract syntax tree from the `markdownString` property - /// - /// - Parameter options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: An abstract syntax tree representation of the Markdown input - /// - Throws: `MarkdownToASTError` if conversion fails - public func toAST(_ options: DownOptions = .default) throws -> UnsafeMutablePointer<cmark_node> { - return try DownASTRenderer.stringToAST(markdownString, options: options) - } - - /// Parses the `markdownString` property into an abstract syntax tree and returns the root `Document` node. - /// - /// - Parameter options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: The root Document node for the abstract syntax tree representation of the Markdown input - /// - Throws: `MarkdownToASTError` if conversion fails - public func toDocument(_ options: DownOptions = .default) throws -> Document { - let tree = try toAST(options) - - guard tree.type == CMARK_NODE_DOCUMENT else { - throw DownErrors.astRenderingError - } - - return Document(cmarkNode: tree) - } -} - -public struct DownASTRenderer { - /// Generates an abstract syntax tree from the given CommonMark Markdown string - /// - /// **Important:** It is the caller's responsibility to call `cmark_node_free(ast)` on the returned value - /// - /// - Parameters: - /// - string: A string containing CommonMark Markdown - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: An abstract syntax tree representation of the Markdown input - /// - Throws: `MarkdownToASTError` if conversion fails - public static func stringToAST(_ string: String, options: DownOptions = .default) throws -> UnsafeMutablePointer<cmark_node> { - var tree: UnsafeMutablePointer<cmark_node>? - string.withCString { - let stringLength = Int(strlen($0)) - tree = cmark_parse_document($0, stringLength, options.rawValue) - } - - guard let ast = tree else { - throw DownErrors.markdownToASTError - } - return ast - } -} diff --git a/Pods/Down/Source/Renderers/DownAttributedStringRenderable.swift b/Pods/Down/Source/Renderers/DownAttributedStringRenderable.swift deleted file mode 100644 index e36174a..0000000 --- a/Pods/Down/Source/Renderers/DownAttributedStringRenderable.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// DownAttributedStringRenderable.swift -// Down -// -// Created by Rob Phillips on 6/1/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(Linux) -import Foundation -import libcmark - -public protocol DownAttributedStringRenderable: DownHTMLRenderable, DownASTRenderable { - func toAttributedString(_ options: DownOptions, stylesheet: String?) throws -> NSAttributedString - func toAttributedString(_ options: DownOptions, styler: Styler) throws -> NSAttributedString -} - -extension DownAttributedStringRenderable { - /// Generates an `NSAttributedString` from the `markdownString` property - /// - /// **Note:** The attributed string is constructed and rendered via WebKit from html generated from the - /// abstract syntax tree. This process is not background safe and must be executed on the main - /// thread. Additionally, it may be slow to render. For an efficient background safe render, - /// use the `toAttributedString(options: styler:)` method below. - /// - /// - Parameters: - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - stylesheet: a `String` to use as the CSS stylesheet when rendering, defaulting to a style that uses the `NSAttributedString` default font - /// - Returns: An `NSAttributedString` - /// - Throws: `DownErrors` depending on the scenario - public func toAttributedString(_ options: DownOptions = .default, stylesheet: String? = nil) throws -> NSAttributedString { - let html = try self.toHTML(options) - let defaultStylesheet = "* {font-family: Helvetica } code, pre { font-family: Menlo }" - return try NSAttributedString(htmlString: "<style>" + (stylesheet ?? defaultStylesheet) + "</style>" + html) - } - - /// Generates an `NSAttributedString` from the `markdownString` property - /// - /// **Note:** The attributed string is constructed directly by traversing the abstract syntax tree. It is - /// much faster than the `toAttributedString(options: stylesheet)` method and it can be also be - /// rendered in a background thread. - /// - /// - Parameters: - /// - options: `DownOptions` to modify parsing or rendering - /// - styler: a class/struct conforming to `Styler` to use when rendering the various elements of the attributed string - /// - Returns: An `NSAttributedString` - /// - Throws: `DownErrors` depending on the scenario - public func toAttributedString(_ options: DownOptions = .default, styler: Styler) throws -> NSAttributedString { - let document = try self.toDocument(options) - let visitor = AttributedStringVisitor(styler: styler, options: options) - return document.accept(visitor) - } -} -#endif // !os(Linux) diff --git a/Pods/Down/Source/Renderers/DownCommonMarkRenderable.swift b/Pods/Down/Source/Renderers/DownCommonMarkRenderable.swift deleted file mode 100644 index cf0f2cc..0000000 --- a/Pods/Down/Source/Renderers/DownCommonMarkRenderable.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// DownCommonMarkRenderable.swift -// Down -// -// Created by Rob Phillips on 5/31/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public protocol DownCommonMarkRenderable: DownRenderable { - func toCommonMark(_ options: DownOptions, width: Int32) throws -> String -} - -extension DownCommonMarkRenderable { - /// Generates a CommonMark Markdown string from the `markdownString` property - /// - /// - Parameters: - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - width: The width to break on, defaulting to 0 - /// - Returns: CommonMark Markdown string - /// - Throws: `DownErrors` depending on the scenario - public func toCommonMark(_ options: DownOptions = .default, width: Int32 = 0) throws -> String { - let ast = try DownASTRenderer.stringToAST(markdownString, options: options) - let commonMark = try DownCommonMarkRenderer.astToCommonMark(ast, options: options, width: width) - cmark_node_free(ast) - return commonMark - } -} - -public struct DownCommonMarkRenderer { - /// Generates a CommonMark Markdown string from the given abstract syntax tree - /// - /// **Note:** caller is responsible for calling `cmark_node_free(ast)` after this returns - /// - /// - Parameters: - /// - ast: The `cmark_node` representing the abstract syntax tree - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - width: The width to break on, defaulting to 0 - /// - Returns: CommonMark Markdown string - /// - Throws: `ASTRenderingError` if the AST could not be converted - public static func astToCommonMark(_ ast: UnsafeMutablePointer<cmark_node>, - options: DownOptions = .default, - width: Int32 = 0) throws -> String { - guard let cCommonMarkString = cmark_render_commonmark(ast, options.rawValue, width) else { - throw DownErrors.astRenderingError - } - defer { free(cCommonMarkString) } - - guard let commonMarkString = String(cString: cCommonMarkString, encoding: String.Encoding.utf8) else { - throw DownErrors.astRenderingError - } - - return commonMarkString - } -} diff --git a/Pods/Down/Source/Renderers/DownGroffRenderable.swift b/Pods/Down/Source/Renderers/DownGroffRenderable.swift deleted file mode 100644 index 1138382..0000000 --- a/Pods/Down/Source/Renderers/DownGroffRenderable.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// DownGroffRenderable.swift -// Down -// -// Created by Rob Phillips on 5/31/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public protocol DownGroffRenderable: DownRenderable { - func toGroff(_ options: DownOptions, width: Int32) throws -> String -} - -extension DownGroffRenderable { - /// Generates a groff man string from the `markdownString` property - /// - /// - Parameters: - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - width: The width to break on, defaulting to 0 - /// - Returns: groff man string - /// - Throws: `DownErrors` depending on the scenario - public func toGroff(_ options: DownOptions = .default, width: Int32 = 0) throws -> String { - let ast = try DownASTRenderer.stringToAST(markdownString, options: options) - let groff = try DownGroffRenderer.astToGroff(ast, options: options, width: width) - cmark_node_free(ast) - return groff - } -} - -public struct DownGroffRenderer { - /// Generates a groff man string from the given abstract syntax tree - /// - /// **Note:** caller is responsible for calling `cmark_node_free(ast)` after this returns - /// - /// - Parameters: - /// - ast: The `cmark_node` representing the abstract syntax tree - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - width: The width to break on, defaulting to 0 - /// - Returns: groff man string - /// - Throws: `ASTRenderingError` if the AST could not be converted - public static func astToGroff(_ ast: UnsafeMutablePointer<cmark_node>, - options: DownOptions = .default, - width: Int32 = 0) throws -> String { - guard let cGroffString = cmark_render_man(ast, options.rawValue, width) else { - throw DownErrors.astRenderingError - } - defer { free(cGroffString) } - - guard let groffString = String(cString: cGroffString, encoding: String.Encoding.utf8) else { - throw DownErrors.astRenderingError - } - - return groffString - } -} diff --git a/Pods/Down/Source/Renderers/DownHTMLRenderable.swift b/Pods/Down/Source/Renderers/DownHTMLRenderable.swift deleted file mode 100644 index 9690210..0000000 --- a/Pods/Down/Source/Renderers/DownHTMLRenderable.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// DownHTMLRenderable.swift -// Down -// -// Created by Rob Phillips on 5/28/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public protocol DownHTMLRenderable: DownRenderable { - func toHTML(_ options: DownOptions) throws -> String -} - -extension DownHTMLRenderable { - /// Generates an HTML string from the `markdownString` property - /// - /// - Parameter options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: HTML string - /// - Throws: `DownErrors` depending on the scenario - public func toHTML(_ options: DownOptions = .default) throws -> String { - return try markdownString.toHTML(options) - } -} - -public struct DownHTMLRenderer { - /// Generates an HTML string from the given abstract syntax tree - /// - /// **Note:** caller is responsible for calling `cmark_node_free(ast)` after this returns - /// - /// - Parameters: - /// - ast: The `cmark_node` representing the abstract syntax tree - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: HTML string - /// - Throws: `ASTRenderingError` if the AST could not be converted - public static func astToHTML(_ ast: UnsafeMutablePointer<cmark_node>, options: DownOptions = .default) throws -> String { - guard let cHTMLString = cmark_render_html(ast, options.rawValue) else { - throw DownErrors.astRenderingError - } - defer { free(cHTMLString) } - - guard let htmlString = String(cString: cHTMLString, encoding: String.Encoding.utf8) else { - throw DownErrors.astRenderingError - } - - return htmlString - } -} diff --git a/Pods/Down/Source/Renderers/DownLaTeXRenderable.swift b/Pods/Down/Source/Renderers/DownLaTeXRenderable.swift deleted file mode 100644 index 78f65e3..0000000 --- a/Pods/Down/Source/Renderers/DownLaTeXRenderable.swift +++ /dev/null @@ -1,57 +0,0 @@ -// -// DownLaTeXRenderable.swift -// Down -// -// Created by Rob Phillips on 5/31/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public protocol DownLaTeXRenderable: DownRenderable { - func toLaTeX(_ options: DownOptions, width: Int32) throws -> String -} - -extension DownLaTeXRenderable { - /// Generates a LaTeX string from the `markdownString` property - /// - /// - Parameters: - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - width: The width to break on, defaulting to 0 - /// - Returns: LaTeX string - /// - Throws: `DownErrors` depending on the scenario - public func toLaTeX(_ options: DownOptions = .default, width: Int32 = 0) throws -> String { - let ast = try DownASTRenderer.stringToAST(markdownString, options: options) - let latex = try DownLaTeXRenderer.astToLaTeX(ast, options: options, width: width) - cmark_node_free(ast) - return latex - } -} - -public struct DownLaTeXRenderer { - /// Generates a LaTeX string from the given abstract syntax tree - /// - /// **Note:** caller is responsible for calling `cmark_node_free(ast)` after this returns - /// - /// - Parameters: - /// - ast: The `cmark_node` representing the abstract syntax tree - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - width: The width to break on, defaulting to 0 - /// - Returns: LaTeX string - /// - Throws: `ASTRenderingError` if the AST could not be converted - public static func astToLaTeX(_ ast: UnsafeMutablePointer<cmark_node>, - options: DownOptions = .default, - width: Int32 = 0) throws -> String { - guard let cLatexString = cmark_render_latex(ast, options.rawValue, width) else { - throw DownErrors.astRenderingError - } - defer { free(cLatexString) } - - guard let latexString = String(cString: cLatexString, encoding: String.Encoding.utf8) else { - throw DownErrors.astRenderingError - } - - return latexString - } -} diff --git a/Pods/Down/Source/Renderers/DownRenderable.swift b/Pods/Down/Source/Renderers/DownRenderable.swift deleted file mode 100644 index c5daec9..0000000 --- a/Pods/Down/Source/Renderers/DownRenderable.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// DownRenderable.swift -// Down -// -// Created by Rob Phillips on 5/28/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation - -public protocol DownRenderable { - /// A string containing CommonMark Markdown - var markdownString: String { get set } -} diff --git a/Pods/Down/Source/Renderers/DownXMLRenderable.swift b/Pods/Down/Source/Renderers/DownXMLRenderable.swift deleted file mode 100644 index a2cbf5c..0000000 --- a/Pods/Down/Source/Renderers/DownXMLRenderable.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// DownXMLRenderable.swift -// Down -// -// Created by Rob Phillips on 5/31/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -import Foundation -import libcmark - -public protocol DownXMLRenderable: DownRenderable { - func toXML(_ options: DownOptions) throws -> String -} - -extension DownXMLRenderable { - /// Generates an XML string from the `markdownString` property - /// - /// - Parameter options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: XML string - /// - Throws: `DownErrors` depending on the scenario - public func toXML(_ options: DownOptions = .default) throws -> String { - let ast = try DownASTRenderer.stringToAST(markdownString, options: options) - let xml = try DownXMLRenderer.astToXML(ast, options: options) - cmark_node_free(ast) - return xml - } -} - -public struct DownXMLRenderer { - /// Generates an XML string from the given abstract syntax tree - /// - /// **Note:** caller is responsible for calling `cmark_node_free(ast)` after this returns - /// - /// - Parameters: - /// - ast: The `cmark_node` representing the abstract syntax tree - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - Returns: XML string - /// - Throws: `ASTRenderingError` if the AST could not be converted - public static func astToXML(_ ast: UnsafeMutablePointer<cmark_node>, options: DownOptions = .default) throws -> String { - guard let cXMLString = cmark_render_xml(ast, options.rawValue) else { - throw DownErrors.astRenderingError - } - defer { free(cXMLString) } - - guard let xmlString = String(cString: cXMLString, encoding: String.Encoding.utf8) else { - throw DownErrors.astRenderingError - } - - return xmlString - } -} diff --git a/Pods/Down/Source/Views/DownView.swift b/Pods/Down/Source/Views/DownView.swift deleted file mode 100644 index e570ab5..0000000 --- a/Pods/Down/Source/Views/DownView.swift +++ /dev/null @@ -1,225 +0,0 @@ -// -// DownView.swift -// Down -// -// Created by Rob Phillips on 6/1/16. -// Copyright © 2016-2019 Down. All rights reserved. -// - -#if !os(Linux) -#if os(tvOS) || os(watchOS) - // Sorry, not available for tvOS nor watchOS -#else -import WebKit - -// MARK: - Public API - -public typealias DownViewClosure = () -> () - -open class DownView: WKWebView { - - /// Initializes a web view with the results of rendering a CommonMark Markdown string - /// - /// - Parameters: - /// - frame: The frame size of the web view - /// - markdownString: A string containing CommonMark Markdown - /// - openLinksInBrowser: Whether or not to open links using an external browser - /// - templateBundle: Optional custom template bundle. Leaving this as `nil` will use the bundle included with Down. - /// - configuration: Optional custom web view configuration. - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - didLoadSuccessfully: Optional callback for when the web content has loaded successfully - /// - writableBundle: Whether or not the bundle folder is writable. - /// - Throws: `DownErrors` depending on the scenario - public init(frame: CGRect, markdownString: String, openLinksInBrowser: Bool = true, templateBundle: Bundle? = nil, writableBundle: Bool = false, configuration: WKWebViewConfiguration? = nil, options: DownOptions = .default, didLoadSuccessfully: DownViewClosure? = nil) throws { - self.options = options - self.didLoadSuccessfully = didLoadSuccessfully - self.writableBundle = writableBundle - - if let templateBundle = templateBundle { - self.bundle = templateBundle - } else { - let classBundle = Bundle(for: DownView.self) - let url = classBundle.url(forResource: "DownView", withExtension: "bundle")! - self.bundle = Bundle(url: url)! - } - - super.init(frame: frame, configuration: configuration ?? WKWebViewConfiguration()) - - #if os(macOS) - setupMacEnvironment() - #endif - - if openLinksInBrowser || didLoadSuccessfully != nil { navigationDelegate = self } - try loadHTMLView(markdownString) - } - - required public init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - #if os(macOS) - deinit { - clearTemporaryDirectory() - } - #endif - - // MARK: - API - - /// Renders the given CommonMark Markdown string into HTML and updates the DownView while keeping the style intact - /// - /// - Parameters: - /// - markdownString: A string containing CommonMark Markdown - /// - options: `DownOptions` to modify parsing or rendering, defaulting to `.default` - /// - didLoadSuccessfully: Optional callback for when the web content has loaded successfully - /// - Throws: `DownErrors` depending on the scenario - public func update(markdownString: String, options: DownOptions? = nil, didLoadSuccessfully: DownViewClosure? = nil) throws { - // Note: As the init method sets this initially, we only overwrite them if - // a non-nil value is passed in - if let options = options { - self.options = options - } - if let didLoadSuccessfully = didLoadSuccessfully { - self.didLoadSuccessfully = didLoadSuccessfully - } - - try loadHTMLView(markdownString) - } - - // MARK: - Private Properties - - let bundle: Bundle - let writableBundle: Bool - var options: DownOptions - - private lazy var baseURL: URL = { - return self.bundle.url(forResource: "index", withExtension: "html")! - }() - - #if os(macOS) - private lazy var temporaryDirectoryURL: URL = { - return try! FileManager.default.url(for: .itemReplacementDirectory, - in: .userDomainMask, - appropriateFor: URL(fileURLWithPath: NSTemporaryDirectory()), - create: true).appendingPathComponent("Down", isDirectory: true) - }() - #endif - - private var didLoadSuccessfully: DownViewClosure? -} - -// MARK: - Private API - -private extension DownView { - - func loadHTMLView(_ markdownString: String) throws { - let htmlString = try markdownString.toHTML(options) - let pageHTMLString = try htmlFromTemplate(htmlString) - - #if os(iOS) - if writableBundle { - let newIndexUrl = try writeTempIndexFile(pageHTMLString: pageHTMLString) - loadFileURL(newIndexUrl, allowingReadAccessTo: newIndexUrl.deletingLastPathComponent()) - } else { - loadHTMLString(pageHTMLString, baseURL: baseURL) - } - #elseif os(macOS) - let indexURL = try createTemporaryBundle(pageHTMLString: pageHTMLString) - loadFileURL(indexURL, allowingReadAccessTo: indexURL.deletingLastPathComponent()) - #endif - } - - func htmlFromTemplate(_ htmlString: String) throws -> String { - let template = try String(contentsOf: baseURL, encoding: .utf8) - return template.replacingOccurrences(of: "DOWN_HTML", with: htmlString) - } - - #if os(iOS) - func writeTempIndexFile(pageHTMLString: String) throws -> URL { - let newIndexUrl = bundle.resourceURL!.appendingPathComponent("tmp_index.html") - try pageHTMLString.write(to: newIndexUrl, atomically: true, encoding: .utf8) - return newIndexUrl - } - #endif - - #if os(macOS) - func createTemporaryBundle(pageHTMLString: String) throws -> URL { - guard let bundleResourceURL = bundle.resourceURL - else { throw DownErrors.nonStandardBundleFormatError } - let indexURL = temporaryDirectoryURL.appendingPathComponent("index.html", isDirectory: false) - - // If updating markdown contents, no need to re-copy bundle. - if !FileManager.default.fileExists(atPath: indexURL.path) { - // Copy bundle resources to temporary location. - try FileManager.default.copyItem(at: bundleResourceURL, to: temporaryDirectoryURL) - } - - // Write generated index.html to temporary location. - try pageHTMLString.write(to: indexURL, atomically: true, encoding: .utf8) - - return indexURL - } - - func setupMacEnvironment() { - NotificationCenter.default.addObserver(self, - selector: #selector(clearTemporaryDirectory), - name: NSApplication.willTerminateNotification, - object: nil) - } - - @objc - func clearTemporaryDirectory() { - try? FileManager.default.removeItem(at: temporaryDirectoryURL) - } - #endif - -} - -// MARK: - WKNavigationDelegate - -extension DownView: WKNavigationDelegate { - public func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { - decisionHandler(.allow) - } - - public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { - guard let url = navigationAction.request.url else { return decisionHandler(.allow) } - - switch navigationAction.navigationType { - case .linkActivated: - if #available(iOS 11.0, macOS 10.13, *) { - if let scheme = url.scheme, configuration.urlSchemeHandler(forURLScheme: scheme) != nil { - decisionHandler(.allow) - return - } - } - - decisionHandler(.cancel) - openURL(url: url) - default: - decisionHandler(.allow) - } - } - - @available(iOSApplicationExtension, unavailable) - func openURL(url: URL) { - #if os(iOS) - _ = UIApplication.shared.openURL(url) - #elseif os(macOS) - NSWorkspace.shared.open(url) - #endif - } - - public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { - didLoadSuccessfully?() - } - -} - -private extension WKNavigationDelegate { - /// A wrapper for `UIApplication.shared.openURL` so that an empty default - /// implementation is available in app extensions - func openURL(url: URL) {} -} - -#endif -#endif // !os(Linux) diff --git a/Pods/Down/Source/cmark/COPYING b/Pods/Down/Source/cmark/COPYING deleted file mode 100755 index db88a81..0000000 --- a/Pods/Down/Source/cmark/COPYING +++ /dev/null @@ -1,170 +0,0 @@ -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c - -derive from https://github.com/vmg/houdini (with some modifications) - -Copyright (C) 2012 Vicent Martí - -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. - ------ - -buffer.h, buffer.c, chunk.h - -are derived from code (C) 2012 Github, Inc. - -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. - ------ - -utf8.c and utf8.c - -are derived from utf8proc -(<http://www.public-software-group.org/utf8proc>), -(C) 2009 Public Software Group e. V., Berlin, Germany. - -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. - ------ - -The normalization code in normalize.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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. - ------ - -The CommonMark spec (test/spec.txt) is - -Copyright (C) 2014-15 John MacFarlane - -Released under the Creative Commons CC-BY-SA 4.0 license: -<http://creativecommons.org/licenses/by-sa/4.0/>. - ------ - -The test software in test/ is - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Pods/Down/Source/cmark/blocks.c b/Pods/Down/Source/cmark/blocks.c deleted file mode 100755 index b6077eb..0000000 --- a/Pods/Down/Source/cmark/blocks.c +++ /dev/null @@ -1,1281 +0,0 @@ -/** - * Block parsing implementation. - * - * For a high-level overview of the block parsing process, - * see http://spec.commonmark.org/0.24/#phase-1-block-structure - */ - -#include <stdlib.h> -#include <assert.h> -#include <stdio.h> - -#include "cmark_ctype.h" -#include "config.h" -#include "parser.h" -#include "cmark.h" -#include "node.h" -#include "references.h" -#include "utf8.h" -#include "scanners.h" -#include "inlines.h" -#include "houdini.h" -#include "buffer.h" - -#define CODE_INDENT 4 -#define TAB_STOP 4 - -#ifndef MIN -#define MIN(x, y) ((x < y) ? x : y) -#endif - -#define peek_at(i, n) (i)->data[n] - -static bool S_last_line_blank(const cmark_node *node) { - return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0; -} - -static bool S_last_line_checked(const cmark_node *node) { - return (node->flags & CMARK_NODE__LAST_LINE_CHECKED) != 0; -} - -static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) { - return (cmark_node_type)node->type; -} - -static void S_set_last_line_blank(cmark_node *node, bool is_blank) { - if (is_blank) - node->flags |= CMARK_NODE__LAST_LINE_BLANK; - else - node->flags &= ~CMARK_NODE__LAST_LINE_BLANK; -} - -static void S_set_last_line_checked(cmark_node *node) { - node->flags |= CMARK_NODE__LAST_LINE_CHECKED; -} - -static CMARK_INLINE bool S_is_line_end_char(char c) { - return (c == '\n' || c == '\r'); -} - -static CMARK_INLINE bool S_is_space_or_tab(char c) { - return (c == ' ' || c == '\t'); -} - -static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, - size_t len, bool eof); - -static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes); - -static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, - int start_line, int start_column) { - cmark_node *e; - - e = (cmark_node *)mem->calloc(1, sizeof(*e)); - cmark_strbuf_init(mem, &e->content, 32); - e->type = (uint16_t)tag; - e->flags = CMARK_NODE__OPEN; - e->start_line = start_line; - e->start_column = start_column; - e->end_line = start_line; - - return e; -} - -// Create a root document node. -static cmark_node *make_document(cmark_mem *mem) { - cmark_node *e = make_block(mem, CMARK_NODE_DOCUMENT, 1, 1); - return e; -} - -cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { - cmark_parser *parser = (cmark_parser *)mem->calloc(1, sizeof(cmark_parser)); - parser->mem = mem; - - cmark_node *document = make_document(mem); - - cmark_strbuf_init(mem, &parser->curline, 256); - cmark_strbuf_init(mem, &parser->linebuf, 0); - - parser->refmap = cmark_reference_map_new(mem); - parser->root = document; - parser->current = document; - parser->line_number = 0; - parser->offset = 0; - parser->column = 0; - parser->first_nonspace = 0; - parser->first_nonspace_column = 0; - parser->thematic_break_kill_pos = 0; - parser->indent = 0; - parser->blank = false; - parser->partially_consumed_tab = false; - parser->last_line_length = 0; - parser->options = options; - parser->last_buffer_ended_with_cr = false; - - return parser; -} - -cmark_parser *cmark_parser_new(int options) { - extern cmark_mem DEFAULT_MEM_ALLOCATOR; - return cmark_parser_new_with_mem(options, &DEFAULT_MEM_ALLOCATOR); -} - -void cmark_parser_free(cmark_parser *parser) { - cmark_mem *mem = parser->mem; - cmark_strbuf_free(&parser->curline); - cmark_strbuf_free(&parser->linebuf); - cmark_reference_map_free(parser->refmap); - mem->free(parser); -} - -static cmark_node *finalize(cmark_parser *parser, cmark_node *b); - -// Returns true if line has only space characters, else false. -static bool is_blank(cmark_strbuf *s, bufsize_t offset) { - while (offset < s->size) { - switch (s->ptr[offset]) { - case '\r': - case '\n': - return true; - case ' ': - offset++; - break; - case '\t': - offset++; - break; - default: - return false; - } - } - - return true; -} - -static CMARK_INLINE bool can_contain(cmark_node_type parent_type, - cmark_node_type child_type) { - return (parent_type == CMARK_NODE_DOCUMENT || - parent_type == CMARK_NODE_BLOCK_QUOTE || - parent_type == CMARK_NODE_ITEM || - (parent_type == CMARK_NODE_LIST && child_type == CMARK_NODE_ITEM)); -} - -static CMARK_INLINE bool accepts_lines(cmark_node_type block_type) { - return (block_type == CMARK_NODE_PARAGRAPH || - block_type == CMARK_NODE_HEADING || - block_type == CMARK_NODE_CODE_BLOCK); -} - -static CMARK_INLINE bool contains_inlines(cmark_node_type block_type) { - return (block_type == CMARK_NODE_PARAGRAPH || - block_type == CMARK_NODE_HEADING); -} - -static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { - int chars_to_tab; - int i; - assert(node->flags & CMARK_NODE__OPEN); - if (parser->partially_consumed_tab) { - parser->offset += 1; // skip over tab - // add space characters: - chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - for (i = 0; i < chars_to_tab; i++) { - cmark_strbuf_putc(&node->content, ' '); - } - } - cmark_strbuf_put(&node->content, ch->data + parser->offset, - ch->len - parser->offset); -} - -static void remove_trailing_blank_lines(cmark_strbuf *ln) { - bufsize_t i; - unsigned char c; - - for (i = ln->size - 1; i >= 0; --i) { - c = ln->ptr[i]; - - if (c != ' ' && c != '\t' && !S_is_line_end_char(c)) - break; - } - - if (i < 0) { - cmark_strbuf_clear(ln); - return; - } - - for (; i < ln->size; ++i) { - c = ln->ptr[i]; - - if (!S_is_line_end_char(c)) - continue; - - cmark_strbuf_truncate(ln, i); - break; - } -} - -// Check to see if a node ends with a blank line, descending -// if needed into lists and sublists. -static bool S_ends_with_blank_line(cmark_node *node) { - if (S_last_line_checked(node)) { - return(S_last_line_blank(node)); - } else if ((S_type(node) == CMARK_NODE_LIST || - S_type(node) == CMARK_NODE_ITEM) && node->last_child) { - S_set_last_line_checked(node); - return(S_ends_with_blank_line(node->last_child)); - } else { - S_set_last_line_checked(node); - return (S_last_line_blank(node)); - } -} - -// returns true if content remains after link defs are resolved. -static bool resolve_reference_link_definitions( - cmark_parser *parser, - cmark_node *b) { - bufsize_t pos; - cmark_strbuf *node_content = &b->content; - cmark_chunk chunk = {node_content->ptr, node_content->size, 0}; - while (chunk.len && chunk.data[0] == '[' && - (pos = cmark_parse_reference_inline(parser->mem, &chunk, - parser->refmap))) { - - chunk.data += pos; - chunk.len -= pos; - } - cmark_strbuf_drop(node_content, (node_content->size - chunk.len)); - return !is_blank(&b->content, 0); -} - -static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { - bufsize_t pos; - cmark_node *item; - cmark_node *subitem; - cmark_node *parent; - bool has_content; - - parent = b->parent; - assert(b->flags & - CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks - b->flags &= ~CMARK_NODE__OPEN; - - if (parser->curline.size == 0) { - // end of input - line number has not been incremented - b->end_line = parser->line_number; - b->end_column = parser->last_line_length; - } else if (S_type(b) == CMARK_NODE_DOCUMENT || - (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) || - (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) { - b->end_line = parser->line_number; - b->end_column = parser->curline.size; - if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n') - b->end_column -= 1; - if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\r') - b->end_column -= 1; - } else { - b->end_line = parser->line_number - 1; - b->end_column = parser->last_line_length; - } - - cmark_strbuf *node_content = &b->content; - - switch (S_type(b)) { - case CMARK_NODE_PARAGRAPH: - { - has_content = resolve_reference_link_definitions(parser, b); - if (!has_content) { - // remove blank node (former reference def) - cmark_node_free(b); - } - break; - } - - case CMARK_NODE_CODE_BLOCK: - if (!b->as.code.fenced) { // indented code - remove_trailing_blank_lines(node_content); - cmark_strbuf_putc(node_content, '\n'); - } else { - // first line of contents becomes info - for (pos = 0; pos < node_content->size; ++pos) { - if (S_is_line_end_char(node_content->ptr[pos])) - break; - } - assert(pos < node_content->size); - - cmark_strbuf tmp = CMARK_BUF_INIT(parser->mem); - houdini_unescape_html_f(&tmp, node_content->ptr, pos); - cmark_strbuf_trim(&tmp); - cmark_strbuf_unescape(&tmp); - b->as.code.info = cmark_chunk_buf_detach(&tmp); - - if (node_content->ptr[pos] == '\r') - pos += 1; - if (node_content->ptr[pos] == '\n') - pos += 1; - cmark_strbuf_drop(node_content, pos); - } - b->as.code.literal = cmark_chunk_buf_detach(node_content); - break; - - case CMARK_NODE_HTML_BLOCK: - b->as.literal = cmark_chunk_buf_detach(node_content); - break; - - case CMARK_NODE_LIST: // determine tight/loose status - b->as.list.tight = true; // tight by default - item = b->first_child; - - while (item) { - // check for non-final non-empty list item ending with blank line: - if (S_last_line_blank(item) && item->next) { - b->as.list.tight = false; - break; - } - // recurse into children of list item, to see if there are - // spaces between them: - subitem = item->first_child; - while (subitem) { - if ((item->next || subitem->next) && - S_ends_with_blank_line(subitem)) { - b->as.list.tight = false; - break; - } - subitem = subitem->next; - } - if (!(b->as.list.tight)) { - break; - } - item = item->next; - } - - break; - - default: - break; - } - - return parent; -} - -// Add a node as child of another. Return pointer to child. -static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, - cmark_node_type block_type, int start_column) { - assert(parent); - - // if 'parent' isn't the kind of node that can accept this child, - // then back up til we hit a node that can. - while (!can_contain(S_type(parent), block_type)) { - parent = finalize(parser, parent); - } - - cmark_node *child = - make_block(parser->mem, block_type, parser->line_number, start_column); - child->parent = parent; - - if (parent->last_child) { - parent->last_child->next = child; - child->prev = parent->last_child; - } else { - parent->first_child = child; - child->prev = NULL; - } - parent->last_child = child; - return child; -} - -// Walk through node and all children, recursively, parsing -// string content into inline content where appropriate. -static void process_inlines(cmark_mem *mem, cmark_node *root, - cmark_reference_map *refmap, int options) { - cmark_iter *iter = cmark_iter_new(root); - cmark_node *cur; - cmark_event_type ev_type; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_ENTER) { - if (contains_inlines(S_type(cur))) { - cmark_parse_inlines(mem, cur, refmap, options); - } - } - } - - cmark_iter_free(iter); -} - -// Attempts to parse a list item marker (bullet or enumerated). -// On success, returns length of the marker, and populates -// data with the details. On failure, returns 0. -static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, - bufsize_t pos, bool interrupts_paragraph, - cmark_list **dataptr) { - unsigned char c; - bufsize_t startpos; - cmark_list *data; - bufsize_t i; - - startpos = pos; - c = peek_at(input, pos); - - if (c == '*' || c == '-' || c == '+') { - pos++; - if (!cmark_isspace(peek_at(input, pos))) { - return 0; - } - - if (interrupts_paragraph) { - i = pos; - // require non-blank content after list marker: - while (S_is_space_or_tab(peek_at(input, i))) { - i++; - } - if (peek_at(input, i) == '\n') { - return 0; - } - } - - data = (cmark_list *)mem->calloc(1, sizeof(*data)); - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_BULLET_LIST; - data->bullet_char = c; - data->start = 0; - data->delimiter = CMARK_NO_DELIM; - data->tight = false; - } else if (cmark_isdigit(c)) { - int start = 0; - int digits = 0; - - do { - start = (10 * start) + (peek_at(input, pos) - '0'); - pos++; - digits++; - // We limit to 9 digits to avoid overflow, - // assuming max int is 2^31 - 1 - // This also seems to be the limit for 'start' in some browsers. - } while (digits < 9 && cmark_isdigit(peek_at(input, pos))); - - if (interrupts_paragraph && start != 1) { - return 0; - } - c = peek_at(input, pos); - if (c == '.' || c == ')') { - pos++; - if (!cmark_isspace(peek_at(input, pos))) { - return 0; - } - if (interrupts_paragraph) { - // require non-blank content after list marker: - i = pos; - while (S_is_space_or_tab(peek_at(input, i))) { - i++; - } - if (S_is_line_end_char(peek_at(input, i))) { - return 0; - } - } - - data = (cmark_list *)mem->calloc(1, sizeof(*data)); - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_ORDERED_LIST; - data->bullet_char = 0; - data->start = start; - data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); - data->tight = false; - } else { - return 0; - } - } else { - return 0; - } - - *dataptr = data; - return (pos - startpos); -} - -// Return 1 if list item belongs in list, else 0. -static int lists_match(cmark_list *list_data, cmark_list *item_data) { - return (list_data->list_type == item_data->list_type && - list_data->delimiter == item_data->delimiter && - // list_data->marker_offset == item_data.marker_offset && - list_data->bullet_char == item_data->bullet_char); -} - -static cmark_node *finalize_document(cmark_parser *parser) { - while (parser->current != parser->root) { - parser->current = finalize(parser, parser->current); - } - - finalize(parser, parser->root); - process_inlines(parser->mem, parser->root, parser->refmap, parser->options); - - return parser->root; -} - -cmark_node *cmark_parse_file(FILE *f, int options) { - unsigned char buffer[4096]; - cmark_parser *parser = cmark_parser_new(options); - size_t bytes; - cmark_node *document; - - while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) { - bool eof = bytes < sizeof(buffer); - S_parser_feed(parser, buffer, bytes, eof); - if (eof) { - break; - } - } - - document = cmark_parser_finish(parser); - cmark_parser_free(parser); - return document; -} - -cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) { - cmark_parser *parser = cmark_parser_new(options); - cmark_node *document; - - S_parser_feed(parser, (const unsigned char *)buffer, len, true); - - document = cmark_parser_finish(parser); - cmark_parser_free(parser); - return document; -} - -void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) { - S_parser_feed(parser, (const unsigned char *)buffer, len, false); -} - -static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, - size_t len, bool eof) { - const unsigned char *end = buffer + len; - static const uint8_t repl[] = {239, 191, 189}; - - if (parser->last_buffer_ended_with_cr && *buffer == '\n') { - // skip NL if last buffer ended with CR ; see #117 - buffer++; - } - parser->last_buffer_ended_with_cr = false; - while (buffer < end) { - const unsigned char *eol; - bufsize_t chunk_len; - bool process = false; - for (eol = buffer; eol < end; ++eol) { - if (S_is_line_end_char(*eol)) { - process = true; - break; - } - if (*eol == '\0' && eol < end) { - break; - } - } - if (eol >= end && eof) { - process = true; - } - - chunk_len = (eol - buffer); - if (process) { - if (parser->linebuf.size > 0) { - cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); - S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); - cmark_strbuf_clear(&parser->linebuf); - } else { - S_process_line(parser, buffer, chunk_len); - } - } else { - if (eol < end && *eol == '\0') { - // omit NULL byte - cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); - // add replacement character - cmark_strbuf_put(&parser->linebuf, repl, 3); - } else { - cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); - } - } - - buffer += chunk_len; - if (buffer < end) { - if (*buffer == '\0') { - // skip over NULL - buffer++; - } else { - // skip over line ending characters - if (*buffer == '\r') { - buffer++; - if (buffer == end) - parser->last_buffer_ended_with_cr = true; - } - if (buffer < end && *buffer == '\n') - buffer++; - } - } - } -} - -static void chop_trailing_hashtags(cmark_chunk *ch) { - bufsize_t n, orig_n; - - cmark_chunk_rtrim(ch); - orig_n = n = ch->len - 1; - - // if string ends in space followed by #s, remove these: - while (n >= 0 && peek_at(ch, n) == '#') - n--; - - // Check for a space before the final #s: - if (n != orig_n && n >= 0 && S_is_space_or_tab(peek_at(ch, n))) { - ch->len = n; - cmark_chunk_rtrim(ch); - } -} - -// Check for thematic break. On failure, return 0 and update -// thematic_break_kill_pos with the index at which the -// parse fails. On success, return length of match. -// "...three or more hyphens, asterisks, -// or underscores on a line by themselves. If you wish, you may use -// spaces between the hyphens or asterisks." -static int S_scan_thematic_break(cmark_parser *parser, cmark_chunk *input, - bufsize_t offset) { - bufsize_t i; - char c; - char nextc = '\0'; - int count; - i = offset; - c = peek_at(input, i); - if (!(c == '*' || c == '_' || c == '-')) { - parser->thematic_break_kill_pos = i; - return 0; - } - count = 1; - while ((nextc = peek_at(input, ++i))) { - if (nextc == c) { - count++; - } else if (nextc != ' ' && nextc != '\t') { - break; - } - } - if (count >= 3 && (nextc == '\r' || nextc == '\n')) { - return (i - offset) + 1; - } else { - parser->thematic_break_kill_pos = i; - return 0; - } -} - -// Find first nonspace character from current offset, setting -// parser->first_nonspace, parser->first_nonspace_column, -// parser->indent, and parser->blank. Does not advance parser->offset. -static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { - char c; - int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - - if (parser->first_nonspace <= parser->offset) { - parser->first_nonspace = parser->offset; - parser->first_nonspace_column = parser->column; - while ((c = peek_at(input, parser->first_nonspace))) { - if (c == ' ') { - parser->first_nonspace += 1; - parser->first_nonspace_column += 1; - chars_to_tab = chars_to_tab - 1; - if (chars_to_tab == 0) { - chars_to_tab = TAB_STOP; - } - } else if (c == '\t') { - parser->first_nonspace += 1; - parser->first_nonspace_column += chars_to_tab; - chars_to_tab = TAB_STOP; - } else { - break; - } - } - } - - parser->indent = parser->first_nonspace_column - parser->column; - parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); -} - -// Advance parser->offset and parser->column. parser->offset is the -// byte position in input; parser->column is a virtual column number -// that takes into account tabs. (Multibyte characters are not taken -// into account, because the Markdown line prefixes we are interested in -// analyzing are entirely ASCII.) The count parameter indicates -// how far to advance the offset. If columns is true, then count -// indicates a number of columns; otherwise, a number of bytes. -// If advancing a certain number of columns partially consumes -// a tab character, parser->partially_consumed_tab is set to true. -static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, - bufsize_t count, bool columns) { - char c; - int chars_to_tab; - int chars_to_advance; - while (count > 0 && (c = peek_at(input, parser->offset))) { - if (c == '\t') { - chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - if (columns) { - parser->partially_consumed_tab = chars_to_tab > count; - chars_to_advance = MIN(count, chars_to_tab); - parser->column += chars_to_advance; - parser->offset += (parser->partially_consumed_tab ? 0 : 1); - count -= chars_to_advance; - } else { - parser->partially_consumed_tab = false; - parser->column += chars_to_tab; - parser->offset += 1; - count -= 1; - } - } else { - parser->partially_consumed_tab = false; - parser->offset += 1; - parser->column += 1; // assume ascii; block starts are ascii - count -= 1; - } - } -} - -static bool S_last_child_is_open(cmark_node *container) { - return container->last_child && - (container->last_child->flags & CMARK_NODE__OPEN); -} - -static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { - bool res = false; - bufsize_t matched = 0; - - matched = - parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; - if (matched) { - - S_advance_offset(parser, input, parser->indent + 1, true); - - if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - } - - res = true; - } - return res; -} - -static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, - cmark_node *container) { - bool res = false; - - if (parser->indent >= - container->as.list.marker_offset + container->as.list.padding) { - S_advance_offset(parser, input, container->as.list.marker_offset + - container->as.list.padding, - true); - res = true; - } else if (parser->blank && container->first_child != NULL) { - // if container->first_child is NULL, then the opening line - // of the list item was blank after the list marker; in this - // case, we are done with the list item. - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - res = true; - } - return res; -} - -static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, - cmark_node *container, - bool *should_continue) { - bool res = false; - - if (!container->as.code.fenced) { // indented - if (parser->indent >= CODE_INDENT) { - S_advance_offset(parser, input, CODE_INDENT, true); - res = true; - } else if (parser->blank) { - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - res = true; - } - } else { // fenced - bufsize_t matched = 0; - - if (parser->indent <= 3 && (peek_at(input, parser->first_nonspace) == - container->as.code.fence_char)) { - matched = scan_close_code_fence(input, parser->first_nonspace); - } - - if (matched >= container->as.code.fence_length) { - // closing fence - and since we're at - // the end of a line, we can stop processing it: - *should_continue = false; - S_advance_offset(parser, input, matched, false); - parser->current = finalize(parser, container); - } else { - // skip opt. spaces of fence parser->offset - int i = container->as.code.fence_offset; - - while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - i--; - } - res = true; - } - } - - return res; -} - -static bool parse_html_block_prefix(cmark_parser *parser, - cmark_node *container) { - bool res = false; - int html_block_type = container->as.html_block_type; - - assert(html_block_type >= 1 && html_block_type <= 7); - switch (html_block_type) { - case 1: - case 2: - case 3: - case 4: - case 5: - // these types of blocks can accept blanks - res = true; - break; - case 6: - case 7: - res = !parser->blank; - break; - } - - return res; -} - -/** - * For each containing node, try to parse the associated line start. - * - * Will not close unmatched blocks, as we may have a lazy continuation - * line -> http://spec.commonmark.org/0.24/#lazy-continuation-line - * - * Returns: The last matching node, or NULL - */ -static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, - bool *all_matched) { - bool should_continue = true; - *all_matched = false; - cmark_node *container = parser->root; - cmark_node_type cont_type; - - while (S_last_child_is_open(container)) { - container = container->last_child; - cont_type = S_type(container); - - S_find_first_nonspace(parser, input); - - switch (cont_type) { - case CMARK_NODE_BLOCK_QUOTE: - if (!parse_block_quote_prefix(parser, input)) - goto done; - break; - case CMARK_NODE_ITEM: - if (!parse_node_item_prefix(parser, input, container)) - goto done; - break; - case CMARK_NODE_CODE_BLOCK: - if (!parse_code_block_prefix(parser, input, container, &should_continue)) - goto done; - break; - case CMARK_NODE_HEADING: - // a heading can never contain more than one line - goto done; - case CMARK_NODE_HTML_BLOCK: - if (!parse_html_block_prefix(parser, container)) - goto done; - break; - case CMARK_NODE_PARAGRAPH: - if (parser->blank) - goto done; - break; - default: - break; - } - } - - *all_matched = true; - -done: - if (!*all_matched) { - container = container->parent; // back up to last matching node - } - - if (!should_continue) { - container = NULL; - } - - return container; -} - -static void open_new_blocks(cmark_parser *parser, cmark_node **container, - cmark_chunk *input, bool all_matched) { - bool indented; - cmark_list *data = NULL; - bool maybe_lazy = S_type(parser->current) == CMARK_NODE_PARAGRAPH; - cmark_node_type cont_type = S_type(*container); - bufsize_t matched = 0; - int lev = 0; - bool save_partially_consumed_tab; - bool has_content; - int save_offset; - int save_column; - - while (cont_type != CMARK_NODE_CODE_BLOCK && - cont_type != CMARK_NODE_HTML_BLOCK) { - - S_find_first_nonspace(parser, input); - indented = parser->indent >= CODE_INDENT; - - if (!indented && peek_at(input, parser->first_nonspace) == '>') { - - bufsize_t blockquote_startpos = parser->first_nonspace; - - S_advance_offset(parser, input, - parser->first_nonspace + 1 - parser->offset, false); - // optional following character - if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - } - *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, - blockquote_startpos + 1); - - } else if (!indented && (matched = scan_atx_heading_start( - input, parser->first_nonspace))) { - bufsize_t hashpos; - int level = 0; - bufsize_t heading_startpos = parser->first_nonspace; - - S_advance_offset(parser, input, - parser->first_nonspace + matched - parser->offset, - false); - *container = add_child(parser, *container, CMARK_NODE_HEADING, - heading_startpos + 1); - - hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); - - while (peek_at(input, hashpos) == '#') { - level++; - hashpos++; - } - - (*container)->as.heading.level = level; - (*container)->as.heading.setext = false; - (*container)->internal_offset = matched; - - } else if (!indented && (matched = scan_open_code_fence( - input, parser->first_nonspace))) { - *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, - parser->first_nonspace + 1); - (*container)->as.code.fenced = true; - (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace); - (*container)->as.code.fence_length = (matched > 255) ? 255 : matched; - (*container)->as.code.fence_offset = - (int8_t)(parser->first_nonspace - parser->offset); - (*container)->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, input, - parser->first_nonspace + matched - parser->offset, - false); - - } else if (!indented && ((matched = scan_html_block_start( - input, parser->first_nonspace)) || - (cont_type != CMARK_NODE_PARAGRAPH && - (matched = scan_html_block_start_7( - input, parser->first_nonspace))))) { - *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK, - parser->first_nonspace + 1); - (*container)->as.html_block_type = matched; - // note, we don't adjust parser->offset because the tag is part of the - // text - } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH && - (lev = - scan_setext_heading_line(input, parser->first_nonspace))) { - // finalize paragraph, resolving reference links - has_content = resolve_reference_link_definitions(parser, *container); - - if (has_content) { - - (*container)->type = (uint16_t)CMARK_NODE_HEADING; - (*container)->as.heading.level = lev; - (*container)->as.heading.setext = true; - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); - } - } else if (!indented && - !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && - (parser->thematic_break_kill_pos <= parser->first_nonspace) && - (matched = S_scan_thematic_break(parser, input, parser->first_nonspace))) { - // it's only now that we know the line is not part of a setext heading: - *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, - parser->first_nonspace + 1); - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); - } else if ((!indented || cont_type == CMARK_NODE_LIST) && - parser->indent < 4 && - (matched = parse_list_marker( - parser->mem, input, parser->first_nonspace, - (*container)->type == CMARK_NODE_PARAGRAPH, &data))) { - - // Note that we can have new list items starting with >= 4 - // spaces indent, as long as the list container is still open. - int i = 0; - - // compute padding: - S_advance_offset(parser, input, - parser->first_nonspace + matched - parser->offset, - false); - - save_partially_consumed_tab = parser->partially_consumed_tab; - save_offset = parser->offset; - save_column = parser->column; - - while (parser->column - save_column <= 5 && - S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - } - - i = parser->column - save_column; - if (i >= 5 || i < 1 || - // only spaces after list marker: - S_is_line_end_char(peek_at(input, parser->offset))) { - data->padding = matched + 1; - parser->offset = save_offset; - parser->column = save_column; - parser->partially_consumed_tab = save_partially_consumed_tab; - if (i > 0) { - S_advance_offset(parser, input, 1, true); - } - } else { - data->padding = matched + i; - } - - // check container; if it's a list, see if this list item - // can continue the list; otherwise, create a list container. - - data->marker_offset = parser->indent; - - if (cont_type != CMARK_NODE_LIST || - !lists_match(&((*container)->as.list), data)) { - *container = add_child(parser, *container, CMARK_NODE_LIST, - parser->first_nonspace + 1); - - memcpy(&((*container)->as.list), data, sizeof(*data)); - } - - // add the list item - *container = add_child(parser, *container, CMARK_NODE_ITEM, - parser->first_nonspace + 1); - /* TODO: static */ - memcpy(&((*container)->as.list), data, sizeof(*data)); - parser->mem->free(data); - } else if (indented && !maybe_lazy && !parser->blank) { - S_advance_offset(parser, input, CODE_INDENT, true); - *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, - parser->offset + 1); - (*container)->as.code.fenced = false; - (*container)->as.code.fence_char = 0; - (*container)->as.code.fence_length = 0; - (*container)->as.code.fence_offset = 0; - (*container)->as.code.info = cmark_chunk_literal(""); - - } else { - break; - } - - if (accepts_lines(S_type(*container))) { - // if it's a line container, it can't contain other containers - break; - } - - cont_type = S_type(*container); - maybe_lazy = false; - } -} - -static void add_text_to_container(cmark_parser *parser, cmark_node *container, - cmark_node *last_matched_container, - cmark_chunk *input) { - cmark_node *tmp; - // what remains at parser->offset is a text line. add the text to the - // appropriate container. - - S_find_first_nonspace(parser, input); - - if (parser->blank && container->last_child) - S_set_last_line_blank(container->last_child, true); - - // block quote lines are never blank as they start with > - // and we don't count blanks in fenced code for purposes of tight/loose - // lists or breaking out of lists. we also don't set last_line_blank - // on an empty list item. - const cmark_node_type ctype = S_type(container); - const bool last_line_blank = - (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE && - ctype != CMARK_NODE_HEADING && ctype != CMARK_NODE_THEMATIC_BREAK && - !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) && - !(ctype == CMARK_NODE_ITEM && container->first_child == NULL && - container->start_line == parser->line_number)); - - S_set_last_line_blank(container, last_line_blank); - - tmp = container; - while (tmp->parent) { - S_set_last_line_blank(tmp->parent, false); - tmp = tmp->parent; - } - - // If the last line processed belonged to a paragraph node, - // and we didn't match all of the line prefixes for the open containers, - // and we didn't start any new containers, - // and the line isn't blank, - // then treat this as a "lazy continuation line" and add it to - // the open paragraph. - if (parser->current != last_matched_container && - container == last_matched_container && !parser->blank && - S_type(parser->current) == CMARK_NODE_PARAGRAPH) { - add_line(parser->current, input, parser); - } else { // not a lazy continuation - // Finalize any blocks that were not matched and set cur to container: - while (parser->current != last_matched_container) { - parser->current = finalize(parser, parser->current); - assert(parser->current != NULL); - } - - if (S_type(container) == CMARK_NODE_CODE_BLOCK) { - add_line(container, input, parser); - } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) { - add_line(container, input, parser); - - int matches_end_condition; - switch (container->as.html_block_type) { - case 1: - // </script>, </style>, </pre> - matches_end_condition = - scan_html_block_end_1(input, parser->first_nonspace); - break; - case 2: - // --> - matches_end_condition = - scan_html_block_end_2(input, parser->first_nonspace); - break; - case 3: - // ?> - matches_end_condition = - scan_html_block_end_3(input, parser->first_nonspace); - break; - case 4: - // > - matches_end_condition = - scan_html_block_end_4(input, parser->first_nonspace); - break; - case 5: - // ]]> - matches_end_condition = - scan_html_block_end_5(input, parser->first_nonspace); - break; - default: - matches_end_condition = 0; - break; - } - - if (matches_end_condition) { - container = finalize(parser, container); - assert(parser->current != NULL); - } - } else if (parser->blank) { - // ??? do nothing - } else if (accepts_lines(S_type(container))) { - if (S_type(container) == CMARK_NODE_HEADING && - container->as.heading.setext == false) { - chop_trailing_hashtags(input); - } - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - add_line(container, input, parser); - } else { - // create paragraph container for line - container = add_child(parser, container, CMARK_NODE_PARAGRAPH, - parser->first_nonspace + 1); - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - add_line(container, input, parser); - } - - parser->current = container; - } -} - -/* See http://spec.commonmark.org/0.24/#phase-1-block-structure */ -static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes) { - cmark_node *last_matched_container; - bool all_matched = true; - cmark_node *container; - cmark_chunk input; - - if (parser->options & CMARK_OPT_VALIDATE_UTF8) - cmark_utf8proc_check(&parser->curline, buffer, bytes); - else - cmark_strbuf_put(&parser->curline, buffer, bytes); - - bytes = parser->curline.size; - - // ensure line ends with a newline: - if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1])) - cmark_strbuf_putc(&parser->curline, '\n'); - - parser->offset = 0; - parser->column = 0; - parser->first_nonspace = 0; - parser->first_nonspace_column = 0; - parser->thematic_break_kill_pos = 0; - parser->indent = 0; - parser->blank = false; - parser->partially_consumed_tab = false; - - input.data = parser->curline.ptr; - input.len = parser->curline.size; - input.alloc = 0; - - parser->line_number++; - - last_matched_container = check_open_blocks(parser, &input, &all_matched); - - if (!last_matched_container) - goto finished; - - container = last_matched_container; - - open_new_blocks(parser, &container, &input, all_matched); - - add_text_to_container(parser, container, last_matched_container, &input); - -finished: - parser->last_line_length = input.len; - if (parser->last_line_length && - input.data[parser->last_line_length - 1] == '\n') - parser->last_line_length -= 1; - if (parser->last_line_length && - input.data[parser->last_line_length - 1] == '\r') - parser->last_line_length -= 1; - - cmark_strbuf_clear(&parser->curline); -} - -cmark_node *cmark_parser_finish(cmark_parser *parser) { - if (parser->linebuf.size) { - S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); - cmark_strbuf_clear(&parser->linebuf); - } - - finalize_document(parser); - - cmark_consolidate_text_nodes(parser->root); - - cmark_strbuf_free(&parser->curline); - -#if CMARK_DEBUG_NODES - if (cmark_node_check(parser->root, stderr)) { - abort(); - } -#endif - return parser->root; -} diff --git a/Pods/Down/Source/cmark/buffer.c b/Pods/Down/Source/cmark/buffer.c deleted file mode 100755 index d946493..0000000 --- a/Pods/Down/Source/cmark/buffer.c +++ /dev/null @@ -1,278 +0,0 @@ -#include <stdarg.h> -#include <string.h> -#include <assert.h> -#include <string.h> -#include <stdio.h> -#include <stdlib.h> -#include <stdint.h> -#include <limits.h> - -#include "config.h" -#include "cmark_ctype.h" -#include "buffer.h" - -/* Used as default value for cmark_strbuf->ptr so that people can always - * assume ptr is non-NULL and zero terminated even for new cmark_strbufs. - */ -unsigned char cmark_strbuf__initbuf[1]; - -#ifndef MIN -#define MIN(x, y) ((x < y) ? x : y) -#endif - -void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, - bufsize_t initial_size) { - buf->mem = mem; - buf->asize = 0; - buf->size = 0; - buf->ptr = cmark_strbuf__initbuf; - - if (initial_size > 0) - cmark_strbuf_grow(buf, initial_size); -} - -static CMARK_INLINE void S_strbuf_grow_by(cmark_strbuf *buf, bufsize_t add) { - cmark_strbuf_grow(buf, buf->size + add); -} - -void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size) { - assert(target_size > 0); - - if (target_size < buf->asize) - return; - - if (target_size > (bufsize_t)(INT32_MAX / 2)) { - fprintf(stderr, - "[cmark] cmark_strbuf_grow requests buffer with size > %d, aborting\n", - (INT32_MAX / 2)); - abort(); - } - - /* Oversize the buffer by 50% to guarantee amortized linear time - * complexity on append operations. */ - bufsize_t new_size = target_size + target_size / 2; - new_size += 1; - new_size = (new_size + 7) & ~7; - - buf->ptr = (unsigned char *)buf->mem->realloc(buf->asize ? buf->ptr : NULL, - new_size); - buf->asize = new_size; -} - -bufsize_t cmark_strbuf_len(const cmark_strbuf *buf) { return buf->size; } - -void cmark_strbuf_free(cmark_strbuf *buf) { - if (!buf) - return; - - if (buf->ptr != cmark_strbuf__initbuf) - buf->mem->free(buf->ptr); - - cmark_strbuf_init(buf->mem, buf, 0); -} - -void cmark_strbuf_clear(cmark_strbuf *buf) { - buf->size = 0; - - if (buf->asize > 0) - buf->ptr[0] = '\0'; -} - -void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, - bufsize_t len) { - if (len <= 0 || data == NULL) { - cmark_strbuf_clear(buf); - } else { - if (data != buf->ptr) { - if (len >= buf->asize) - cmark_strbuf_grow(buf, len); - memmove(buf->ptr, data, len); - } - buf->size = len; - buf->ptr[buf->size] = '\0'; - } -} - -void cmark_strbuf_sets(cmark_strbuf *buf, const char *string) { - cmark_strbuf_set(buf, (const unsigned char *)string, - string ? strlen(string) : 0); -} - -void cmark_strbuf_putc(cmark_strbuf *buf, int c) { - S_strbuf_grow_by(buf, 1); - buf->ptr[buf->size++] = (unsigned char)(c & 0xFF); - buf->ptr[buf->size] = '\0'; -} - -void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, - bufsize_t len) { - if (len <= 0) - return; - - S_strbuf_grow_by(buf, len); - memmove(buf->ptr + buf->size, data, len); - buf->size += len; - buf->ptr[buf->size] = '\0'; -} - -void cmark_strbuf_puts(cmark_strbuf *buf, const char *string) { - cmark_strbuf_put(buf, (const unsigned char *)string, strlen(string)); -} - -void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, - const cmark_strbuf *buf) { - bufsize_t copylen; - - assert(buf); - if (!data || datasize <= 0) - return; - - data[0] = '\0'; - - if (buf->size == 0 || buf->asize <= 0) - return; - - copylen = buf->size; - if (copylen > datasize - 1) - copylen = datasize - 1; - memmove(data, buf->ptr, copylen); - data[copylen] = '\0'; -} - -void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b) { - cmark_strbuf t = *buf_a; - *buf_a = *buf_b; - *buf_b = t; -} - -unsigned char *cmark_strbuf_detach(cmark_strbuf *buf) { - unsigned char *data = buf->ptr; - - if (buf->asize == 0) { - /* return an empty string */ - return (unsigned char *)buf->mem->calloc(1, 1); - } - - cmark_strbuf_init(buf->mem, buf, 0); - return data; -} - -int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b) { - int result = memcmp(a->ptr, b->ptr, MIN(a->size, b->size)); - return (result != 0) ? result - : (a->size < b->size) ? -1 : (a->size > b->size) ? 1 : 0; -} - -bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos) { - if (pos >= buf->size) - return -1; - if (pos < 0) - pos = 0; - - const unsigned char *p = - (unsigned char *)memchr(buf->ptr + pos, c, buf->size - pos); - if (!p) - return -1; - - return (bufsize_t)(p - (const unsigned char *)buf->ptr); -} - -bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos) { - if (pos < 0 || buf->size == 0) - return -1; - if (pos >= buf->size) - pos = buf->size - 1; - - bufsize_t i; - for (i = pos; i >= 0; i--) { - if (buf->ptr[i] == (unsigned char)c) - return i; - } - - return -1; -} - -void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len) { - if (len < 0) - len = 0; - - if (len < buf->size) { - buf->size = len; - buf->ptr[buf->size] = '\0'; - } -} - -void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n) { - if (n > 0) { - if (n > buf->size) - n = buf->size; - buf->size = buf->size - n; - if (buf->size) - memmove(buf->ptr, buf->ptr + n, buf->size); - - buf->ptr[buf->size] = '\0'; - } -} - -void cmark_strbuf_rtrim(cmark_strbuf *buf) { - if (!buf->size) - return; - - while (buf->size > 0) { - if (!cmark_isspace(buf->ptr[buf->size - 1])) - break; - - buf->size--; - } - - buf->ptr[buf->size] = '\0'; -} - -void cmark_strbuf_trim(cmark_strbuf *buf) { - bufsize_t i = 0; - - if (!buf->size) - return; - - while (i < buf->size && cmark_isspace(buf->ptr[i])) - i++; - - cmark_strbuf_drop(buf, i); - - cmark_strbuf_rtrim(buf); -} - -// Destructively modify string, collapsing consecutive -// space and newline characters into a single space. -void cmark_strbuf_normalize_whitespace(cmark_strbuf *s) { - bool last_char_was_space = false; - bufsize_t r, w; - - for (r = 0, w = 0; r < s->size; ++r) { - if (cmark_isspace(s->ptr[r])) { - if (!last_char_was_space) { - s->ptr[w++] = ' '; - last_char_was_space = true; - } - } else { - s->ptr[w++] = s->ptr[r]; - last_char_was_space = false; - } - } - - cmark_strbuf_truncate(s, w); -} - -// Destructively unescape a string: remove backslashes before punctuation chars. -extern void cmark_strbuf_unescape(cmark_strbuf *buf) { - bufsize_t r, w; - - for (r = 0, w = 0; r < buf->size; ++r) { - if (buf->ptr[r] == '\\' && cmark_ispunct(buf->ptr[r + 1])) - r++; - - buf->ptr[w++] = buf->ptr[r]; - } - - cmark_strbuf_truncate(buf, w); -} diff --git a/Pods/Down/Source/cmark/buffer.h b/Pods/Down/Source/cmark/buffer.h deleted file mode 100755 index e878075..0000000 --- a/Pods/Down/Source/cmark/buffer.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef CMARK_BUFFER_H -#define CMARK_BUFFER_H - -#include <stddef.h> -#include <stdarg.h> -#include <string.h> -#include <limits.h> -#include <stdint.h> -#include "config.h" -#include "cmark.h" - -#ifdef __cplusplus -extern "C" { -#endif - -typedef int32_t bufsize_t; - -typedef struct { - cmark_mem *mem; - unsigned char *ptr; - bufsize_t asize, size; -} cmark_strbuf; - -extern unsigned char cmark_strbuf__initbuf[]; - -#define CMARK_BUF_INIT(mem) \ - { mem, cmark_strbuf__initbuf, 0, 0 } - -/** - * Initialize a cmark_strbuf structure. - * - * For the cases where CMARK_BUF_INIT cannot be used to do static - * initialization. - */ -void cmark_strbuf_init(cmark_mem *mem, cmark_strbuf *buf, - bufsize_t initial_size); - -/** - * Grow the buffer to hold at least `target_size` bytes. - */ -void cmark_strbuf_grow(cmark_strbuf *buf, bufsize_t target_size); - -void cmark_strbuf_free(cmark_strbuf *buf); -void cmark_strbuf_swap(cmark_strbuf *buf_a, cmark_strbuf *buf_b); - -bufsize_t cmark_strbuf_len(const cmark_strbuf *buf); - -int cmark_strbuf_cmp(const cmark_strbuf *a, const cmark_strbuf *b); - -unsigned char *cmark_strbuf_detach(cmark_strbuf *buf); -void cmark_strbuf_copy_cstr(char *data, bufsize_t datasize, - const cmark_strbuf *buf); - -static CMARK_INLINE const char *cmark_strbuf_cstr(const cmark_strbuf *buf) { - return (char *)buf->ptr; -} - -#define cmark_strbuf_at(buf, n) ((buf)->ptr[n]) - -void cmark_strbuf_set(cmark_strbuf *buf, const unsigned char *data, - bufsize_t len); -void cmark_strbuf_sets(cmark_strbuf *buf, const char *string); -void cmark_strbuf_putc(cmark_strbuf *buf, int c); -void cmark_strbuf_put(cmark_strbuf *buf, const unsigned char *data, - bufsize_t len); -void cmark_strbuf_puts(cmark_strbuf *buf, const char *string); -void cmark_strbuf_clear(cmark_strbuf *buf); - -bufsize_t cmark_strbuf_strchr(const cmark_strbuf *buf, int c, bufsize_t pos); -bufsize_t cmark_strbuf_strrchr(const cmark_strbuf *buf, int c, bufsize_t pos); -void cmark_strbuf_drop(cmark_strbuf *buf, bufsize_t n); -void cmark_strbuf_truncate(cmark_strbuf *buf, bufsize_t len); -void cmark_strbuf_rtrim(cmark_strbuf *buf); -void cmark_strbuf_trim(cmark_strbuf *buf); -void cmark_strbuf_normalize_whitespace(cmark_strbuf *s); -void cmark_strbuf_unescape(cmark_strbuf *s); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/case_fold_switch.inc b/Pods/Down/Source/cmark/case_fold_switch.inc deleted file mode 100755 index 28e223e..0000000 --- a/Pods/Down/Source/cmark/case_fold_switch.inc +++ /dev/null @@ -1,4327 +0,0 @@ - switch (c) { - case 0x0041: - bufpush(0x0061); - break; - case 0x0042: - bufpush(0x0062); - break; - case 0x0043: - bufpush(0x0063); - break; - case 0x0044: - bufpush(0x0064); - break; - case 0x0045: - bufpush(0x0065); - break; - case 0x0046: - bufpush(0x0066); - break; - case 0x0047: - bufpush(0x0067); - break; - case 0x0048: - bufpush(0x0068); - break; - case 0x0049: - bufpush(0x0069); - break; - case 0x004A: - bufpush(0x006A); - break; - case 0x004B: - bufpush(0x006B); - break; - case 0x004C: - bufpush(0x006C); - break; - case 0x004D: - bufpush(0x006D); - break; - case 0x004E: - bufpush(0x006E); - break; - case 0x004F: - bufpush(0x006F); - break; - case 0x0050: - bufpush(0x0070); - break; - case 0x0051: - bufpush(0x0071); - break; - case 0x0052: - bufpush(0x0072); - break; - case 0x0053: - bufpush(0x0073); - break; - case 0x0054: - bufpush(0x0074); - break; - case 0x0055: - bufpush(0x0075); - break; - case 0x0056: - bufpush(0x0076); - break; - case 0x0057: - bufpush(0x0077); - break; - case 0x0058: - bufpush(0x0078); - break; - case 0x0059: - bufpush(0x0079); - break; - case 0x005A: - bufpush(0x007A); - break; - case 0x00B5: - bufpush(0x03BC); - break; - case 0x00C0: - bufpush(0x00E0); - break; - case 0x00C1: - bufpush(0x00E1); - break; - case 0x00C2: - bufpush(0x00E2); - break; - case 0x00C3: - bufpush(0x00E3); - break; - case 0x00C4: - bufpush(0x00E4); - break; - case 0x00C5: - bufpush(0x00E5); - break; - case 0x00C6: - bufpush(0x00E6); - break; - case 0x00C7: - bufpush(0x00E7); - break; - case 0x00C8: - bufpush(0x00E8); - break; - case 0x00C9: - bufpush(0x00E9); - break; - case 0x00CA: - bufpush(0x00EA); - break; - case 0x00CB: - bufpush(0x00EB); - break; - case 0x00CC: - bufpush(0x00EC); - break; - case 0x00CD: - bufpush(0x00ED); - break; - case 0x00CE: - bufpush(0x00EE); - break; - case 0x00CF: - bufpush(0x00EF); - break; - case 0x00D0: - bufpush(0x00F0); - break; - case 0x00D1: - bufpush(0x00F1); - break; - case 0x00D2: - bufpush(0x00F2); - break; - case 0x00D3: - bufpush(0x00F3); - break; - case 0x00D4: - bufpush(0x00F4); - break; - case 0x00D5: - bufpush(0x00F5); - break; - case 0x00D6: - bufpush(0x00F6); - break; - case 0x00D8: - bufpush(0x00F8); - break; - case 0x00D9: - bufpush(0x00F9); - break; - case 0x00DA: - bufpush(0x00FA); - break; - case 0x00DB: - bufpush(0x00FB); - break; - case 0x00DC: - bufpush(0x00FC); - break; - case 0x00DD: - bufpush(0x00FD); - break; - case 0x00DE: - bufpush(0x00FE); - break; - case 0x00DF: - bufpush(0x0073); - bufpush(0x0073); - break; - case 0x0100: - bufpush(0x0101); - break; - case 0x0102: - bufpush(0x0103); - break; - case 0x0104: - bufpush(0x0105); - break; - case 0x0106: - bufpush(0x0107); - break; - case 0x0108: - bufpush(0x0109); - break; - case 0x010A: - bufpush(0x010B); - break; - case 0x010C: - bufpush(0x010D); - break; - case 0x010E: - bufpush(0x010F); - break; - case 0x0110: - bufpush(0x0111); - break; - case 0x0112: - bufpush(0x0113); - break; - case 0x0114: - bufpush(0x0115); - break; - case 0x0116: - bufpush(0x0117); - break; - case 0x0118: - bufpush(0x0119); - break; - case 0x011A: - bufpush(0x011B); - break; - case 0x011C: - bufpush(0x011D); - break; - case 0x011E: - bufpush(0x011F); - break; - case 0x0120: - bufpush(0x0121); - break; - case 0x0122: - bufpush(0x0123); - break; - case 0x0124: - bufpush(0x0125); - break; - case 0x0126: - bufpush(0x0127); - break; - case 0x0128: - bufpush(0x0129); - break; - case 0x012A: - bufpush(0x012B); - break; - case 0x012C: - bufpush(0x012D); - break; - case 0x012E: - bufpush(0x012F); - break; - case 0x0130: - bufpush(0x0069); - bufpush(0x0307); - break; - case 0x0132: - bufpush(0x0133); - break; - case 0x0134: - bufpush(0x0135); - break; - case 0x0136: - bufpush(0x0137); - break; - case 0x0139: - bufpush(0x013A); - break; - case 0x013B: - bufpush(0x013C); - break; - case 0x013D: - bufpush(0x013E); - break; - case 0x013F: - bufpush(0x0140); - break; - case 0x0141: - bufpush(0x0142); - break; - case 0x0143: - bufpush(0x0144); - break; - case 0x0145: - bufpush(0x0146); - break; - case 0x0147: - bufpush(0x0148); - break; - case 0x0149: - bufpush(0x02BC); - bufpush(0x006E); - break; - case 0x014A: - bufpush(0x014B); - break; - case 0x014C: - bufpush(0x014D); - break; - case 0x014E: - bufpush(0x014F); - break; - case 0x0150: - bufpush(0x0151); - break; - case 0x0152: - bufpush(0x0153); - break; - case 0x0154: - bufpush(0x0155); - break; - case 0x0156: - bufpush(0x0157); - break; - case 0x0158: - bufpush(0x0159); - break; - case 0x015A: - bufpush(0x015B); - break; - case 0x015C: - bufpush(0x015D); - break; - case 0x015E: - bufpush(0x015F); - break; - case 0x0160: - bufpush(0x0161); - break; - case 0x0162: - bufpush(0x0163); - break; - case 0x0164: - bufpush(0x0165); - break; - case 0x0166: - bufpush(0x0167); - break; - case 0x0168: - bufpush(0x0169); - break; - case 0x016A: - bufpush(0x016B); - break; - case 0x016C: - bufpush(0x016D); - break; - case 0x016E: - bufpush(0x016F); - break; - case 0x0170: - bufpush(0x0171); - break; - case 0x0172: - bufpush(0x0173); - break; - case 0x0174: - bufpush(0x0175); - break; - case 0x0176: - bufpush(0x0177); - break; - case 0x0178: - bufpush(0x00FF); - break; - case 0x0179: - bufpush(0x017A); - break; - case 0x017B: - bufpush(0x017C); - break; - case 0x017D: - bufpush(0x017E); - break; - case 0x017F: - bufpush(0x0073); - break; - case 0x0181: - bufpush(0x0253); - break; - case 0x0182: - bufpush(0x0183); - break; - case 0x0184: - bufpush(0x0185); - break; - case 0x0186: - bufpush(0x0254); - break; - case 0x0187: - bufpush(0x0188); - break; - case 0x0189: - bufpush(0x0256); - break; - case 0x018A: - bufpush(0x0257); - break; - case 0x018B: - bufpush(0x018C); - break; - case 0x018E: - bufpush(0x01DD); - break; - case 0x018F: - bufpush(0x0259); - break; - case 0x0190: - bufpush(0x025B); - break; - case 0x0191: - bufpush(0x0192); - break; - case 0x0193: - bufpush(0x0260); - break; - case 0x0194: - bufpush(0x0263); - break; - case 0x0196: - bufpush(0x0269); - break; - case 0x0197: - bufpush(0x0268); - break; - case 0x0198: - bufpush(0x0199); - break; - case 0x019C: - bufpush(0x026F); - break; - case 0x019D: - bufpush(0x0272); - break; - case 0x019F: - bufpush(0x0275); - break; - case 0x01A0: - bufpush(0x01A1); - break; - case 0x01A2: - bufpush(0x01A3); - break; - case 0x01A4: - bufpush(0x01A5); - break; - case 0x01A6: - bufpush(0x0280); - break; - case 0x01A7: - bufpush(0x01A8); - break; - case 0x01A9: - bufpush(0x0283); - break; - case 0x01AC: - bufpush(0x01AD); - break; - case 0x01AE: - bufpush(0x0288); - break; - case 0x01AF: - bufpush(0x01B0); - break; - case 0x01B1: - bufpush(0x028A); - break; - case 0x01B2: - bufpush(0x028B); - break; - case 0x01B3: - bufpush(0x01B4); - break; - case 0x01B5: - bufpush(0x01B6); - break; - case 0x01B7: - bufpush(0x0292); - break; - case 0x01B8: - bufpush(0x01B9); - break; - case 0x01BC: - bufpush(0x01BD); - break; - case 0x01C4: - bufpush(0x01C6); - break; - case 0x01C5: - bufpush(0x01C6); - break; - case 0x01C7: - bufpush(0x01C9); - break; - case 0x01C8: - bufpush(0x01C9); - break; - case 0x01CA: - bufpush(0x01CC); - break; - case 0x01CB: - bufpush(0x01CC); - break; - case 0x01CD: - bufpush(0x01CE); - break; - case 0x01CF: - bufpush(0x01D0); - break; - case 0x01D1: - bufpush(0x01D2); - break; - case 0x01D3: - bufpush(0x01D4); - break; - case 0x01D5: - bufpush(0x01D6); - break; - case 0x01D7: - bufpush(0x01D8); - break; - case 0x01D9: - bufpush(0x01DA); - break; - case 0x01DB: - bufpush(0x01DC); - break; - case 0x01DE: - bufpush(0x01DF); - break; - case 0x01E0: - bufpush(0x01E1); - break; - case 0x01E2: - bufpush(0x01E3); - break; - case 0x01E4: - bufpush(0x01E5); - break; - case 0x01E6: - bufpush(0x01E7); - break; - case 0x01E8: - bufpush(0x01E9); - break; - case 0x01EA: - bufpush(0x01EB); - break; - case 0x01EC: - bufpush(0x01ED); - break; - case 0x01EE: - bufpush(0x01EF); - break; - case 0x01F0: - bufpush(0x006A); - bufpush(0x030C); - break; - case 0x01F1: - bufpush(0x01F3); - break; - case 0x01F2: - bufpush(0x01F3); - break; - case 0x01F4: - bufpush(0x01F5); - break; - case 0x01F6: - bufpush(0x0195); - break; - case 0x01F7: - bufpush(0x01BF); - break; - case 0x01F8: - bufpush(0x01F9); - break; - case 0x01FA: - bufpush(0x01FB); - break; - case 0x01FC: - bufpush(0x01FD); - break; - case 0x01FE: - bufpush(0x01FF); - break; - case 0x0200: - bufpush(0x0201); - break; - case 0x0202: - bufpush(0x0203); - break; - case 0x0204: - bufpush(0x0205); - break; - case 0x0206: - bufpush(0x0207); - break; - case 0x0208: - bufpush(0x0209); - break; - case 0x020A: - bufpush(0x020B); - break; - case 0x020C: - bufpush(0x020D); - break; - case 0x020E: - bufpush(0x020F); - break; - case 0x0210: - bufpush(0x0211); - break; - case 0x0212: - bufpush(0x0213); - break; - case 0x0214: - bufpush(0x0215); - break; - case 0x0216: - bufpush(0x0217); - break; - case 0x0218: - bufpush(0x0219); - break; - case 0x021A: - bufpush(0x021B); - break; - case 0x021C: - bufpush(0x021D); - break; - case 0x021E: - bufpush(0x021F); - break; - case 0x0220: - bufpush(0x019E); - break; - case 0x0222: - bufpush(0x0223); - break; - case 0x0224: - bufpush(0x0225); - break; - case 0x0226: - bufpush(0x0227); - break; - case 0x0228: - bufpush(0x0229); - break; - case 0x022A: - bufpush(0x022B); - break; - case 0x022C: - bufpush(0x022D); - break; - case 0x022E: - bufpush(0x022F); - break; - case 0x0230: - bufpush(0x0231); - break; - case 0x0232: - bufpush(0x0233); - break; - case 0x023A: - bufpush(0x2C65); - break; - case 0x023B: - bufpush(0x023C); - break; - case 0x023D: - bufpush(0x019A); - break; - case 0x023E: - bufpush(0x2C66); - break; - case 0x0241: - bufpush(0x0242); - break; - case 0x0243: - bufpush(0x0180); - break; - case 0x0244: - bufpush(0x0289); - break; - case 0x0245: - bufpush(0x028C); - break; - case 0x0246: - bufpush(0x0247); - break; - case 0x0248: - bufpush(0x0249); - break; - case 0x024A: - bufpush(0x024B); - break; - case 0x024C: - bufpush(0x024D); - break; - case 0x024E: - bufpush(0x024F); - break; - case 0x0345: - bufpush(0x03B9); - break; - case 0x0370: - bufpush(0x0371); - break; - case 0x0372: - bufpush(0x0373); - break; - case 0x0376: - bufpush(0x0377); - break; - case 0x037F: - bufpush(0x03F3); - break; - case 0x0386: - bufpush(0x03AC); - break; - case 0x0388: - bufpush(0x03AD); - break; - case 0x0389: - bufpush(0x03AE); - break; - case 0x038A: - bufpush(0x03AF); - break; - case 0x038C: - bufpush(0x03CC); - break; - case 0x038E: - bufpush(0x03CD); - break; - case 0x038F: - bufpush(0x03CE); - break; - case 0x0390: - bufpush(0x03B9); - bufpush(0x0308); - bufpush(0x0301); - break; - case 0x0391: - bufpush(0x03B1); - break; - case 0x0392: - bufpush(0x03B2); - break; - case 0x0393: - bufpush(0x03B3); - break; - case 0x0394: - bufpush(0x03B4); - break; - case 0x0395: - bufpush(0x03B5); - break; - case 0x0396: - bufpush(0x03B6); - break; - case 0x0397: - bufpush(0x03B7); - break; - case 0x0398: - bufpush(0x03B8); - break; - case 0x0399: - bufpush(0x03B9); - break; - case 0x039A: - bufpush(0x03BA); - break; - case 0x039B: - bufpush(0x03BB); - break; - case 0x039C: - bufpush(0x03BC); - break; - case 0x039D: - bufpush(0x03BD); - break; - case 0x039E: - bufpush(0x03BE); - break; - case 0x039F: - bufpush(0x03BF); - break; - case 0x03A0: - bufpush(0x03C0); - break; - case 0x03A1: - bufpush(0x03C1); - break; - case 0x03A3: - bufpush(0x03C3); - break; - case 0x03A4: - bufpush(0x03C4); - break; - case 0x03A5: - bufpush(0x03C5); - break; - case 0x03A6: - bufpush(0x03C6); - break; - case 0x03A7: - bufpush(0x03C7); - break; - case 0x03A8: - bufpush(0x03C8); - break; - case 0x03A9: - bufpush(0x03C9); - break; - case 0x03AA: - bufpush(0x03CA); - break; - case 0x03AB: - bufpush(0x03CB); - break; - case 0x03B0: - bufpush(0x03C5); - bufpush(0x0308); - bufpush(0x0301); - break; - case 0x03C2: - bufpush(0x03C3); - break; - case 0x03CF: - bufpush(0x03D7); - break; - case 0x03D0: - bufpush(0x03B2); - break; - case 0x03D1: - bufpush(0x03B8); - break; - case 0x03D5: - bufpush(0x03C6); - break; - case 0x03D6: - bufpush(0x03C0); - break; - case 0x03D8: - bufpush(0x03D9); - break; - case 0x03DA: - bufpush(0x03DB); - break; - case 0x03DC: - bufpush(0x03DD); - break; - case 0x03DE: - bufpush(0x03DF); - break; - case 0x03E0: - bufpush(0x03E1); - break; - case 0x03E2: - bufpush(0x03E3); - break; - case 0x03E4: - bufpush(0x03E5); - break; - case 0x03E6: - bufpush(0x03E7); - break; - case 0x03E8: - bufpush(0x03E9); - break; - case 0x03EA: - bufpush(0x03EB); - break; - case 0x03EC: - bufpush(0x03ED); - break; - case 0x03EE: - bufpush(0x03EF); - break; - case 0x03F0: - bufpush(0x03BA); - break; - case 0x03F1: - bufpush(0x03C1); - break; - case 0x03F4: - bufpush(0x03B8); - break; - case 0x03F5: - bufpush(0x03B5); - break; - case 0x03F7: - bufpush(0x03F8); - break; - case 0x03F9: - bufpush(0x03F2); - break; - case 0x03FA: - bufpush(0x03FB); - break; - case 0x03FD: - bufpush(0x037B); - break; - case 0x03FE: - bufpush(0x037C); - break; - case 0x03FF: - bufpush(0x037D); - break; - case 0x0400: - bufpush(0x0450); - break; - case 0x0401: - bufpush(0x0451); - break; - case 0x0402: - bufpush(0x0452); - break; - case 0x0403: - bufpush(0x0453); - break; - case 0x0404: - bufpush(0x0454); - break; - case 0x0405: - bufpush(0x0455); - break; - case 0x0406: - bufpush(0x0456); - break; - case 0x0407: - bufpush(0x0457); - break; - case 0x0408: - bufpush(0x0458); - break; - case 0x0409: - bufpush(0x0459); - break; - case 0x040A: - bufpush(0x045A); - break; - case 0x040B: - bufpush(0x045B); - break; - case 0x040C: - bufpush(0x045C); - break; - case 0x040D: - bufpush(0x045D); - break; - case 0x040E: - bufpush(0x045E); - break; - case 0x040F: - bufpush(0x045F); - break; - case 0x0410: - bufpush(0x0430); - break; - case 0x0411: - bufpush(0x0431); - break; - case 0x0412: - bufpush(0x0432); - break; - case 0x0413: - bufpush(0x0433); - break; - case 0x0414: - bufpush(0x0434); - break; - case 0x0415: - bufpush(0x0435); - break; - case 0x0416: - bufpush(0x0436); - break; - case 0x0417: - bufpush(0x0437); - break; - case 0x0418: - bufpush(0x0438); - break; - case 0x0419: - bufpush(0x0439); - break; - case 0x041A: - bufpush(0x043A); - break; - case 0x041B: - bufpush(0x043B); - break; - case 0x041C: - bufpush(0x043C); - break; - case 0x041D: - bufpush(0x043D); - break; - case 0x041E: - bufpush(0x043E); - break; - case 0x041F: - bufpush(0x043F); - break; - case 0x0420: - bufpush(0x0440); - break; - case 0x0421: - bufpush(0x0441); - break; - case 0x0422: - bufpush(0x0442); - break; - case 0x0423: - bufpush(0x0443); - break; - case 0x0424: - bufpush(0x0444); - break; - case 0x0425: - bufpush(0x0445); - break; - case 0x0426: - bufpush(0x0446); - break; - case 0x0427: - bufpush(0x0447); - break; - case 0x0428: - bufpush(0x0448); - break; - case 0x0429: - bufpush(0x0449); - break; - case 0x042A: - bufpush(0x044A); - break; - case 0x042B: - bufpush(0x044B); - break; - case 0x042C: - bufpush(0x044C); - break; - case 0x042D: - bufpush(0x044D); - break; - case 0x042E: - bufpush(0x044E); - break; - case 0x042F: - bufpush(0x044F); - break; - case 0x0460: - bufpush(0x0461); - break; - case 0x0462: - bufpush(0x0463); - break; - case 0x0464: - bufpush(0x0465); - break; - case 0x0466: - bufpush(0x0467); - break; - case 0x0468: - bufpush(0x0469); - break; - case 0x046A: - bufpush(0x046B); - break; - case 0x046C: - bufpush(0x046D); - break; - case 0x046E: - bufpush(0x046F); - break; - case 0x0470: - bufpush(0x0471); - break; - case 0x0472: - bufpush(0x0473); - break; - case 0x0474: - bufpush(0x0475); - break; - case 0x0476: - bufpush(0x0477); - break; - case 0x0478: - bufpush(0x0479); - break; - case 0x047A: - bufpush(0x047B); - break; - case 0x047C: - bufpush(0x047D); - break; - case 0x047E: - bufpush(0x047F); - break; - case 0x0480: - bufpush(0x0481); - break; - case 0x048A: - bufpush(0x048B); - break; - case 0x048C: - bufpush(0x048D); - break; - case 0x048E: - bufpush(0x048F); - break; - case 0x0490: - bufpush(0x0491); - break; - case 0x0492: - bufpush(0x0493); - break; - case 0x0494: - bufpush(0x0495); - break; - case 0x0496: - bufpush(0x0497); - break; - case 0x0498: - bufpush(0x0499); - break; - case 0x049A: - bufpush(0x049B); - break; - case 0x049C: - bufpush(0x049D); - break; - case 0x049E: - bufpush(0x049F); - break; - case 0x04A0: - bufpush(0x04A1); - break; - case 0x04A2: - bufpush(0x04A3); - break; - case 0x04A4: - bufpush(0x04A5); - break; - case 0x04A6: - bufpush(0x04A7); - break; - case 0x04A8: - bufpush(0x04A9); - break; - case 0x04AA: - bufpush(0x04AB); - break; - case 0x04AC: - bufpush(0x04AD); - break; - case 0x04AE: - bufpush(0x04AF); - break; - case 0x04B0: - bufpush(0x04B1); - break; - case 0x04B2: - bufpush(0x04B3); - break; - case 0x04B4: - bufpush(0x04B5); - break; - case 0x04B6: - bufpush(0x04B7); - break; - case 0x04B8: - bufpush(0x04B9); - break; - case 0x04BA: - bufpush(0x04BB); - break; - case 0x04BC: - bufpush(0x04BD); - break; - case 0x04BE: - bufpush(0x04BF); - break; - case 0x04C0: - bufpush(0x04CF); - break; - case 0x04C1: - bufpush(0x04C2); - break; - case 0x04C3: - bufpush(0x04C4); - break; - case 0x04C5: - bufpush(0x04C6); - break; - case 0x04C7: - bufpush(0x04C8); - break; - case 0x04C9: - bufpush(0x04CA); - break; - case 0x04CB: - bufpush(0x04CC); - break; - case 0x04CD: - bufpush(0x04CE); - break; - case 0x04D0: - bufpush(0x04D1); - break; - case 0x04D2: - bufpush(0x04D3); - break; - case 0x04D4: - bufpush(0x04D5); - break; - case 0x04D6: - bufpush(0x04D7); - break; - case 0x04D8: - bufpush(0x04D9); - break; - case 0x04DA: - bufpush(0x04DB); - break; - case 0x04DC: - bufpush(0x04DD); - break; - case 0x04DE: - bufpush(0x04DF); - break; - case 0x04E0: - bufpush(0x04E1); - break; - case 0x04E2: - bufpush(0x04E3); - break; - case 0x04E4: - bufpush(0x04E5); - break; - case 0x04E6: - bufpush(0x04E7); - break; - case 0x04E8: - bufpush(0x04E9); - break; - case 0x04EA: - bufpush(0x04EB); - break; - case 0x04EC: - bufpush(0x04ED); - break; - case 0x04EE: - bufpush(0x04EF); - break; - case 0x04F0: - bufpush(0x04F1); - break; - case 0x04F2: - bufpush(0x04F3); - break; - case 0x04F4: - bufpush(0x04F5); - break; - case 0x04F6: - bufpush(0x04F7); - break; - case 0x04F8: - bufpush(0x04F9); - break; - case 0x04FA: - bufpush(0x04FB); - break; - case 0x04FC: - bufpush(0x04FD); - break; - case 0x04FE: - bufpush(0x04FF); - break; - case 0x0500: - bufpush(0x0501); - break; - case 0x0502: - bufpush(0x0503); - break; - case 0x0504: - bufpush(0x0505); - break; - case 0x0506: - bufpush(0x0507); - break; - case 0x0508: - bufpush(0x0509); - break; - case 0x050A: - bufpush(0x050B); - break; - case 0x050C: - bufpush(0x050D); - break; - case 0x050E: - bufpush(0x050F); - break; - case 0x0510: - bufpush(0x0511); - break; - case 0x0512: - bufpush(0x0513); - break; - case 0x0514: - bufpush(0x0515); - break; - case 0x0516: - bufpush(0x0517); - break; - case 0x0518: - bufpush(0x0519); - break; - case 0x051A: - bufpush(0x051B); - break; - case 0x051C: - bufpush(0x051D); - break; - case 0x051E: - bufpush(0x051F); - break; - case 0x0520: - bufpush(0x0521); - break; - case 0x0522: - bufpush(0x0523); - break; - case 0x0524: - bufpush(0x0525); - break; - case 0x0526: - bufpush(0x0527); - break; - case 0x0528: - bufpush(0x0529); - break; - case 0x052A: - bufpush(0x052B); - break; - case 0x052C: - bufpush(0x052D); - break; - case 0x052E: - bufpush(0x052F); - break; - case 0x0531: - bufpush(0x0561); - break; - case 0x0532: - bufpush(0x0562); - break; - case 0x0533: - bufpush(0x0563); - break; - case 0x0534: - bufpush(0x0564); - break; - case 0x0535: - bufpush(0x0565); - break; - case 0x0536: - bufpush(0x0566); - break; - case 0x0537: - bufpush(0x0567); - break; - case 0x0538: - bufpush(0x0568); - break; - case 0x0539: - bufpush(0x0569); - break; - case 0x053A: - bufpush(0x056A); - break; - case 0x053B: - bufpush(0x056B); - break; - case 0x053C: - bufpush(0x056C); - break; - case 0x053D: - bufpush(0x056D); - break; - case 0x053E: - bufpush(0x056E); - break; - case 0x053F: - bufpush(0x056F); - break; - case 0x0540: - bufpush(0x0570); - break; - case 0x0541: - bufpush(0x0571); - break; - case 0x0542: - bufpush(0x0572); - break; - case 0x0543: - bufpush(0x0573); - break; - case 0x0544: - bufpush(0x0574); - break; - case 0x0545: - bufpush(0x0575); - break; - case 0x0546: - bufpush(0x0576); - break; - case 0x0547: - bufpush(0x0577); - break; - case 0x0548: - bufpush(0x0578); - break; - case 0x0549: - bufpush(0x0579); - break; - case 0x054A: - bufpush(0x057A); - break; - case 0x054B: - bufpush(0x057B); - break; - case 0x054C: - bufpush(0x057C); - break; - case 0x054D: - bufpush(0x057D); - break; - case 0x054E: - bufpush(0x057E); - break; - case 0x054F: - bufpush(0x057F); - break; - case 0x0550: - bufpush(0x0580); - break; - case 0x0551: - bufpush(0x0581); - break; - case 0x0552: - bufpush(0x0582); - break; - case 0x0553: - bufpush(0x0583); - break; - case 0x0554: - bufpush(0x0584); - break; - case 0x0555: - bufpush(0x0585); - break; - case 0x0556: - bufpush(0x0586); - break; - case 0x0587: - bufpush(0x0565); - bufpush(0x0582); - break; - case 0x10A0: - bufpush(0x2D00); - break; - case 0x10A1: - bufpush(0x2D01); - break; - case 0x10A2: - bufpush(0x2D02); - break; - case 0x10A3: - bufpush(0x2D03); - break; - case 0x10A4: - bufpush(0x2D04); - break; - case 0x10A5: - bufpush(0x2D05); - break; - case 0x10A6: - bufpush(0x2D06); - break; - case 0x10A7: - bufpush(0x2D07); - break; - case 0x10A8: - bufpush(0x2D08); - break; - case 0x10A9: - bufpush(0x2D09); - break; - case 0x10AA: - bufpush(0x2D0A); - break; - case 0x10AB: - bufpush(0x2D0B); - break; - case 0x10AC: - bufpush(0x2D0C); - break; - case 0x10AD: - bufpush(0x2D0D); - break; - case 0x10AE: - bufpush(0x2D0E); - break; - case 0x10AF: - bufpush(0x2D0F); - break; - case 0x10B0: - bufpush(0x2D10); - break; - case 0x10B1: - bufpush(0x2D11); - break; - case 0x10B2: - bufpush(0x2D12); - break; - case 0x10B3: - bufpush(0x2D13); - break; - case 0x10B4: - bufpush(0x2D14); - break; - case 0x10B5: - bufpush(0x2D15); - break; - case 0x10B6: - bufpush(0x2D16); - break; - case 0x10B7: - bufpush(0x2D17); - break; - case 0x10B8: - bufpush(0x2D18); - break; - case 0x10B9: - bufpush(0x2D19); - break; - case 0x10BA: - bufpush(0x2D1A); - break; - case 0x10BB: - bufpush(0x2D1B); - break; - case 0x10BC: - bufpush(0x2D1C); - break; - case 0x10BD: - bufpush(0x2D1D); - break; - case 0x10BE: - bufpush(0x2D1E); - break; - case 0x10BF: - bufpush(0x2D1F); - break; - case 0x10C0: - bufpush(0x2D20); - break; - case 0x10C1: - bufpush(0x2D21); - break; - case 0x10C2: - bufpush(0x2D22); - break; - case 0x10C3: - bufpush(0x2D23); - break; - case 0x10C4: - bufpush(0x2D24); - break; - case 0x10C5: - bufpush(0x2D25); - break; - case 0x10C7: - bufpush(0x2D27); - break; - case 0x10CD: - bufpush(0x2D2D); - break; - case 0x13F8: - bufpush(0x13F0); - break; - case 0x13F9: - bufpush(0x13F1); - break; - case 0x13FA: - bufpush(0x13F2); - break; - case 0x13FB: - bufpush(0x13F3); - break; - case 0x13FC: - bufpush(0x13F4); - break; - case 0x13FD: - bufpush(0x13F5); - break; - case 0x1C80: - bufpush(0x0432); - break; - case 0x1C81: - bufpush(0x0434); - break; - case 0x1C82: - bufpush(0x043E); - break; - case 0x1C83: - bufpush(0x0441); - break; - case 0x1C84: - bufpush(0x0442); - break; - case 0x1C85: - bufpush(0x0442); - break; - case 0x1C86: - bufpush(0x044A); - break; - case 0x1C87: - bufpush(0x0463); - break; - case 0x1C88: - bufpush(0xA64B); - break; - case 0x1E00: - bufpush(0x1E01); - break; - case 0x1E02: - bufpush(0x1E03); - break; - case 0x1E04: - bufpush(0x1E05); - break; - case 0x1E06: - bufpush(0x1E07); - break; - case 0x1E08: - bufpush(0x1E09); - break; - case 0x1E0A: - bufpush(0x1E0B); - break; - case 0x1E0C: - bufpush(0x1E0D); - break; - case 0x1E0E: - bufpush(0x1E0F); - break; - case 0x1E10: - bufpush(0x1E11); - break; - case 0x1E12: - bufpush(0x1E13); - break; - case 0x1E14: - bufpush(0x1E15); - break; - case 0x1E16: - bufpush(0x1E17); - break; - case 0x1E18: - bufpush(0x1E19); - break; - case 0x1E1A: - bufpush(0x1E1B); - break; - case 0x1E1C: - bufpush(0x1E1D); - break; - case 0x1E1E: - bufpush(0x1E1F); - break; - case 0x1E20: - bufpush(0x1E21); - break; - case 0x1E22: - bufpush(0x1E23); - break; - case 0x1E24: - bufpush(0x1E25); - break; - case 0x1E26: - bufpush(0x1E27); - break; - case 0x1E28: - bufpush(0x1E29); - break; - case 0x1E2A: - bufpush(0x1E2B); - break; - case 0x1E2C: - bufpush(0x1E2D); - break; - case 0x1E2E: - bufpush(0x1E2F); - break; - case 0x1E30: - bufpush(0x1E31); - break; - case 0x1E32: - bufpush(0x1E33); - break; - case 0x1E34: - bufpush(0x1E35); - break; - case 0x1E36: - bufpush(0x1E37); - break; - case 0x1E38: - bufpush(0x1E39); - break; - case 0x1E3A: - bufpush(0x1E3B); - break; - case 0x1E3C: - bufpush(0x1E3D); - break; - case 0x1E3E: - bufpush(0x1E3F); - break; - case 0x1E40: - bufpush(0x1E41); - break; - case 0x1E42: - bufpush(0x1E43); - break; - case 0x1E44: - bufpush(0x1E45); - break; - case 0x1E46: - bufpush(0x1E47); - break; - case 0x1E48: - bufpush(0x1E49); - break; - case 0x1E4A: - bufpush(0x1E4B); - break; - case 0x1E4C: - bufpush(0x1E4D); - break; - case 0x1E4E: - bufpush(0x1E4F); - break; - case 0x1E50: - bufpush(0x1E51); - break; - case 0x1E52: - bufpush(0x1E53); - break; - case 0x1E54: - bufpush(0x1E55); - break; - case 0x1E56: - bufpush(0x1E57); - break; - case 0x1E58: - bufpush(0x1E59); - break; - case 0x1E5A: - bufpush(0x1E5B); - break; - case 0x1E5C: - bufpush(0x1E5D); - break; - case 0x1E5E: - bufpush(0x1E5F); - break; - case 0x1E60: - bufpush(0x1E61); - break; - case 0x1E62: - bufpush(0x1E63); - break; - case 0x1E64: - bufpush(0x1E65); - break; - case 0x1E66: - bufpush(0x1E67); - break; - case 0x1E68: - bufpush(0x1E69); - break; - case 0x1E6A: - bufpush(0x1E6B); - break; - case 0x1E6C: - bufpush(0x1E6D); - break; - case 0x1E6E: - bufpush(0x1E6F); - break; - case 0x1E70: - bufpush(0x1E71); - break; - case 0x1E72: - bufpush(0x1E73); - break; - case 0x1E74: - bufpush(0x1E75); - break; - case 0x1E76: - bufpush(0x1E77); - break; - case 0x1E78: - bufpush(0x1E79); - break; - case 0x1E7A: - bufpush(0x1E7B); - break; - case 0x1E7C: - bufpush(0x1E7D); - break; - case 0x1E7E: - bufpush(0x1E7F); - break; - case 0x1E80: - bufpush(0x1E81); - break; - case 0x1E82: - bufpush(0x1E83); - break; - case 0x1E84: - bufpush(0x1E85); - break; - case 0x1E86: - bufpush(0x1E87); - break; - case 0x1E88: - bufpush(0x1E89); - break; - case 0x1E8A: - bufpush(0x1E8B); - break; - case 0x1E8C: - bufpush(0x1E8D); - break; - case 0x1E8E: - bufpush(0x1E8F); - break; - case 0x1E90: - bufpush(0x1E91); - break; - case 0x1E92: - bufpush(0x1E93); - break; - case 0x1E94: - bufpush(0x1E95); - break; - case 0x1E96: - bufpush(0x0068); - bufpush(0x0331); - break; - case 0x1E97: - bufpush(0x0074); - bufpush(0x0308); - break; - case 0x1E98: - bufpush(0x0077); - bufpush(0x030A); - break; - case 0x1E99: - bufpush(0x0079); - bufpush(0x030A); - break; - case 0x1E9A: - bufpush(0x0061); - bufpush(0x02BE); - break; - case 0x1E9B: - bufpush(0x1E61); - break; - case 0x1E9E: - bufpush(0x0073); - bufpush(0x0073); - break; - case 0x1EA0: - bufpush(0x1EA1); - break; - case 0x1EA2: - bufpush(0x1EA3); - break; - case 0x1EA4: - bufpush(0x1EA5); - break; - case 0x1EA6: - bufpush(0x1EA7); - break; - case 0x1EA8: - bufpush(0x1EA9); - break; - case 0x1EAA: - bufpush(0x1EAB); - break; - case 0x1EAC: - bufpush(0x1EAD); - break; - case 0x1EAE: - bufpush(0x1EAF); - break; - case 0x1EB0: - bufpush(0x1EB1); - break; - case 0x1EB2: - bufpush(0x1EB3); - break; - case 0x1EB4: - bufpush(0x1EB5); - break; - case 0x1EB6: - bufpush(0x1EB7); - break; - case 0x1EB8: - bufpush(0x1EB9); - break; - case 0x1EBA: - bufpush(0x1EBB); - break; - case 0x1EBC: - bufpush(0x1EBD); - break; - case 0x1EBE: - bufpush(0x1EBF); - break; - case 0x1EC0: - bufpush(0x1EC1); - break; - case 0x1EC2: - bufpush(0x1EC3); - break; - case 0x1EC4: - bufpush(0x1EC5); - break; - case 0x1EC6: - bufpush(0x1EC7); - break; - case 0x1EC8: - bufpush(0x1EC9); - break; - case 0x1ECA: - bufpush(0x1ECB); - break; - case 0x1ECC: - bufpush(0x1ECD); - break; - case 0x1ECE: - bufpush(0x1ECF); - break; - case 0x1ED0: - bufpush(0x1ED1); - break; - case 0x1ED2: - bufpush(0x1ED3); - break; - case 0x1ED4: - bufpush(0x1ED5); - break; - case 0x1ED6: - bufpush(0x1ED7); - break; - case 0x1ED8: - bufpush(0x1ED9); - break; - case 0x1EDA: - bufpush(0x1EDB); - break; - case 0x1EDC: - bufpush(0x1EDD); - break; - case 0x1EDE: - bufpush(0x1EDF); - break; - case 0x1EE0: - bufpush(0x1EE1); - break; - case 0x1EE2: - bufpush(0x1EE3); - break; - case 0x1EE4: - bufpush(0x1EE5); - break; - case 0x1EE6: - bufpush(0x1EE7); - break; - case 0x1EE8: - bufpush(0x1EE9); - break; - case 0x1EEA: - bufpush(0x1EEB); - break; - case 0x1EEC: - bufpush(0x1EED); - break; - case 0x1EEE: - bufpush(0x1EEF); - break; - case 0x1EF0: - bufpush(0x1EF1); - break; - case 0x1EF2: - bufpush(0x1EF3); - break; - case 0x1EF4: - bufpush(0x1EF5); - break; - case 0x1EF6: - bufpush(0x1EF7); - break; - case 0x1EF8: - bufpush(0x1EF9); - break; - case 0x1EFA: - bufpush(0x1EFB); - break; - case 0x1EFC: - bufpush(0x1EFD); - break; - case 0x1EFE: - bufpush(0x1EFF); - break; - case 0x1F08: - bufpush(0x1F00); - break; - case 0x1F09: - bufpush(0x1F01); - break; - case 0x1F0A: - bufpush(0x1F02); - break; - case 0x1F0B: - bufpush(0x1F03); - break; - case 0x1F0C: - bufpush(0x1F04); - break; - case 0x1F0D: - bufpush(0x1F05); - break; - case 0x1F0E: - bufpush(0x1F06); - break; - case 0x1F0F: - bufpush(0x1F07); - break; - case 0x1F18: - bufpush(0x1F10); - break; - case 0x1F19: - bufpush(0x1F11); - break; - case 0x1F1A: - bufpush(0x1F12); - break; - case 0x1F1B: - bufpush(0x1F13); - break; - case 0x1F1C: - bufpush(0x1F14); - break; - case 0x1F1D: - bufpush(0x1F15); - break; - case 0x1F28: - bufpush(0x1F20); - break; - case 0x1F29: - bufpush(0x1F21); - break; - case 0x1F2A: - bufpush(0x1F22); - break; - case 0x1F2B: - bufpush(0x1F23); - break; - case 0x1F2C: - bufpush(0x1F24); - break; - case 0x1F2D: - bufpush(0x1F25); - break; - case 0x1F2E: - bufpush(0x1F26); - break; - case 0x1F2F: - bufpush(0x1F27); - break; - case 0x1F38: - bufpush(0x1F30); - break; - case 0x1F39: - bufpush(0x1F31); - break; - case 0x1F3A: - bufpush(0x1F32); - break; - case 0x1F3B: - bufpush(0x1F33); - break; - case 0x1F3C: - bufpush(0x1F34); - break; - case 0x1F3D: - bufpush(0x1F35); - break; - case 0x1F3E: - bufpush(0x1F36); - break; - case 0x1F3F: - bufpush(0x1F37); - break; - case 0x1F48: - bufpush(0x1F40); - break; - case 0x1F49: - bufpush(0x1F41); - break; - case 0x1F4A: - bufpush(0x1F42); - break; - case 0x1F4B: - bufpush(0x1F43); - break; - case 0x1F4C: - bufpush(0x1F44); - break; - case 0x1F4D: - bufpush(0x1F45); - break; - case 0x1F50: - bufpush(0x03C5); - bufpush(0x0313); - break; - case 0x1F52: - bufpush(0x03C5); - bufpush(0x0313); - bufpush(0x0300); - break; - case 0x1F54: - bufpush(0x03C5); - bufpush(0x0313); - bufpush(0x0301); - break; - case 0x1F56: - bufpush(0x03C5); - bufpush(0x0313); - bufpush(0x0342); - break; - case 0x1F59: - bufpush(0x1F51); - break; - case 0x1F5B: - bufpush(0x1F53); - break; - case 0x1F5D: - bufpush(0x1F55); - break; - case 0x1F5F: - bufpush(0x1F57); - break; - case 0x1F68: - bufpush(0x1F60); - break; - case 0x1F69: - bufpush(0x1F61); - break; - case 0x1F6A: - bufpush(0x1F62); - break; - case 0x1F6B: - bufpush(0x1F63); - break; - case 0x1F6C: - bufpush(0x1F64); - break; - case 0x1F6D: - bufpush(0x1F65); - break; - case 0x1F6E: - bufpush(0x1F66); - break; - case 0x1F6F: - bufpush(0x1F67); - break; - case 0x1F80: - bufpush(0x1F00); - bufpush(0x03B9); - break; - case 0x1F81: - bufpush(0x1F01); - bufpush(0x03B9); - break; - case 0x1F82: - bufpush(0x1F02); - bufpush(0x03B9); - break; - case 0x1F83: - bufpush(0x1F03); - bufpush(0x03B9); - break; - case 0x1F84: - bufpush(0x1F04); - bufpush(0x03B9); - break; - case 0x1F85: - bufpush(0x1F05); - bufpush(0x03B9); - break; - case 0x1F86: - bufpush(0x1F06); - bufpush(0x03B9); - break; - case 0x1F87: - bufpush(0x1F07); - bufpush(0x03B9); - break; - case 0x1F88: - bufpush(0x1F00); - bufpush(0x03B9); - break; - case 0x1F89: - bufpush(0x1F01); - bufpush(0x03B9); - break; - case 0x1F8A: - bufpush(0x1F02); - bufpush(0x03B9); - break; - case 0x1F8B: - bufpush(0x1F03); - bufpush(0x03B9); - break; - case 0x1F8C: - bufpush(0x1F04); - bufpush(0x03B9); - break; - case 0x1F8D: - bufpush(0x1F05); - bufpush(0x03B9); - break; - case 0x1F8E: - bufpush(0x1F06); - bufpush(0x03B9); - break; - case 0x1F8F: - bufpush(0x1F07); - bufpush(0x03B9); - break; - case 0x1F90: - bufpush(0x1F20); - bufpush(0x03B9); - break; - case 0x1F91: - bufpush(0x1F21); - bufpush(0x03B9); - break; - case 0x1F92: - bufpush(0x1F22); - bufpush(0x03B9); - break; - case 0x1F93: - bufpush(0x1F23); - bufpush(0x03B9); - break; - case 0x1F94: - bufpush(0x1F24); - bufpush(0x03B9); - break; - case 0x1F95: - bufpush(0x1F25); - bufpush(0x03B9); - break; - case 0x1F96: - bufpush(0x1F26); - bufpush(0x03B9); - break; - case 0x1F97: - bufpush(0x1F27); - bufpush(0x03B9); - break; - case 0x1F98: - bufpush(0x1F20); - bufpush(0x03B9); - break; - case 0x1F99: - bufpush(0x1F21); - bufpush(0x03B9); - break; - case 0x1F9A: - bufpush(0x1F22); - bufpush(0x03B9); - break; - case 0x1F9B: - bufpush(0x1F23); - bufpush(0x03B9); - break; - case 0x1F9C: - bufpush(0x1F24); - bufpush(0x03B9); - break; - case 0x1F9D: - bufpush(0x1F25); - bufpush(0x03B9); - break; - case 0x1F9E: - bufpush(0x1F26); - bufpush(0x03B9); - break; - case 0x1F9F: - bufpush(0x1F27); - bufpush(0x03B9); - break; - case 0x1FA0: - bufpush(0x1F60); - bufpush(0x03B9); - break; - case 0x1FA1: - bufpush(0x1F61); - bufpush(0x03B9); - break; - case 0x1FA2: - bufpush(0x1F62); - bufpush(0x03B9); - break; - case 0x1FA3: - bufpush(0x1F63); - bufpush(0x03B9); - break; - case 0x1FA4: - bufpush(0x1F64); - bufpush(0x03B9); - break; - case 0x1FA5: - bufpush(0x1F65); - bufpush(0x03B9); - break; - case 0x1FA6: - bufpush(0x1F66); - bufpush(0x03B9); - break; - case 0x1FA7: - bufpush(0x1F67); - bufpush(0x03B9); - break; - case 0x1FA8: - bufpush(0x1F60); - bufpush(0x03B9); - break; - case 0x1FA9: - bufpush(0x1F61); - bufpush(0x03B9); - break; - case 0x1FAA: - bufpush(0x1F62); - bufpush(0x03B9); - break; - case 0x1FAB: - bufpush(0x1F63); - bufpush(0x03B9); - break; - case 0x1FAC: - bufpush(0x1F64); - bufpush(0x03B9); - break; - case 0x1FAD: - bufpush(0x1F65); - bufpush(0x03B9); - break; - case 0x1FAE: - bufpush(0x1F66); - bufpush(0x03B9); - break; - case 0x1FAF: - bufpush(0x1F67); - bufpush(0x03B9); - break; - case 0x1FB2: - bufpush(0x1F70); - bufpush(0x03B9); - break; - case 0x1FB3: - bufpush(0x03B1); - bufpush(0x03B9); - break; - case 0x1FB4: - bufpush(0x03AC); - bufpush(0x03B9); - break; - case 0x1FB6: - bufpush(0x03B1); - bufpush(0x0342); - break; - case 0x1FB7: - bufpush(0x03B1); - bufpush(0x0342); - bufpush(0x03B9); - break; - case 0x1FB8: - bufpush(0x1FB0); - break; - case 0x1FB9: - bufpush(0x1FB1); - break; - case 0x1FBA: - bufpush(0x1F70); - break; - case 0x1FBB: - bufpush(0x1F71); - break; - case 0x1FBC: - bufpush(0x03B1); - bufpush(0x03B9); - break; - case 0x1FBE: - bufpush(0x03B9); - break; - case 0x1FC2: - bufpush(0x1F74); - bufpush(0x03B9); - break; - case 0x1FC3: - bufpush(0x03B7); - bufpush(0x03B9); - break; - case 0x1FC4: - bufpush(0x03AE); - bufpush(0x03B9); - break; - case 0x1FC6: - bufpush(0x03B7); - bufpush(0x0342); - break; - case 0x1FC7: - bufpush(0x03B7); - bufpush(0x0342); - bufpush(0x03B9); - break; - case 0x1FC8: - bufpush(0x1F72); - break; - case 0x1FC9: - bufpush(0x1F73); - break; - case 0x1FCA: - bufpush(0x1F74); - break; - case 0x1FCB: - bufpush(0x1F75); - break; - case 0x1FCC: - bufpush(0x03B7); - bufpush(0x03B9); - break; - case 0x1FD2: - bufpush(0x03B9); - bufpush(0x0308); - bufpush(0x0300); - break; - case 0x1FD3: - bufpush(0x03B9); - bufpush(0x0308); - bufpush(0x0301); - break; - case 0x1FD6: - bufpush(0x03B9); - bufpush(0x0342); - break; - case 0x1FD7: - bufpush(0x03B9); - bufpush(0x0308); - bufpush(0x0342); - break; - case 0x1FD8: - bufpush(0x1FD0); - break; - case 0x1FD9: - bufpush(0x1FD1); - break; - case 0x1FDA: - bufpush(0x1F76); - break; - case 0x1FDB: - bufpush(0x1F77); - break; - case 0x1FE2: - bufpush(0x03C5); - bufpush(0x0308); - bufpush(0x0300); - break; - case 0x1FE3: - bufpush(0x03C5); - bufpush(0x0308); - bufpush(0x0301); - break; - case 0x1FE4: - bufpush(0x03C1); - bufpush(0x0313); - break; - case 0x1FE6: - bufpush(0x03C5); - bufpush(0x0342); - break; - case 0x1FE7: - bufpush(0x03C5); - bufpush(0x0308); - bufpush(0x0342); - break; - case 0x1FE8: - bufpush(0x1FE0); - break; - case 0x1FE9: - bufpush(0x1FE1); - break; - case 0x1FEA: - bufpush(0x1F7A); - break; - case 0x1FEB: - bufpush(0x1F7B); - break; - case 0x1FEC: - bufpush(0x1FE5); - break; - case 0x1FF2: - bufpush(0x1F7C); - bufpush(0x03B9); - break; - case 0x1FF3: - bufpush(0x03C9); - bufpush(0x03B9); - break; - case 0x1FF4: - bufpush(0x03CE); - bufpush(0x03B9); - break; - case 0x1FF6: - bufpush(0x03C9); - bufpush(0x0342); - break; - case 0x1FF7: - bufpush(0x03C9); - bufpush(0x0342); - bufpush(0x03B9); - break; - case 0x1FF8: - bufpush(0x1F78); - break; - case 0x1FF9: - bufpush(0x1F79); - break; - case 0x1FFA: - bufpush(0x1F7C); - break; - case 0x1FFB: - bufpush(0x1F7D); - break; - case 0x1FFC: - bufpush(0x03C9); - bufpush(0x03B9); - break; - case 0x2126: - bufpush(0x03C9); - break; - case 0x212A: - bufpush(0x006B); - break; - case 0x212B: - bufpush(0x00E5); - break; - case 0x2132: - bufpush(0x214E); - break; - case 0x2160: - bufpush(0x2170); - break; - case 0x2161: - bufpush(0x2171); - break; - case 0x2162: - bufpush(0x2172); - break; - case 0x2163: - bufpush(0x2173); - break; - case 0x2164: - bufpush(0x2174); - break; - case 0x2165: - bufpush(0x2175); - break; - case 0x2166: - bufpush(0x2176); - break; - case 0x2167: - bufpush(0x2177); - break; - case 0x2168: - bufpush(0x2178); - break; - case 0x2169: - bufpush(0x2179); - break; - case 0x216A: - bufpush(0x217A); - break; - case 0x216B: - bufpush(0x217B); - break; - case 0x216C: - bufpush(0x217C); - break; - case 0x216D: - bufpush(0x217D); - break; - case 0x216E: - bufpush(0x217E); - break; - case 0x216F: - bufpush(0x217F); - break; - case 0x2183: - bufpush(0x2184); - break; - case 0x24B6: - bufpush(0x24D0); - break; - case 0x24B7: - bufpush(0x24D1); - break; - case 0x24B8: - bufpush(0x24D2); - break; - case 0x24B9: - bufpush(0x24D3); - break; - case 0x24BA: - bufpush(0x24D4); - break; - case 0x24BB: - bufpush(0x24D5); - break; - case 0x24BC: - bufpush(0x24D6); - break; - case 0x24BD: - bufpush(0x24D7); - break; - case 0x24BE: - bufpush(0x24D8); - break; - case 0x24BF: - bufpush(0x24D9); - break; - case 0x24C0: - bufpush(0x24DA); - break; - case 0x24C1: - bufpush(0x24DB); - break; - case 0x24C2: - bufpush(0x24DC); - break; - case 0x24C3: - bufpush(0x24DD); - break; - case 0x24C4: - bufpush(0x24DE); - break; - case 0x24C5: - bufpush(0x24DF); - break; - case 0x24C6: - bufpush(0x24E0); - break; - case 0x24C7: - bufpush(0x24E1); - break; - case 0x24C8: - bufpush(0x24E2); - break; - case 0x24C9: - bufpush(0x24E3); - break; - case 0x24CA: - bufpush(0x24E4); - break; - case 0x24CB: - bufpush(0x24E5); - break; - case 0x24CC: - bufpush(0x24E6); - break; - case 0x24CD: - bufpush(0x24E7); - break; - case 0x24CE: - bufpush(0x24E8); - break; - case 0x24CF: - bufpush(0x24E9); - break; - case 0x2C00: - bufpush(0x2C30); - break; - case 0x2C01: - bufpush(0x2C31); - break; - case 0x2C02: - bufpush(0x2C32); - break; - case 0x2C03: - bufpush(0x2C33); - break; - case 0x2C04: - bufpush(0x2C34); - break; - case 0x2C05: - bufpush(0x2C35); - break; - case 0x2C06: - bufpush(0x2C36); - break; - case 0x2C07: - bufpush(0x2C37); - break; - case 0x2C08: - bufpush(0x2C38); - break; - case 0x2C09: - bufpush(0x2C39); - break; - case 0x2C0A: - bufpush(0x2C3A); - break; - case 0x2C0B: - bufpush(0x2C3B); - break; - case 0x2C0C: - bufpush(0x2C3C); - break; - case 0x2C0D: - bufpush(0x2C3D); - break; - case 0x2C0E: - bufpush(0x2C3E); - break; - case 0x2C0F: - bufpush(0x2C3F); - break; - case 0x2C10: - bufpush(0x2C40); - break; - case 0x2C11: - bufpush(0x2C41); - break; - case 0x2C12: - bufpush(0x2C42); - break; - case 0x2C13: - bufpush(0x2C43); - break; - case 0x2C14: - bufpush(0x2C44); - break; - case 0x2C15: - bufpush(0x2C45); - break; - case 0x2C16: - bufpush(0x2C46); - break; - case 0x2C17: - bufpush(0x2C47); - break; - case 0x2C18: - bufpush(0x2C48); - break; - case 0x2C19: - bufpush(0x2C49); - break; - case 0x2C1A: - bufpush(0x2C4A); - break; - case 0x2C1B: - bufpush(0x2C4B); - break; - case 0x2C1C: - bufpush(0x2C4C); - break; - case 0x2C1D: - bufpush(0x2C4D); - break; - case 0x2C1E: - bufpush(0x2C4E); - break; - case 0x2C1F: - bufpush(0x2C4F); - break; - case 0x2C20: - bufpush(0x2C50); - break; - case 0x2C21: - bufpush(0x2C51); - break; - case 0x2C22: - bufpush(0x2C52); - break; - case 0x2C23: - bufpush(0x2C53); - break; - case 0x2C24: - bufpush(0x2C54); - break; - case 0x2C25: - bufpush(0x2C55); - break; - case 0x2C26: - bufpush(0x2C56); - break; - case 0x2C27: - bufpush(0x2C57); - break; - case 0x2C28: - bufpush(0x2C58); - break; - case 0x2C29: - bufpush(0x2C59); - break; - case 0x2C2A: - bufpush(0x2C5A); - break; - case 0x2C2B: - bufpush(0x2C5B); - break; - case 0x2C2C: - bufpush(0x2C5C); - break; - case 0x2C2D: - bufpush(0x2C5D); - break; - case 0x2C2E: - bufpush(0x2C5E); - break; - case 0x2C60: - bufpush(0x2C61); - break; - case 0x2C62: - bufpush(0x026B); - break; - case 0x2C63: - bufpush(0x1D7D); - break; - case 0x2C64: - bufpush(0x027D); - break; - case 0x2C67: - bufpush(0x2C68); - break; - case 0x2C69: - bufpush(0x2C6A); - break; - case 0x2C6B: - bufpush(0x2C6C); - break; - case 0x2C6D: - bufpush(0x0251); - break; - case 0x2C6E: - bufpush(0x0271); - break; - case 0x2C6F: - bufpush(0x0250); - break; - case 0x2C70: - bufpush(0x0252); - break; - case 0x2C72: - bufpush(0x2C73); - break; - case 0x2C75: - bufpush(0x2C76); - break; - case 0x2C7E: - bufpush(0x023F); - break; - case 0x2C7F: - bufpush(0x0240); - break; - case 0x2C80: - bufpush(0x2C81); - break; - case 0x2C82: - bufpush(0x2C83); - break; - case 0x2C84: - bufpush(0x2C85); - break; - case 0x2C86: - bufpush(0x2C87); - break; - case 0x2C88: - bufpush(0x2C89); - break; - case 0x2C8A: - bufpush(0x2C8B); - break; - case 0x2C8C: - bufpush(0x2C8D); - break; - case 0x2C8E: - bufpush(0x2C8F); - break; - case 0x2C90: - bufpush(0x2C91); - break; - case 0x2C92: - bufpush(0x2C93); - break; - case 0x2C94: - bufpush(0x2C95); - break; - case 0x2C96: - bufpush(0x2C97); - break; - case 0x2C98: - bufpush(0x2C99); - break; - case 0x2C9A: - bufpush(0x2C9B); - break; - case 0x2C9C: - bufpush(0x2C9D); - break; - case 0x2C9E: - bufpush(0x2C9F); - break; - case 0x2CA0: - bufpush(0x2CA1); - break; - case 0x2CA2: - bufpush(0x2CA3); - break; - case 0x2CA4: - bufpush(0x2CA5); - break; - case 0x2CA6: - bufpush(0x2CA7); - break; - case 0x2CA8: - bufpush(0x2CA9); - break; - case 0x2CAA: - bufpush(0x2CAB); - break; - case 0x2CAC: - bufpush(0x2CAD); - break; - case 0x2CAE: - bufpush(0x2CAF); - break; - case 0x2CB0: - bufpush(0x2CB1); - break; - case 0x2CB2: - bufpush(0x2CB3); - break; - case 0x2CB4: - bufpush(0x2CB5); - break; - case 0x2CB6: - bufpush(0x2CB7); - break; - case 0x2CB8: - bufpush(0x2CB9); - break; - case 0x2CBA: - bufpush(0x2CBB); - break; - case 0x2CBC: - bufpush(0x2CBD); - break; - case 0x2CBE: - bufpush(0x2CBF); - break; - case 0x2CC0: - bufpush(0x2CC1); - break; - case 0x2CC2: - bufpush(0x2CC3); - break; - case 0x2CC4: - bufpush(0x2CC5); - break; - case 0x2CC6: - bufpush(0x2CC7); - break; - case 0x2CC8: - bufpush(0x2CC9); - break; - case 0x2CCA: - bufpush(0x2CCB); - break; - case 0x2CCC: - bufpush(0x2CCD); - break; - case 0x2CCE: - bufpush(0x2CCF); - break; - case 0x2CD0: - bufpush(0x2CD1); - break; - case 0x2CD2: - bufpush(0x2CD3); - break; - case 0x2CD4: - bufpush(0x2CD5); - break; - case 0x2CD6: - bufpush(0x2CD7); - break; - case 0x2CD8: - bufpush(0x2CD9); - break; - case 0x2CDA: - bufpush(0x2CDB); - break; - case 0x2CDC: - bufpush(0x2CDD); - break; - case 0x2CDE: - bufpush(0x2CDF); - break; - case 0x2CE0: - bufpush(0x2CE1); - break; - case 0x2CE2: - bufpush(0x2CE3); - break; - case 0x2CEB: - bufpush(0x2CEC); - break; - case 0x2CED: - bufpush(0x2CEE); - break; - case 0x2CF2: - bufpush(0x2CF3); - break; - case 0xA640: - bufpush(0xA641); - break; - case 0xA642: - bufpush(0xA643); - break; - case 0xA644: - bufpush(0xA645); - break; - case 0xA646: - bufpush(0xA647); - break; - case 0xA648: - bufpush(0xA649); - break; - case 0xA64A: - bufpush(0xA64B); - break; - case 0xA64C: - bufpush(0xA64D); - break; - case 0xA64E: - bufpush(0xA64F); - break; - case 0xA650: - bufpush(0xA651); - break; - case 0xA652: - bufpush(0xA653); - break; - case 0xA654: - bufpush(0xA655); - break; - case 0xA656: - bufpush(0xA657); - break; - case 0xA658: - bufpush(0xA659); - break; - case 0xA65A: - bufpush(0xA65B); - break; - case 0xA65C: - bufpush(0xA65D); - break; - case 0xA65E: - bufpush(0xA65F); - break; - case 0xA660: - bufpush(0xA661); - break; - case 0xA662: - bufpush(0xA663); - break; - case 0xA664: - bufpush(0xA665); - break; - case 0xA666: - bufpush(0xA667); - break; - case 0xA668: - bufpush(0xA669); - break; - case 0xA66A: - bufpush(0xA66B); - break; - case 0xA66C: - bufpush(0xA66D); - break; - case 0xA680: - bufpush(0xA681); - break; - case 0xA682: - bufpush(0xA683); - break; - case 0xA684: - bufpush(0xA685); - break; - case 0xA686: - bufpush(0xA687); - break; - case 0xA688: - bufpush(0xA689); - break; - case 0xA68A: - bufpush(0xA68B); - break; - case 0xA68C: - bufpush(0xA68D); - break; - case 0xA68E: - bufpush(0xA68F); - break; - case 0xA690: - bufpush(0xA691); - break; - case 0xA692: - bufpush(0xA693); - break; - case 0xA694: - bufpush(0xA695); - break; - case 0xA696: - bufpush(0xA697); - break; - case 0xA698: - bufpush(0xA699); - break; - case 0xA69A: - bufpush(0xA69B); - break; - case 0xA722: - bufpush(0xA723); - break; - case 0xA724: - bufpush(0xA725); - break; - case 0xA726: - bufpush(0xA727); - break; - case 0xA728: - bufpush(0xA729); - break; - case 0xA72A: - bufpush(0xA72B); - break; - case 0xA72C: - bufpush(0xA72D); - break; - case 0xA72E: - bufpush(0xA72F); - break; - case 0xA732: - bufpush(0xA733); - break; - case 0xA734: - bufpush(0xA735); - break; - case 0xA736: - bufpush(0xA737); - break; - case 0xA738: - bufpush(0xA739); - break; - case 0xA73A: - bufpush(0xA73B); - break; - case 0xA73C: - bufpush(0xA73D); - break; - case 0xA73E: - bufpush(0xA73F); - break; - case 0xA740: - bufpush(0xA741); - break; - case 0xA742: - bufpush(0xA743); - break; - case 0xA744: - bufpush(0xA745); - break; - case 0xA746: - bufpush(0xA747); - break; - case 0xA748: - bufpush(0xA749); - break; - case 0xA74A: - bufpush(0xA74B); - break; - case 0xA74C: - bufpush(0xA74D); - break; - case 0xA74E: - bufpush(0xA74F); - break; - case 0xA750: - bufpush(0xA751); - break; - case 0xA752: - bufpush(0xA753); - break; - case 0xA754: - bufpush(0xA755); - break; - case 0xA756: - bufpush(0xA757); - break; - case 0xA758: - bufpush(0xA759); - break; - case 0xA75A: - bufpush(0xA75B); - break; - case 0xA75C: - bufpush(0xA75D); - break; - case 0xA75E: - bufpush(0xA75F); - break; - case 0xA760: - bufpush(0xA761); - break; - case 0xA762: - bufpush(0xA763); - break; - case 0xA764: - bufpush(0xA765); - break; - case 0xA766: - bufpush(0xA767); - break; - case 0xA768: - bufpush(0xA769); - break; - case 0xA76A: - bufpush(0xA76B); - break; - case 0xA76C: - bufpush(0xA76D); - break; - case 0xA76E: - bufpush(0xA76F); - break; - case 0xA779: - bufpush(0xA77A); - break; - case 0xA77B: - bufpush(0xA77C); - break; - case 0xA77D: - bufpush(0x1D79); - break; - case 0xA77E: - bufpush(0xA77F); - break; - case 0xA780: - bufpush(0xA781); - break; - case 0xA782: - bufpush(0xA783); - break; - case 0xA784: - bufpush(0xA785); - break; - case 0xA786: - bufpush(0xA787); - break; - case 0xA78B: - bufpush(0xA78C); - break; - case 0xA78D: - bufpush(0x0265); - break; - case 0xA790: - bufpush(0xA791); - break; - case 0xA792: - bufpush(0xA793); - break; - case 0xA796: - bufpush(0xA797); - break; - case 0xA798: - bufpush(0xA799); - break; - case 0xA79A: - bufpush(0xA79B); - break; - case 0xA79C: - bufpush(0xA79D); - break; - case 0xA79E: - bufpush(0xA79F); - break; - case 0xA7A0: - bufpush(0xA7A1); - break; - case 0xA7A2: - bufpush(0xA7A3); - break; - case 0xA7A4: - bufpush(0xA7A5); - break; - case 0xA7A6: - bufpush(0xA7A7); - break; - case 0xA7A8: - bufpush(0xA7A9); - break; - case 0xA7AA: - bufpush(0x0266); - break; - case 0xA7AB: - bufpush(0x025C); - break; - case 0xA7AC: - bufpush(0x0261); - break; - case 0xA7AD: - bufpush(0x026C); - break; - case 0xA7AE: - bufpush(0x026A); - break; - case 0xA7B0: - bufpush(0x029E); - break; - case 0xA7B1: - bufpush(0x0287); - break; - case 0xA7B2: - bufpush(0x029D); - break; - case 0xA7B3: - bufpush(0xAB53); - break; - case 0xA7B4: - bufpush(0xA7B5); - break; - case 0xA7B6: - bufpush(0xA7B7); - break; - case 0xAB70: - bufpush(0x13A0); - break; - case 0xAB71: - bufpush(0x13A1); - break; - case 0xAB72: - bufpush(0x13A2); - break; - case 0xAB73: - bufpush(0x13A3); - break; - case 0xAB74: - bufpush(0x13A4); - break; - case 0xAB75: - bufpush(0x13A5); - break; - case 0xAB76: - bufpush(0x13A6); - break; - case 0xAB77: - bufpush(0x13A7); - break; - case 0xAB78: - bufpush(0x13A8); - break; - case 0xAB79: - bufpush(0x13A9); - break; - case 0xAB7A: - bufpush(0x13AA); - break; - case 0xAB7B: - bufpush(0x13AB); - break; - case 0xAB7C: - bufpush(0x13AC); - break; - case 0xAB7D: - bufpush(0x13AD); - break; - case 0xAB7E: - bufpush(0x13AE); - break; - case 0xAB7F: - bufpush(0x13AF); - break; - case 0xAB80: - bufpush(0x13B0); - break; - case 0xAB81: - bufpush(0x13B1); - break; - case 0xAB82: - bufpush(0x13B2); - break; - case 0xAB83: - bufpush(0x13B3); - break; - case 0xAB84: - bufpush(0x13B4); - break; - case 0xAB85: - bufpush(0x13B5); - break; - case 0xAB86: - bufpush(0x13B6); - break; - case 0xAB87: - bufpush(0x13B7); - break; - case 0xAB88: - bufpush(0x13B8); - break; - case 0xAB89: - bufpush(0x13B9); - break; - case 0xAB8A: - bufpush(0x13BA); - break; - case 0xAB8B: - bufpush(0x13BB); - break; - case 0xAB8C: - bufpush(0x13BC); - break; - case 0xAB8D: - bufpush(0x13BD); - break; - case 0xAB8E: - bufpush(0x13BE); - break; - case 0xAB8F: - bufpush(0x13BF); - break; - case 0xAB90: - bufpush(0x13C0); - break; - case 0xAB91: - bufpush(0x13C1); - break; - case 0xAB92: - bufpush(0x13C2); - break; - case 0xAB93: - bufpush(0x13C3); - break; - case 0xAB94: - bufpush(0x13C4); - break; - case 0xAB95: - bufpush(0x13C5); - break; - case 0xAB96: - bufpush(0x13C6); - break; - case 0xAB97: - bufpush(0x13C7); - break; - case 0xAB98: - bufpush(0x13C8); - break; - case 0xAB99: - bufpush(0x13C9); - break; - case 0xAB9A: - bufpush(0x13CA); - break; - case 0xAB9B: - bufpush(0x13CB); - break; - case 0xAB9C: - bufpush(0x13CC); - break; - case 0xAB9D: - bufpush(0x13CD); - break; - case 0xAB9E: - bufpush(0x13CE); - break; - case 0xAB9F: - bufpush(0x13CF); - break; - case 0xABA0: - bufpush(0x13D0); - break; - case 0xABA1: - bufpush(0x13D1); - break; - case 0xABA2: - bufpush(0x13D2); - break; - case 0xABA3: - bufpush(0x13D3); - break; - case 0xABA4: - bufpush(0x13D4); - break; - case 0xABA5: - bufpush(0x13D5); - break; - case 0xABA6: - bufpush(0x13D6); - break; - case 0xABA7: - bufpush(0x13D7); - break; - case 0xABA8: - bufpush(0x13D8); - break; - case 0xABA9: - bufpush(0x13D9); - break; - case 0xABAA: - bufpush(0x13DA); - break; - case 0xABAB: - bufpush(0x13DB); - break; - case 0xABAC: - bufpush(0x13DC); - break; - case 0xABAD: - bufpush(0x13DD); - break; - case 0xABAE: - bufpush(0x13DE); - break; - case 0xABAF: - bufpush(0x13DF); - break; - case 0xABB0: - bufpush(0x13E0); - break; - case 0xABB1: - bufpush(0x13E1); - break; - case 0xABB2: - bufpush(0x13E2); - break; - case 0xABB3: - bufpush(0x13E3); - break; - case 0xABB4: - bufpush(0x13E4); - break; - case 0xABB5: - bufpush(0x13E5); - break; - case 0xABB6: - bufpush(0x13E6); - break; - case 0xABB7: - bufpush(0x13E7); - break; - case 0xABB8: - bufpush(0x13E8); - break; - case 0xABB9: - bufpush(0x13E9); - break; - case 0xABBA: - bufpush(0x13EA); - break; - case 0xABBB: - bufpush(0x13EB); - break; - case 0xABBC: - bufpush(0x13EC); - break; - case 0xABBD: - bufpush(0x13ED); - break; - case 0xABBE: - bufpush(0x13EE); - break; - case 0xABBF: - bufpush(0x13EF); - break; - case 0xFB00: - bufpush(0x0066); - bufpush(0x0066); - break; - case 0xFB01: - bufpush(0x0066); - bufpush(0x0069); - break; - case 0xFB02: - bufpush(0x0066); - bufpush(0x006C); - break; - case 0xFB03: - bufpush(0x0066); - bufpush(0x0066); - bufpush(0x0069); - break; - case 0xFB04: - bufpush(0x0066); - bufpush(0x0066); - bufpush(0x006C); - break; - case 0xFB05: - bufpush(0x0073); - bufpush(0x0074); - break; - case 0xFB06: - bufpush(0x0073); - bufpush(0x0074); - break; - case 0xFB13: - bufpush(0x0574); - bufpush(0x0576); - break; - case 0xFB14: - bufpush(0x0574); - bufpush(0x0565); - break; - case 0xFB15: - bufpush(0x0574); - bufpush(0x056B); - break; - case 0xFB16: - bufpush(0x057E); - bufpush(0x0576); - break; - case 0xFB17: - bufpush(0x0574); - bufpush(0x056D); - break; - case 0xFF21: - bufpush(0xFF41); - break; - case 0xFF22: - bufpush(0xFF42); - break; - case 0xFF23: - bufpush(0xFF43); - break; - case 0xFF24: - bufpush(0xFF44); - break; - case 0xFF25: - bufpush(0xFF45); - break; - case 0xFF26: - bufpush(0xFF46); - break; - case 0xFF27: - bufpush(0xFF47); - break; - case 0xFF28: - bufpush(0xFF48); - break; - case 0xFF29: - bufpush(0xFF49); - break; - case 0xFF2A: - bufpush(0xFF4A); - break; - case 0xFF2B: - bufpush(0xFF4B); - break; - case 0xFF2C: - bufpush(0xFF4C); - break; - case 0xFF2D: - bufpush(0xFF4D); - break; - case 0xFF2E: - bufpush(0xFF4E); - break; - case 0xFF2F: - bufpush(0xFF4F); - break; - case 0xFF30: - bufpush(0xFF50); - break; - case 0xFF31: - bufpush(0xFF51); - break; - case 0xFF32: - bufpush(0xFF52); - break; - case 0xFF33: - bufpush(0xFF53); - break; - case 0xFF34: - bufpush(0xFF54); - break; - case 0xFF35: - bufpush(0xFF55); - break; - case 0xFF36: - bufpush(0xFF56); - break; - case 0xFF37: - bufpush(0xFF57); - break; - case 0xFF38: - bufpush(0xFF58); - break; - case 0xFF39: - bufpush(0xFF59); - break; - case 0xFF3A: - bufpush(0xFF5A); - break; - case 0x10400: - bufpush(0x10428); - break; - case 0x10401: - bufpush(0x10429); - break; - case 0x10402: - bufpush(0x1042A); - break; - case 0x10403: - bufpush(0x1042B); - break; - case 0x10404: - bufpush(0x1042C); - break; - case 0x10405: - bufpush(0x1042D); - break; - case 0x10406: - bufpush(0x1042E); - break; - case 0x10407: - bufpush(0x1042F); - break; - case 0x10408: - bufpush(0x10430); - break; - case 0x10409: - bufpush(0x10431); - break; - case 0x1040A: - bufpush(0x10432); - break; - case 0x1040B: - bufpush(0x10433); - break; - case 0x1040C: - bufpush(0x10434); - break; - case 0x1040D: - bufpush(0x10435); - break; - case 0x1040E: - bufpush(0x10436); - break; - case 0x1040F: - bufpush(0x10437); - break; - case 0x10410: - bufpush(0x10438); - break; - case 0x10411: - bufpush(0x10439); - break; - case 0x10412: - bufpush(0x1043A); - break; - case 0x10413: - bufpush(0x1043B); - break; - case 0x10414: - bufpush(0x1043C); - break; - case 0x10415: - bufpush(0x1043D); - break; - case 0x10416: - bufpush(0x1043E); - break; - case 0x10417: - bufpush(0x1043F); - break; - case 0x10418: - bufpush(0x10440); - break; - case 0x10419: - bufpush(0x10441); - break; - case 0x1041A: - bufpush(0x10442); - break; - case 0x1041B: - bufpush(0x10443); - break; - case 0x1041C: - bufpush(0x10444); - break; - case 0x1041D: - bufpush(0x10445); - break; - case 0x1041E: - bufpush(0x10446); - break; - case 0x1041F: - bufpush(0x10447); - break; - case 0x10420: - bufpush(0x10448); - break; - case 0x10421: - bufpush(0x10449); - break; - case 0x10422: - bufpush(0x1044A); - break; - case 0x10423: - bufpush(0x1044B); - break; - case 0x10424: - bufpush(0x1044C); - break; - case 0x10425: - bufpush(0x1044D); - break; - case 0x10426: - bufpush(0x1044E); - break; - case 0x10427: - bufpush(0x1044F); - break; - case 0x104B0: - bufpush(0x104D8); - break; - case 0x104B1: - bufpush(0x104D9); - break; - case 0x104B2: - bufpush(0x104DA); - break; - case 0x104B3: - bufpush(0x104DB); - break; - case 0x104B4: - bufpush(0x104DC); - break; - case 0x104B5: - bufpush(0x104DD); - break; - case 0x104B6: - bufpush(0x104DE); - break; - case 0x104B7: - bufpush(0x104DF); - break; - case 0x104B8: - bufpush(0x104E0); - break; - case 0x104B9: - bufpush(0x104E1); - break; - case 0x104BA: - bufpush(0x104E2); - break; - case 0x104BB: - bufpush(0x104E3); - break; - case 0x104BC: - bufpush(0x104E4); - break; - case 0x104BD: - bufpush(0x104E5); - break; - case 0x104BE: - bufpush(0x104E6); - break; - case 0x104BF: - bufpush(0x104E7); - break; - case 0x104C0: - bufpush(0x104E8); - break; - case 0x104C1: - bufpush(0x104E9); - break; - case 0x104C2: - bufpush(0x104EA); - break; - case 0x104C3: - bufpush(0x104EB); - break; - case 0x104C4: - bufpush(0x104EC); - break; - case 0x104C5: - bufpush(0x104ED); - break; - case 0x104C6: - bufpush(0x104EE); - break; - case 0x104C7: - bufpush(0x104EF); - break; - case 0x104C8: - bufpush(0x104F0); - break; - case 0x104C9: - bufpush(0x104F1); - break; - case 0x104CA: - bufpush(0x104F2); - break; - case 0x104CB: - bufpush(0x104F3); - break; - case 0x104CC: - bufpush(0x104F4); - break; - case 0x104CD: - bufpush(0x104F5); - break; - case 0x104CE: - bufpush(0x104F6); - break; - case 0x104CF: - bufpush(0x104F7); - break; - case 0x104D0: - bufpush(0x104F8); - break; - case 0x104D1: - bufpush(0x104F9); - break; - case 0x104D2: - bufpush(0x104FA); - break; - case 0x104D3: - bufpush(0x104FB); - break; - case 0x10C80: - bufpush(0x10CC0); - break; - case 0x10C81: - bufpush(0x10CC1); - break; - case 0x10C82: - bufpush(0x10CC2); - break; - case 0x10C83: - bufpush(0x10CC3); - break; - case 0x10C84: - bufpush(0x10CC4); - break; - case 0x10C85: - bufpush(0x10CC5); - break; - case 0x10C86: - bufpush(0x10CC6); - break; - case 0x10C87: - bufpush(0x10CC7); - break; - case 0x10C88: - bufpush(0x10CC8); - break; - case 0x10C89: - bufpush(0x10CC9); - break; - case 0x10C8A: - bufpush(0x10CCA); - break; - case 0x10C8B: - bufpush(0x10CCB); - break; - case 0x10C8C: - bufpush(0x10CCC); - break; - case 0x10C8D: - bufpush(0x10CCD); - break; - case 0x10C8E: - bufpush(0x10CCE); - break; - case 0x10C8F: - bufpush(0x10CCF); - break; - case 0x10C90: - bufpush(0x10CD0); - break; - case 0x10C91: - bufpush(0x10CD1); - break; - case 0x10C92: - bufpush(0x10CD2); - break; - case 0x10C93: - bufpush(0x10CD3); - break; - case 0x10C94: - bufpush(0x10CD4); - break; - case 0x10C95: - bufpush(0x10CD5); - break; - case 0x10C96: - bufpush(0x10CD6); - break; - case 0x10C97: - bufpush(0x10CD7); - break; - case 0x10C98: - bufpush(0x10CD8); - break; - case 0x10C99: - bufpush(0x10CD9); - break; - case 0x10C9A: - bufpush(0x10CDA); - break; - case 0x10C9B: - bufpush(0x10CDB); - break; - case 0x10C9C: - bufpush(0x10CDC); - break; - case 0x10C9D: - bufpush(0x10CDD); - break; - case 0x10C9E: - bufpush(0x10CDE); - break; - case 0x10C9F: - bufpush(0x10CDF); - break; - case 0x10CA0: - bufpush(0x10CE0); - break; - case 0x10CA1: - bufpush(0x10CE1); - break; - case 0x10CA2: - bufpush(0x10CE2); - break; - case 0x10CA3: - bufpush(0x10CE3); - break; - case 0x10CA4: - bufpush(0x10CE4); - break; - case 0x10CA5: - bufpush(0x10CE5); - break; - case 0x10CA6: - bufpush(0x10CE6); - break; - case 0x10CA7: - bufpush(0x10CE7); - break; - case 0x10CA8: - bufpush(0x10CE8); - break; - case 0x10CA9: - bufpush(0x10CE9); - break; - case 0x10CAA: - bufpush(0x10CEA); - break; - case 0x10CAB: - bufpush(0x10CEB); - break; - case 0x10CAC: - bufpush(0x10CEC); - break; - case 0x10CAD: - bufpush(0x10CED); - break; - case 0x10CAE: - bufpush(0x10CEE); - break; - case 0x10CAF: - bufpush(0x10CEF); - break; - case 0x10CB0: - bufpush(0x10CF0); - break; - case 0x10CB1: - bufpush(0x10CF1); - break; - case 0x10CB2: - bufpush(0x10CF2); - break; - case 0x118A0: - bufpush(0x118C0); - break; - case 0x118A1: - bufpush(0x118C1); - break; - case 0x118A2: - bufpush(0x118C2); - break; - case 0x118A3: - bufpush(0x118C3); - break; - case 0x118A4: - bufpush(0x118C4); - break; - case 0x118A5: - bufpush(0x118C5); - break; - case 0x118A6: - bufpush(0x118C6); - break; - case 0x118A7: - bufpush(0x118C7); - break; - case 0x118A8: - bufpush(0x118C8); - break; - case 0x118A9: - bufpush(0x118C9); - break; - case 0x118AA: - bufpush(0x118CA); - break; - case 0x118AB: - bufpush(0x118CB); - break; - case 0x118AC: - bufpush(0x118CC); - break; - case 0x118AD: - bufpush(0x118CD); - break; - case 0x118AE: - bufpush(0x118CE); - break; - case 0x118AF: - bufpush(0x118CF); - break; - case 0x118B0: - bufpush(0x118D0); - break; - case 0x118B1: - bufpush(0x118D1); - break; - case 0x118B2: - bufpush(0x118D2); - break; - case 0x118B3: - bufpush(0x118D3); - break; - case 0x118B4: - bufpush(0x118D4); - break; - case 0x118B5: - bufpush(0x118D5); - break; - case 0x118B6: - bufpush(0x118D6); - break; - case 0x118B7: - bufpush(0x118D7); - break; - case 0x118B8: - bufpush(0x118D8); - break; - case 0x118B9: - bufpush(0x118D9); - break; - case 0x118BA: - bufpush(0x118DA); - break; - case 0x118BB: - bufpush(0x118DB); - break; - case 0x118BC: - bufpush(0x118DC); - break; - case 0x118BD: - bufpush(0x118DD); - break; - case 0x118BE: - bufpush(0x118DE); - break; - case 0x118BF: - bufpush(0x118DF); - break; - case 0x1E900: - bufpush(0x1E922); - break; - case 0x1E901: - bufpush(0x1E923); - break; - case 0x1E902: - bufpush(0x1E924); - break; - case 0x1E903: - bufpush(0x1E925); - break; - case 0x1E904: - bufpush(0x1E926); - break; - case 0x1E905: - bufpush(0x1E927); - break; - case 0x1E906: - bufpush(0x1E928); - break; - case 0x1E907: - bufpush(0x1E929); - break; - case 0x1E908: - bufpush(0x1E92A); - break; - case 0x1E909: - bufpush(0x1E92B); - break; - case 0x1E90A: - bufpush(0x1E92C); - break; - case 0x1E90B: - bufpush(0x1E92D); - break; - case 0x1E90C: - bufpush(0x1E92E); - break; - case 0x1E90D: - bufpush(0x1E92F); - break; - case 0x1E90E: - bufpush(0x1E930); - break; - case 0x1E90F: - bufpush(0x1E931); - break; - case 0x1E910: - bufpush(0x1E932); - break; - case 0x1E911: - bufpush(0x1E933); - break; - case 0x1E912: - bufpush(0x1E934); - break; - case 0x1E913: - bufpush(0x1E935); - break; - case 0x1E914: - bufpush(0x1E936); - break; - case 0x1E915: - bufpush(0x1E937); - break; - case 0x1E916: - bufpush(0x1E938); - break; - case 0x1E917: - bufpush(0x1E939); - break; - case 0x1E918: - bufpush(0x1E93A); - break; - case 0x1E919: - bufpush(0x1E93B); - break; - case 0x1E91A: - bufpush(0x1E93C); - break; - case 0x1E91B: - bufpush(0x1E93D); - break; - case 0x1E91C: - bufpush(0x1E93E); - break; - case 0x1E91D: - bufpush(0x1E93F); - break; - case 0x1E91E: - bufpush(0x1E940); - break; - case 0x1E91F: - bufpush(0x1E941); - break; - case 0x1E920: - bufpush(0x1E942); - break; - case 0x1E921: - bufpush(0x1E943); - break; - default: - bufpush(c); - } diff --git a/Pods/Down/Source/cmark/chunk.h b/Pods/Down/Source/cmark/chunk.h deleted file mode 100755 index 6d1601d..0000000 --- a/Pods/Down/Source/cmark/chunk.h +++ /dev/null @@ -1,119 +0,0 @@ -#ifndef CMARK_CHUNK_H -#define CMARK_CHUNK_H - -#include <string.h> -#include <stdlib.h> -#include <assert.h> -#include "cmark.h" -#include "buffer.h" -#include "cmark_ctype.h" - -#define CMARK_CHUNK_EMPTY \ - { NULL, 0, 0 } - -typedef struct { - unsigned char *data; - bufsize_t len; - bufsize_t alloc; // also implies a NULL-terminated string -} cmark_chunk; - -static CMARK_INLINE void cmark_chunk_free(cmark_mem *mem, cmark_chunk *c) { - if (c->alloc) - mem->free(c->data); - - c->data = NULL; - c->alloc = 0; - c->len = 0; -} - -static CMARK_INLINE void cmark_chunk_ltrim(cmark_chunk *c) { - assert(!c->alloc); - - while (c->len && cmark_isspace(c->data[0])) { - c->data++; - c->len--; - } -} - -static CMARK_INLINE void cmark_chunk_rtrim(cmark_chunk *c) { - assert(!c->alloc); - - while (c->len > 0) { - if (!cmark_isspace(c->data[c->len - 1])) - break; - - c->len--; - } -} - -static CMARK_INLINE void cmark_chunk_trim(cmark_chunk *c) { - cmark_chunk_ltrim(c); - cmark_chunk_rtrim(c); -} - -static CMARK_INLINE bufsize_t cmark_chunk_strchr(cmark_chunk *ch, int c, - bufsize_t offset) { - const unsigned char *p = - (unsigned char *)memchr(ch->data + offset, c, ch->len - offset); - return p ? (bufsize_t)(p - ch->data) : ch->len; -} - -static CMARK_INLINE const char *cmark_chunk_to_cstr(cmark_mem *mem, - cmark_chunk *c) { - unsigned char *str; - - if (c->alloc) { - return (char *)c->data; - } - str = (unsigned char *)mem->calloc(c->len + 1, 1); - if (c->len > 0) { - memcpy(str, c->data, c->len); - } - str[c->len] = 0; - c->data = str; - c->alloc = 1; - - return (char *)str; -} - -static CMARK_INLINE void cmark_chunk_set_cstr(cmark_mem *mem, cmark_chunk *c, - const char *str) { - unsigned char *old = c->alloc ? c->data : NULL; - if (str == NULL) { - c->len = 0; - c->data = NULL; - c->alloc = 0; - } else { - c->len = (bufsize_t)strlen(str); - c->data = (unsigned char *)mem->calloc(c->len + 1, 1); - c->alloc = 1; - memcpy(c->data, str, c->len + 1); - } - if (old != NULL) { - mem->free(old); - } -} - -static CMARK_INLINE cmark_chunk cmark_chunk_literal(const char *data) { - bufsize_t len = data ? (bufsize_t)strlen(data) : 0; - cmark_chunk c = {(unsigned char *)data, len, 0}; - return c; -} - -static CMARK_INLINE cmark_chunk cmark_chunk_dup(const cmark_chunk *ch, - bufsize_t pos, bufsize_t len) { - cmark_chunk c = {ch->data + pos, len, 0}; - return c; -} - -static CMARK_INLINE cmark_chunk cmark_chunk_buf_detach(cmark_strbuf *buf) { - cmark_chunk c; - - c.len = buf->size; - c.data = cmark_strbuf_detach(buf); - c.alloc = 1; - - return c; -} - -#endif diff --git a/Pods/Down/Source/cmark/cmark.c b/Pods/Down/Source/cmark/cmark.c deleted file mode 100755 index d64237f..0000000 --- a/Pods/Down/Source/cmark/cmark.c +++ /dev/null @@ -1,43 +0,0 @@ -#include <stdlib.h> -#include <assert.h> -#include <stdio.h> -#include "node.h" -#include "houdini.h" -#include "cmark.h" -#include "buffer.h" - -int cmark_version() { return CMARK_VERSION; } - -const char *cmark_version_string() { return CMARK_VERSION_STRING; } - -static void *xcalloc(size_t nmem, size_t size) { - void *ptr = calloc(nmem, size); - if (!ptr) { - fprintf(stderr, "[cmark] calloc returned null pointer, aborting\n"); - abort(); - } - return ptr; -} - -static void *xrealloc(void *ptr, size_t size) { - void *new_ptr = realloc(ptr, size); - if (!new_ptr) { - fprintf(stderr, "[cmark] realloc returned null pointer, aborting\n"); - abort(); - } - return new_ptr; -} - -cmark_mem DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, free}; - -char *cmark_markdown_to_html(const char *text, size_t len, int options) { - cmark_node *doc; - char *result; - - doc = cmark_parse_document(text, len, options); - - result = cmark_render_html(doc, options); - cmark_node_free(doc); - - return result; -} diff --git a/Pods/Down/Source/cmark/cmark.h b/Pods/Down/Source/cmark/cmark.h deleted file mode 100755 index 102aa6f..0000000 --- a/Pods/Down/Source/cmark/cmark.h +++ /dev/null @@ -1,650 +0,0 @@ -#ifndef CMARK_H -#define CMARK_H - -#include <stdio.h> -#include <cmark_export.h> -#include <cmark_version.h> - -#ifdef __cplusplus -extern "C" { -#endif - -/** # NAME - * - * **cmark** - CommonMark parsing, manipulating, and rendering - */ - -/** # DESCRIPTION - * - * ## Simple Interface - */ - -/** Convert 'text' (assumed to be a UTF-8 encoded string with length - * 'len') from CommonMark Markdown to HTML, returning a null-terminated, - * UTF-8-encoded string. It is the caller's responsibility - * to free the returned buffer. - */ -CMARK_EXPORT -char *cmark_markdown_to_html(const char *text, size_t len, int options); - -/** ## Node Structure - */ - -typedef enum { - /* Error status */ - CMARK_NODE_NONE, - - /* Block */ - CMARK_NODE_DOCUMENT, - CMARK_NODE_BLOCK_QUOTE, - CMARK_NODE_LIST, - CMARK_NODE_ITEM, - CMARK_NODE_CODE_BLOCK, - CMARK_NODE_HTML_BLOCK, - CMARK_NODE_CUSTOM_BLOCK, - CMARK_NODE_PARAGRAPH, - CMARK_NODE_HEADING, - CMARK_NODE_THEMATIC_BREAK, - - CMARK_NODE_FIRST_BLOCK = CMARK_NODE_DOCUMENT, - CMARK_NODE_LAST_BLOCK = CMARK_NODE_THEMATIC_BREAK, - - /* Inline */ - CMARK_NODE_TEXT, - CMARK_NODE_SOFTBREAK, - CMARK_NODE_LINEBREAK, - CMARK_NODE_CODE, - CMARK_NODE_HTML_INLINE, - CMARK_NODE_CUSTOM_INLINE, - CMARK_NODE_EMPH, - CMARK_NODE_STRONG, - CMARK_NODE_LINK, - CMARK_NODE_IMAGE, - - CMARK_NODE_FIRST_INLINE = CMARK_NODE_TEXT, - CMARK_NODE_LAST_INLINE = CMARK_NODE_IMAGE, -} cmark_node_type; - -/* For backwards compatibility: */ -#define CMARK_NODE_HEADER CMARK_NODE_HEADING -#define CMARK_NODE_HRULE CMARK_NODE_THEMATIC_BREAK -#define CMARK_NODE_HTML CMARK_NODE_HTML_BLOCK -#define CMARK_NODE_INLINE_HTML CMARK_NODE_HTML_INLINE - -typedef enum { - CMARK_NO_LIST, - CMARK_BULLET_LIST, - CMARK_ORDERED_LIST -} cmark_list_type; - -typedef enum { - CMARK_NO_DELIM, - CMARK_PERIOD_DELIM, - CMARK_PAREN_DELIM -} cmark_delim_type; - -typedef struct cmark_node cmark_node; -typedef struct cmark_parser cmark_parser; -typedef struct cmark_iter cmark_iter; - -/** - * ## Custom memory allocator support - */ - -/** Defines the memory allocation functions to be used by CMark - * when parsing and allocating a document tree - */ -typedef struct cmark_mem { - void *(*calloc)(size_t, size_t); - void *(*realloc)(void *, size_t); - void (*free)(void *); -} cmark_mem; - -/** - * ## Creating and Destroying Nodes - */ - -/** Creates a new node of type 'type'. Note that the node may have - * other required properties, which it is the caller's responsibility - * to assign. - */ -CMARK_EXPORT cmark_node *cmark_node_new(cmark_node_type type); - -/** Same as `cmark_node_new`, but explicitly listing the memory - * allocator used to allocate the node. Note: be sure to use the same - * allocator for every node in a tree, or bad things can happen. - */ -CMARK_EXPORT cmark_node *cmark_node_new_with_mem(cmark_node_type type, - cmark_mem *mem); - -/** Frees the memory allocated for a node and any children. - */ -CMARK_EXPORT void cmark_node_free(cmark_node *node); - -/** - * ## Tree Traversal - */ - -/** Returns the next node in the sequence after 'node', or NULL if - * there is none. - */ -CMARK_EXPORT cmark_node *cmark_node_next(cmark_node *node); - -/** Returns the previous node in the sequence after 'node', or NULL if - * there is none. - */ -CMARK_EXPORT cmark_node *cmark_node_previous(cmark_node *node); - -/** Returns the parent of 'node', or NULL if there is none. - */ -CMARK_EXPORT cmark_node *cmark_node_parent(cmark_node *node); - -/** Returns the first child of 'node', or NULL if 'node' has no children. - */ -CMARK_EXPORT cmark_node *cmark_node_first_child(cmark_node *node); - -/** Returns the last child of 'node', or NULL if 'node' has no children. - */ -CMARK_EXPORT cmark_node *cmark_node_last_child(cmark_node *node); - -/** - * ## Iterator - * - * An iterator will walk through a tree of nodes, starting from a root - * node, returning one node at a time, together with information about - * whether the node is being entered or exited. The iterator will - * first descend to a child node, if there is one. When there is no - * child, the iterator will go to the next sibling. When there is no - * next sibling, the iterator will return to the parent (but with - * a 'cmark_event_type' of `CMARK_EVENT_EXIT`). The iterator will - * return `CMARK_EVENT_DONE` when it reaches the root node again. - * One natural application is an HTML renderer, where an `ENTER` event - * outputs an open tag and an `EXIT` event outputs a close tag. - * An iterator might also be used to transform an AST in some systematic - * way, for example, turning all level-3 headings into regular paragraphs. - * - * void - * usage_example(cmark_node *root) { - * cmark_event_type ev_type; - * cmark_iter *iter = cmark_iter_new(root); - * - * while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - * cmark_node *cur = cmark_iter_get_node(iter); - * // Do something with `cur` and `ev_type` - * } - * - * cmark_iter_free(iter); - * } - * - * Iterators will never return `EXIT` events for leaf nodes, which are nodes - * of type: - * - * * CMARK_NODE_HTML_BLOCK - * * CMARK_NODE_THEMATIC_BREAK - * * CMARK_NODE_CODE_BLOCK - * * CMARK_NODE_TEXT - * * CMARK_NODE_SOFTBREAK - * * CMARK_NODE_LINEBREAK - * * CMARK_NODE_CODE - * * CMARK_NODE_HTML_INLINE - * - * Nodes must only be modified after an `EXIT` event, or an `ENTER` event for - * leaf nodes. - */ - -typedef enum { - CMARK_EVENT_NONE, - CMARK_EVENT_DONE, - CMARK_EVENT_ENTER, - CMARK_EVENT_EXIT -} cmark_event_type; - -/** Creates a new iterator starting at 'root'. The current node and event - * type are undefined until 'cmark_iter_next' is called for the first time. - * The memory allocated for the iterator should be released using - * 'cmark_iter_free' when it is no longer needed. - */ -CMARK_EXPORT -cmark_iter *cmark_iter_new(cmark_node *root); - -/** Frees the memory allocated for an iterator. - */ -CMARK_EXPORT -void cmark_iter_free(cmark_iter *iter); - -/** Advances to the next node and returns the event type (`CMARK_EVENT_ENTER`, - * `CMARK_EVENT_EXIT` or `CMARK_EVENT_DONE`). - */ -CMARK_EXPORT -cmark_event_type cmark_iter_next(cmark_iter *iter); - -/** Returns the current node. - */ -CMARK_EXPORT -cmark_node *cmark_iter_get_node(cmark_iter *iter); - -/** Returns the current event type. - */ -CMARK_EXPORT -cmark_event_type cmark_iter_get_event_type(cmark_iter *iter); - -/** Returns the root node. - */ -CMARK_EXPORT -cmark_node *cmark_iter_get_root(cmark_iter *iter); - -/** Resets the iterator so that the current node is 'current' and - * the event type is 'event_type'. The new current node must be a - * descendant of the root node or the root node itself. - */ -CMARK_EXPORT -void cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type); - -/** - * ## Accessors - */ - -/** Returns the user data of 'node'. - */ -CMARK_EXPORT void *cmark_node_get_user_data(cmark_node *node); - -/** Sets arbitrary user data for 'node'. Returns 1 on success, - * 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_user_data(cmark_node *node, void *user_data); - -/** Returns the type of 'node', or `CMARK_NODE_NONE` on error. - */ -CMARK_EXPORT cmark_node_type cmark_node_get_type(cmark_node *node); - -/** Like 'cmark_node_get_type', but returns a string representation - of the type, or `"<unknown>"`. - */ -CMARK_EXPORT -const char *cmark_node_get_type_string(cmark_node *node); - -/** Returns the string contents of 'node', or an empty - string if none is set. Returns NULL if called on a - node that does not have string content. - */ -CMARK_EXPORT const char *cmark_node_get_literal(cmark_node *node); - -/** Sets the string contents of 'node'. Returns 1 on success, - * 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_literal(cmark_node *node, const char *content); - -/** Returns the heading level of 'node', or 0 if 'node' is not a heading. - */ -CMARK_EXPORT int cmark_node_get_heading_level(cmark_node *node); - -/* For backwards compatibility */ -#define cmark_node_get_header_level cmark_node_get_heading_level -#define cmark_node_set_header_level cmark_node_set_heading_level - -/** Sets the heading level of 'node', returning 1 on success and 0 on error. - */ -CMARK_EXPORT int cmark_node_set_heading_level(cmark_node *node, int level); - -/** Returns the list type of 'node', or `CMARK_NO_LIST` if 'node' - * is not a list. - */ -CMARK_EXPORT cmark_list_type cmark_node_get_list_type(cmark_node *node); - -/** Sets the list type of 'node', returning 1 on success and 0 on error. - */ -CMARK_EXPORT int cmark_node_set_list_type(cmark_node *node, - cmark_list_type type); - -/** Returns the list delimiter type of 'node', or `CMARK_NO_DELIM` if 'node' - * is not a list. - */ -CMARK_EXPORT cmark_delim_type cmark_node_get_list_delim(cmark_node *node); - -/** Sets the list delimiter type of 'node', returning 1 on success and 0 - * on error. - */ -CMARK_EXPORT int cmark_node_set_list_delim(cmark_node *node, - cmark_delim_type delim); - -/** Returns starting number of 'node', if it is an ordered list, otherwise 0. - */ -CMARK_EXPORT int cmark_node_get_list_start(cmark_node *node); - -/** Sets starting number of 'node', if it is an ordered list. Returns 1 - * on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_list_start(cmark_node *node, int start); - -/** Returns 1 if 'node' is a tight list, 0 otherwise. - */ -CMARK_EXPORT int cmark_node_get_list_tight(cmark_node *node); - -/** Sets the "tightness" of a list. Returns 1 on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_list_tight(cmark_node *node, int tight); - -/** Returns the info string from a fenced code block. - */ -CMARK_EXPORT const char *cmark_node_get_fence_info(cmark_node *node); - -/** Sets the info string in a fenced code block, returning 1 on - * success and 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_fence_info(cmark_node *node, const char *info); - -/** Returns the URL of a link or image 'node', or an empty string - if no URL is set. Returns NULL if called on a node that is - not a link or image. - */ -CMARK_EXPORT const char *cmark_node_get_url(cmark_node *node); - -/** Sets the URL of a link or image 'node'. Returns 1 on success, - * 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_url(cmark_node *node, const char *url); - -/** Returns the title of a link or image 'node', or an empty - string if no title is set. Returns NULL if called on a node - that is not a link or image. - */ -CMARK_EXPORT const char *cmark_node_get_title(cmark_node *node); - -/** Sets the title of a link or image 'node'. Returns 1 on success, - * 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_title(cmark_node *node, const char *title); - -/** Returns the literal "on enter" text for a custom 'node', or - an empty string if no on_enter is set. Returns NULL if called - on a non-custom node. - */ -CMARK_EXPORT const char *cmark_node_get_on_enter(cmark_node *node); - -/** Sets the literal text to render "on enter" for a custom 'node'. - Any children of the node will be rendered after this text. - Returns 1 on success 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_on_enter(cmark_node *node, - const char *on_enter); - -/** Returns the literal "on exit" text for a custom 'node', or - an empty string if no on_exit is set. Returns NULL if - called on a non-custom node. - */ -CMARK_EXPORT const char *cmark_node_get_on_exit(cmark_node *node); - -/** Sets the literal text to render "on exit" for a custom 'node'. - Any children of the node will be rendered before this text. - Returns 1 on success 0 on failure. - */ -CMARK_EXPORT int cmark_node_set_on_exit(cmark_node *node, const char *on_exit); - -/** Returns the line on which 'node' begins. - */ -CMARK_EXPORT int cmark_node_get_start_line(cmark_node *node); - -/** Returns the column at which 'node' begins. - */ -CMARK_EXPORT int cmark_node_get_start_column(cmark_node *node); - -/** Returns the line on which 'node' ends. - */ -CMARK_EXPORT int cmark_node_get_end_line(cmark_node *node); - -/** Returns the column at which 'node' ends. - */ -CMARK_EXPORT int cmark_node_get_end_column(cmark_node *node); - -/** - * ## Tree Manipulation - */ - -/** Unlinks a 'node', removing it from the tree, but not freeing its - * memory. (Use 'cmark_node_free' for that.) - */ -CMARK_EXPORT void cmark_node_unlink(cmark_node *node); - -/** Inserts 'sibling' before 'node'. Returns 1 on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_insert_before(cmark_node *node, - cmark_node *sibling); - -/** Inserts 'sibling' after 'node'. Returns 1 on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_insert_after(cmark_node *node, cmark_node *sibling); - -/** Replaces 'oldnode' with 'newnode' and unlinks 'oldnode' (but does - * not free its memory). - * Returns 1 on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode); - -/** Adds 'child' to the beginning of the children of 'node'. - * Returns 1 on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_prepend_child(cmark_node *node, cmark_node *child); - -/** Adds 'child' to the end of the children of 'node'. - * Returns 1 on success, 0 on failure. - */ -CMARK_EXPORT int cmark_node_append_child(cmark_node *node, cmark_node *child); - -/** Consolidates adjacent text nodes. - */ -CMARK_EXPORT void cmark_consolidate_text_nodes(cmark_node *root); - -/** - * ## Parsing - * - * Simple interface: - * - * cmark_node *document = cmark_parse_document("Hello *world*", 13, - * CMARK_OPT_DEFAULT); - * - * Streaming interface: - * - * cmark_parser *parser = cmark_parser_new(CMARK_OPT_DEFAULT); - * FILE *fp = fopen("myfile.md", "rb"); - * while ((bytes = fread(buffer, 1, sizeof(buffer), fp)) > 0) { - * cmark_parser_feed(parser, buffer, bytes); - * if (bytes < sizeof(buffer)) { - * break; - * } - * } - * document = cmark_parser_finish(parser); - * cmark_parser_free(parser); - */ - -/** Creates a new parser object. - */ -CMARK_EXPORT -cmark_parser *cmark_parser_new(int options); - -/** Creates a new parser object with the given memory allocator - */ -CMARK_EXPORT -cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem); - -/** Frees memory allocated for a parser object. - */ -CMARK_EXPORT -void cmark_parser_free(cmark_parser *parser); - -/** Feeds a string of length 'len' to 'parser'. - */ -CMARK_EXPORT -void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len); - -/** Finish parsing and return a pointer to a tree of nodes. - */ -CMARK_EXPORT -cmark_node *cmark_parser_finish(cmark_parser *parser); - -/** Parse a CommonMark document in 'buffer' of length 'len'. - * Returns a pointer to a tree of nodes. The memory allocated for - * the node tree should be released using 'cmark_node_free' - * when it is no longer needed. - */ -CMARK_EXPORT -cmark_node *cmark_parse_document(const char *buffer, size_t len, int options); - -/** Parse a CommonMark document in file 'f', returning a pointer to - * a tree of nodes. The memory allocated for the node tree should be - * released using 'cmark_node_free' when it is no longer needed. - */ -CMARK_EXPORT -cmark_node *cmark_parse_file(FILE *f, int options); - -/** - * ## Rendering - */ - -/** Render a 'node' tree as XML. It is the caller's responsibility - * to free the returned buffer. - */ -CMARK_EXPORT -char *cmark_render_xml(cmark_node *root, int options); - -/** Render a 'node' tree as an HTML fragment. It is up to the user - * to add an appropriate header and footer. It is the caller's - * responsibility to free the returned buffer. - */ -CMARK_EXPORT -char *cmark_render_html(cmark_node *root, int options); - -/** Render a 'node' tree as a groff man page, without the header. - * It is the caller's responsibility to free the returned buffer. - */ -CMARK_EXPORT -char *cmark_render_man(cmark_node *root, int options, int width); - -/** Render a 'node' tree as a commonmark document. - * It is the caller's responsibility to free the returned buffer. - */ -CMARK_EXPORT -char *cmark_render_commonmark(cmark_node *root, int options, int width); - -/** Render a 'node' tree as a LaTeX document. - * It is the caller's responsibility to free the returned buffer. - */ -CMARK_EXPORT -char *cmark_render_latex(cmark_node *root, int options, int width); - -/** - * ## Options - */ - -/** Default options. - */ -#define CMARK_OPT_DEFAULT 0 - -/** - * ### Options affecting rendering - */ - -/** Include a `data-sourcepos` attribute on all block elements. - */ -#define CMARK_OPT_SOURCEPOS (1 << 1) - -/** Render `softbreak` elements as hard line breaks. - */ -#define CMARK_OPT_HARDBREAKS (1 << 2) - -/** `CMARK_OPT_SAFE` is defined here for API compatibility, - but it no longer has any effect. "Safe" mode is now the default: - set `CMARK_OPT_UNSAFE` to disable it. - */ -#define CMARK_OPT_SAFE (1 << 3) - -/** Render raw HTML and unsafe links (`javascript:`, `vbscript:`, - * `file:`, and `data:`, except for `image/png`, `image/gif`, - * `image/jpeg`, or `image/webp` mime types). By default, - * raw HTML is replaced by a placeholder HTML comment. Unsafe - * links are replaced by empty strings. - */ -#define CMARK_OPT_UNSAFE (1 << 17) - -/** Render `softbreak` elements as spaces. - */ -#define CMARK_OPT_NOBREAKS (1 << 4) - -/** - * ### Options affecting parsing - */ - -/** Legacy option (no effect). - */ -#define CMARK_OPT_NORMALIZE (1 << 8) - -/** Validate UTF-8 in the input before parsing, replacing illegal - * sequences with the replacement character U+FFFD. - */ -#define CMARK_OPT_VALIDATE_UTF8 (1 << 9) - -/** Convert straight quotes to curly, --- to em dashes, -- to en dashes. - */ -#define CMARK_OPT_SMART (1 << 10) - -/** - * ## Version information - */ - -/** The library version as integer for runtime checks. Also available as - * macro CMARK_VERSION for compile time checks. - * - * * Bits 16-23 contain the major version. - * * Bits 8-15 contain the minor version. - * * Bits 0-7 contain the patchlevel. - * - * In hexadecimal format, the number 0x010203 represents version 1.2.3. - */ -CMARK_EXPORT -int cmark_version(void); - -/** The library version string for runtime checks. Also available as - * macro CMARK_VERSION_STRING for compile time checks. - */ -CMARK_EXPORT -const char *cmark_version_string(void); - -/** # AUTHORS - * - * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer. - */ - -#ifndef CMARK_NO_SHORT_NAMES -#define NODE_DOCUMENT CMARK_NODE_DOCUMENT -#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE -#define NODE_LIST CMARK_NODE_LIST -#define NODE_ITEM CMARK_NODE_ITEM -#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK -#define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK -#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK -#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH -#define NODE_HEADING CMARK_NODE_HEADING -#define NODE_HEADER CMARK_NODE_HEADER -#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK -#define NODE_HRULE CMARK_NODE_HRULE -#define NODE_TEXT CMARK_NODE_TEXT -#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK -#define NODE_LINEBREAK CMARK_NODE_LINEBREAK -#define NODE_CODE CMARK_NODE_CODE -#define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE -#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE -#define NODE_EMPH CMARK_NODE_EMPH -#define NODE_STRONG CMARK_NODE_STRONG -#define NODE_LINK CMARK_NODE_LINK -#define NODE_IMAGE CMARK_NODE_IMAGE -#define BULLET_LIST CMARK_BULLET_LIST -#define ORDERED_LIST CMARK_ORDERED_LIST -#define PERIOD_DELIM CMARK_PERIOD_DELIM -#define PAREN_DELIM CMARK_PAREN_DELIM -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/cmark_ctype.c b/Pods/Down/Source/cmark/cmark_ctype.c deleted file mode 100755 index c0c4d5b..0000000 --- a/Pods/Down/Source/cmark/cmark_ctype.c +++ /dev/null @@ -1,44 +0,0 @@ -#include <stdint.h> - -#include "cmark_ctype.h" - -/** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other - */ -static const uint8_t cmark_ctype_class[256] = { - /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ - /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, - /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, - /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, - /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0, - /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - -/** - * Returns 1 if c is a "whitespace" character as defined by the spec. - */ -int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; } - -/** - * Returns 1 if c is an ascii punctuation character. - */ -int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; } - -int cmark_isalnum(char c) { - uint8_t result; - result = cmark_ctype_class[(uint8_t)c]; - return (result == 3 || result == 4); -} - -int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; } - -int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; } diff --git a/Pods/Down/Source/cmark/cmark_ctype.h b/Pods/Down/Source/cmark/cmark_ctype.h deleted file mode 100755 index 9a07618..0000000 --- a/Pods/Down/Source/cmark/cmark_ctype.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef CMARK_CMARK_CTYPE_H -#define CMARK_CMARK_CTYPE_H - -#ifdef __cplusplus -extern "C" { -#endif - -/** Locale-independent versions of functions from ctype.h. - * We want cmark to behave the same no matter what the system locale. - */ - -int cmark_isspace(char c); - -int cmark_ispunct(char c); - -int cmark_isalnum(char c); - -int cmark_isdigit(char c); - -int cmark_isalpha(char c); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/cmark_export.h b/Pods/Down/Source/cmark/cmark_export.h deleted file mode 100644 index 9e5dd5d..0000000 --- a/Pods/Down/Source/cmark/cmark_export.h +++ /dev/null @@ -1,42 +0,0 @@ - -#ifndef CMARK_EXPORT_H -#define CMARK_EXPORT_H - -#ifdef CMARK_STATIC_DEFINE -# define CMARK_EXPORT -# define CMARK_NO_EXPORT -#else -# ifndef CMARK_EXPORT -# ifdef libcmark_EXPORTS - /* We are building this library */ -# define CMARK_EXPORT __attribute__((visibility("default"))) -# else - /* We are using this library */ -# define CMARK_EXPORT __attribute__((visibility("default"))) -# endif -# endif - -# ifndef CMARK_NO_EXPORT -# define CMARK_NO_EXPORT __attribute__((visibility("hidden"))) -# endif -#endif - -#ifndef CMARK_DEPRECATED -# define CMARK_DEPRECATED __attribute__ ((__deprecated__)) -#endif - -#ifndef CMARK_DEPRECATED_EXPORT -# define CMARK_DEPRECATED_EXPORT CMARK_EXPORT CMARK_DEPRECATED -#endif - -#ifndef CMARK_DEPRECATED_NO_EXPORT -# define CMARK_DEPRECATED_NO_EXPORT CMARK_NO_EXPORT CMARK_DEPRECATED -#endif - -#if 0 /* DEFINE_NO_DEPRECATED */ -# ifndef CMARK_NO_DEPRECATED -# define CMARK_NO_DEPRECATED -# endif -#endif - -#endif /* CMARK_EXPORT_H */ diff --git a/Pods/Down/Source/cmark/cmark_version.h b/Pods/Down/Source/cmark/cmark_version.h deleted file mode 100755 index dcacd37..0000000 --- a/Pods/Down/Source/cmark/cmark_version.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef CMARK_VERSION_H -#define CMARK_VERSION_H - -#define CMARK_VERSION ((0 << 16) | (29 << 8) | 0) -#define CMARK_VERSION_STRING "0.29.0" - -#endif diff --git a/Pods/Down/Source/cmark/commonmark.c b/Pods/Down/Source/cmark/commonmark.c deleted file mode 100755 index 404c290..0000000 --- a/Pods/Down/Source/cmark/commonmark.c +++ /dev/null @@ -1,486 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <stdint.h> -#include <assert.h> - -#include "config.h" -#include "cmark.h" -#include "node.h" -#include "buffer.h" -#include "utf8.h" -#include "scanners.h" -#include "render.h" - -#define OUT(s, wrap, escaping) renderer->out(renderer, s, wrap, escaping) -#define LIT(s) renderer->out(renderer, s, false, LITERAL) -#define CR() renderer->cr(renderer) -#define BLANKLINE() renderer->blankline(renderer) -#define ENCODED_SIZE 20 -#define LISTMARKER_SIZE 20 - -// Functions to convert cmark_nodes to commonmark strings. - -static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, - int32_t c, unsigned char nextc) { - bool needs_escaping = false; - bool follows_digit = - renderer->buffer->size > 0 && - cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]); - char encoded[ENCODED_SIZE]; - - needs_escaping = - c < 0x80 && escape != LITERAL && - ((escape == NORMAL && - (c < 0x20 || - c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' || - c == '>' || c == '\\' || c == '`' || c == '!' || - (c == '&' && cmark_isalpha(nextc)) || (c == '!' && nextc == '[') || - (renderer->begin_content && (c == '-' || c == '+' || c == '=') && - // begin_content doesn't get set to false til we've passed digits - // at the beginning of line, so... - !follows_digit) || - (renderer->begin_content && (c == '.' || c == ')') && follows_digit && - (nextc == 0 || cmark_isspace(nextc))))) || - (escape == URL && - (c == '`' || c == '<' || c == '>' || cmark_isspace(c) || c == '\\' || - c == ')' || c == '(')) || - (escape == TITLE && - (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\'))); - - if (needs_escaping) { - if (escape == URL && cmark_isspace(c)) { - // use percent encoding for spaces - snprintf(encoded, ENCODED_SIZE, "%%%2X", c); - cmark_strbuf_puts(renderer->buffer, encoded); - renderer->column += 3; - } else if (cmark_ispunct(c)) { - cmark_render_ascii(renderer, "\\"); - cmark_render_code_point(renderer, c); - } else { // render as entity - snprintf(encoded, ENCODED_SIZE, "&#%d;", c); - cmark_strbuf_puts(renderer->buffer, encoded); - renderer->column += strlen(encoded); - } - } else { - cmark_render_code_point(renderer, c); - } -} - -static int longest_backtick_sequence(const char *code) { - int longest = 0; - int current = 0; - size_t i = 0; - size_t code_len = strlen(code); - while (i <= code_len) { - if (code[i] == '`') { - current++; - } else { - if (current > longest) { - longest = current; - } - current = 0; - } - i++; - } - return longest; -} - -static int shortest_unused_backtick_sequence(const char *code) { - // note: if the shortest sequence is >= 32, this returns 32 - // so as not to overflow the bit array. - uint32_t used = 1; - int current = 0; - size_t i = 0; - size_t code_len = strlen(code); - while (i <= code_len) { - if (code[i] == '`') { - current++; - } else { - if (current > 0 && current < 32) { - used |= (1U << current); - } - current = 0; - } - i++; - } - // return number of first bit that is 0: - i = 0; - while (i < 32 && used & 1) { - used = used >> 1; - i++; - } - return (int)i; -} - -static bool is_autolink(cmark_node *node) { - cmark_chunk *title; - cmark_chunk *url; - cmark_node *link_text; - char *realurl; - int realurllen; - - if (node->type != CMARK_NODE_LINK) { - return false; - } - - url = &node->as.link.url; - if (url->len == 0 || scan_scheme(url, 0) == 0) { - return false; - } - - title = &node->as.link.title; - // if it has a title, we can't treat it as an autolink: - if (title->len > 0) { - return false; - } - - link_text = node->first_child; - if (link_text == NULL) { - return false; - } - cmark_consolidate_text_nodes(link_text); - realurl = (char *)url->data; - realurllen = url->len; - if (strncmp(realurl, "mailto:", 7) == 0) { - realurl += 7; - realurllen -= 7; - } - return (realurllen == link_text->as.literal.len && - strncmp(realurl, (char *)link_text->as.literal.data, - link_text->as.literal.len) == 0); -} - -// if node is a block node, returns node. -// otherwise returns first block-level node that is an ancestor of node. -// if there is no block-level ancestor, returns NULL. -static cmark_node *get_containing_block(cmark_node *node) { - while (node) { - if (node->type >= CMARK_NODE_FIRST_BLOCK && - node->type <= CMARK_NODE_LAST_BLOCK) { - return node; - } else { - node = node->parent; - } - } - return NULL; -} - -static int S_render_node(cmark_renderer *renderer, cmark_node *node, - cmark_event_type ev_type, int options) { - cmark_node *tmp; - int list_number; - cmark_delim_type list_delim; - int numticks; - bool extra_spaces; - int i; - bool entering = (ev_type == CMARK_EVENT_ENTER); - const char *info, *code, *title; - char fencechar[2] = {'\0', '\0'}; - size_t info_len, code_len; - char listmarker[LISTMARKER_SIZE]; - char *emph_delim; - bool first_in_list_item; - bufsize_t marker_width; - bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) && - !(CMARK_OPT_HARDBREAKS & options); - - // Don't adjust tight list status til we've started the list. - // Otherwise we loose the blank line between a paragraph and - // a following list. - if (!(node->type == CMARK_NODE_ITEM && node->prev == NULL && entering)) { - tmp = get_containing_block(node); - renderer->in_tight_list_item = - tmp && // tmp might be NULL if there is no containing block - ((tmp->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(tmp->parent)) || - (tmp && tmp->parent && tmp->parent->type == CMARK_NODE_ITEM && - cmark_node_get_list_tight(tmp->parent->parent))); - } - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - LIT("> "); - renderer->begin_content = true; - cmark_strbuf_puts(renderer->prefix, "> "); - } else { - cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 2); - BLANKLINE(); - } - break; - - case CMARK_NODE_LIST: - if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK || - node->next->type == CMARK_NODE_LIST)) { - // this ensures that a following indented code block or list will be - // inteprereted correctly. - CR(); - LIT("<!-- end list -->"); - BLANKLINE(); - } - break; - - case CMARK_NODE_ITEM: - if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { - marker_width = 4; - } else { - list_number = cmark_node_get_list_start(node->parent); - list_delim = cmark_node_get_list_delim(node->parent); - tmp = node; - while (tmp->prev) { - tmp = tmp->prev; - list_number += 1; - } - // we ensure a width of at least 4 so - // we get nice transition from single digits - // to double - snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number, - list_delim == CMARK_PAREN_DELIM ? ")" : ".", - list_number < 10 ? " " : " "); - marker_width = strlen(listmarker); - } - if (entering) { - if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { - LIT(" - "); - renderer->begin_content = true; - } else { - LIT(listmarker); - renderer->begin_content = true; - } - for (i = marker_width; i--;) { - cmark_strbuf_putc(renderer->prefix, ' '); - } - } else { - cmark_strbuf_truncate(renderer->prefix, - renderer->prefix->size - marker_width); - CR(); - } - break; - - case CMARK_NODE_HEADING: - if (entering) { - for (i = cmark_node_get_heading_level(node); i > 0; i--) { - LIT("#"); - } - LIT(" "); - renderer->begin_content = true; - renderer->no_linebreaks = true; - } else { - renderer->no_linebreaks = false; - BLANKLINE(); - } - break; - - case CMARK_NODE_CODE_BLOCK: - first_in_list_item = node->prev == NULL && node->parent && - node->parent->type == CMARK_NODE_ITEM; - - if (!first_in_list_item) { - BLANKLINE(); - } - info = cmark_node_get_fence_info(node); - info_len = strlen(info); - fencechar[0] = strchr(info, '`') == NULL ? '`' : '~'; - code = cmark_node_get_literal(node); - code_len = strlen(code); - // use indented form if no info, and code doesn't - // begin or end with a blank line, and code isn't - // first thing in a list item - if (info_len == 0 && (code_len > 2 && !cmark_isspace(code[0]) && - !(cmark_isspace(code[code_len - 1]) && - cmark_isspace(code[code_len - 2]))) && - !first_in_list_item) { - LIT(" "); - cmark_strbuf_puts(renderer->prefix, " "); - OUT(cmark_node_get_literal(node), false, LITERAL); - cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4); - } else { - numticks = longest_backtick_sequence(code) + 1; - if (numticks < 3) { - numticks = 3; - } - for (i = 0; i < numticks; i++) { - LIT(fencechar); - } - LIT(" "); - OUT(info, false, LITERAL); - CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); - CR(); - for (i = 0; i < numticks; i++) { - LIT(fencechar); - } - } - BLANKLINE(); - break; - - case CMARK_NODE_HTML_BLOCK: - BLANKLINE(); - OUT(cmark_node_get_literal(node), false, LITERAL); - BLANKLINE(); - break; - - case CMARK_NODE_CUSTOM_BLOCK: - BLANKLINE(); - OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), - false, LITERAL); - BLANKLINE(); - break; - - case CMARK_NODE_THEMATIC_BREAK: - BLANKLINE(); - LIT("-----"); - BLANKLINE(); - break; - - case CMARK_NODE_PARAGRAPH: - if (!entering) { - BLANKLINE(); - } - break; - - case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); - break; - - case CMARK_NODE_LINEBREAK: - if (!(CMARK_OPT_HARDBREAKS & options)) { - LIT(" "); - } - CR(); - break; - - case CMARK_NODE_SOFTBREAK: - if (CMARK_OPT_HARDBREAKS & options) { - LIT(" "); - CR(); - } else if (!renderer->no_linebreaks && renderer->width == 0 && - !(CMARK_OPT_HARDBREAKS & options) && - !(CMARK_OPT_NOBREAKS & options)) { - CR(); - } else { - OUT(" ", allow_wrap, LITERAL); - } - break; - - case CMARK_NODE_CODE: - code = cmark_node_get_literal(node); - code_len = strlen(code); - numticks = shortest_unused_backtick_sequence(code); - extra_spaces = code_len == 0 || - code[0] == '`' || code[code_len - 1] == '`' || - code[0] == ' ' || code[code_len - 1] == ' '; - for (i = 0; i < numticks; i++) { - LIT("`"); - } - if (extra_spaces) { - LIT(" "); - } - OUT(cmark_node_get_literal(node), allow_wrap, LITERAL); - if (extra_spaces) { - LIT(" "); - } - for (i = 0; i < numticks; i++) { - LIT("`"); - } - break; - - case CMARK_NODE_HTML_INLINE: - OUT(cmark_node_get_literal(node), false, LITERAL); - break; - - case CMARK_NODE_CUSTOM_INLINE: - OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), - false, LITERAL); - break; - - case CMARK_NODE_STRONG: - if (entering) { - LIT("**"); - } else { - LIT("**"); - } - break; - - case CMARK_NODE_EMPH: - // If we have EMPH(EMPH(x)), we need to use *_x_* - // because **x** is STRONG(x): - if (node->parent && node->parent->type == CMARK_NODE_EMPH && - node->next == NULL && node->prev == NULL) { - emph_delim = "_"; - } else { - emph_delim = "*"; - } - if (entering) { - LIT(emph_delim); - } else { - LIT(emph_delim); - } - break; - - case CMARK_NODE_LINK: - if (is_autolink(node)) { - if (entering) { - LIT("<"); - if (strncmp(cmark_node_get_url(node), "mailto:", 7) == 0) { - LIT((const char *)cmark_node_get_url(node) + 7); - } else { - LIT((const char *)cmark_node_get_url(node)); - } - LIT(">"); - // return signal to skip contents of node... - return 0; - } - } else { - if (entering) { - LIT("["); - } else { - LIT("]("); - OUT(cmark_node_get_url(node), false, URL); - title = cmark_node_get_title(node); - if (strlen(title) > 0) { - LIT(" \""); - OUT(title, false, TITLE); - LIT("\""); - } - LIT(")"); - } - } - break; - - case CMARK_NODE_IMAGE: - if (entering) { - LIT("!["); - } else { - LIT("]("); - OUT(cmark_node_get_url(node), false, URL); - title = cmark_node_get_title(node); - if (strlen(title) > 0) { - OUT(" \"", allow_wrap, LITERAL); - OUT(title, false, TITLE); - LIT("\""); - } - LIT(")"); - } - break; - - default: - assert(false); - break; - } - - return 1; -} - -char *cmark_render_commonmark(cmark_node *root, int options, int width) { - if (options & CMARK_OPT_HARDBREAKS) { - // disable breaking on width, since it has - // a different meaning with OPT_HARDBREAKS - width = 0; - } - return cmark_render(root, options, width, outc, S_render_node); -} diff --git a/Pods/Down/Source/cmark/config.h b/Pods/Down/Source/cmark/config.h deleted file mode 100755 index d38c7c7..0000000 --- a/Pods/Down/Source/cmark/config.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef CMARK_CONFIG_H -#define CMARK_CONFIG_H - -#ifdef __cplusplus -extern "C" { -#endif - -#define HAVE_STDBOOL_H - -#ifdef HAVE_STDBOOL_H - #include <stdbool.h> -#elif !defined(__cplusplus) - typedef char bool; -#endif - -#define HAVE___BUILTIN_EXPECT - -#define HAVE___ATTRIBUTE__ - -#ifdef HAVE___ATTRIBUTE__ - #define CMARK_ATTRIBUTE(list) __attribute__ (list) -#else - #define CMARK_ATTRIBUTE(list) -#endif - -#ifndef CMARK_INLINE - #if defined(_MSC_VER) && !defined(__cplusplus) - #define CMARK_INLINE __inline - #else - #define CMARK_INLINE inline - #endif -#endif - -/* snprintf and vsnprintf fallbacks for MSVC before 2015, - due to Valentin Milea http://stackoverflow.com/questions/2915672/ -*/ - -#if defined(_MSC_VER) && _MSC_VER < 1900 - -#include <stdio.h> -#include <stdarg.h> - -#define snprintf c99_snprintf -#define vsnprintf c99_vsnprintf - -CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap) -{ - int count = -1; - - if (size != 0) - count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap); - if (count == -1) - count = _vscprintf(format, ap); - - return count; -} - -CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...) -{ - int count; - va_list ap; - - va_start(ap, format); - count = c99_vsnprintf(outBuf, size, format, ap); - va_end(ap); - - return count; -} - -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/entities.inc b/Pods/Down/Source/cmark/entities.inc deleted file mode 100755 index a7c36e2..0000000 --- a/Pods/Down/Source/cmark/entities.inc +++ /dev/null @@ -1,2138 +0,0 @@ -/* Autogenerated by tools/make_headers_inc.py */ - -struct cmark_entity_node { - unsigned char *entity; - unsigned char bytes[8]; -}; - -#define CMARK_ENTITY_MIN_LENGTH 2 -#define CMARK_ENTITY_MAX_LENGTH 32 -#define CMARK_NUM_ENTITIES 2125 - -static const struct cmark_entity_node cmark_entities[] = { -{(unsigned char*)"AElig", {195, 134, 0}}, -{(unsigned char*)"AMP", {38, 0}}, -{(unsigned char*)"Aacute", {195, 129, 0}}, -{(unsigned char*)"Abreve", {196, 130, 0}}, -{(unsigned char*)"Acirc", {195, 130, 0}}, -{(unsigned char*)"Acy", {208, 144, 0}}, -{(unsigned char*)"Afr", {240, 157, 148, 132, 0}}, -{(unsigned char*)"Agrave", {195, 128, 0}}, -{(unsigned char*)"Alpha", {206, 145, 0}}, -{(unsigned char*)"Amacr", {196, 128, 0}}, -{(unsigned char*)"And", {226, 169, 147, 0}}, -{(unsigned char*)"Aogon", {196, 132, 0}}, -{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}}, -{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}}, -{(unsigned char*)"Aring", {195, 133, 0}}, -{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}}, -{(unsigned char*)"Assign", {226, 137, 148, 0}}, -{(unsigned char*)"Atilde", {195, 131, 0}}, -{(unsigned char*)"Auml", {195, 132, 0}}, -{(unsigned char*)"Backslash", {226, 136, 150, 0}}, -{(unsigned char*)"Barv", {226, 171, 167, 0}}, -{(unsigned char*)"Barwed", {226, 140, 134, 0}}, -{(unsigned char*)"Bcy", {208, 145, 0}}, -{(unsigned char*)"Because", {226, 136, 181, 0}}, -{(unsigned char*)"Bernoullis", {226, 132, 172, 0}}, -{(unsigned char*)"Beta", {206, 146, 0}}, -{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}}, -{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}}, -{(unsigned char*)"Breve", {203, 152, 0}}, -{(unsigned char*)"Bscr", {226, 132, 172, 0}}, -{(unsigned char*)"Bumpeq", {226, 137, 142, 0}}, -{(unsigned char*)"CHcy", {208, 167, 0}}, -{(unsigned char*)"COPY", {194, 169, 0}}, -{(unsigned char*)"Cacute", {196, 134, 0}}, -{(unsigned char*)"Cap", {226, 139, 146, 0}}, -{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}}, -{(unsigned char*)"Cayleys", {226, 132, 173, 0}}, -{(unsigned char*)"Ccaron", {196, 140, 0}}, -{(unsigned char*)"Ccedil", {195, 135, 0}}, -{(unsigned char*)"Ccirc", {196, 136, 0}}, -{(unsigned char*)"Cconint", {226, 136, 176, 0}}, -{(unsigned char*)"Cdot", {196, 138, 0}}, -{(unsigned char*)"Cedilla", {194, 184, 0}}, -{(unsigned char*)"CenterDot", {194, 183, 0}}, -{(unsigned char*)"Cfr", {226, 132, 173, 0}}, -{(unsigned char*)"Chi", {206, 167, 0}}, -{(unsigned char*)"CircleDot", {226, 138, 153, 0}}, -{(unsigned char*)"CircleMinus", {226, 138, 150, 0}}, -{(unsigned char*)"CirclePlus", {226, 138, 149, 0}}, -{(unsigned char*)"CircleTimes", {226, 138, 151, 0}}, -{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}}, -{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}}, -{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}}, -{(unsigned char*)"Colon", {226, 136, 183, 0}}, -{(unsigned char*)"Colone", {226, 169, 180, 0}}, -{(unsigned char*)"Congruent", {226, 137, 161, 0}}, -{(unsigned char*)"Conint", {226, 136, 175, 0}}, -{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}}, -{(unsigned char*)"Copf", {226, 132, 130, 0}}, -{(unsigned char*)"Coproduct", {226, 136, 144, 0}}, -{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}}, -{(unsigned char*)"Cross", {226, 168, 175, 0}}, -{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}}, -{(unsigned char*)"Cup", {226, 139, 147, 0}}, -{(unsigned char*)"CupCap", {226, 137, 141, 0}}, -{(unsigned char*)"DD", {226, 133, 133, 0}}, -{(unsigned char*)"DDotrahd", {226, 164, 145, 0}}, -{(unsigned char*)"DJcy", {208, 130, 0}}, -{(unsigned char*)"DScy", {208, 133, 0}}, -{(unsigned char*)"DZcy", {208, 143, 0}}, -{(unsigned char*)"Dagger", {226, 128, 161, 0}}, -{(unsigned char*)"Darr", {226, 134, 161, 0}}, -{(unsigned char*)"Dashv", {226, 171, 164, 0}}, -{(unsigned char*)"Dcaron", {196, 142, 0}}, -{(unsigned char*)"Dcy", {208, 148, 0}}, -{(unsigned char*)"Del", {226, 136, 135, 0}}, -{(unsigned char*)"Delta", {206, 148, 0}}, -{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}}, -{(unsigned char*)"DiacriticalAcute", {194, 180, 0}}, -{(unsigned char*)"DiacriticalDot", {203, 153, 0}}, -{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}}, -{(unsigned char*)"DiacriticalGrave", {96, 0}}, -{(unsigned char*)"DiacriticalTilde", {203, 156, 0}}, -{(unsigned char*)"Diamond", {226, 139, 132, 0}}, -{(unsigned char*)"DifferentialD", {226, 133, 134, 0}}, -{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}}, -{(unsigned char*)"Dot", {194, 168, 0}}, -{(unsigned char*)"DotDot", {226, 131, 156, 0}}, -{(unsigned char*)"DotEqual", {226, 137, 144, 0}}, -{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}}, -{(unsigned char*)"DoubleDot", {194, 168, 0}}, -{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}}, -{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}}, -{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}}, -{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}}, -{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}}, -{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}}, -{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}}, -{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}}, -{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}}, -{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}}, -{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}}, -{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}}, -{(unsigned char*)"DownArrow", {226, 134, 147, 0}}, -{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}}, -{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}}, -{(unsigned char*)"DownBreve", {204, 145, 0}}, -{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}}, -{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}}, -{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}}, -{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}}, -{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}}, -{(unsigned char*)"DownRightVector", {226, 135, 129, 0}}, -{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}}, -{(unsigned char*)"DownTee", {226, 138, 164, 0}}, -{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}}, -{(unsigned char*)"Downarrow", {226, 135, 147, 0}}, -{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}}, -{(unsigned char*)"Dstrok", {196, 144, 0}}, -{(unsigned char*)"ENG", {197, 138, 0}}, -{(unsigned char*)"ETH", {195, 144, 0}}, -{(unsigned char*)"Eacute", {195, 137, 0}}, -{(unsigned char*)"Ecaron", {196, 154, 0}}, -{(unsigned char*)"Ecirc", {195, 138, 0}}, -{(unsigned char*)"Ecy", {208, 173, 0}}, -{(unsigned char*)"Edot", {196, 150, 0}}, -{(unsigned char*)"Efr", {240, 157, 148, 136, 0}}, -{(unsigned char*)"Egrave", {195, 136, 0}}, -{(unsigned char*)"Element", {226, 136, 136, 0}}, -{(unsigned char*)"Emacr", {196, 146, 0}}, -{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}}, -{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}}, -{(unsigned char*)"Eogon", {196, 152, 0}}, -{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}}, -{(unsigned char*)"Epsilon", {206, 149, 0}}, -{(unsigned char*)"Equal", {226, 169, 181, 0}}, -{(unsigned char*)"EqualTilde", {226, 137, 130, 0}}, -{(unsigned char*)"Equilibrium", {226, 135, 140, 0}}, -{(unsigned char*)"Escr", {226, 132, 176, 0}}, -{(unsigned char*)"Esim", {226, 169, 179, 0}}, -{(unsigned char*)"Eta", {206, 151, 0}}, -{(unsigned char*)"Euml", {195, 139, 0}}, -{(unsigned char*)"Exists", {226, 136, 131, 0}}, -{(unsigned char*)"ExponentialE", {226, 133, 135, 0}}, -{(unsigned char*)"Fcy", {208, 164, 0}}, -{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}}, -{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}}, -{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}}, -{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}}, -{(unsigned char*)"ForAll", {226, 136, 128, 0}}, -{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}}, -{(unsigned char*)"Fscr", {226, 132, 177, 0}}, -{(unsigned char*)"GJcy", {208, 131, 0}}, -{(unsigned char*)"GT", {62, 0}}, -{(unsigned char*)"Gamma", {206, 147, 0}}, -{(unsigned char*)"Gammad", {207, 156, 0}}, -{(unsigned char*)"Gbreve", {196, 158, 0}}, -{(unsigned char*)"Gcedil", {196, 162, 0}}, -{(unsigned char*)"Gcirc", {196, 156, 0}}, -{(unsigned char*)"Gcy", {208, 147, 0}}, -{(unsigned char*)"Gdot", {196, 160, 0}}, -{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}}, -{(unsigned char*)"Gg", {226, 139, 153, 0}}, -{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}}, -{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}}, -{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}}, -{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}}, -{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}}, -{(unsigned char*)"GreaterLess", {226, 137, 183, 0}}, -{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}}, -{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}}, -{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}}, -{(unsigned char*)"Gt", {226, 137, 171, 0}}, -{(unsigned char*)"HARDcy", {208, 170, 0}}, -{(unsigned char*)"Hacek", {203, 135, 0}}, -{(unsigned char*)"Hat", {94, 0}}, -{(unsigned char*)"Hcirc", {196, 164, 0}}, -{(unsigned char*)"Hfr", {226, 132, 140, 0}}, -{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}}, -{(unsigned char*)"Hopf", {226, 132, 141, 0}}, -{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}}, -{(unsigned char*)"Hscr", {226, 132, 139, 0}}, -{(unsigned char*)"Hstrok", {196, 166, 0}}, -{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}}, -{(unsigned char*)"HumpEqual", {226, 137, 143, 0}}, -{(unsigned char*)"IEcy", {208, 149, 0}}, -{(unsigned char*)"IJlig", {196, 178, 0}}, -{(unsigned char*)"IOcy", {208, 129, 0}}, -{(unsigned char*)"Iacute", {195, 141, 0}}, -{(unsigned char*)"Icirc", {195, 142, 0}}, -{(unsigned char*)"Icy", {208, 152, 0}}, -{(unsigned char*)"Idot", {196, 176, 0}}, -{(unsigned char*)"Ifr", {226, 132, 145, 0}}, -{(unsigned char*)"Igrave", {195, 140, 0}}, -{(unsigned char*)"Im", {226, 132, 145, 0}}, -{(unsigned char*)"Imacr", {196, 170, 0}}, -{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}}, -{(unsigned char*)"Implies", {226, 135, 146, 0}}, -{(unsigned char*)"Int", {226, 136, 172, 0}}, -{(unsigned char*)"Integral", {226, 136, 171, 0}}, -{(unsigned char*)"Intersection", {226, 139, 130, 0}}, -{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}}, -{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}}, -{(unsigned char*)"Iogon", {196, 174, 0}}, -{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}}, -{(unsigned char*)"Iota", {206, 153, 0}}, -{(unsigned char*)"Iscr", {226, 132, 144, 0}}, -{(unsigned char*)"Itilde", {196, 168, 0}}, -{(unsigned char*)"Iukcy", {208, 134, 0}}, -{(unsigned char*)"Iuml", {195, 143, 0}}, -{(unsigned char*)"Jcirc", {196, 180, 0}}, -{(unsigned char*)"Jcy", {208, 153, 0}}, -{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}}, -{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}}, -{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}}, -{(unsigned char*)"Jsercy", {208, 136, 0}}, -{(unsigned char*)"Jukcy", {208, 132, 0}}, -{(unsigned char*)"KHcy", {208, 165, 0}}, -{(unsigned char*)"KJcy", {208, 140, 0}}, -{(unsigned char*)"Kappa", {206, 154, 0}}, -{(unsigned char*)"Kcedil", {196, 182, 0}}, -{(unsigned char*)"Kcy", {208, 154, 0}}, -{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}}, -{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}}, -{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}}, -{(unsigned char*)"LJcy", {208, 137, 0}}, -{(unsigned char*)"LT", {60, 0}}, -{(unsigned char*)"Lacute", {196, 185, 0}}, -{(unsigned char*)"Lambda", {206, 155, 0}}, -{(unsigned char*)"Lang", {226, 159, 170, 0}}, -{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}}, -{(unsigned char*)"Larr", {226, 134, 158, 0}}, -{(unsigned char*)"Lcaron", {196, 189, 0}}, -{(unsigned char*)"Lcedil", {196, 187, 0}}, -{(unsigned char*)"Lcy", {208, 155, 0}}, -{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}}, -{(unsigned char*)"LeftArrow", {226, 134, 144, 0}}, -{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}}, -{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}}, -{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}}, -{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}}, -{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}}, -{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}}, -{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}}, -{(unsigned char*)"LeftFloor", {226, 140, 138, 0}}, -{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}}, -{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}}, -{(unsigned char*)"LeftTee", {226, 138, 163, 0}}, -{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}}, -{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}}, -{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}}, -{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}}, -{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}}, -{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}}, -{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}}, -{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}}, -{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}}, -{(unsigned char*)"LeftVector", {226, 134, 188, 0}}, -{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}}, -{(unsigned char*)"Leftarrow", {226, 135, 144, 0}}, -{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}}, -{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}}, -{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}}, -{(unsigned char*)"LessGreater", {226, 137, 182, 0}}, -{(unsigned char*)"LessLess", {226, 170, 161, 0}}, -{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}}, -{(unsigned char*)"LessTilde", {226, 137, 178, 0}}, -{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}}, -{(unsigned char*)"Ll", {226, 139, 152, 0}}, -{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}}, -{(unsigned char*)"Lmidot", {196, 191, 0}}, -{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}}, -{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}}, -{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}}, -{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}}, -{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}}, -{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}}, -{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}}, -{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}}, -{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}}, -{(unsigned char*)"Lscr", {226, 132, 146, 0}}, -{(unsigned char*)"Lsh", {226, 134, 176, 0}}, -{(unsigned char*)"Lstrok", {197, 129, 0}}, -{(unsigned char*)"Lt", {226, 137, 170, 0}}, -{(unsigned char*)"Map", {226, 164, 133, 0}}, -{(unsigned char*)"Mcy", {208, 156, 0}}, -{(unsigned char*)"MediumSpace", {226, 129, 159, 0}}, -{(unsigned char*)"Mellintrf", {226, 132, 179, 0}}, -{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}}, -{(unsigned char*)"MinusPlus", {226, 136, 147, 0}}, -{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}}, -{(unsigned char*)"Mscr", {226, 132, 179, 0}}, -{(unsigned char*)"Mu", {206, 156, 0}}, -{(unsigned char*)"NJcy", {208, 138, 0}}, -{(unsigned char*)"Nacute", {197, 131, 0}}, -{(unsigned char*)"Ncaron", {197, 135, 0}}, -{(unsigned char*)"Ncedil", {197, 133, 0}}, -{(unsigned char*)"Ncy", {208, 157, 0}}, -{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}}, -{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}}, -{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}}, -{(unsigned char*)"NewLine", {10, 0}}, -{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}}, -{(unsigned char*)"NoBreak", {226, 129, 160, 0}}, -{(unsigned char*)"NonBreakingSpace", {194, 160, 0}}, -{(unsigned char*)"Nopf", {226, 132, 149, 0}}, -{(unsigned char*)"Not", {226, 171, 172, 0}}, -{(unsigned char*)"NotCongruent", {226, 137, 162, 0}}, -{(unsigned char*)"NotCupCap", {226, 137, 173, 0}}, -{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}}, -{(unsigned char*)"NotElement", {226, 136, 137, 0}}, -{(unsigned char*)"NotEqual", {226, 137, 160, 0}}, -{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}}, -{(unsigned char*)"NotExists", {226, 136, 132, 0}}, -{(unsigned char*)"NotGreater", {226, 137, 175, 0}}, -{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}}, -{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}}, -{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}}, -{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}}, -{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}}, -{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}}, -{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}}, -{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}}, -{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}}, -{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}}, -{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}}, -{(unsigned char*)"NotLess", {226, 137, 174, 0}}, -{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}}, -{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}}, -{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}}, -{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}}, -{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}}, -{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}}, -{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}}, -{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}}, -{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}}, -{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}}, -{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}}, -{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}}, -{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}}, -{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}}, -{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}}, -{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}}, -{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}}, -{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}}, -{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}}, -{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}}, -{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}}, -{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}}, -{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}}, -{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}}, -{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}}, -{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}}, -{(unsigned char*)"NotTilde", {226, 137, 129, 0}}, -{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}}, -{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}}, -{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}}, -{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}}, -{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}}, -{(unsigned char*)"Ntilde", {195, 145, 0}}, -{(unsigned char*)"Nu", {206, 157, 0}}, -{(unsigned char*)"OElig", {197, 146, 0}}, -{(unsigned char*)"Oacute", {195, 147, 0}}, -{(unsigned char*)"Ocirc", {195, 148, 0}}, -{(unsigned char*)"Ocy", {208, 158, 0}}, -{(unsigned char*)"Odblac", {197, 144, 0}}, -{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}}, -{(unsigned char*)"Ograve", {195, 146, 0}}, -{(unsigned char*)"Omacr", {197, 140, 0}}, -{(unsigned char*)"Omega", {206, 169, 0}}, -{(unsigned char*)"Omicron", {206, 159, 0}}, -{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}}, -{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}}, -{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}}, -{(unsigned char*)"Or", {226, 169, 148, 0}}, -{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}}, -{(unsigned char*)"Oslash", {195, 152, 0}}, -{(unsigned char*)"Otilde", {195, 149, 0}}, -{(unsigned char*)"Otimes", {226, 168, 183, 0}}, -{(unsigned char*)"Ouml", {195, 150, 0}}, -{(unsigned char*)"OverBar", {226, 128, 190, 0}}, -{(unsigned char*)"OverBrace", {226, 143, 158, 0}}, -{(unsigned char*)"OverBracket", {226, 142, 180, 0}}, -{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}}, -{(unsigned char*)"PartialD", {226, 136, 130, 0}}, -{(unsigned char*)"Pcy", {208, 159, 0}}, -{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}}, -{(unsigned char*)"Phi", {206, 166, 0}}, -{(unsigned char*)"Pi", {206, 160, 0}}, -{(unsigned char*)"PlusMinus", {194, 177, 0}}, -{(unsigned char*)"Poincareplane", {226, 132, 140, 0}}, -{(unsigned char*)"Popf", {226, 132, 153, 0}}, -{(unsigned char*)"Pr", {226, 170, 187, 0}}, -{(unsigned char*)"Precedes", {226, 137, 186, 0}}, -{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}}, -{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}}, -{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}}, -{(unsigned char*)"Prime", {226, 128, 179, 0}}, -{(unsigned char*)"Product", {226, 136, 143, 0}}, -{(unsigned char*)"Proportion", {226, 136, 183, 0}}, -{(unsigned char*)"Proportional", {226, 136, 157, 0}}, -{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}}, -{(unsigned char*)"Psi", {206, 168, 0}}, -{(unsigned char*)"QUOT", {34, 0}}, -{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}}, -{(unsigned char*)"Qopf", {226, 132, 154, 0}}, -{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}}, -{(unsigned char*)"RBarr", {226, 164, 144, 0}}, -{(unsigned char*)"REG", {194, 174, 0}}, -{(unsigned char*)"Racute", {197, 148, 0}}, -{(unsigned char*)"Rang", {226, 159, 171, 0}}, -{(unsigned char*)"Rarr", {226, 134, 160, 0}}, -{(unsigned char*)"Rarrtl", {226, 164, 150, 0}}, -{(unsigned char*)"Rcaron", {197, 152, 0}}, -{(unsigned char*)"Rcedil", {197, 150, 0}}, -{(unsigned char*)"Rcy", {208, 160, 0}}, -{(unsigned char*)"Re", {226, 132, 156, 0}}, -{(unsigned char*)"ReverseElement", {226, 136, 139, 0}}, -{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}}, -{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}}, -{(unsigned char*)"Rfr", {226, 132, 156, 0}}, -{(unsigned char*)"Rho", {206, 161, 0}}, -{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}}, -{(unsigned char*)"RightArrow", {226, 134, 146, 0}}, -{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}}, -{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}}, -{(unsigned char*)"RightCeiling", {226, 140, 137, 0}}, -{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}}, -{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}}, -{(unsigned char*)"RightDownVector", {226, 135, 130, 0}}, -{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}}, -{(unsigned char*)"RightFloor", {226, 140, 139, 0}}, -{(unsigned char*)"RightTee", {226, 138, 162, 0}}, -{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}}, -{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}}, -{(unsigned char*)"RightTriangle", {226, 138, 179, 0}}, -{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}}, -{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}}, -{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}}, -{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}}, -{(unsigned char*)"RightUpVector", {226, 134, 190, 0}}, -{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}}, -{(unsigned char*)"RightVector", {226, 135, 128, 0}}, -{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}}, -{(unsigned char*)"Rightarrow", {226, 135, 146, 0}}, -{(unsigned char*)"Ropf", {226, 132, 157, 0}}, -{(unsigned char*)"RoundImplies", {226, 165, 176, 0}}, -{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}}, -{(unsigned char*)"Rscr", {226, 132, 155, 0}}, -{(unsigned char*)"Rsh", {226, 134, 177, 0}}, -{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}}, -{(unsigned char*)"SHCHcy", {208, 169, 0}}, -{(unsigned char*)"SHcy", {208, 168, 0}}, -{(unsigned char*)"SOFTcy", {208, 172, 0}}, -{(unsigned char*)"Sacute", {197, 154, 0}}, -{(unsigned char*)"Sc", {226, 170, 188, 0}}, -{(unsigned char*)"Scaron", {197, 160, 0}}, -{(unsigned char*)"Scedil", {197, 158, 0}}, -{(unsigned char*)"Scirc", {197, 156, 0}}, -{(unsigned char*)"Scy", {208, 161, 0}}, -{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}}, -{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}}, -{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}}, -{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}}, -{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}}, -{(unsigned char*)"Sigma", {206, 163, 0}}, -{(unsigned char*)"SmallCircle", {226, 136, 152, 0}}, -{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}}, -{(unsigned char*)"Sqrt", {226, 136, 154, 0}}, -{(unsigned char*)"Square", {226, 150, 161, 0}}, -{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}}, -{(unsigned char*)"SquareSubset", {226, 138, 143, 0}}, -{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}}, -{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}}, -{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}}, -{(unsigned char*)"SquareUnion", {226, 138, 148, 0}}, -{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}}, -{(unsigned char*)"Star", {226, 139, 134, 0}}, -{(unsigned char*)"Sub", {226, 139, 144, 0}}, -{(unsigned char*)"Subset", {226, 139, 144, 0}}, -{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}}, -{(unsigned char*)"Succeeds", {226, 137, 187, 0}}, -{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}}, -{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}}, -{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}}, -{(unsigned char*)"SuchThat", {226, 136, 139, 0}}, -{(unsigned char*)"Sum", {226, 136, 145, 0}}, -{(unsigned char*)"Sup", {226, 139, 145, 0}}, -{(unsigned char*)"Superset", {226, 138, 131, 0}}, -{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}}, -{(unsigned char*)"Supset", {226, 139, 145, 0}}, -{(unsigned char*)"THORN", {195, 158, 0}}, -{(unsigned char*)"TRADE", {226, 132, 162, 0}}, -{(unsigned char*)"TSHcy", {208, 139, 0}}, -{(unsigned char*)"TScy", {208, 166, 0}}, -{(unsigned char*)"Tab", {9, 0}}, -{(unsigned char*)"Tau", {206, 164, 0}}, -{(unsigned char*)"Tcaron", {197, 164, 0}}, -{(unsigned char*)"Tcedil", {197, 162, 0}}, -{(unsigned char*)"Tcy", {208, 162, 0}}, -{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}}, -{(unsigned char*)"Therefore", {226, 136, 180, 0}}, -{(unsigned char*)"Theta", {206, 152, 0}}, -{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}}, -{(unsigned char*)"ThinSpace", {226, 128, 137, 0}}, -{(unsigned char*)"Tilde", {226, 136, 188, 0}}, -{(unsigned char*)"TildeEqual", {226, 137, 131, 0}}, -{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}}, -{(unsigned char*)"TildeTilde", {226, 137, 136, 0}}, -{(unsigned char*)"Topf", {240, 157, 149, 139, 0}}, -{(unsigned char*)"TripleDot", {226, 131, 155, 0}}, -{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}}, -{(unsigned char*)"Tstrok", {197, 166, 0}}, -{(unsigned char*)"Uacute", {195, 154, 0}}, -{(unsigned char*)"Uarr", {226, 134, 159, 0}}, -{(unsigned char*)"Uarrocir", {226, 165, 137, 0}}, -{(unsigned char*)"Ubrcy", {208, 142, 0}}, -{(unsigned char*)"Ubreve", {197, 172, 0}}, -{(unsigned char*)"Ucirc", {195, 155, 0}}, -{(unsigned char*)"Ucy", {208, 163, 0}}, -{(unsigned char*)"Udblac", {197, 176, 0}}, -{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}}, -{(unsigned char*)"Ugrave", {195, 153, 0}}, -{(unsigned char*)"Umacr", {197, 170, 0}}, -{(unsigned char*)"UnderBar", {95, 0}}, -{(unsigned char*)"UnderBrace", {226, 143, 159, 0}}, -{(unsigned char*)"UnderBracket", {226, 142, 181, 0}}, -{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}}, -{(unsigned char*)"Union", {226, 139, 131, 0}}, -{(unsigned char*)"UnionPlus", {226, 138, 142, 0}}, -{(unsigned char*)"Uogon", {197, 178, 0}}, -{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}}, -{(unsigned char*)"UpArrow", {226, 134, 145, 0}}, -{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}}, -{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}}, -{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}}, -{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}}, -{(unsigned char*)"UpTee", {226, 138, 165, 0}}, -{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}}, -{(unsigned char*)"Uparrow", {226, 135, 145, 0}}, -{(unsigned char*)"Updownarrow", {226, 135, 149, 0}}, -{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}}, -{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}}, -{(unsigned char*)"Upsi", {207, 146, 0}}, -{(unsigned char*)"Upsilon", {206, 165, 0}}, -{(unsigned char*)"Uring", {197, 174, 0}}, -{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}}, -{(unsigned char*)"Utilde", {197, 168, 0}}, -{(unsigned char*)"Uuml", {195, 156, 0}}, -{(unsigned char*)"VDash", {226, 138, 171, 0}}, -{(unsigned char*)"Vbar", {226, 171, 171, 0}}, -{(unsigned char*)"Vcy", {208, 146, 0}}, -{(unsigned char*)"Vdash", {226, 138, 169, 0}}, -{(unsigned char*)"Vdashl", {226, 171, 166, 0}}, -{(unsigned char*)"Vee", {226, 139, 129, 0}}, -{(unsigned char*)"Verbar", {226, 128, 150, 0}}, -{(unsigned char*)"Vert", {226, 128, 150, 0}}, -{(unsigned char*)"VerticalBar", {226, 136, 163, 0}}, -{(unsigned char*)"VerticalLine", {124, 0}}, -{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}}, -{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}}, -{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}}, -{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}}, -{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}}, -{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}}, -{(unsigned char*)"Vvdash", {226, 138, 170, 0}}, -{(unsigned char*)"Wcirc", {197, 180, 0}}, -{(unsigned char*)"Wedge", {226, 139, 128, 0}}, -{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}}, -{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}}, -{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}}, -{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}}, -{(unsigned char*)"Xi", {206, 158, 0}}, -{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}}, -{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}}, -{(unsigned char*)"YAcy", {208, 175, 0}}, -{(unsigned char*)"YIcy", {208, 135, 0}}, -{(unsigned char*)"YUcy", {208, 174, 0}}, -{(unsigned char*)"Yacute", {195, 157, 0}}, -{(unsigned char*)"Ycirc", {197, 182, 0}}, -{(unsigned char*)"Ycy", {208, 171, 0}}, -{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}}, -{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}}, -{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}}, -{(unsigned char*)"Yuml", {197, 184, 0}}, -{(unsigned char*)"ZHcy", {208, 150, 0}}, -{(unsigned char*)"Zacute", {197, 185, 0}}, -{(unsigned char*)"Zcaron", {197, 189, 0}}, -{(unsigned char*)"Zcy", {208, 151, 0}}, -{(unsigned char*)"Zdot", {197, 187, 0}}, -{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}}, -{(unsigned char*)"Zeta", {206, 150, 0}}, -{(unsigned char*)"Zfr", {226, 132, 168, 0}}, -{(unsigned char*)"Zopf", {226, 132, 164, 0}}, -{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}}, -{(unsigned char*)"aacute", {195, 161, 0}}, -{(unsigned char*)"abreve", {196, 131, 0}}, -{(unsigned char*)"ac", {226, 136, 190, 0}}, -{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}}, -{(unsigned char*)"acd", {226, 136, 191, 0}}, -{(unsigned char*)"acirc", {195, 162, 0}}, -{(unsigned char*)"acute", {194, 180, 0}}, -{(unsigned char*)"acy", {208, 176, 0}}, -{(unsigned char*)"aelig", {195, 166, 0}}, -{(unsigned char*)"af", {226, 129, 161, 0}}, -{(unsigned char*)"afr", {240, 157, 148, 158, 0}}, -{(unsigned char*)"agrave", {195, 160, 0}}, -{(unsigned char*)"alefsym", {226, 132, 181, 0}}, -{(unsigned char*)"aleph", {226, 132, 181, 0}}, -{(unsigned char*)"alpha", {206, 177, 0}}, -{(unsigned char*)"amacr", {196, 129, 0}}, -{(unsigned char*)"amalg", {226, 168, 191, 0}}, -{(unsigned char*)"amp", {38, 0}}, -{(unsigned char*)"and", {226, 136, 167, 0}}, -{(unsigned char*)"andand", {226, 169, 149, 0}}, -{(unsigned char*)"andd", {226, 169, 156, 0}}, -{(unsigned char*)"andslope", {226, 169, 152, 0}}, -{(unsigned char*)"andv", {226, 169, 154, 0}}, -{(unsigned char*)"ang", {226, 136, 160, 0}}, -{(unsigned char*)"ange", {226, 166, 164, 0}}, -{(unsigned char*)"angle", {226, 136, 160, 0}}, -{(unsigned char*)"angmsd", {226, 136, 161, 0}}, -{(unsigned char*)"angmsdaa", {226, 166, 168, 0}}, -{(unsigned char*)"angmsdab", {226, 166, 169, 0}}, -{(unsigned char*)"angmsdac", {226, 166, 170, 0}}, -{(unsigned char*)"angmsdad", {226, 166, 171, 0}}, -{(unsigned char*)"angmsdae", {226, 166, 172, 0}}, -{(unsigned char*)"angmsdaf", {226, 166, 173, 0}}, -{(unsigned char*)"angmsdag", {226, 166, 174, 0}}, -{(unsigned char*)"angmsdah", {226, 166, 175, 0}}, -{(unsigned char*)"angrt", {226, 136, 159, 0}}, -{(unsigned char*)"angrtvb", {226, 138, 190, 0}}, -{(unsigned char*)"angrtvbd", {226, 166, 157, 0}}, -{(unsigned char*)"angsph", {226, 136, 162, 0}}, -{(unsigned char*)"angst", {195, 133, 0}}, -{(unsigned char*)"angzarr", {226, 141, 188, 0}}, -{(unsigned char*)"aogon", {196, 133, 0}}, -{(unsigned char*)"aopf", {240, 157, 149, 146, 0}}, -{(unsigned char*)"ap", {226, 137, 136, 0}}, -{(unsigned char*)"apE", {226, 169, 176, 0}}, -{(unsigned char*)"apacir", {226, 169, 175, 0}}, -{(unsigned char*)"ape", {226, 137, 138, 0}}, -{(unsigned char*)"apid", {226, 137, 139, 0}}, -{(unsigned char*)"apos", {39, 0}}, -{(unsigned char*)"approx", {226, 137, 136, 0}}, -{(unsigned char*)"approxeq", {226, 137, 138, 0}}, -{(unsigned char*)"aring", {195, 165, 0}}, -{(unsigned char*)"ascr", {240, 157, 146, 182, 0}}, -{(unsigned char*)"ast", {42, 0}}, -{(unsigned char*)"asymp", {226, 137, 136, 0}}, -{(unsigned char*)"asympeq", {226, 137, 141, 0}}, -{(unsigned char*)"atilde", {195, 163, 0}}, -{(unsigned char*)"auml", {195, 164, 0}}, -{(unsigned char*)"awconint", {226, 136, 179, 0}}, -{(unsigned char*)"awint", {226, 168, 145, 0}}, -{(unsigned char*)"bNot", {226, 171, 173, 0}}, -{(unsigned char*)"backcong", {226, 137, 140, 0}}, -{(unsigned char*)"backepsilon", {207, 182, 0}}, -{(unsigned char*)"backprime", {226, 128, 181, 0}}, -{(unsigned char*)"backsim", {226, 136, 189, 0}}, -{(unsigned char*)"backsimeq", {226, 139, 141, 0}}, -{(unsigned char*)"barvee", {226, 138, 189, 0}}, -{(unsigned char*)"barwed", {226, 140, 133, 0}}, -{(unsigned char*)"barwedge", {226, 140, 133, 0}}, -{(unsigned char*)"bbrk", {226, 142, 181, 0}}, -{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}}, -{(unsigned char*)"bcong", {226, 137, 140, 0}}, -{(unsigned char*)"bcy", {208, 177, 0}}, -{(unsigned char*)"bdquo", {226, 128, 158, 0}}, -{(unsigned char*)"becaus", {226, 136, 181, 0}}, -{(unsigned char*)"because", {226, 136, 181, 0}}, -{(unsigned char*)"bemptyv", {226, 166, 176, 0}}, -{(unsigned char*)"bepsi", {207, 182, 0}}, -{(unsigned char*)"bernou", {226, 132, 172, 0}}, -{(unsigned char*)"beta", {206, 178, 0}}, -{(unsigned char*)"beth", {226, 132, 182, 0}}, -{(unsigned char*)"between", {226, 137, 172, 0}}, -{(unsigned char*)"bfr", {240, 157, 148, 159, 0}}, -{(unsigned char*)"bigcap", {226, 139, 130, 0}}, -{(unsigned char*)"bigcirc", {226, 151, 175, 0}}, -{(unsigned char*)"bigcup", {226, 139, 131, 0}}, -{(unsigned char*)"bigodot", {226, 168, 128, 0}}, -{(unsigned char*)"bigoplus", {226, 168, 129, 0}}, -{(unsigned char*)"bigotimes", {226, 168, 130, 0}}, -{(unsigned char*)"bigsqcup", {226, 168, 134, 0}}, -{(unsigned char*)"bigstar", {226, 152, 133, 0}}, -{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}}, -{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}}, -{(unsigned char*)"biguplus", {226, 168, 132, 0}}, -{(unsigned char*)"bigvee", {226, 139, 129, 0}}, -{(unsigned char*)"bigwedge", {226, 139, 128, 0}}, -{(unsigned char*)"bkarow", {226, 164, 141, 0}}, -{(unsigned char*)"blacklozenge", {226, 167, 171, 0}}, -{(unsigned char*)"blacksquare", {226, 150, 170, 0}}, -{(unsigned char*)"blacktriangle", {226, 150, 180, 0}}, -{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}}, -{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}}, -{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}}, -{(unsigned char*)"blank", {226, 144, 163, 0}}, -{(unsigned char*)"blk12", {226, 150, 146, 0}}, -{(unsigned char*)"blk14", {226, 150, 145, 0}}, -{(unsigned char*)"blk34", {226, 150, 147, 0}}, -{(unsigned char*)"block", {226, 150, 136, 0}}, -{(unsigned char*)"bne", {61, 226, 131, 165, 0}}, -{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}}, -{(unsigned char*)"bnot", {226, 140, 144, 0}}, -{(unsigned char*)"bopf", {240, 157, 149, 147, 0}}, -{(unsigned char*)"bot", {226, 138, 165, 0}}, -{(unsigned char*)"bottom", {226, 138, 165, 0}}, -{(unsigned char*)"bowtie", {226, 139, 136, 0}}, -{(unsigned char*)"boxDL", {226, 149, 151, 0}}, -{(unsigned char*)"boxDR", {226, 149, 148, 0}}, -{(unsigned char*)"boxDl", {226, 149, 150, 0}}, -{(unsigned char*)"boxDr", {226, 149, 147, 0}}, -{(unsigned char*)"boxH", {226, 149, 144, 0}}, -{(unsigned char*)"boxHD", {226, 149, 166, 0}}, -{(unsigned char*)"boxHU", {226, 149, 169, 0}}, -{(unsigned char*)"boxHd", {226, 149, 164, 0}}, -{(unsigned char*)"boxHu", {226, 149, 167, 0}}, -{(unsigned char*)"boxUL", {226, 149, 157, 0}}, -{(unsigned char*)"boxUR", {226, 149, 154, 0}}, -{(unsigned char*)"boxUl", {226, 149, 156, 0}}, -{(unsigned char*)"boxUr", {226, 149, 153, 0}}, -{(unsigned char*)"boxV", {226, 149, 145, 0}}, -{(unsigned char*)"boxVH", {226, 149, 172, 0}}, -{(unsigned char*)"boxVL", {226, 149, 163, 0}}, -{(unsigned char*)"boxVR", {226, 149, 160, 0}}, -{(unsigned char*)"boxVh", {226, 149, 171, 0}}, -{(unsigned char*)"boxVl", {226, 149, 162, 0}}, -{(unsigned char*)"boxVr", {226, 149, 159, 0}}, -{(unsigned char*)"boxbox", {226, 167, 137, 0}}, -{(unsigned char*)"boxdL", {226, 149, 149, 0}}, -{(unsigned char*)"boxdR", {226, 149, 146, 0}}, -{(unsigned char*)"boxdl", {226, 148, 144, 0}}, -{(unsigned char*)"boxdr", {226, 148, 140, 0}}, -{(unsigned char*)"boxh", {226, 148, 128, 0}}, -{(unsigned char*)"boxhD", {226, 149, 165, 0}}, -{(unsigned char*)"boxhU", {226, 149, 168, 0}}, -{(unsigned char*)"boxhd", {226, 148, 172, 0}}, -{(unsigned char*)"boxhu", {226, 148, 180, 0}}, -{(unsigned char*)"boxminus", {226, 138, 159, 0}}, -{(unsigned char*)"boxplus", {226, 138, 158, 0}}, -{(unsigned char*)"boxtimes", {226, 138, 160, 0}}, -{(unsigned char*)"boxuL", {226, 149, 155, 0}}, -{(unsigned char*)"boxuR", {226, 149, 152, 0}}, -{(unsigned char*)"boxul", {226, 148, 152, 0}}, -{(unsigned char*)"boxur", {226, 148, 148, 0}}, -{(unsigned char*)"boxv", {226, 148, 130, 0}}, -{(unsigned char*)"boxvH", {226, 149, 170, 0}}, -{(unsigned char*)"boxvL", {226, 149, 161, 0}}, -{(unsigned char*)"boxvR", {226, 149, 158, 0}}, -{(unsigned char*)"boxvh", {226, 148, 188, 0}}, -{(unsigned char*)"boxvl", {226, 148, 164, 0}}, -{(unsigned char*)"boxvr", {226, 148, 156, 0}}, -{(unsigned char*)"bprime", {226, 128, 181, 0}}, -{(unsigned char*)"breve", {203, 152, 0}}, -{(unsigned char*)"brvbar", {194, 166, 0}}, -{(unsigned char*)"bscr", {240, 157, 146, 183, 0}}, -{(unsigned char*)"bsemi", {226, 129, 143, 0}}, -{(unsigned char*)"bsim", {226, 136, 189, 0}}, -{(unsigned char*)"bsime", {226, 139, 141, 0}}, -{(unsigned char*)"bsol", {92, 0}}, -{(unsigned char*)"bsolb", {226, 167, 133, 0}}, -{(unsigned char*)"bsolhsub", {226, 159, 136, 0}}, -{(unsigned char*)"bull", {226, 128, 162, 0}}, -{(unsigned char*)"bullet", {226, 128, 162, 0}}, -{(unsigned char*)"bump", {226, 137, 142, 0}}, -{(unsigned char*)"bumpE", {226, 170, 174, 0}}, -{(unsigned char*)"bumpe", {226, 137, 143, 0}}, -{(unsigned char*)"bumpeq", {226, 137, 143, 0}}, -{(unsigned char*)"cacute", {196, 135, 0}}, -{(unsigned char*)"cap", {226, 136, 169, 0}}, -{(unsigned char*)"capand", {226, 169, 132, 0}}, -{(unsigned char*)"capbrcup", {226, 169, 137, 0}}, -{(unsigned char*)"capcap", {226, 169, 139, 0}}, -{(unsigned char*)"capcup", {226, 169, 135, 0}}, -{(unsigned char*)"capdot", {226, 169, 128, 0}}, -{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}}, -{(unsigned char*)"caret", {226, 129, 129, 0}}, -{(unsigned char*)"caron", {203, 135, 0}}, -{(unsigned char*)"ccaps", {226, 169, 141, 0}}, -{(unsigned char*)"ccaron", {196, 141, 0}}, -{(unsigned char*)"ccedil", {195, 167, 0}}, -{(unsigned char*)"ccirc", {196, 137, 0}}, -{(unsigned char*)"ccups", {226, 169, 140, 0}}, -{(unsigned char*)"ccupssm", {226, 169, 144, 0}}, -{(unsigned char*)"cdot", {196, 139, 0}}, -{(unsigned char*)"cedil", {194, 184, 0}}, -{(unsigned char*)"cemptyv", {226, 166, 178, 0}}, -{(unsigned char*)"cent", {194, 162, 0}}, -{(unsigned char*)"centerdot", {194, 183, 0}}, -{(unsigned char*)"cfr", {240, 157, 148, 160, 0}}, -{(unsigned char*)"chcy", {209, 135, 0}}, -{(unsigned char*)"check", {226, 156, 147, 0}}, -{(unsigned char*)"checkmark", {226, 156, 147, 0}}, -{(unsigned char*)"chi", {207, 135, 0}}, -{(unsigned char*)"cir", {226, 151, 139, 0}}, -{(unsigned char*)"cirE", {226, 167, 131, 0}}, -{(unsigned char*)"circ", {203, 134, 0}}, -{(unsigned char*)"circeq", {226, 137, 151, 0}}, -{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}}, -{(unsigned char*)"circlearrowright", {226, 134, 187, 0}}, -{(unsigned char*)"circledR", {194, 174, 0}}, -{(unsigned char*)"circledS", {226, 147, 136, 0}}, -{(unsigned char*)"circledast", {226, 138, 155, 0}}, -{(unsigned char*)"circledcirc", {226, 138, 154, 0}}, -{(unsigned char*)"circleddash", {226, 138, 157, 0}}, -{(unsigned char*)"cire", {226, 137, 151, 0}}, -{(unsigned char*)"cirfnint", {226, 168, 144, 0}}, -{(unsigned char*)"cirmid", {226, 171, 175, 0}}, -{(unsigned char*)"cirscir", {226, 167, 130, 0}}, -{(unsigned char*)"clubs", {226, 153, 163, 0}}, -{(unsigned char*)"clubsuit", {226, 153, 163, 0}}, -{(unsigned char*)"colon", {58, 0}}, -{(unsigned char*)"colone", {226, 137, 148, 0}}, -{(unsigned char*)"coloneq", {226, 137, 148, 0}}, -{(unsigned char*)"comma", {44, 0}}, -{(unsigned char*)"commat", {64, 0}}, -{(unsigned char*)"comp", {226, 136, 129, 0}}, -{(unsigned char*)"compfn", {226, 136, 152, 0}}, -{(unsigned char*)"complement", {226, 136, 129, 0}}, -{(unsigned char*)"complexes", {226, 132, 130, 0}}, -{(unsigned char*)"cong", {226, 137, 133, 0}}, -{(unsigned char*)"congdot", {226, 169, 173, 0}}, -{(unsigned char*)"conint", {226, 136, 174, 0}}, -{(unsigned char*)"copf", {240, 157, 149, 148, 0}}, -{(unsigned char*)"coprod", {226, 136, 144, 0}}, -{(unsigned char*)"copy", {194, 169, 0}}, -{(unsigned char*)"copysr", {226, 132, 151, 0}}, -{(unsigned char*)"crarr", {226, 134, 181, 0}}, -{(unsigned char*)"cross", {226, 156, 151, 0}}, -{(unsigned char*)"cscr", {240, 157, 146, 184, 0}}, -{(unsigned char*)"csub", {226, 171, 143, 0}}, -{(unsigned char*)"csube", {226, 171, 145, 0}}, -{(unsigned char*)"csup", {226, 171, 144, 0}}, -{(unsigned char*)"csupe", {226, 171, 146, 0}}, -{(unsigned char*)"ctdot", {226, 139, 175, 0}}, -{(unsigned char*)"cudarrl", {226, 164, 184, 0}}, -{(unsigned char*)"cudarrr", {226, 164, 181, 0}}, -{(unsigned char*)"cuepr", {226, 139, 158, 0}}, -{(unsigned char*)"cuesc", {226, 139, 159, 0}}, -{(unsigned char*)"cularr", {226, 134, 182, 0}}, -{(unsigned char*)"cularrp", {226, 164, 189, 0}}, -{(unsigned char*)"cup", {226, 136, 170, 0}}, -{(unsigned char*)"cupbrcap", {226, 169, 136, 0}}, -{(unsigned char*)"cupcap", {226, 169, 134, 0}}, -{(unsigned char*)"cupcup", {226, 169, 138, 0}}, -{(unsigned char*)"cupdot", {226, 138, 141, 0}}, -{(unsigned char*)"cupor", {226, 169, 133, 0}}, -{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}}, -{(unsigned char*)"curarr", {226, 134, 183, 0}}, -{(unsigned char*)"curarrm", {226, 164, 188, 0}}, -{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}}, -{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}}, -{(unsigned char*)"curlyvee", {226, 139, 142, 0}}, -{(unsigned char*)"curlywedge", {226, 139, 143, 0}}, -{(unsigned char*)"curren", {194, 164, 0}}, -{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}}, -{(unsigned char*)"curvearrowright", {226, 134, 183, 0}}, -{(unsigned char*)"cuvee", {226, 139, 142, 0}}, -{(unsigned char*)"cuwed", {226, 139, 143, 0}}, -{(unsigned char*)"cwconint", {226, 136, 178, 0}}, -{(unsigned char*)"cwint", {226, 136, 177, 0}}, -{(unsigned char*)"cylcty", {226, 140, 173, 0}}, -{(unsigned char*)"dArr", {226, 135, 147, 0}}, -{(unsigned char*)"dHar", {226, 165, 165, 0}}, -{(unsigned char*)"dagger", {226, 128, 160, 0}}, -{(unsigned char*)"daleth", {226, 132, 184, 0}}, -{(unsigned char*)"darr", {226, 134, 147, 0}}, -{(unsigned char*)"dash", {226, 128, 144, 0}}, -{(unsigned char*)"dashv", {226, 138, 163, 0}}, -{(unsigned char*)"dbkarow", {226, 164, 143, 0}}, -{(unsigned char*)"dblac", {203, 157, 0}}, -{(unsigned char*)"dcaron", {196, 143, 0}}, -{(unsigned char*)"dcy", {208, 180, 0}}, -{(unsigned char*)"dd", {226, 133, 134, 0}}, -{(unsigned char*)"ddagger", {226, 128, 161, 0}}, -{(unsigned char*)"ddarr", {226, 135, 138, 0}}, -{(unsigned char*)"ddotseq", {226, 169, 183, 0}}, -{(unsigned char*)"deg", {194, 176, 0}}, -{(unsigned char*)"delta", {206, 180, 0}}, -{(unsigned char*)"demptyv", {226, 166, 177, 0}}, -{(unsigned char*)"dfisht", {226, 165, 191, 0}}, -{(unsigned char*)"dfr", {240, 157, 148, 161, 0}}, -{(unsigned char*)"dharl", {226, 135, 131, 0}}, -{(unsigned char*)"dharr", {226, 135, 130, 0}}, -{(unsigned char*)"diam", {226, 139, 132, 0}}, -{(unsigned char*)"diamond", {226, 139, 132, 0}}, -{(unsigned char*)"diamondsuit", {226, 153, 166, 0}}, -{(unsigned char*)"diams", {226, 153, 166, 0}}, -{(unsigned char*)"die", {194, 168, 0}}, -{(unsigned char*)"digamma", {207, 157, 0}}, -{(unsigned char*)"disin", {226, 139, 178, 0}}, -{(unsigned char*)"div", {195, 183, 0}}, -{(unsigned char*)"divide", {195, 183, 0}}, -{(unsigned char*)"divideontimes", {226, 139, 135, 0}}, -{(unsigned char*)"divonx", {226, 139, 135, 0}}, -{(unsigned char*)"djcy", {209, 146, 0}}, -{(unsigned char*)"dlcorn", {226, 140, 158, 0}}, -{(unsigned char*)"dlcrop", {226, 140, 141, 0}}, -{(unsigned char*)"dollar", {36, 0}}, -{(unsigned char*)"dopf", {240, 157, 149, 149, 0}}, -{(unsigned char*)"dot", {203, 153, 0}}, -{(unsigned char*)"doteq", {226, 137, 144, 0}}, -{(unsigned char*)"doteqdot", {226, 137, 145, 0}}, -{(unsigned char*)"dotminus", {226, 136, 184, 0}}, -{(unsigned char*)"dotplus", {226, 136, 148, 0}}, -{(unsigned char*)"dotsquare", {226, 138, 161, 0}}, -{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}}, -{(unsigned char*)"downarrow", {226, 134, 147, 0}}, -{(unsigned char*)"downdownarrows", {226, 135, 138, 0}}, -{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}}, -{(unsigned char*)"downharpoonright", {226, 135, 130, 0}}, -{(unsigned char*)"drbkarow", {226, 164, 144, 0}}, -{(unsigned char*)"drcorn", {226, 140, 159, 0}}, -{(unsigned char*)"drcrop", {226, 140, 140, 0}}, -{(unsigned char*)"dscr", {240, 157, 146, 185, 0}}, -{(unsigned char*)"dscy", {209, 149, 0}}, -{(unsigned char*)"dsol", {226, 167, 182, 0}}, -{(unsigned char*)"dstrok", {196, 145, 0}}, -{(unsigned char*)"dtdot", {226, 139, 177, 0}}, -{(unsigned char*)"dtri", {226, 150, 191, 0}}, -{(unsigned char*)"dtrif", {226, 150, 190, 0}}, -{(unsigned char*)"duarr", {226, 135, 181, 0}}, -{(unsigned char*)"duhar", {226, 165, 175, 0}}, -{(unsigned char*)"dwangle", {226, 166, 166, 0}}, -{(unsigned char*)"dzcy", {209, 159, 0}}, -{(unsigned char*)"dzigrarr", {226, 159, 191, 0}}, -{(unsigned char*)"eDDot", {226, 169, 183, 0}}, -{(unsigned char*)"eDot", {226, 137, 145, 0}}, -{(unsigned char*)"eacute", {195, 169, 0}}, -{(unsigned char*)"easter", {226, 169, 174, 0}}, -{(unsigned char*)"ecaron", {196, 155, 0}}, -{(unsigned char*)"ecir", {226, 137, 150, 0}}, -{(unsigned char*)"ecirc", {195, 170, 0}}, -{(unsigned char*)"ecolon", {226, 137, 149, 0}}, -{(unsigned char*)"ecy", {209, 141, 0}}, -{(unsigned char*)"edot", {196, 151, 0}}, -{(unsigned char*)"ee", {226, 133, 135, 0}}, -{(unsigned char*)"efDot", {226, 137, 146, 0}}, -{(unsigned char*)"efr", {240, 157, 148, 162, 0}}, -{(unsigned char*)"eg", {226, 170, 154, 0}}, -{(unsigned char*)"egrave", {195, 168, 0}}, -{(unsigned char*)"egs", {226, 170, 150, 0}}, -{(unsigned char*)"egsdot", {226, 170, 152, 0}}, -{(unsigned char*)"el", {226, 170, 153, 0}}, -{(unsigned char*)"elinters", {226, 143, 167, 0}}, -{(unsigned char*)"ell", {226, 132, 147, 0}}, -{(unsigned char*)"els", {226, 170, 149, 0}}, -{(unsigned char*)"elsdot", {226, 170, 151, 0}}, -{(unsigned char*)"emacr", {196, 147, 0}}, -{(unsigned char*)"empty", {226, 136, 133, 0}}, -{(unsigned char*)"emptyset", {226, 136, 133, 0}}, -{(unsigned char*)"emptyv", {226, 136, 133, 0}}, -{(unsigned char*)"emsp", {226, 128, 131, 0}}, -{(unsigned char*)"emsp13", {226, 128, 132, 0}}, -{(unsigned char*)"emsp14", {226, 128, 133, 0}}, -{(unsigned char*)"eng", {197, 139, 0}}, -{(unsigned char*)"ensp", {226, 128, 130, 0}}, -{(unsigned char*)"eogon", {196, 153, 0}}, -{(unsigned char*)"eopf", {240, 157, 149, 150, 0}}, -{(unsigned char*)"epar", {226, 139, 149, 0}}, -{(unsigned char*)"eparsl", {226, 167, 163, 0}}, -{(unsigned char*)"eplus", {226, 169, 177, 0}}, -{(unsigned char*)"epsi", {206, 181, 0}}, -{(unsigned char*)"epsilon", {206, 181, 0}}, -{(unsigned char*)"epsiv", {207, 181, 0}}, -{(unsigned char*)"eqcirc", {226, 137, 150, 0}}, -{(unsigned char*)"eqcolon", {226, 137, 149, 0}}, -{(unsigned char*)"eqsim", {226, 137, 130, 0}}, -{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}}, -{(unsigned char*)"eqslantless", {226, 170, 149, 0}}, -{(unsigned char*)"equals", {61, 0}}, -{(unsigned char*)"equest", {226, 137, 159, 0}}, -{(unsigned char*)"equiv", {226, 137, 161, 0}}, -{(unsigned char*)"equivDD", {226, 169, 184, 0}}, -{(unsigned char*)"eqvparsl", {226, 167, 165, 0}}, -{(unsigned char*)"erDot", {226, 137, 147, 0}}, -{(unsigned char*)"erarr", {226, 165, 177, 0}}, -{(unsigned char*)"escr", {226, 132, 175, 0}}, -{(unsigned char*)"esdot", {226, 137, 144, 0}}, -{(unsigned char*)"esim", {226, 137, 130, 0}}, -{(unsigned char*)"eta", {206, 183, 0}}, -{(unsigned char*)"eth", {195, 176, 0}}, -{(unsigned char*)"euml", {195, 171, 0}}, -{(unsigned char*)"euro", {226, 130, 172, 0}}, -{(unsigned char*)"excl", {33, 0}}, -{(unsigned char*)"exist", {226, 136, 131, 0}}, -{(unsigned char*)"expectation", {226, 132, 176, 0}}, -{(unsigned char*)"exponentiale", {226, 133, 135, 0}}, -{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}}, -{(unsigned char*)"fcy", {209, 132, 0}}, -{(unsigned char*)"female", {226, 153, 128, 0}}, -{(unsigned char*)"ffilig", {239, 172, 131, 0}}, -{(unsigned char*)"fflig", {239, 172, 128, 0}}, -{(unsigned char*)"ffllig", {239, 172, 132, 0}}, -{(unsigned char*)"ffr", {240, 157, 148, 163, 0}}, -{(unsigned char*)"filig", {239, 172, 129, 0}}, -{(unsigned char*)"fjlig", {102, 106, 0}}, -{(unsigned char*)"flat", {226, 153, 173, 0}}, -{(unsigned char*)"fllig", {239, 172, 130, 0}}, -{(unsigned char*)"fltns", {226, 150, 177, 0}}, -{(unsigned char*)"fnof", {198, 146, 0}}, -{(unsigned char*)"fopf", {240, 157, 149, 151, 0}}, -{(unsigned char*)"forall", {226, 136, 128, 0}}, -{(unsigned char*)"fork", {226, 139, 148, 0}}, -{(unsigned char*)"forkv", {226, 171, 153, 0}}, -{(unsigned char*)"fpartint", {226, 168, 141, 0}}, -{(unsigned char*)"frac12", {194, 189, 0}}, -{(unsigned char*)"frac13", {226, 133, 147, 0}}, -{(unsigned char*)"frac14", {194, 188, 0}}, -{(unsigned char*)"frac15", {226, 133, 149, 0}}, -{(unsigned char*)"frac16", {226, 133, 153, 0}}, -{(unsigned char*)"frac18", {226, 133, 155, 0}}, -{(unsigned char*)"frac23", {226, 133, 148, 0}}, -{(unsigned char*)"frac25", {226, 133, 150, 0}}, -{(unsigned char*)"frac34", {194, 190, 0}}, -{(unsigned char*)"frac35", {226, 133, 151, 0}}, -{(unsigned char*)"frac38", {226, 133, 156, 0}}, -{(unsigned char*)"frac45", {226, 133, 152, 0}}, -{(unsigned char*)"frac56", {226, 133, 154, 0}}, -{(unsigned char*)"frac58", {226, 133, 157, 0}}, -{(unsigned char*)"frac78", {226, 133, 158, 0}}, -{(unsigned char*)"frasl", {226, 129, 132, 0}}, -{(unsigned char*)"frown", {226, 140, 162, 0}}, -{(unsigned char*)"fscr", {240, 157, 146, 187, 0}}, -{(unsigned char*)"gE", {226, 137, 167, 0}}, -{(unsigned char*)"gEl", {226, 170, 140, 0}}, -{(unsigned char*)"gacute", {199, 181, 0}}, -{(unsigned char*)"gamma", {206, 179, 0}}, -{(unsigned char*)"gammad", {207, 157, 0}}, -{(unsigned char*)"gap", {226, 170, 134, 0}}, -{(unsigned char*)"gbreve", {196, 159, 0}}, -{(unsigned char*)"gcirc", {196, 157, 0}}, -{(unsigned char*)"gcy", {208, 179, 0}}, -{(unsigned char*)"gdot", {196, 161, 0}}, -{(unsigned char*)"ge", {226, 137, 165, 0}}, -{(unsigned char*)"gel", {226, 139, 155, 0}}, -{(unsigned char*)"geq", {226, 137, 165, 0}}, -{(unsigned char*)"geqq", {226, 137, 167, 0}}, -{(unsigned char*)"geqslant", {226, 169, 190, 0}}, -{(unsigned char*)"ges", {226, 169, 190, 0}}, -{(unsigned char*)"gescc", {226, 170, 169, 0}}, -{(unsigned char*)"gesdot", {226, 170, 128, 0}}, -{(unsigned char*)"gesdoto", {226, 170, 130, 0}}, -{(unsigned char*)"gesdotol", {226, 170, 132, 0}}, -{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}}, -{(unsigned char*)"gesles", {226, 170, 148, 0}}, -{(unsigned char*)"gfr", {240, 157, 148, 164, 0}}, -{(unsigned char*)"gg", {226, 137, 171, 0}}, -{(unsigned char*)"ggg", {226, 139, 153, 0}}, -{(unsigned char*)"gimel", {226, 132, 183, 0}}, -{(unsigned char*)"gjcy", {209, 147, 0}}, -{(unsigned char*)"gl", {226, 137, 183, 0}}, -{(unsigned char*)"glE", {226, 170, 146, 0}}, -{(unsigned char*)"gla", {226, 170, 165, 0}}, -{(unsigned char*)"glj", {226, 170, 164, 0}}, -{(unsigned char*)"gnE", {226, 137, 169, 0}}, -{(unsigned char*)"gnap", {226, 170, 138, 0}}, -{(unsigned char*)"gnapprox", {226, 170, 138, 0}}, -{(unsigned char*)"gne", {226, 170, 136, 0}}, -{(unsigned char*)"gneq", {226, 170, 136, 0}}, -{(unsigned char*)"gneqq", {226, 137, 169, 0}}, -{(unsigned char*)"gnsim", {226, 139, 167, 0}}, -{(unsigned char*)"gopf", {240, 157, 149, 152, 0}}, -{(unsigned char*)"grave", {96, 0}}, -{(unsigned char*)"gscr", {226, 132, 138, 0}}, -{(unsigned char*)"gsim", {226, 137, 179, 0}}, -{(unsigned char*)"gsime", {226, 170, 142, 0}}, -{(unsigned char*)"gsiml", {226, 170, 144, 0}}, -{(unsigned char*)"gt", {62, 0}}, -{(unsigned char*)"gtcc", {226, 170, 167, 0}}, -{(unsigned char*)"gtcir", {226, 169, 186, 0}}, -{(unsigned char*)"gtdot", {226, 139, 151, 0}}, -{(unsigned char*)"gtlPar", {226, 166, 149, 0}}, -{(unsigned char*)"gtquest", {226, 169, 188, 0}}, -{(unsigned char*)"gtrapprox", {226, 170, 134, 0}}, -{(unsigned char*)"gtrarr", {226, 165, 184, 0}}, -{(unsigned char*)"gtrdot", {226, 139, 151, 0}}, -{(unsigned char*)"gtreqless", {226, 139, 155, 0}}, -{(unsigned char*)"gtreqqless", {226, 170, 140, 0}}, -{(unsigned char*)"gtrless", {226, 137, 183, 0}}, -{(unsigned char*)"gtrsim", {226, 137, 179, 0}}, -{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}}, -{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}}, -{(unsigned char*)"hArr", {226, 135, 148, 0}}, -{(unsigned char*)"hairsp", {226, 128, 138, 0}}, -{(unsigned char*)"half", {194, 189, 0}}, -{(unsigned char*)"hamilt", {226, 132, 139, 0}}, -{(unsigned char*)"hardcy", {209, 138, 0}}, -{(unsigned char*)"harr", {226, 134, 148, 0}}, -{(unsigned char*)"harrcir", {226, 165, 136, 0}}, -{(unsigned char*)"harrw", {226, 134, 173, 0}}, -{(unsigned char*)"hbar", {226, 132, 143, 0}}, -{(unsigned char*)"hcirc", {196, 165, 0}}, -{(unsigned char*)"hearts", {226, 153, 165, 0}}, -{(unsigned char*)"heartsuit", {226, 153, 165, 0}}, -{(unsigned char*)"hellip", {226, 128, 166, 0}}, -{(unsigned char*)"hercon", {226, 138, 185, 0}}, -{(unsigned char*)"hfr", {240, 157, 148, 165, 0}}, -{(unsigned char*)"hksearow", {226, 164, 165, 0}}, -{(unsigned char*)"hkswarow", {226, 164, 166, 0}}, -{(unsigned char*)"hoarr", {226, 135, 191, 0}}, -{(unsigned char*)"homtht", {226, 136, 187, 0}}, -{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}}, -{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}}, -{(unsigned char*)"hopf", {240, 157, 149, 153, 0}}, -{(unsigned char*)"horbar", {226, 128, 149, 0}}, -{(unsigned char*)"hscr", {240, 157, 146, 189, 0}}, -{(unsigned char*)"hslash", {226, 132, 143, 0}}, -{(unsigned char*)"hstrok", {196, 167, 0}}, -{(unsigned char*)"hybull", {226, 129, 131, 0}}, -{(unsigned char*)"hyphen", {226, 128, 144, 0}}, -{(unsigned char*)"iacute", {195, 173, 0}}, -{(unsigned char*)"ic", {226, 129, 163, 0}}, -{(unsigned char*)"icirc", {195, 174, 0}}, -{(unsigned char*)"icy", {208, 184, 0}}, -{(unsigned char*)"iecy", {208, 181, 0}}, -{(unsigned char*)"iexcl", {194, 161, 0}}, -{(unsigned char*)"iff", {226, 135, 148, 0}}, -{(unsigned char*)"ifr", {240, 157, 148, 166, 0}}, -{(unsigned char*)"igrave", {195, 172, 0}}, -{(unsigned char*)"ii", {226, 133, 136, 0}}, -{(unsigned char*)"iiiint", {226, 168, 140, 0}}, -{(unsigned char*)"iiint", {226, 136, 173, 0}}, -{(unsigned char*)"iinfin", {226, 167, 156, 0}}, -{(unsigned char*)"iiota", {226, 132, 169, 0}}, -{(unsigned char*)"ijlig", {196, 179, 0}}, -{(unsigned char*)"imacr", {196, 171, 0}}, -{(unsigned char*)"image", {226, 132, 145, 0}}, -{(unsigned char*)"imagline", {226, 132, 144, 0}}, -{(unsigned char*)"imagpart", {226, 132, 145, 0}}, -{(unsigned char*)"imath", {196, 177, 0}}, -{(unsigned char*)"imof", {226, 138, 183, 0}}, -{(unsigned char*)"imped", {198, 181, 0}}, -{(unsigned char*)"in", {226, 136, 136, 0}}, -{(unsigned char*)"incare", {226, 132, 133, 0}}, -{(unsigned char*)"infin", {226, 136, 158, 0}}, -{(unsigned char*)"infintie", {226, 167, 157, 0}}, -{(unsigned char*)"inodot", {196, 177, 0}}, -{(unsigned char*)"int", {226, 136, 171, 0}}, -{(unsigned char*)"intcal", {226, 138, 186, 0}}, -{(unsigned char*)"integers", {226, 132, 164, 0}}, -{(unsigned char*)"intercal", {226, 138, 186, 0}}, -{(unsigned char*)"intlarhk", {226, 168, 151, 0}}, -{(unsigned char*)"intprod", {226, 168, 188, 0}}, -{(unsigned char*)"iocy", {209, 145, 0}}, -{(unsigned char*)"iogon", {196, 175, 0}}, -{(unsigned char*)"iopf", {240, 157, 149, 154, 0}}, -{(unsigned char*)"iota", {206, 185, 0}}, -{(unsigned char*)"iprod", {226, 168, 188, 0}}, -{(unsigned char*)"iquest", {194, 191, 0}}, -{(unsigned char*)"iscr", {240, 157, 146, 190, 0}}, -{(unsigned char*)"isin", {226, 136, 136, 0}}, -{(unsigned char*)"isinE", {226, 139, 185, 0}}, -{(unsigned char*)"isindot", {226, 139, 181, 0}}, -{(unsigned char*)"isins", {226, 139, 180, 0}}, -{(unsigned char*)"isinsv", {226, 139, 179, 0}}, -{(unsigned char*)"isinv", {226, 136, 136, 0}}, -{(unsigned char*)"it", {226, 129, 162, 0}}, -{(unsigned char*)"itilde", {196, 169, 0}}, -{(unsigned char*)"iukcy", {209, 150, 0}}, -{(unsigned char*)"iuml", {195, 175, 0}}, -{(unsigned char*)"jcirc", {196, 181, 0}}, -{(unsigned char*)"jcy", {208, 185, 0}}, -{(unsigned char*)"jfr", {240, 157, 148, 167, 0}}, -{(unsigned char*)"jmath", {200, 183, 0}}, -{(unsigned char*)"jopf", {240, 157, 149, 155, 0}}, -{(unsigned char*)"jscr", {240, 157, 146, 191, 0}}, -{(unsigned char*)"jsercy", {209, 152, 0}}, -{(unsigned char*)"jukcy", {209, 148, 0}}, -{(unsigned char*)"kappa", {206, 186, 0}}, -{(unsigned char*)"kappav", {207, 176, 0}}, -{(unsigned char*)"kcedil", {196, 183, 0}}, -{(unsigned char*)"kcy", {208, 186, 0}}, -{(unsigned char*)"kfr", {240, 157, 148, 168, 0}}, -{(unsigned char*)"kgreen", {196, 184, 0}}, -{(unsigned char*)"khcy", {209, 133, 0}}, -{(unsigned char*)"kjcy", {209, 156, 0}}, -{(unsigned char*)"kopf", {240, 157, 149, 156, 0}}, -{(unsigned char*)"kscr", {240, 157, 147, 128, 0}}, -{(unsigned char*)"lAarr", {226, 135, 154, 0}}, -{(unsigned char*)"lArr", {226, 135, 144, 0}}, -{(unsigned char*)"lAtail", {226, 164, 155, 0}}, -{(unsigned char*)"lBarr", {226, 164, 142, 0}}, -{(unsigned char*)"lE", {226, 137, 166, 0}}, -{(unsigned char*)"lEg", {226, 170, 139, 0}}, -{(unsigned char*)"lHar", {226, 165, 162, 0}}, -{(unsigned char*)"lacute", {196, 186, 0}}, -{(unsigned char*)"laemptyv", {226, 166, 180, 0}}, -{(unsigned char*)"lagran", {226, 132, 146, 0}}, -{(unsigned char*)"lambda", {206, 187, 0}}, -{(unsigned char*)"lang", {226, 159, 168, 0}}, -{(unsigned char*)"langd", {226, 166, 145, 0}}, -{(unsigned char*)"langle", {226, 159, 168, 0}}, -{(unsigned char*)"lap", {226, 170, 133, 0}}, -{(unsigned char*)"laquo", {194, 171, 0}}, -{(unsigned char*)"larr", {226, 134, 144, 0}}, -{(unsigned char*)"larrb", {226, 135, 164, 0}}, -{(unsigned char*)"larrbfs", {226, 164, 159, 0}}, -{(unsigned char*)"larrfs", {226, 164, 157, 0}}, -{(unsigned char*)"larrhk", {226, 134, 169, 0}}, -{(unsigned char*)"larrlp", {226, 134, 171, 0}}, -{(unsigned char*)"larrpl", {226, 164, 185, 0}}, -{(unsigned char*)"larrsim", {226, 165, 179, 0}}, -{(unsigned char*)"larrtl", {226, 134, 162, 0}}, -{(unsigned char*)"lat", {226, 170, 171, 0}}, -{(unsigned char*)"latail", {226, 164, 153, 0}}, -{(unsigned char*)"late", {226, 170, 173, 0}}, -{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}}, -{(unsigned char*)"lbarr", {226, 164, 140, 0}}, -{(unsigned char*)"lbbrk", {226, 157, 178, 0}}, -{(unsigned char*)"lbrace", {123, 0}}, -{(unsigned char*)"lbrack", {91, 0}}, -{(unsigned char*)"lbrke", {226, 166, 139, 0}}, -{(unsigned char*)"lbrksld", {226, 166, 143, 0}}, -{(unsigned char*)"lbrkslu", {226, 166, 141, 0}}, -{(unsigned char*)"lcaron", {196, 190, 0}}, -{(unsigned char*)"lcedil", {196, 188, 0}}, -{(unsigned char*)"lceil", {226, 140, 136, 0}}, -{(unsigned char*)"lcub", {123, 0}}, -{(unsigned char*)"lcy", {208, 187, 0}}, -{(unsigned char*)"ldca", {226, 164, 182, 0}}, -{(unsigned char*)"ldquo", {226, 128, 156, 0}}, -{(unsigned char*)"ldquor", {226, 128, 158, 0}}, -{(unsigned char*)"ldrdhar", {226, 165, 167, 0}}, -{(unsigned char*)"ldrushar", {226, 165, 139, 0}}, -{(unsigned char*)"ldsh", {226, 134, 178, 0}}, -{(unsigned char*)"le", {226, 137, 164, 0}}, -{(unsigned char*)"leftarrow", {226, 134, 144, 0}}, -{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}}, -{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}}, -{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}}, -{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}}, -{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}}, -{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}}, -{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}}, -{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}}, -{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}}, -{(unsigned char*)"leg", {226, 139, 154, 0}}, -{(unsigned char*)"leq", {226, 137, 164, 0}}, -{(unsigned char*)"leqq", {226, 137, 166, 0}}, -{(unsigned char*)"leqslant", {226, 169, 189, 0}}, -{(unsigned char*)"les", {226, 169, 189, 0}}, -{(unsigned char*)"lescc", {226, 170, 168, 0}}, -{(unsigned char*)"lesdot", {226, 169, 191, 0}}, -{(unsigned char*)"lesdoto", {226, 170, 129, 0}}, -{(unsigned char*)"lesdotor", {226, 170, 131, 0}}, -{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}}, -{(unsigned char*)"lesges", {226, 170, 147, 0}}, -{(unsigned char*)"lessapprox", {226, 170, 133, 0}}, -{(unsigned char*)"lessdot", {226, 139, 150, 0}}, -{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}}, -{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}}, -{(unsigned char*)"lessgtr", {226, 137, 182, 0}}, -{(unsigned char*)"lesssim", {226, 137, 178, 0}}, -{(unsigned char*)"lfisht", {226, 165, 188, 0}}, -{(unsigned char*)"lfloor", {226, 140, 138, 0}}, -{(unsigned char*)"lfr", {240, 157, 148, 169, 0}}, -{(unsigned char*)"lg", {226, 137, 182, 0}}, -{(unsigned char*)"lgE", {226, 170, 145, 0}}, -{(unsigned char*)"lhard", {226, 134, 189, 0}}, -{(unsigned char*)"lharu", {226, 134, 188, 0}}, -{(unsigned char*)"lharul", {226, 165, 170, 0}}, -{(unsigned char*)"lhblk", {226, 150, 132, 0}}, -{(unsigned char*)"ljcy", {209, 153, 0}}, -{(unsigned char*)"ll", {226, 137, 170, 0}}, -{(unsigned char*)"llarr", {226, 135, 135, 0}}, -{(unsigned char*)"llcorner", {226, 140, 158, 0}}, -{(unsigned char*)"llhard", {226, 165, 171, 0}}, -{(unsigned char*)"lltri", {226, 151, 186, 0}}, -{(unsigned char*)"lmidot", {197, 128, 0}}, -{(unsigned char*)"lmoust", {226, 142, 176, 0}}, -{(unsigned char*)"lmoustache", {226, 142, 176, 0}}, -{(unsigned char*)"lnE", {226, 137, 168, 0}}, -{(unsigned char*)"lnap", {226, 170, 137, 0}}, -{(unsigned char*)"lnapprox", {226, 170, 137, 0}}, -{(unsigned char*)"lne", {226, 170, 135, 0}}, -{(unsigned char*)"lneq", {226, 170, 135, 0}}, -{(unsigned char*)"lneqq", {226, 137, 168, 0}}, -{(unsigned char*)"lnsim", {226, 139, 166, 0}}, -{(unsigned char*)"loang", {226, 159, 172, 0}}, -{(unsigned char*)"loarr", {226, 135, 189, 0}}, -{(unsigned char*)"lobrk", {226, 159, 166, 0}}, -{(unsigned char*)"longleftarrow", {226, 159, 181, 0}}, -{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}}, -{(unsigned char*)"longmapsto", {226, 159, 188, 0}}, -{(unsigned char*)"longrightarrow", {226, 159, 182, 0}}, -{(unsigned char*)"looparrowleft", {226, 134, 171, 0}}, -{(unsigned char*)"looparrowright", {226, 134, 172, 0}}, -{(unsigned char*)"lopar", {226, 166, 133, 0}}, -{(unsigned char*)"lopf", {240, 157, 149, 157, 0}}, -{(unsigned char*)"loplus", {226, 168, 173, 0}}, -{(unsigned char*)"lotimes", {226, 168, 180, 0}}, -{(unsigned char*)"lowast", {226, 136, 151, 0}}, -{(unsigned char*)"lowbar", {95, 0}}, -{(unsigned char*)"loz", {226, 151, 138, 0}}, -{(unsigned char*)"lozenge", {226, 151, 138, 0}}, -{(unsigned char*)"lozf", {226, 167, 171, 0}}, -{(unsigned char*)"lpar", {40, 0}}, -{(unsigned char*)"lparlt", {226, 166, 147, 0}}, -{(unsigned char*)"lrarr", {226, 135, 134, 0}}, -{(unsigned char*)"lrcorner", {226, 140, 159, 0}}, -{(unsigned char*)"lrhar", {226, 135, 139, 0}}, -{(unsigned char*)"lrhard", {226, 165, 173, 0}}, -{(unsigned char*)"lrm", {226, 128, 142, 0}}, -{(unsigned char*)"lrtri", {226, 138, 191, 0}}, -{(unsigned char*)"lsaquo", {226, 128, 185, 0}}, -{(unsigned char*)"lscr", {240, 157, 147, 129, 0}}, -{(unsigned char*)"lsh", {226, 134, 176, 0}}, -{(unsigned char*)"lsim", {226, 137, 178, 0}}, -{(unsigned char*)"lsime", {226, 170, 141, 0}}, -{(unsigned char*)"lsimg", {226, 170, 143, 0}}, -{(unsigned char*)"lsqb", {91, 0}}, -{(unsigned char*)"lsquo", {226, 128, 152, 0}}, -{(unsigned char*)"lsquor", {226, 128, 154, 0}}, -{(unsigned char*)"lstrok", {197, 130, 0}}, -{(unsigned char*)"lt", {60, 0}}, -{(unsigned char*)"ltcc", {226, 170, 166, 0}}, -{(unsigned char*)"ltcir", {226, 169, 185, 0}}, -{(unsigned char*)"ltdot", {226, 139, 150, 0}}, -{(unsigned char*)"lthree", {226, 139, 139, 0}}, -{(unsigned char*)"ltimes", {226, 139, 137, 0}}, -{(unsigned char*)"ltlarr", {226, 165, 182, 0}}, -{(unsigned char*)"ltquest", {226, 169, 187, 0}}, -{(unsigned char*)"ltrPar", {226, 166, 150, 0}}, -{(unsigned char*)"ltri", {226, 151, 131, 0}}, -{(unsigned char*)"ltrie", {226, 138, 180, 0}}, -{(unsigned char*)"ltrif", {226, 151, 130, 0}}, -{(unsigned char*)"lurdshar", {226, 165, 138, 0}}, -{(unsigned char*)"luruhar", {226, 165, 166, 0}}, -{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}}, -{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}}, -{(unsigned char*)"mDDot", {226, 136, 186, 0}}, -{(unsigned char*)"macr", {194, 175, 0}}, -{(unsigned char*)"male", {226, 153, 130, 0}}, -{(unsigned char*)"malt", {226, 156, 160, 0}}, -{(unsigned char*)"maltese", {226, 156, 160, 0}}, -{(unsigned char*)"map", {226, 134, 166, 0}}, -{(unsigned char*)"mapsto", {226, 134, 166, 0}}, -{(unsigned char*)"mapstodown", {226, 134, 167, 0}}, -{(unsigned char*)"mapstoleft", {226, 134, 164, 0}}, -{(unsigned char*)"mapstoup", {226, 134, 165, 0}}, -{(unsigned char*)"marker", {226, 150, 174, 0}}, -{(unsigned char*)"mcomma", {226, 168, 169, 0}}, -{(unsigned char*)"mcy", {208, 188, 0}}, -{(unsigned char*)"mdash", {226, 128, 148, 0}}, -{(unsigned char*)"measuredangle", {226, 136, 161, 0}}, -{(unsigned char*)"mfr", {240, 157, 148, 170, 0}}, -{(unsigned char*)"mho", {226, 132, 167, 0}}, -{(unsigned char*)"micro", {194, 181, 0}}, -{(unsigned char*)"mid", {226, 136, 163, 0}}, -{(unsigned char*)"midast", {42, 0}}, -{(unsigned char*)"midcir", {226, 171, 176, 0}}, -{(unsigned char*)"middot", {194, 183, 0}}, -{(unsigned char*)"minus", {226, 136, 146, 0}}, -{(unsigned char*)"minusb", {226, 138, 159, 0}}, -{(unsigned char*)"minusd", {226, 136, 184, 0}}, -{(unsigned char*)"minusdu", {226, 168, 170, 0}}, -{(unsigned char*)"mlcp", {226, 171, 155, 0}}, -{(unsigned char*)"mldr", {226, 128, 166, 0}}, -{(unsigned char*)"mnplus", {226, 136, 147, 0}}, -{(unsigned char*)"models", {226, 138, 167, 0}}, -{(unsigned char*)"mopf", {240, 157, 149, 158, 0}}, -{(unsigned char*)"mp", {226, 136, 147, 0}}, -{(unsigned char*)"mscr", {240, 157, 147, 130, 0}}, -{(unsigned char*)"mstpos", {226, 136, 190, 0}}, -{(unsigned char*)"mu", {206, 188, 0}}, -{(unsigned char*)"multimap", {226, 138, 184, 0}}, -{(unsigned char*)"mumap", {226, 138, 184, 0}}, -{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}}, -{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}}, -{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}}, -{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}}, -{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}}, -{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}}, -{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}}, -{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}}, -{(unsigned char*)"nRightarrow", {226, 135, 143, 0}}, -{(unsigned char*)"nVDash", {226, 138, 175, 0}}, -{(unsigned char*)"nVdash", {226, 138, 174, 0}}, -{(unsigned char*)"nabla", {226, 136, 135, 0}}, -{(unsigned char*)"nacute", {197, 132, 0}}, -{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}}, -{(unsigned char*)"nap", {226, 137, 137, 0}}, -{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}}, -{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}}, -{(unsigned char*)"napos", {197, 137, 0}}, -{(unsigned char*)"napprox", {226, 137, 137, 0}}, -{(unsigned char*)"natur", {226, 153, 174, 0}}, -{(unsigned char*)"natural", {226, 153, 174, 0}}, -{(unsigned char*)"naturals", {226, 132, 149, 0}}, -{(unsigned char*)"nbsp", {194, 160, 0}}, -{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}}, -{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}}, -{(unsigned char*)"ncap", {226, 169, 131, 0}}, -{(unsigned char*)"ncaron", {197, 136, 0}}, -{(unsigned char*)"ncedil", {197, 134, 0}}, -{(unsigned char*)"ncong", {226, 137, 135, 0}}, -{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}}, -{(unsigned char*)"ncup", {226, 169, 130, 0}}, -{(unsigned char*)"ncy", {208, 189, 0}}, -{(unsigned char*)"ndash", {226, 128, 147, 0}}, -{(unsigned char*)"ne", {226, 137, 160, 0}}, -{(unsigned char*)"neArr", {226, 135, 151, 0}}, -{(unsigned char*)"nearhk", {226, 164, 164, 0}}, -{(unsigned char*)"nearr", {226, 134, 151, 0}}, -{(unsigned char*)"nearrow", {226, 134, 151, 0}}, -{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}}, -{(unsigned char*)"nequiv", {226, 137, 162, 0}}, -{(unsigned char*)"nesear", {226, 164, 168, 0}}, -{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}}, -{(unsigned char*)"nexist", {226, 136, 132, 0}}, -{(unsigned char*)"nexists", {226, 136, 132, 0}}, -{(unsigned char*)"nfr", {240, 157, 148, 171, 0}}, -{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}}, -{(unsigned char*)"nge", {226, 137, 177, 0}}, -{(unsigned char*)"ngeq", {226, 137, 177, 0}}, -{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}}, -{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}}, -{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}}, -{(unsigned char*)"ngsim", {226, 137, 181, 0}}, -{(unsigned char*)"ngt", {226, 137, 175, 0}}, -{(unsigned char*)"ngtr", {226, 137, 175, 0}}, -{(unsigned char*)"nhArr", {226, 135, 142, 0}}, -{(unsigned char*)"nharr", {226, 134, 174, 0}}, -{(unsigned char*)"nhpar", {226, 171, 178, 0}}, -{(unsigned char*)"ni", {226, 136, 139, 0}}, -{(unsigned char*)"nis", {226, 139, 188, 0}}, -{(unsigned char*)"nisd", {226, 139, 186, 0}}, -{(unsigned char*)"niv", {226, 136, 139, 0}}, -{(unsigned char*)"njcy", {209, 154, 0}}, -{(unsigned char*)"nlArr", {226, 135, 141, 0}}, -{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}}, -{(unsigned char*)"nlarr", {226, 134, 154, 0}}, -{(unsigned char*)"nldr", {226, 128, 165, 0}}, -{(unsigned char*)"nle", {226, 137, 176, 0}}, -{(unsigned char*)"nleftarrow", {226, 134, 154, 0}}, -{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}}, -{(unsigned char*)"nleq", {226, 137, 176, 0}}, -{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}}, -{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}}, -{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}}, -{(unsigned char*)"nless", {226, 137, 174, 0}}, -{(unsigned char*)"nlsim", {226, 137, 180, 0}}, -{(unsigned char*)"nlt", {226, 137, 174, 0}}, -{(unsigned char*)"nltri", {226, 139, 170, 0}}, -{(unsigned char*)"nltrie", {226, 139, 172, 0}}, -{(unsigned char*)"nmid", {226, 136, 164, 0}}, -{(unsigned char*)"nopf", {240, 157, 149, 159, 0}}, -{(unsigned char*)"not", {194, 172, 0}}, -{(unsigned char*)"notin", {226, 136, 137, 0}}, -{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}}, -{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}}, -{(unsigned char*)"notinva", {226, 136, 137, 0}}, -{(unsigned char*)"notinvb", {226, 139, 183, 0}}, -{(unsigned char*)"notinvc", {226, 139, 182, 0}}, -{(unsigned char*)"notni", {226, 136, 140, 0}}, -{(unsigned char*)"notniva", {226, 136, 140, 0}}, -{(unsigned char*)"notnivb", {226, 139, 190, 0}}, -{(unsigned char*)"notnivc", {226, 139, 189, 0}}, -{(unsigned char*)"npar", {226, 136, 166, 0}}, -{(unsigned char*)"nparallel", {226, 136, 166, 0}}, -{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}}, -{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}}, -{(unsigned char*)"npolint", {226, 168, 148, 0}}, -{(unsigned char*)"npr", {226, 138, 128, 0}}, -{(unsigned char*)"nprcue", {226, 139, 160, 0}}, -{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}}, -{(unsigned char*)"nprec", {226, 138, 128, 0}}, -{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}}, -{(unsigned char*)"nrArr", {226, 135, 143, 0}}, -{(unsigned char*)"nrarr", {226, 134, 155, 0}}, -{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}}, -{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}}, -{(unsigned char*)"nrightarrow", {226, 134, 155, 0}}, -{(unsigned char*)"nrtri", {226, 139, 171, 0}}, -{(unsigned char*)"nrtrie", {226, 139, 173, 0}}, -{(unsigned char*)"nsc", {226, 138, 129, 0}}, -{(unsigned char*)"nsccue", {226, 139, 161, 0}}, -{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}}, -{(unsigned char*)"nscr", {240, 157, 147, 131, 0}}, -{(unsigned char*)"nshortmid", {226, 136, 164, 0}}, -{(unsigned char*)"nshortparallel", {226, 136, 166, 0}}, -{(unsigned char*)"nsim", {226, 137, 129, 0}}, -{(unsigned char*)"nsime", {226, 137, 132, 0}}, -{(unsigned char*)"nsimeq", {226, 137, 132, 0}}, -{(unsigned char*)"nsmid", {226, 136, 164, 0}}, -{(unsigned char*)"nspar", {226, 136, 166, 0}}, -{(unsigned char*)"nsqsube", {226, 139, 162, 0}}, -{(unsigned char*)"nsqsupe", {226, 139, 163, 0}}, -{(unsigned char*)"nsub", {226, 138, 132, 0}}, -{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}}, -{(unsigned char*)"nsube", {226, 138, 136, 0}}, -{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}}, -{(unsigned char*)"nsubseteq", {226, 138, 136, 0}}, -{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}}, -{(unsigned char*)"nsucc", {226, 138, 129, 0}}, -{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}}, -{(unsigned char*)"nsup", {226, 138, 133, 0}}, -{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}}, -{(unsigned char*)"nsupe", {226, 138, 137, 0}}, -{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}}, -{(unsigned char*)"nsupseteq", {226, 138, 137, 0}}, -{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}}, -{(unsigned char*)"ntgl", {226, 137, 185, 0}}, -{(unsigned char*)"ntilde", {195, 177, 0}}, -{(unsigned char*)"ntlg", {226, 137, 184, 0}}, -{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}}, -{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}}, -{(unsigned char*)"ntriangleright", {226, 139, 171, 0}}, -{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}}, -{(unsigned char*)"nu", {206, 189, 0}}, -{(unsigned char*)"num", {35, 0}}, -{(unsigned char*)"numero", {226, 132, 150, 0}}, -{(unsigned char*)"numsp", {226, 128, 135, 0}}, -{(unsigned char*)"nvDash", {226, 138, 173, 0}}, -{(unsigned char*)"nvHarr", {226, 164, 132, 0}}, -{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}}, -{(unsigned char*)"nvdash", {226, 138, 172, 0}}, -{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}}, -{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}}, -{(unsigned char*)"nvinfin", {226, 167, 158, 0}}, -{(unsigned char*)"nvlArr", {226, 164, 130, 0}}, -{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}}, -{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}}, -{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}}, -{(unsigned char*)"nvrArr", {226, 164, 131, 0}}, -{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}}, -{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}}, -{(unsigned char*)"nwArr", {226, 135, 150, 0}}, -{(unsigned char*)"nwarhk", {226, 164, 163, 0}}, -{(unsigned char*)"nwarr", {226, 134, 150, 0}}, -{(unsigned char*)"nwarrow", {226, 134, 150, 0}}, -{(unsigned char*)"nwnear", {226, 164, 167, 0}}, -{(unsigned char*)"oS", {226, 147, 136, 0}}, -{(unsigned char*)"oacute", {195, 179, 0}}, -{(unsigned char*)"oast", {226, 138, 155, 0}}, -{(unsigned char*)"ocir", {226, 138, 154, 0}}, -{(unsigned char*)"ocirc", {195, 180, 0}}, -{(unsigned char*)"ocy", {208, 190, 0}}, -{(unsigned char*)"odash", {226, 138, 157, 0}}, -{(unsigned char*)"odblac", {197, 145, 0}}, -{(unsigned char*)"odiv", {226, 168, 184, 0}}, -{(unsigned char*)"odot", {226, 138, 153, 0}}, -{(unsigned char*)"odsold", {226, 166, 188, 0}}, -{(unsigned char*)"oelig", {197, 147, 0}}, -{(unsigned char*)"ofcir", {226, 166, 191, 0}}, -{(unsigned char*)"ofr", {240, 157, 148, 172, 0}}, -{(unsigned char*)"ogon", {203, 155, 0}}, -{(unsigned char*)"ograve", {195, 178, 0}}, -{(unsigned char*)"ogt", {226, 167, 129, 0}}, -{(unsigned char*)"ohbar", {226, 166, 181, 0}}, -{(unsigned char*)"ohm", {206, 169, 0}}, -{(unsigned char*)"oint", {226, 136, 174, 0}}, -{(unsigned char*)"olarr", {226, 134, 186, 0}}, -{(unsigned char*)"olcir", {226, 166, 190, 0}}, -{(unsigned char*)"olcross", {226, 166, 187, 0}}, -{(unsigned char*)"oline", {226, 128, 190, 0}}, -{(unsigned char*)"olt", {226, 167, 128, 0}}, -{(unsigned char*)"omacr", {197, 141, 0}}, -{(unsigned char*)"omega", {207, 137, 0}}, -{(unsigned char*)"omicron", {206, 191, 0}}, -{(unsigned char*)"omid", {226, 166, 182, 0}}, -{(unsigned char*)"ominus", {226, 138, 150, 0}}, -{(unsigned char*)"oopf", {240, 157, 149, 160, 0}}, -{(unsigned char*)"opar", {226, 166, 183, 0}}, -{(unsigned char*)"operp", {226, 166, 185, 0}}, -{(unsigned char*)"oplus", {226, 138, 149, 0}}, -{(unsigned char*)"or", {226, 136, 168, 0}}, -{(unsigned char*)"orarr", {226, 134, 187, 0}}, -{(unsigned char*)"ord", {226, 169, 157, 0}}, -{(unsigned char*)"order", {226, 132, 180, 0}}, -{(unsigned char*)"orderof", {226, 132, 180, 0}}, -{(unsigned char*)"ordf", {194, 170, 0}}, -{(unsigned char*)"ordm", {194, 186, 0}}, -{(unsigned char*)"origof", {226, 138, 182, 0}}, -{(unsigned char*)"oror", {226, 169, 150, 0}}, -{(unsigned char*)"orslope", {226, 169, 151, 0}}, -{(unsigned char*)"orv", {226, 169, 155, 0}}, -{(unsigned char*)"oscr", {226, 132, 180, 0}}, -{(unsigned char*)"oslash", {195, 184, 0}}, -{(unsigned char*)"osol", {226, 138, 152, 0}}, -{(unsigned char*)"otilde", {195, 181, 0}}, -{(unsigned char*)"otimes", {226, 138, 151, 0}}, -{(unsigned char*)"otimesas", {226, 168, 182, 0}}, -{(unsigned char*)"ouml", {195, 182, 0}}, -{(unsigned char*)"ovbar", {226, 140, 189, 0}}, -{(unsigned char*)"par", {226, 136, 165, 0}}, -{(unsigned char*)"para", {194, 182, 0}}, -{(unsigned char*)"parallel", {226, 136, 165, 0}}, -{(unsigned char*)"parsim", {226, 171, 179, 0}}, -{(unsigned char*)"parsl", {226, 171, 189, 0}}, -{(unsigned char*)"part", {226, 136, 130, 0}}, -{(unsigned char*)"pcy", {208, 191, 0}}, -{(unsigned char*)"percnt", {37, 0}}, -{(unsigned char*)"period", {46, 0}}, -{(unsigned char*)"permil", {226, 128, 176, 0}}, -{(unsigned char*)"perp", {226, 138, 165, 0}}, -{(unsigned char*)"pertenk", {226, 128, 177, 0}}, -{(unsigned char*)"pfr", {240, 157, 148, 173, 0}}, -{(unsigned char*)"phi", {207, 134, 0}}, -{(unsigned char*)"phiv", {207, 149, 0}}, -{(unsigned char*)"phmmat", {226, 132, 179, 0}}, -{(unsigned char*)"phone", {226, 152, 142, 0}}, -{(unsigned char*)"pi", {207, 128, 0}}, -{(unsigned char*)"pitchfork", {226, 139, 148, 0}}, -{(unsigned char*)"piv", {207, 150, 0}}, -{(unsigned char*)"planck", {226, 132, 143, 0}}, -{(unsigned char*)"planckh", {226, 132, 142, 0}}, -{(unsigned char*)"plankv", {226, 132, 143, 0}}, -{(unsigned char*)"plus", {43, 0}}, -{(unsigned char*)"plusacir", {226, 168, 163, 0}}, -{(unsigned char*)"plusb", {226, 138, 158, 0}}, -{(unsigned char*)"pluscir", {226, 168, 162, 0}}, -{(unsigned char*)"plusdo", {226, 136, 148, 0}}, -{(unsigned char*)"plusdu", {226, 168, 165, 0}}, -{(unsigned char*)"pluse", {226, 169, 178, 0}}, -{(unsigned char*)"plusmn", {194, 177, 0}}, -{(unsigned char*)"plussim", {226, 168, 166, 0}}, -{(unsigned char*)"plustwo", {226, 168, 167, 0}}, -{(unsigned char*)"pm", {194, 177, 0}}, -{(unsigned char*)"pointint", {226, 168, 149, 0}}, -{(unsigned char*)"popf", {240, 157, 149, 161, 0}}, -{(unsigned char*)"pound", {194, 163, 0}}, -{(unsigned char*)"pr", {226, 137, 186, 0}}, -{(unsigned char*)"prE", {226, 170, 179, 0}}, -{(unsigned char*)"prap", {226, 170, 183, 0}}, -{(unsigned char*)"prcue", {226, 137, 188, 0}}, -{(unsigned char*)"pre", {226, 170, 175, 0}}, -{(unsigned char*)"prec", {226, 137, 186, 0}}, -{(unsigned char*)"precapprox", {226, 170, 183, 0}}, -{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}}, -{(unsigned char*)"preceq", {226, 170, 175, 0}}, -{(unsigned char*)"precnapprox", {226, 170, 185, 0}}, -{(unsigned char*)"precneqq", {226, 170, 181, 0}}, -{(unsigned char*)"precnsim", {226, 139, 168, 0}}, -{(unsigned char*)"precsim", {226, 137, 190, 0}}, -{(unsigned char*)"prime", {226, 128, 178, 0}}, -{(unsigned char*)"primes", {226, 132, 153, 0}}, -{(unsigned char*)"prnE", {226, 170, 181, 0}}, -{(unsigned char*)"prnap", {226, 170, 185, 0}}, -{(unsigned char*)"prnsim", {226, 139, 168, 0}}, -{(unsigned char*)"prod", {226, 136, 143, 0}}, -{(unsigned char*)"profalar", {226, 140, 174, 0}}, -{(unsigned char*)"profline", {226, 140, 146, 0}}, -{(unsigned char*)"profsurf", {226, 140, 147, 0}}, -{(unsigned char*)"prop", {226, 136, 157, 0}}, -{(unsigned char*)"propto", {226, 136, 157, 0}}, -{(unsigned char*)"prsim", {226, 137, 190, 0}}, -{(unsigned char*)"prurel", {226, 138, 176, 0}}, -{(unsigned char*)"pscr", {240, 157, 147, 133, 0}}, -{(unsigned char*)"psi", {207, 136, 0}}, -{(unsigned char*)"puncsp", {226, 128, 136, 0}}, -{(unsigned char*)"qfr", {240, 157, 148, 174, 0}}, -{(unsigned char*)"qint", {226, 168, 140, 0}}, -{(unsigned char*)"qopf", {240, 157, 149, 162, 0}}, -{(unsigned char*)"qprime", {226, 129, 151, 0}}, -{(unsigned char*)"qscr", {240, 157, 147, 134, 0}}, -{(unsigned char*)"quaternions", {226, 132, 141, 0}}, -{(unsigned char*)"quatint", {226, 168, 150, 0}}, -{(unsigned char*)"quest", {63, 0}}, -{(unsigned char*)"questeq", {226, 137, 159, 0}}, -{(unsigned char*)"quot", {34, 0}}, -{(unsigned char*)"rAarr", {226, 135, 155, 0}}, -{(unsigned char*)"rArr", {226, 135, 146, 0}}, -{(unsigned char*)"rAtail", {226, 164, 156, 0}}, -{(unsigned char*)"rBarr", {226, 164, 143, 0}}, -{(unsigned char*)"rHar", {226, 165, 164, 0}}, -{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}}, -{(unsigned char*)"racute", {197, 149, 0}}, -{(unsigned char*)"radic", {226, 136, 154, 0}}, -{(unsigned char*)"raemptyv", {226, 166, 179, 0}}, -{(unsigned char*)"rang", {226, 159, 169, 0}}, -{(unsigned char*)"rangd", {226, 166, 146, 0}}, -{(unsigned char*)"range", {226, 166, 165, 0}}, -{(unsigned char*)"rangle", {226, 159, 169, 0}}, -{(unsigned char*)"raquo", {194, 187, 0}}, -{(unsigned char*)"rarr", {226, 134, 146, 0}}, -{(unsigned char*)"rarrap", {226, 165, 181, 0}}, -{(unsigned char*)"rarrb", {226, 135, 165, 0}}, -{(unsigned char*)"rarrbfs", {226, 164, 160, 0}}, -{(unsigned char*)"rarrc", {226, 164, 179, 0}}, -{(unsigned char*)"rarrfs", {226, 164, 158, 0}}, -{(unsigned char*)"rarrhk", {226, 134, 170, 0}}, -{(unsigned char*)"rarrlp", {226, 134, 172, 0}}, -{(unsigned char*)"rarrpl", {226, 165, 133, 0}}, -{(unsigned char*)"rarrsim", {226, 165, 180, 0}}, -{(unsigned char*)"rarrtl", {226, 134, 163, 0}}, -{(unsigned char*)"rarrw", {226, 134, 157, 0}}, -{(unsigned char*)"ratail", {226, 164, 154, 0}}, -{(unsigned char*)"ratio", {226, 136, 182, 0}}, -{(unsigned char*)"rationals", {226, 132, 154, 0}}, -{(unsigned char*)"rbarr", {226, 164, 141, 0}}, -{(unsigned char*)"rbbrk", {226, 157, 179, 0}}, -{(unsigned char*)"rbrace", {125, 0}}, -{(unsigned char*)"rbrack", {93, 0}}, -{(unsigned char*)"rbrke", {226, 166, 140, 0}}, -{(unsigned char*)"rbrksld", {226, 166, 142, 0}}, -{(unsigned char*)"rbrkslu", {226, 166, 144, 0}}, -{(unsigned char*)"rcaron", {197, 153, 0}}, -{(unsigned char*)"rcedil", {197, 151, 0}}, -{(unsigned char*)"rceil", {226, 140, 137, 0}}, -{(unsigned char*)"rcub", {125, 0}}, -{(unsigned char*)"rcy", {209, 128, 0}}, -{(unsigned char*)"rdca", {226, 164, 183, 0}}, -{(unsigned char*)"rdldhar", {226, 165, 169, 0}}, -{(unsigned char*)"rdquo", {226, 128, 157, 0}}, -{(unsigned char*)"rdquor", {226, 128, 157, 0}}, -{(unsigned char*)"rdsh", {226, 134, 179, 0}}, -{(unsigned char*)"real", {226, 132, 156, 0}}, -{(unsigned char*)"realine", {226, 132, 155, 0}}, -{(unsigned char*)"realpart", {226, 132, 156, 0}}, -{(unsigned char*)"reals", {226, 132, 157, 0}}, -{(unsigned char*)"rect", {226, 150, 173, 0}}, -{(unsigned char*)"reg", {194, 174, 0}}, -{(unsigned char*)"rfisht", {226, 165, 189, 0}}, -{(unsigned char*)"rfloor", {226, 140, 139, 0}}, -{(unsigned char*)"rfr", {240, 157, 148, 175, 0}}, -{(unsigned char*)"rhard", {226, 135, 129, 0}}, -{(unsigned char*)"rharu", {226, 135, 128, 0}}, -{(unsigned char*)"rharul", {226, 165, 172, 0}}, -{(unsigned char*)"rho", {207, 129, 0}}, -{(unsigned char*)"rhov", {207, 177, 0}}, -{(unsigned char*)"rightarrow", {226, 134, 146, 0}}, -{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}}, -{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}}, -{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}}, -{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}}, -{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}}, -{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}}, -{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}}, -{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}}, -{(unsigned char*)"ring", {203, 154, 0}}, -{(unsigned char*)"risingdotseq", {226, 137, 147, 0}}, -{(unsigned char*)"rlarr", {226, 135, 132, 0}}, -{(unsigned char*)"rlhar", {226, 135, 140, 0}}, -{(unsigned char*)"rlm", {226, 128, 143, 0}}, -{(unsigned char*)"rmoust", {226, 142, 177, 0}}, -{(unsigned char*)"rmoustache", {226, 142, 177, 0}}, -{(unsigned char*)"rnmid", {226, 171, 174, 0}}, -{(unsigned char*)"roang", {226, 159, 173, 0}}, -{(unsigned char*)"roarr", {226, 135, 190, 0}}, -{(unsigned char*)"robrk", {226, 159, 167, 0}}, -{(unsigned char*)"ropar", {226, 166, 134, 0}}, -{(unsigned char*)"ropf", {240, 157, 149, 163, 0}}, -{(unsigned char*)"roplus", {226, 168, 174, 0}}, -{(unsigned char*)"rotimes", {226, 168, 181, 0}}, -{(unsigned char*)"rpar", {41, 0}}, -{(unsigned char*)"rpargt", {226, 166, 148, 0}}, -{(unsigned char*)"rppolint", {226, 168, 146, 0}}, -{(unsigned char*)"rrarr", {226, 135, 137, 0}}, -{(unsigned char*)"rsaquo", {226, 128, 186, 0}}, -{(unsigned char*)"rscr", {240, 157, 147, 135, 0}}, -{(unsigned char*)"rsh", {226, 134, 177, 0}}, -{(unsigned char*)"rsqb", {93, 0}}, -{(unsigned char*)"rsquo", {226, 128, 153, 0}}, -{(unsigned char*)"rsquor", {226, 128, 153, 0}}, -{(unsigned char*)"rthree", {226, 139, 140, 0}}, -{(unsigned char*)"rtimes", {226, 139, 138, 0}}, -{(unsigned char*)"rtri", {226, 150, 185, 0}}, -{(unsigned char*)"rtrie", {226, 138, 181, 0}}, -{(unsigned char*)"rtrif", {226, 150, 184, 0}}, -{(unsigned char*)"rtriltri", {226, 167, 142, 0}}, -{(unsigned char*)"ruluhar", {226, 165, 168, 0}}, -{(unsigned char*)"rx", {226, 132, 158, 0}}, -{(unsigned char*)"sacute", {197, 155, 0}}, -{(unsigned char*)"sbquo", {226, 128, 154, 0}}, -{(unsigned char*)"sc", {226, 137, 187, 0}}, -{(unsigned char*)"scE", {226, 170, 180, 0}}, -{(unsigned char*)"scap", {226, 170, 184, 0}}, -{(unsigned char*)"scaron", {197, 161, 0}}, -{(unsigned char*)"sccue", {226, 137, 189, 0}}, -{(unsigned char*)"sce", {226, 170, 176, 0}}, -{(unsigned char*)"scedil", {197, 159, 0}}, -{(unsigned char*)"scirc", {197, 157, 0}}, -{(unsigned char*)"scnE", {226, 170, 182, 0}}, -{(unsigned char*)"scnap", {226, 170, 186, 0}}, -{(unsigned char*)"scnsim", {226, 139, 169, 0}}, -{(unsigned char*)"scpolint", {226, 168, 147, 0}}, -{(unsigned char*)"scsim", {226, 137, 191, 0}}, -{(unsigned char*)"scy", {209, 129, 0}}, -{(unsigned char*)"sdot", {226, 139, 133, 0}}, -{(unsigned char*)"sdotb", {226, 138, 161, 0}}, -{(unsigned char*)"sdote", {226, 169, 166, 0}}, -{(unsigned char*)"seArr", {226, 135, 152, 0}}, -{(unsigned char*)"searhk", {226, 164, 165, 0}}, -{(unsigned char*)"searr", {226, 134, 152, 0}}, -{(unsigned char*)"searrow", {226, 134, 152, 0}}, -{(unsigned char*)"sect", {194, 167, 0}}, -{(unsigned char*)"semi", {59, 0}}, -{(unsigned char*)"seswar", {226, 164, 169, 0}}, -{(unsigned char*)"setminus", {226, 136, 150, 0}}, -{(unsigned char*)"setmn", {226, 136, 150, 0}}, -{(unsigned char*)"sext", {226, 156, 182, 0}}, -{(unsigned char*)"sfr", {240, 157, 148, 176, 0}}, -{(unsigned char*)"sfrown", {226, 140, 162, 0}}, -{(unsigned char*)"sharp", {226, 153, 175, 0}}, -{(unsigned char*)"shchcy", {209, 137, 0}}, -{(unsigned char*)"shcy", {209, 136, 0}}, -{(unsigned char*)"shortmid", {226, 136, 163, 0}}, -{(unsigned char*)"shortparallel", {226, 136, 165, 0}}, -{(unsigned char*)"shy", {194, 173, 0}}, -{(unsigned char*)"sigma", {207, 131, 0}}, -{(unsigned char*)"sigmaf", {207, 130, 0}}, -{(unsigned char*)"sigmav", {207, 130, 0}}, -{(unsigned char*)"sim", {226, 136, 188, 0}}, -{(unsigned char*)"simdot", {226, 169, 170, 0}}, -{(unsigned char*)"sime", {226, 137, 131, 0}}, -{(unsigned char*)"simeq", {226, 137, 131, 0}}, -{(unsigned char*)"simg", {226, 170, 158, 0}}, -{(unsigned char*)"simgE", {226, 170, 160, 0}}, -{(unsigned char*)"siml", {226, 170, 157, 0}}, -{(unsigned char*)"simlE", {226, 170, 159, 0}}, -{(unsigned char*)"simne", {226, 137, 134, 0}}, -{(unsigned char*)"simplus", {226, 168, 164, 0}}, -{(unsigned char*)"simrarr", {226, 165, 178, 0}}, -{(unsigned char*)"slarr", {226, 134, 144, 0}}, -{(unsigned char*)"smallsetminus", {226, 136, 150, 0}}, -{(unsigned char*)"smashp", {226, 168, 179, 0}}, -{(unsigned char*)"smeparsl", {226, 167, 164, 0}}, -{(unsigned char*)"smid", {226, 136, 163, 0}}, -{(unsigned char*)"smile", {226, 140, 163, 0}}, -{(unsigned char*)"smt", {226, 170, 170, 0}}, -{(unsigned char*)"smte", {226, 170, 172, 0}}, -{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}}, -{(unsigned char*)"softcy", {209, 140, 0}}, -{(unsigned char*)"sol", {47, 0}}, -{(unsigned char*)"solb", {226, 167, 132, 0}}, -{(unsigned char*)"solbar", {226, 140, 191, 0}}, -{(unsigned char*)"sopf", {240, 157, 149, 164, 0}}, -{(unsigned char*)"spades", {226, 153, 160, 0}}, -{(unsigned char*)"spadesuit", {226, 153, 160, 0}}, -{(unsigned char*)"spar", {226, 136, 165, 0}}, -{(unsigned char*)"sqcap", {226, 138, 147, 0}}, -{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}}, -{(unsigned char*)"sqcup", {226, 138, 148, 0}}, -{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}}, -{(unsigned char*)"sqsub", {226, 138, 143, 0}}, -{(unsigned char*)"sqsube", {226, 138, 145, 0}}, -{(unsigned char*)"sqsubset", {226, 138, 143, 0}}, -{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}}, -{(unsigned char*)"sqsup", {226, 138, 144, 0}}, -{(unsigned char*)"sqsupe", {226, 138, 146, 0}}, -{(unsigned char*)"sqsupset", {226, 138, 144, 0}}, -{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}}, -{(unsigned char*)"squ", {226, 150, 161, 0}}, -{(unsigned char*)"square", {226, 150, 161, 0}}, -{(unsigned char*)"squarf", {226, 150, 170, 0}}, -{(unsigned char*)"squf", {226, 150, 170, 0}}, -{(unsigned char*)"srarr", {226, 134, 146, 0}}, -{(unsigned char*)"sscr", {240, 157, 147, 136, 0}}, -{(unsigned char*)"ssetmn", {226, 136, 150, 0}}, -{(unsigned char*)"ssmile", {226, 140, 163, 0}}, -{(unsigned char*)"sstarf", {226, 139, 134, 0}}, -{(unsigned char*)"star", {226, 152, 134, 0}}, -{(unsigned char*)"starf", {226, 152, 133, 0}}, -{(unsigned char*)"straightepsilon", {207, 181, 0}}, -{(unsigned char*)"straightphi", {207, 149, 0}}, -{(unsigned char*)"strns", {194, 175, 0}}, -{(unsigned char*)"sub", {226, 138, 130, 0}}, -{(unsigned char*)"subE", {226, 171, 133, 0}}, -{(unsigned char*)"subdot", {226, 170, 189, 0}}, -{(unsigned char*)"sube", {226, 138, 134, 0}}, -{(unsigned char*)"subedot", {226, 171, 131, 0}}, -{(unsigned char*)"submult", {226, 171, 129, 0}}, -{(unsigned char*)"subnE", {226, 171, 139, 0}}, -{(unsigned char*)"subne", {226, 138, 138, 0}}, -{(unsigned char*)"subplus", {226, 170, 191, 0}}, -{(unsigned char*)"subrarr", {226, 165, 185, 0}}, -{(unsigned char*)"subset", {226, 138, 130, 0}}, -{(unsigned char*)"subseteq", {226, 138, 134, 0}}, -{(unsigned char*)"subseteqq", {226, 171, 133, 0}}, -{(unsigned char*)"subsetneq", {226, 138, 138, 0}}, -{(unsigned char*)"subsetneqq", {226, 171, 139, 0}}, -{(unsigned char*)"subsim", {226, 171, 135, 0}}, -{(unsigned char*)"subsub", {226, 171, 149, 0}}, -{(unsigned char*)"subsup", {226, 171, 147, 0}}, -{(unsigned char*)"succ", {226, 137, 187, 0}}, -{(unsigned char*)"succapprox", {226, 170, 184, 0}}, -{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}}, -{(unsigned char*)"succeq", {226, 170, 176, 0}}, -{(unsigned char*)"succnapprox", {226, 170, 186, 0}}, -{(unsigned char*)"succneqq", {226, 170, 182, 0}}, -{(unsigned char*)"succnsim", {226, 139, 169, 0}}, -{(unsigned char*)"succsim", {226, 137, 191, 0}}, -{(unsigned char*)"sum", {226, 136, 145, 0}}, -{(unsigned char*)"sung", {226, 153, 170, 0}}, -{(unsigned char*)"sup", {226, 138, 131, 0}}, -{(unsigned char*)"sup1", {194, 185, 0}}, -{(unsigned char*)"sup2", {194, 178, 0}}, -{(unsigned char*)"sup3", {194, 179, 0}}, -{(unsigned char*)"supE", {226, 171, 134, 0}}, -{(unsigned char*)"supdot", {226, 170, 190, 0}}, -{(unsigned char*)"supdsub", {226, 171, 152, 0}}, -{(unsigned char*)"supe", {226, 138, 135, 0}}, -{(unsigned char*)"supedot", {226, 171, 132, 0}}, -{(unsigned char*)"suphsol", {226, 159, 137, 0}}, -{(unsigned char*)"suphsub", {226, 171, 151, 0}}, -{(unsigned char*)"suplarr", {226, 165, 187, 0}}, -{(unsigned char*)"supmult", {226, 171, 130, 0}}, -{(unsigned char*)"supnE", {226, 171, 140, 0}}, -{(unsigned char*)"supne", {226, 138, 139, 0}}, -{(unsigned char*)"supplus", {226, 171, 128, 0}}, -{(unsigned char*)"supset", {226, 138, 131, 0}}, -{(unsigned char*)"supseteq", {226, 138, 135, 0}}, -{(unsigned char*)"supseteqq", {226, 171, 134, 0}}, -{(unsigned char*)"supsetneq", {226, 138, 139, 0}}, -{(unsigned char*)"supsetneqq", {226, 171, 140, 0}}, -{(unsigned char*)"supsim", {226, 171, 136, 0}}, -{(unsigned char*)"supsub", {226, 171, 148, 0}}, -{(unsigned char*)"supsup", {226, 171, 150, 0}}, -{(unsigned char*)"swArr", {226, 135, 153, 0}}, -{(unsigned char*)"swarhk", {226, 164, 166, 0}}, -{(unsigned char*)"swarr", {226, 134, 153, 0}}, -{(unsigned char*)"swarrow", {226, 134, 153, 0}}, -{(unsigned char*)"swnwar", {226, 164, 170, 0}}, -{(unsigned char*)"szlig", {195, 159, 0}}, -{(unsigned char*)"target", {226, 140, 150, 0}}, -{(unsigned char*)"tau", {207, 132, 0}}, -{(unsigned char*)"tbrk", {226, 142, 180, 0}}, -{(unsigned char*)"tcaron", {197, 165, 0}}, -{(unsigned char*)"tcedil", {197, 163, 0}}, -{(unsigned char*)"tcy", {209, 130, 0}}, -{(unsigned char*)"tdot", {226, 131, 155, 0}}, -{(unsigned char*)"telrec", {226, 140, 149, 0}}, -{(unsigned char*)"tfr", {240, 157, 148, 177, 0}}, -{(unsigned char*)"there4", {226, 136, 180, 0}}, -{(unsigned char*)"therefore", {226, 136, 180, 0}}, -{(unsigned char*)"theta", {206, 184, 0}}, -{(unsigned char*)"thetasym", {207, 145, 0}}, -{(unsigned char*)"thetav", {207, 145, 0}}, -{(unsigned char*)"thickapprox", {226, 137, 136, 0}}, -{(unsigned char*)"thicksim", {226, 136, 188, 0}}, -{(unsigned char*)"thinsp", {226, 128, 137, 0}}, -{(unsigned char*)"thkap", {226, 137, 136, 0}}, -{(unsigned char*)"thksim", {226, 136, 188, 0}}, -{(unsigned char*)"thorn", {195, 190, 0}}, -{(unsigned char*)"tilde", {203, 156, 0}}, -{(unsigned char*)"times", {195, 151, 0}}, -{(unsigned char*)"timesb", {226, 138, 160, 0}}, -{(unsigned char*)"timesbar", {226, 168, 177, 0}}, -{(unsigned char*)"timesd", {226, 168, 176, 0}}, -{(unsigned char*)"tint", {226, 136, 173, 0}}, -{(unsigned char*)"toea", {226, 164, 168, 0}}, -{(unsigned char*)"top", {226, 138, 164, 0}}, -{(unsigned char*)"topbot", {226, 140, 182, 0}}, -{(unsigned char*)"topcir", {226, 171, 177, 0}}, -{(unsigned char*)"topf", {240, 157, 149, 165, 0}}, -{(unsigned char*)"topfork", {226, 171, 154, 0}}, -{(unsigned char*)"tosa", {226, 164, 169, 0}}, -{(unsigned char*)"tprime", {226, 128, 180, 0}}, -{(unsigned char*)"trade", {226, 132, 162, 0}}, -{(unsigned char*)"triangle", {226, 150, 181, 0}}, -{(unsigned char*)"triangledown", {226, 150, 191, 0}}, -{(unsigned char*)"triangleleft", {226, 151, 131, 0}}, -{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}}, -{(unsigned char*)"triangleq", {226, 137, 156, 0}}, -{(unsigned char*)"triangleright", {226, 150, 185, 0}}, -{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}}, -{(unsigned char*)"tridot", {226, 151, 172, 0}}, -{(unsigned char*)"trie", {226, 137, 156, 0}}, -{(unsigned char*)"triminus", {226, 168, 186, 0}}, -{(unsigned char*)"triplus", {226, 168, 185, 0}}, -{(unsigned char*)"trisb", {226, 167, 141, 0}}, -{(unsigned char*)"tritime", {226, 168, 187, 0}}, -{(unsigned char*)"trpezium", {226, 143, 162, 0}}, -{(unsigned char*)"tscr", {240, 157, 147, 137, 0}}, -{(unsigned char*)"tscy", {209, 134, 0}}, -{(unsigned char*)"tshcy", {209, 155, 0}}, -{(unsigned char*)"tstrok", {197, 167, 0}}, -{(unsigned char*)"twixt", {226, 137, 172, 0}}, -{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}}, -{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}}, -{(unsigned char*)"uArr", {226, 135, 145, 0}}, -{(unsigned char*)"uHar", {226, 165, 163, 0}}, -{(unsigned char*)"uacute", {195, 186, 0}}, -{(unsigned char*)"uarr", {226, 134, 145, 0}}, -{(unsigned char*)"ubrcy", {209, 158, 0}}, -{(unsigned char*)"ubreve", {197, 173, 0}}, -{(unsigned char*)"ucirc", {195, 187, 0}}, -{(unsigned char*)"ucy", {209, 131, 0}}, -{(unsigned char*)"udarr", {226, 135, 133, 0}}, -{(unsigned char*)"udblac", {197, 177, 0}}, -{(unsigned char*)"udhar", {226, 165, 174, 0}}, -{(unsigned char*)"ufisht", {226, 165, 190, 0}}, -{(unsigned char*)"ufr", {240, 157, 148, 178, 0}}, -{(unsigned char*)"ugrave", {195, 185, 0}}, -{(unsigned char*)"uharl", {226, 134, 191, 0}}, -{(unsigned char*)"uharr", {226, 134, 190, 0}}, -{(unsigned char*)"uhblk", {226, 150, 128, 0}}, -{(unsigned char*)"ulcorn", {226, 140, 156, 0}}, -{(unsigned char*)"ulcorner", {226, 140, 156, 0}}, -{(unsigned char*)"ulcrop", {226, 140, 143, 0}}, -{(unsigned char*)"ultri", {226, 151, 184, 0}}, -{(unsigned char*)"umacr", {197, 171, 0}}, -{(unsigned char*)"uml", {194, 168, 0}}, -{(unsigned char*)"uogon", {197, 179, 0}}, -{(unsigned char*)"uopf", {240, 157, 149, 166, 0}}, -{(unsigned char*)"uparrow", {226, 134, 145, 0}}, -{(unsigned char*)"updownarrow", {226, 134, 149, 0}}, -{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}}, -{(unsigned char*)"upharpoonright", {226, 134, 190, 0}}, -{(unsigned char*)"uplus", {226, 138, 142, 0}}, -{(unsigned char*)"upsi", {207, 133, 0}}, -{(unsigned char*)"upsih", {207, 146, 0}}, -{(unsigned char*)"upsilon", {207, 133, 0}}, -{(unsigned char*)"upuparrows", {226, 135, 136, 0}}, -{(unsigned char*)"urcorn", {226, 140, 157, 0}}, -{(unsigned char*)"urcorner", {226, 140, 157, 0}}, -{(unsigned char*)"urcrop", {226, 140, 142, 0}}, -{(unsigned char*)"uring", {197, 175, 0}}, -{(unsigned char*)"urtri", {226, 151, 185, 0}}, -{(unsigned char*)"uscr", {240, 157, 147, 138, 0}}, -{(unsigned char*)"utdot", {226, 139, 176, 0}}, -{(unsigned char*)"utilde", {197, 169, 0}}, -{(unsigned char*)"utri", {226, 150, 181, 0}}, -{(unsigned char*)"utrif", {226, 150, 180, 0}}, -{(unsigned char*)"uuarr", {226, 135, 136, 0}}, -{(unsigned char*)"uuml", {195, 188, 0}}, -{(unsigned char*)"uwangle", {226, 166, 167, 0}}, -{(unsigned char*)"vArr", {226, 135, 149, 0}}, -{(unsigned char*)"vBar", {226, 171, 168, 0}}, -{(unsigned char*)"vBarv", {226, 171, 169, 0}}, -{(unsigned char*)"vDash", {226, 138, 168, 0}}, -{(unsigned char*)"vangrt", {226, 166, 156, 0}}, -{(unsigned char*)"varepsilon", {207, 181, 0}}, -{(unsigned char*)"varkappa", {207, 176, 0}}, -{(unsigned char*)"varnothing", {226, 136, 133, 0}}, -{(unsigned char*)"varphi", {207, 149, 0}}, -{(unsigned char*)"varpi", {207, 150, 0}}, -{(unsigned char*)"varpropto", {226, 136, 157, 0}}, -{(unsigned char*)"varr", {226, 134, 149, 0}}, -{(unsigned char*)"varrho", {207, 177, 0}}, -{(unsigned char*)"varsigma", {207, 130, 0}}, -{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}}, -{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}}, -{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}}, -{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}}, -{(unsigned char*)"vartheta", {207, 145, 0}}, -{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}}, -{(unsigned char*)"vartriangleright", {226, 138, 179, 0}}, -{(unsigned char*)"vcy", {208, 178, 0}}, -{(unsigned char*)"vdash", {226, 138, 162, 0}}, -{(unsigned char*)"vee", {226, 136, 168, 0}}, -{(unsigned char*)"veebar", {226, 138, 187, 0}}, -{(unsigned char*)"veeeq", {226, 137, 154, 0}}, -{(unsigned char*)"vellip", {226, 139, 174, 0}}, -{(unsigned char*)"verbar", {124, 0}}, -{(unsigned char*)"vert", {124, 0}}, -{(unsigned char*)"vfr", {240, 157, 148, 179, 0}}, -{(unsigned char*)"vltri", {226, 138, 178, 0}}, -{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}}, -{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}}, -{(unsigned char*)"vopf", {240, 157, 149, 167, 0}}, -{(unsigned char*)"vprop", {226, 136, 157, 0}}, -{(unsigned char*)"vrtri", {226, 138, 179, 0}}, -{(unsigned char*)"vscr", {240, 157, 147, 139, 0}}, -{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}}, -{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}}, -{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}}, -{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}}, -{(unsigned char*)"vzigzag", {226, 166, 154, 0}}, -{(unsigned char*)"wcirc", {197, 181, 0}}, -{(unsigned char*)"wedbar", {226, 169, 159, 0}}, -{(unsigned char*)"wedge", {226, 136, 167, 0}}, -{(unsigned char*)"wedgeq", {226, 137, 153, 0}}, -{(unsigned char*)"weierp", {226, 132, 152, 0}}, -{(unsigned char*)"wfr", {240, 157, 148, 180, 0}}, -{(unsigned char*)"wopf", {240, 157, 149, 168, 0}}, -{(unsigned char*)"wp", {226, 132, 152, 0}}, -{(unsigned char*)"wr", {226, 137, 128, 0}}, -{(unsigned char*)"wreath", {226, 137, 128, 0}}, -{(unsigned char*)"wscr", {240, 157, 147, 140, 0}}, -{(unsigned char*)"xcap", {226, 139, 130, 0}}, -{(unsigned char*)"xcirc", {226, 151, 175, 0}}, -{(unsigned char*)"xcup", {226, 139, 131, 0}}, -{(unsigned char*)"xdtri", {226, 150, 189, 0}}, -{(unsigned char*)"xfr", {240, 157, 148, 181, 0}}, -{(unsigned char*)"xhArr", {226, 159, 186, 0}}, -{(unsigned char*)"xharr", {226, 159, 183, 0}}, -{(unsigned char*)"xi", {206, 190, 0}}, -{(unsigned char*)"xlArr", {226, 159, 184, 0}}, -{(unsigned char*)"xlarr", {226, 159, 181, 0}}, -{(unsigned char*)"xmap", {226, 159, 188, 0}}, -{(unsigned char*)"xnis", {226, 139, 187, 0}}, -{(unsigned char*)"xodot", {226, 168, 128, 0}}, -{(unsigned char*)"xopf", {240, 157, 149, 169, 0}}, -{(unsigned char*)"xoplus", {226, 168, 129, 0}}, -{(unsigned char*)"xotime", {226, 168, 130, 0}}, -{(unsigned char*)"xrArr", {226, 159, 185, 0}}, -{(unsigned char*)"xrarr", {226, 159, 182, 0}}, -{(unsigned char*)"xscr", {240, 157, 147, 141, 0}}, -{(unsigned char*)"xsqcup", {226, 168, 134, 0}}, -{(unsigned char*)"xuplus", {226, 168, 132, 0}}, -{(unsigned char*)"xutri", {226, 150, 179, 0}}, -{(unsigned char*)"xvee", {226, 139, 129, 0}}, -{(unsigned char*)"xwedge", {226, 139, 128, 0}}, -{(unsigned char*)"yacute", {195, 189, 0}}, -{(unsigned char*)"yacy", {209, 143, 0}}, -{(unsigned char*)"ycirc", {197, 183, 0}}, -{(unsigned char*)"ycy", {209, 139, 0}}, -{(unsigned char*)"yen", {194, 165, 0}}, -{(unsigned char*)"yfr", {240, 157, 148, 182, 0}}, -{(unsigned char*)"yicy", {209, 151, 0}}, -{(unsigned char*)"yopf", {240, 157, 149, 170, 0}}, -{(unsigned char*)"yscr", {240, 157, 147, 142, 0}}, -{(unsigned char*)"yucy", {209, 142, 0}}, -{(unsigned char*)"yuml", {195, 191, 0}}, -{(unsigned char*)"zacute", {197, 186, 0}}, -{(unsigned char*)"zcaron", {197, 190, 0}}, -{(unsigned char*)"zcy", {208, 183, 0}}, -{(unsigned char*)"zdot", {197, 188, 0}}, -{(unsigned char*)"zeetrf", {226, 132, 168, 0}}, -{(unsigned char*)"zeta", {206, 182, 0}}, -{(unsigned char*)"zfr", {240, 157, 148, 183, 0}}, -{(unsigned char*)"zhcy", {208, 182, 0}}, -{(unsigned char*)"zigrarr", {226, 135, 157, 0}}, -{(unsigned char*)"zopf", {240, 157, 149, 171, 0}}, -{(unsigned char*)"zscr", {240, 157, 147, 143, 0}}, -{(unsigned char*)"zwj", {226, 128, 141, 0}}, -{(unsigned char*)"zwnj", {226, 128, 140, 0}}, -}; diff --git a/Pods/Down/Source/cmark/houdini.h b/Pods/Down/Source/cmark/houdini.h deleted file mode 100755 index f738e82..0000000 --- a/Pods/Down/Source/cmark/houdini.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef CMARK_HOUDINI_H -#define CMARK_HOUDINI_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdint.h> -#include "config.h" -#include "buffer.h" - -#ifdef HAVE___BUILTIN_EXPECT -#define likely(x) __builtin_expect((x), 1) -#define unlikely(x) __builtin_expect((x), 0) -#else -#define likely(x) (x) -#define unlikely(x) (x) -#endif - -#ifdef HOUDINI_USE_LOCALE -#define _isxdigit(c) isxdigit(c) -#define _isdigit(c) isdigit(c) -#else -/* - * Helper _isdigit methods -- do not trust the current locale - * */ -#define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL) -#define _isdigit(c) ((c) >= '0' && (c) <= '9') -#endif - -#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10) -#define HOUDINI_UNESCAPED_SIZE(x) (x) - -extern bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size); -extern int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size); -extern int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size, int secure); -extern int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size); -extern void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size); -extern int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/houdini_href_e.c b/Pods/Down/Source/cmark/houdini_href_e.c deleted file mode 100755 index bfa9704..0000000 --- a/Pods/Down/Source/cmark/houdini_href_e.c +++ /dev/null @@ -1,100 +0,0 @@ -#include <assert.h> -#include <stdio.h> -#include <string.h> - -#include "houdini.h" - -/* - * The following characters will not be escaped: - * - * -_.+!*'(),%#@?=;:/,+&$ alphanum - * - * Note that this character set is the addition of: - * - * - The characters which are safe to be in an URL - * - The characters which are *not* safe to be in - * an URL because they are RESERVED characters. - * - * We assume (lazily) that any RESERVED char that - * appears inside an URL is actually meant to - * have its native function (i.e. as an URL - * component/separator) and hence needs no escaping. - * - * There are two exceptions: the chacters & (amp) - * and ' (single quote) do not appear in the table. - * They are meant to appear in the URL as components, - * yet they require special HTML-entity escaping - * to generate valid HTML markup. - * - * All other characters will be escaped to %XX. - * - */ -static const char HREF_SAFE[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { - static const uint8_t hex_chars[] = "0123456789ABCDEF"; - bufsize_t i = 0, org; - uint8_t hex_str[3]; - - hex_str[0] = '%'; - - while (i < size) { - org = i; - while (i < size && HREF_SAFE[src[i]] != 0) - i++; - - if (likely(i > org)) - cmark_strbuf_put(ob, src + org, i - org); - - /* escaping */ - if (i >= size) - break; - - switch (src[i]) { - /* amp appears all the time in URLs, but needs - * HTML-entity escaping to be inside an href */ - case '&': - cmark_strbuf_puts(ob, "&"); - break; - - /* the single quote is a valid URL character - * according to the standard; it needs HTML - * entity escaping too */ - case '\'': - cmark_strbuf_puts(ob, "'"); - break; - -/* the space can be escaped to %20 or a plus - * sign. we're going with the generic escape - * for now. the plus thing is more commonly seen - * when building GET strings */ -#if 0 - case ' ': - cmark_strbuf_putc(ob, '+'); - break; -#endif - - /* every other character goes with a %XX escaping */ - default: - hex_str[1] = hex_chars[(src[i] >> 4) & 0xF]; - hex_str[2] = hex_chars[src[i] & 0xF]; - cmark_strbuf_put(ob, hex_str, 3); - } - - i++; - } - - return 1; -} diff --git a/Pods/Down/Source/cmark/houdini_html_e.c b/Pods/Down/Source/cmark/houdini_html_e.c deleted file mode 100755 index 0e539f0..0000000 --- a/Pods/Down/Source/cmark/houdini_html_e.c +++ /dev/null @@ -1,66 +0,0 @@ -#include <assert.h> -#include <stdio.h> -#include <string.h> - -#include "houdini.h" - -/** - * According to the OWASP rules: - * - * & --> & - * < --> < - * > --> > - * " --> " - * ' --> ' ' is not recommended - * / --> / forward slash is included as it helps end an HTML entity - * - */ -static const char HTML_ESCAPE_TABLE[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -}; - -static const char *HTML_ESCAPES[] = {"", """, "&", "'", - "/", "<", ">"}; - -int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size, - int secure) { - bufsize_t i = 0, org, esc = 0; - - while (i < size) { - org = i; - while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0) - i++; - - if (i > org) - cmark_strbuf_put(ob, src + org, i - org); - - /* escaping */ - if (unlikely(i >= size)) - break; - - /* The forward slash is only escaped in secure mode */ - if ((src[i] == '/' || src[i] == '\'') && !secure) { - cmark_strbuf_putc(ob, src[i]); - } else { - cmark_strbuf_puts(ob, HTML_ESCAPES[esc]); - } - - i++; - } - - return 1; -} - -int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) { - return houdini_escape_html0(ob, src, size, 1); -} diff --git a/Pods/Down/Source/cmark/houdini_html_u.c b/Pods/Down/Source/cmark/houdini_html_u.c deleted file mode 100755 index 30d08aa..0000000 --- a/Pods/Down/Source/cmark/houdini_html_u.c +++ /dev/null @@ -1,149 +0,0 @@ -#include <assert.h> -#include <stdio.h> -#include <string.h> - -#include "buffer.h" -#include "houdini.h" -#include "utf8.h" -#include "entities.inc" - -/* Binary tree lookup code for entities added by JGM */ - -static const unsigned char *S_lookup(int i, int low, int hi, - const unsigned char *s, int len) { - int j; - int cmp = - strncmp((const char *)s, (const char *)cmark_entities[i].entity, len); - if (cmp == 0 && cmark_entities[i].entity[len] == 0) { - return (const unsigned char *)cmark_entities[i].bytes; - } else if (cmp <= 0 && i > low) { - j = i - ((i - low) / 2); - if (j == i) - j -= 1; - return S_lookup(j, low, i - 1, s, len); - } else if (cmp > 0 && i < hi) { - j = i + ((hi - i) / 2); - if (j == i) - j += 1; - return S_lookup(j, i + 1, hi, s, len); - } else { - return NULL; - } -} - -static const unsigned char *S_lookup_entity(const unsigned char *s, int len) { - return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len); -} - -bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size) { - bufsize_t i = 0; - - if (size >= 3 && src[0] == '#') { - int codepoint = 0; - int num_digits = 0; - - if (_isdigit(src[1])) { - for (i = 1; i < size && _isdigit(src[i]); ++i) { - codepoint = (codepoint * 10) + (src[i] - '0'); - - if (codepoint >= 0x110000) { - // Keep counting digits but - // avoid integer overflow. - codepoint = 0x110000; - } - } - - num_digits = i - 1; - } - - else if (src[1] == 'x' || src[1] == 'X') { - for (i = 2; i < size && _isxdigit(src[i]); ++i) { - codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9); - - if (codepoint >= 0x110000) { - // Keep counting digits but - // avoid integer overflow. - codepoint = 0x110000; - } - } - - num_digits = i - 2; - } - - if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') { - if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) || - codepoint >= 0x110000) { - codepoint = 0xFFFD; - } - cmark_utf8proc_encode_char(codepoint, ob); - return i + 1; - } - } - - else { - if (size > CMARK_ENTITY_MAX_LENGTH) - size = CMARK_ENTITY_MAX_LENGTH; - - for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) { - if (src[i] == ' ') - break; - - if (src[i] == ';') { - const unsigned char *entity = S_lookup_entity(src, i); - - if (entity != NULL) { - cmark_strbuf_puts(ob, (const char *)entity); - return i + 1; - } - - break; - } - } - } - - return 0; -} - -int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size) { - bufsize_t i = 0, org, ent; - - while (i < size) { - org = i; - while (i < size && src[i] != '&') - i++; - - if (likely(i > org)) { - if (unlikely(org == 0)) { - if (i >= size) - return 0; - - cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size)); - } - - cmark_strbuf_put(ob, src + org, i - org); - } - - /* escaping */ - if (i >= size) - break; - - i++; - - ent = houdini_unescape_ent(ob, src + i, size - i); - i += ent; - - /* not really an entity */ - if (ent == 0) - cmark_strbuf_putc(ob, '&'); - } - - return 1; -} - -void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src, - bufsize_t size) { - if (!houdini_unescape_html(ob, src, size)) - cmark_strbuf_put(ob, src, size); -} diff --git a/Pods/Down/Source/cmark/html.c b/Pods/Down/Source/cmark/html.c deleted file mode 100755 index a13d016..0000000 --- a/Pods/Down/Source/cmark/html.c +++ /dev/null @@ -1,341 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> -#include "cmark_ctype.h" -#include "config.h" -#include "cmark.h" -#include "node.h" -#include "buffer.h" -#include "houdini.h" -#include "scanners.h" - -#define BUFFER_SIZE 100 - -// Functions to convert cmark_nodes to HTML strings. - -static void escape_html(cmark_strbuf *dest, const unsigned char *source, - bufsize_t length) { - houdini_escape_html0(dest, source, length, 0); -} - -static CMARK_INLINE void cr(cmark_strbuf *html) { - if (html->size && html->ptr[html->size - 1] != '\n') - cmark_strbuf_putc(html, '\n'); -} - -struct render_state { - cmark_strbuf *html; - cmark_node *plain; -}; - -static void S_render_sourcepos(cmark_node *node, cmark_strbuf *html, - int options) { - char buffer[BUFFER_SIZE]; - if (CMARK_OPT_SOURCEPOS & options) { - snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"", - cmark_node_get_start_line(node), cmark_node_get_start_column(node), - cmark_node_get_end_line(node), cmark_node_get_end_column(node)); - cmark_strbuf_puts(html, buffer); - } -} - -static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, int options) { - cmark_node *parent; - cmark_node *grandparent; - cmark_strbuf *html = state->html; - char start_heading[] = "<h0"; - char end_heading[] = "</h0"; - bool tight; - char buffer[BUFFER_SIZE]; - - bool entering = (ev_type == CMARK_EVENT_ENTER); - - if (state->plain == node) { // back at original node - state->plain = NULL; - } - - if (state->plain != NULL) { - switch (node->type) { - case CMARK_NODE_TEXT: - case CMARK_NODE_CODE: - case CMARK_NODE_HTML_INLINE: - escape_html(html, node->as.literal.data, node->as.literal.len); - break; - - case CMARK_NODE_LINEBREAK: - case CMARK_NODE_SOFTBREAK: - cmark_strbuf_putc(html, ' '); - break; - - default: - break; - } - return 1; - } - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - cr(html); - cmark_strbuf_puts(html, "<blockquote"); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, ">\n"); - } else { - cr(html); - cmark_strbuf_puts(html, "</blockquote>\n"); - } - break; - - case CMARK_NODE_LIST: { - cmark_list_type list_type = node->as.list.list_type; - int start = node->as.list.start; - - if (entering) { - cr(html); - if (list_type == CMARK_BULLET_LIST) { - cmark_strbuf_puts(html, "<ul"); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, ">\n"); - } else if (start == 1) { - cmark_strbuf_puts(html, "<ol"); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, ">\n"); - } else { - snprintf(buffer, BUFFER_SIZE, "<ol start=\"%d\"", start); - cmark_strbuf_puts(html, buffer); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, ">\n"); - } - } else { - cmark_strbuf_puts(html, - list_type == CMARK_BULLET_LIST ? "</ul>\n" : "</ol>\n"); - } - break; - } - - case CMARK_NODE_ITEM: - if (entering) { - cr(html); - cmark_strbuf_puts(html, "<li"); - S_render_sourcepos(node, html, options); - cmark_strbuf_putc(html, '>'); - } else { - cmark_strbuf_puts(html, "</li>\n"); - } - break; - - case CMARK_NODE_HEADING: - if (entering) { - cr(html); - start_heading[2] = (char)('0' + node->as.heading.level); - cmark_strbuf_puts(html, start_heading); - S_render_sourcepos(node, html, options); - cmark_strbuf_putc(html, '>'); - } else { - end_heading[3] = (char)('0' + node->as.heading.level); - cmark_strbuf_puts(html, end_heading); - cmark_strbuf_puts(html, ">\n"); - } - break; - - case CMARK_NODE_CODE_BLOCK: - cr(html); - - if (node->as.code.info.len == 0) { - cmark_strbuf_puts(html, "<pre"); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, "><code>"); - } else { - bufsize_t first_tag = 0; - while (first_tag < node->as.code.info.len && - !cmark_isspace(node->as.code.info.data[first_tag])) { - first_tag += 1; - } - - cmark_strbuf_puts(html, "<pre"); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, "><code class=\"language-"); - escape_html(html, node->as.code.info.data, first_tag); - cmark_strbuf_puts(html, "\">"); - } - - escape_html(html, node->as.code.literal.data, node->as.code.literal.len); - cmark_strbuf_puts(html, "</code></pre>\n"); - break; - - case CMARK_NODE_HTML_BLOCK: - cr(html); - if (!(options & CMARK_OPT_UNSAFE)) { - cmark_strbuf_puts(html, "<!-- raw HTML omitted -->"); - } else { - cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); - } - cr(html); - break; - - case CMARK_NODE_CUSTOM_BLOCK: - cr(html); - if (entering) { - cmark_strbuf_put(html, node->as.custom.on_enter.data, - node->as.custom.on_enter.len); - } else { - cmark_strbuf_put(html, node->as.custom.on_exit.data, - node->as.custom.on_exit.len); - } - cr(html); - break; - - case CMARK_NODE_THEMATIC_BREAK: - cr(html); - cmark_strbuf_puts(html, "<hr"); - S_render_sourcepos(node, html, options); - cmark_strbuf_puts(html, " />\n"); - break; - - case CMARK_NODE_PARAGRAPH: - parent = cmark_node_parent(node); - grandparent = cmark_node_parent(parent); - if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) { - tight = grandparent->as.list.tight; - } else { - tight = false; - } - if (!tight) { - if (entering) { - cr(html); - cmark_strbuf_puts(html, "<p"); - S_render_sourcepos(node, html, options); - cmark_strbuf_putc(html, '>'); - } else { - cmark_strbuf_puts(html, "</p>\n"); - } - } - break; - - case CMARK_NODE_TEXT: - escape_html(html, node->as.literal.data, node->as.literal.len); - break; - - case CMARK_NODE_LINEBREAK: - cmark_strbuf_puts(html, "<br />\n"); - break; - - case CMARK_NODE_SOFTBREAK: - if (options & CMARK_OPT_HARDBREAKS) { - cmark_strbuf_puts(html, "<br />\n"); - } else if (options & CMARK_OPT_NOBREAKS) { - cmark_strbuf_putc(html, ' '); - } else { - cmark_strbuf_putc(html, '\n'); - } - break; - - case CMARK_NODE_CODE: - cmark_strbuf_puts(html, "<code>"); - escape_html(html, node->as.literal.data, node->as.literal.len); - cmark_strbuf_puts(html, "</code>"); - break; - - case CMARK_NODE_HTML_INLINE: - if (!(options & CMARK_OPT_UNSAFE)) { - cmark_strbuf_puts(html, "<!-- raw HTML omitted -->"); - } else { - cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len); - } - break; - - case CMARK_NODE_CUSTOM_INLINE: - if (entering) { - cmark_strbuf_put(html, node->as.custom.on_enter.data, - node->as.custom.on_enter.len); - } else { - cmark_strbuf_put(html, node->as.custom.on_exit.data, - node->as.custom.on_exit.len); - } - break; - - case CMARK_NODE_STRONG: - if (entering) { - cmark_strbuf_puts(html, "<strong>"); - } else { - cmark_strbuf_puts(html, "</strong>"); - } - break; - - case CMARK_NODE_EMPH: - if (entering) { - cmark_strbuf_puts(html, "<em>"); - } else { - cmark_strbuf_puts(html, "</em>"); - } - break; - - case CMARK_NODE_LINK: - if (entering) { - cmark_strbuf_puts(html, "<a href=\""); - if ((options & CMARK_OPT_UNSAFE) || - !(scan_dangerous_url(&node->as.link.url, 0))) { - houdini_escape_href(html, node->as.link.url.data, - node->as.link.url.len); - } - if (node->as.link.title.len) { - cmark_strbuf_puts(html, "\" title=\""); - escape_html(html, node->as.link.title.data, node->as.link.title.len); - } - cmark_strbuf_puts(html, "\">"); - } else { - cmark_strbuf_puts(html, "</a>"); - } - break; - - case CMARK_NODE_IMAGE: - if (entering) { - cmark_strbuf_puts(html, "<img src=\""); - if ((options & CMARK_OPT_UNSAFE) || - !(scan_dangerous_url(&node->as.link.url, 0))) { - houdini_escape_href(html, node->as.link.url.data, - node->as.link.url.len); - } - cmark_strbuf_puts(html, "\" alt=\""); - state->plain = node; - } else { - if (node->as.link.title.len) { - cmark_strbuf_puts(html, "\" title=\""); - escape_html(html, node->as.link.title.data, node->as.link.title.len); - } - - cmark_strbuf_puts(html, "\" />"); - } - break; - - default: - assert(false); - break; - } - - // cmark_strbuf_putc(html, 'x'); - return 1; -} - -char *cmark_render_html(cmark_node *root, int options) { - char *result; - cmark_strbuf html = CMARK_BUF_INIT(cmark_node_mem(root)); - cmark_event_type ev_type; - cmark_node *cur; - struct render_state state = {&html, NULL}; - cmark_iter *iter = cmark_iter_new(root); - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state, options); - } - result = (char *)cmark_strbuf_detach(&html); - - cmark_iter_free(iter); - return result; -} diff --git a/Pods/Down/Source/cmark/include/module.modulemap b/Pods/Down/Source/cmark/include/module.modulemap deleted file mode 100644 index e63fc6c..0000000 --- a/Pods/Down/Source/cmark/include/module.modulemap +++ /dev/null @@ -1,4 +0,0 @@ -module libcmark [system][extern_c] { - header "../node.h" - export * -} diff --git a/Pods/Down/Source/cmark/inlines.c b/Pods/Down/Source/cmark/inlines.c deleted file mode 100755 index e6b491f..0000000 --- a/Pods/Down/Source/cmark/inlines.c +++ /dev/null @@ -1,1384 +0,0 @@ -#include <stdlib.h> -#include <string.h> -#include <stdio.h> - -#include "cmark_ctype.h" -#include "config.h" -#include "node.h" -#include "parser.h" -#include "references.h" -#include "cmark.h" -#include "houdini.h" -#include "utf8.h" -#include "scanners.h" -#include "inlines.h" - -static const char *EMDASH = "\xE2\x80\x94"; -static const char *ENDASH = "\xE2\x80\x93"; -static const char *ELLIPSES = "\xE2\x80\xA6"; -static const char *LEFTDOUBLEQUOTE = "\xE2\x80\x9C"; -static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D"; -static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98"; -static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99"; - -// Macros for creating various kinds of simple. -#define make_str(subj, sc, ec, s) make_literal(subj, CMARK_NODE_TEXT, sc, ec, s) -#define make_code(subj, sc, ec, s) make_literal(subj, CMARK_NODE_CODE, sc, ec, s) -#define make_raw_html(subj, sc, ec, s) make_literal(subj, CMARK_NODE_HTML_INLINE, sc, ec, s) -#define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK) -#define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK) -#define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH) -#define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG) - -#define MAXBACKTICKS 1000 - -typedef struct delimiter { - struct delimiter *previous; - struct delimiter *next; - cmark_node *inl_text; - bufsize_t length; - unsigned char delim_char; - bool can_open; - bool can_close; -} delimiter; - -typedef struct bracket { - struct bracket *previous; - struct delimiter *previous_delimiter; - cmark_node *inl_text; - bufsize_t position; - bool image; - bool active; - bool bracket_after; -} bracket; - -typedef struct { - cmark_mem *mem; - cmark_chunk input; - int line; - bufsize_t pos; - int block_offset; - int column_offset; - cmark_reference_map *refmap; - delimiter *last_delim; - bracket *last_bracket; - bufsize_t backticks[MAXBACKTICKS + 1]; - bool scanned_for_backticks; -} subject; - -static CMARK_INLINE bool S_is_line_end_char(char c) { - return (c == '\n' || c == '\r'); -} - -static delimiter *S_insert_emph(subject *subj, delimiter *opener, - delimiter *closer); - -static int parse_inline(subject *subj, cmark_node *parent, int options); - -static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e, - cmark_chunk *chunk, cmark_reference_map *refmap); -static bufsize_t subject_find_special_char(subject *subj, int options); - -// Create an inline with a literal string value. -static CMARK_INLINE cmark_node *make_literal(subject *subj, cmark_node_type t, - int start_column, int end_column, - cmark_chunk s) { - cmark_node *e = (cmark_node *)subj->mem->calloc(1, sizeof(*e)); - cmark_strbuf_init(subj->mem, &e->content, 0); - e->type = (uint16_t)t; - e->as.literal = s; - e->start_line = e->end_line = subj->line; - // columns are 1 based. - e->start_column = start_column + 1 + subj->column_offset + subj->block_offset; - e->end_column = end_column + 1 + subj->column_offset + subj->block_offset; - return e; -} - -// Create an inline with no value. -static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) { - cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e)); - cmark_strbuf_init(mem, &e->content, 0); - e->type = t; - return e; -} - -// Like make_str, but parses entities. -static cmark_node *make_str_with_entities(subject *subj, - int start_column, int end_column, - cmark_chunk *content) { - cmark_strbuf unescaped = CMARK_BUF_INIT(subj->mem); - - if (houdini_unescape_html(&unescaped, content->data, content->len)) { - return make_str(subj, start_column, end_column, cmark_chunk_buf_detach(&unescaped)); - } else { - return make_str(subj, start_column, end_column, *content); - } -} - -// Duplicate a chunk by creating a copy of the buffer not by reusing the -// buffer like cmark_chunk_dup does. -static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) { - cmark_chunk c; - bufsize_t len = src->len; - - c.len = len; - c.data = (unsigned char *)mem->calloc(len + 1, 1); - c.alloc = 1; - if (len) - memcpy(c.data, src->data, len); - c.data[len] = '\0'; - - return c; -} - -static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url, - int is_email) { - cmark_strbuf buf = CMARK_BUF_INIT(mem); - - cmark_chunk_trim(url); - - if (url->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } - - if (is_email) - cmark_strbuf_puts(&buf, "mailto:"); - - houdini_unescape_html_f(&buf, url->data, url->len); - return cmark_chunk_buf_detach(&buf); -} - -static CMARK_INLINE cmark_node *make_autolink(subject *subj, - int start_column, int end_column, - cmark_chunk url, int is_email) { - cmark_node *link = make_simple(subj->mem, CMARK_NODE_LINK); - link->as.link.url = cmark_clean_autolink(subj->mem, &url, is_email); - link->as.link.title = cmark_chunk_literal(""); - link->start_line = link->end_line = subj->line; - link->start_column = start_column + 1; - link->end_column = end_column + 1; - cmark_node_append_child(link, make_str_with_entities(subj, start_column + 1, end_column - 1, &url)); - return link; -} - -static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e, - cmark_chunk *chunk, cmark_reference_map *refmap) { - int i; - e->mem = mem; - e->input = *chunk; - e->line = line_number; - e->pos = 0; - e->block_offset = block_offset; - e->column_offset = 0; - e->refmap = refmap; - e->last_delim = NULL; - e->last_bracket = NULL; - for (i = 0; i <= MAXBACKTICKS; i++) { - e->backticks[i] = 0; - } - e->scanned_for_backticks = false; -} - -static CMARK_INLINE int isbacktick(int c) { return (c == '`'); } - -static CMARK_INLINE unsigned char peek_char(subject *subj) { - // NULL bytes should have been stripped out by now. If they're - // present, it's a programming error: - assert(!(subj->pos < subj->input.len && subj->input.data[subj->pos] == 0)); - return (subj->pos < subj->input.len) ? subj->input.data[subj->pos] : 0; -} - -static CMARK_INLINE unsigned char peek_at(subject *subj, bufsize_t pos) { - return subj->input.data[pos]; -} - -// Return true if there are more characters in the subject. -static CMARK_INLINE int is_eof(subject *subj) { - return (subj->pos >= subj->input.len); -} - -// Advance the subject. Doesn't check for eof. -#define advance(subj) (subj)->pos += 1 - -static CMARK_INLINE bool skip_spaces(subject *subj) { - bool skipped = false; - while (peek_char(subj) == ' ' || peek_char(subj) == '\t') { - advance(subj); - skipped = true; - } - return skipped; -} - -static CMARK_INLINE bool skip_line_end(subject *subj) { - bool seen_line_end_char = false; - if (peek_char(subj) == '\r') { - advance(subj); - seen_line_end_char = true; - } - if (peek_char(subj) == '\n') { - advance(subj); - seen_line_end_char = true; - } - return seen_line_end_char || is_eof(subj); -} - -// Take characters while a predicate holds, and return a string. -static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) { - unsigned char c; - bufsize_t startpos = subj->pos; - bufsize_t len = 0; - - while ((c = peek_char(subj)) && (*f)(c)) { - advance(subj); - len++; - } - - return cmark_chunk_dup(&subj->input, startpos, len); -} - -// Return the number of newlines in a given span of text in a subject. If -// the number is greater than zero, also return the number of characters -// between the last newline and the end of the span in `since_newline`. -static int count_newlines(subject *subj, bufsize_t from, bufsize_t len, int *since_newline) { - int nls = 0; - int since_nl = 0; - - while (len--) { - if (subj->input.data[from++] == '\n') { - ++nls; - since_nl = 0; - } else { - ++since_nl; - } - } - - if (!nls) - return 0; - - *since_newline = since_nl; - return nls; -} - -// Adjust `node`'s `end_line`, `end_column`, and `subj`'s `line` and -// `column_offset` according to the number of newlines in a just-matched span -// of text in `subj`. -static void adjust_subj_node_newlines(subject *subj, cmark_node *node, int matchlen, int extra, int options) { - if (!(options & CMARK_OPT_SOURCEPOS)) { - return; - } - - int since_newline; - int newlines = count_newlines(subj, subj->pos - matchlen - extra, matchlen, &since_newline); - if (newlines) { - subj->line += newlines; - node->end_line += newlines; - node->end_column = since_newline; - subj->column_offset = -subj->pos + since_newline + extra; - } -} - -// Try to process a backtick code span that began with a -// span of ticks of length openticklength length (already -// parsed). Return 0 if you don't find matching closing -// backticks, otherwise return the position in the subject -// after the closing backticks. -static bufsize_t scan_to_closing_backticks(subject *subj, - bufsize_t openticklength) { - - bool found = false; - if (openticklength > MAXBACKTICKS) { - // we limit backtick string length because of the array subj->backticks: - return 0; - } - if (subj->scanned_for_backticks && - subj->backticks[openticklength] <= subj->pos) { - // return if we already know there's no closer - return 0; - } - while (!found) { - // read non backticks - unsigned char c; - while ((c = peek_char(subj)) && c != '`') { - advance(subj); - } - if (is_eof(subj)) { - break; - } - bufsize_t numticks = 0; - while (peek_char(subj) == '`') { - advance(subj); - numticks++; - } - // store position of ender - if (numticks <= MAXBACKTICKS) { - subj->backticks[numticks] = subj->pos - numticks; - } - if (numticks == openticklength) { - return (subj->pos); - } - } - // got through whole input without finding closer - subj->scanned_for_backticks = true; - return 0; -} - -// Destructively modify string, converting newlines to -// spaces, then removing a single leading + trailing space, -// unless the code span consists entirely of space characters. -static void S_normalize_code(cmark_strbuf *s) { - bufsize_t r, w; - bool contains_nonspace = false; - - for (r = 0, w = 0; r < s->size; ++r) { - switch (s->ptr[r]) { - case '\r': - if (s->ptr[r + 1] != '\n') { - s->ptr[w++] = ' '; - } - break; - case '\n': - s->ptr[w++] = ' '; - break; - default: - s->ptr[w++] = s->ptr[r]; - } - if (s->ptr[r] != ' ') { - contains_nonspace = true; - } - } - - // begins and ends with space? - if (contains_nonspace && - s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') { - cmark_strbuf_drop(s, 1); - cmark_strbuf_truncate(s, w - 2); - } else { - cmark_strbuf_truncate(s, w); - } - -} - - -// Parse backtick code section or raw backticks, return an inline. -// Assumes that the subject has a backtick at the current position. -static cmark_node *handle_backticks(subject *subj, int options) { - cmark_chunk openticks = take_while(subj, isbacktick); - bufsize_t startpos = subj->pos; - bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len); - - if (endpos == 0) { // not found - subj->pos = startpos; // rewind - return make_str(subj, subj->pos, subj->pos, openticks); - } else { - cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); - - cmark_strbuf_set(&buf, subj->input.data + startpos, - endpos - startpos - openticks.len); - S_normalize_code(&buf); - - cmark_node *node = make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf)); - adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len, options); - return node; - } -} - - -// Scan ***, **, or * and return number scanned, or 0. -// Advances position. -static int scan_delims(subject *subj, unsigned char c, bool *can_open, - bool *can_close) { - int numdelims = 0; - bufsize_t before_char_pos; - int32_t after_char = 0; - int32_t before_char = 0; - int len; - bool left_flanking, right_flanking; - - if (subj->pos == 0) { - before_char = 10; - } else { - before_char_pos = subj->pos - 1; - // walk back to the beginning of the UTF_8 sequence: - while (peek_at(subj, before_char_pos) >> 6 == 2 && before_char_pos > 0) { - before_char_pos -= 1; - } - len = cmark_utf8proc_iterate(subj->input.data + before_char_pos, - subj->pos - before_char_pos, &before_char); - if (len == -1) { - before_char = 10; - } - } - - if (c == '\'' || c == '"') { - numdelims++; - advance(subj); // limit to 1 delim for quotes - } else { - while (peek_char(subj) == c) { - numdelims++; - advance(subj); - } - } - - len = cmark_utf8proc_iterate(subj->input.data + subj->pos, - subj->input.len - subj->pos, &after_char); - if (len == -1) { - after_char = 10; - } - left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) && - (!cmark_utf8proc_is_punctuation(after_char) || - cmark_utf8proc_is_space(before_char) || - cmark_utf8proc_is_punctuation(before_char)); - right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) && - (!cmark_utf8proc_is_punctuation(before_char) || - cmark_utf8proc_is_space(after_char) || - cmark_utf8proc_is_punctuation(after_char)); - if (c == '_') { - *can_open = left_flanking && - (!right_flanking || cmark_utf8proc_is_punctuation(before_char)); - *can_close = right_flanking && - (!left_flanking || cmark_utf8proc_is_punctuation(after_char)); - } else if (c == '\'' || c == '"') { - *can_open = left_flanking && !right_flanking && - before_char != ']' && before_char != ')'; - *can_close = right_flanking; - } else { - *can_open = left_flanking; - *can_close = right_flanking; - } - return numdelims; -} - -/* -static void print_delimiters(subject *subj) -{ - delimiter *delim; - delim = subj->last_delim; - while (delim != NULL) { - printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n", - (void*)delim, delim->delim_char, - delim->can_open, delim->can_close, - (void*)delim->next, (void*)delim->previous); - delim = delim->previous; - } -} -*/ - -static void remove_delimiter(subject *subj, delimiter *delim) { - if (delim == NULL) - return; - if (delim->next == NULL) { - // end of list: - assert(delim == subj->last_delim); - subj->last_delim = delim->previous; - } else { - delim->next->previous = delim->previous; - } - if (delim->previous != NULL) { - delim->previous->next = delim->next; - } - subj->mem->free(delim); -} - -static void pop_bracket(subject *subj) { - bracket *b; - if (subj->last_bracket == NULL) - return; - b = subj->last_bracket; - subj->last_bracket = subj->last_bracket->previous; - subj->mem->free(b); -} - -static void push_delimiter(subject *subj, unsigned char c, bool can_open, - bool can_close, cmark_node *inl_text) { - delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter)); - delim->delim_char = c; - delim->can_open = can_open; - delim->can_close = can_close; - delim->inl_text = inl_text; - delim->length = inl_text->as.literal.len; - delim->previous = subj->last_delim; - delim->next = NULL; - if (delim->previous != NULL) { - delim->previous->next = delim; - } - subj->last_delim = delim; -} - -static void push_bracket(subject *subj, bool image, cmark_node *inl_text) { - bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket)); - if (subj->last_bracket != NULL) { - subj->last_bracket->bracket_after = true; - } - b->image = image; - b->active = true; - b->inl_text = inl_text; - b->previous = subj->last_bracket; - b->previous_delimiter = subj->last_delim; - b->position = subj->pos; - b->bracket_after = false; - subj->last_bracket = b; -} - -// Assumes the subject has a c at the current position. -static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) { - bufsize_t numdelims; - cmark_node *inl_text; - bool can_open, can_close; - cmark_chunk contents; - - numdelims = scan_delims(subj, c, &can_open, &can_close); - - if (c == '\'' && smart) { - contents = cmark_chunk_literal(RIGHTSINGLEQUOTE); - } else if (c == '"' && smart) { - contents = - cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE); - } else { - contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims); - } - - inl_text = make_str(subj, subj->pos - numdelims, subj->pos - 1, contents); - - if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) { - push_delimiter(subj, c, can_open, can_close, inl_text); - } - - return inl_text; -} - -// Assumes we have a hyphen at the current position. -static cmark_node *handle_hyphen(subject *subj, bool smart) { - int startpos = subj->pos; - - advance(subj); - - if (!smart || peek_char(subj) != '-') { - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("-")); - } - - while (smart && peek_char(subj) == '-') { - advance(subj); - } - - int numhyphens = subj->pos - startpos; - int en_count = 0; - int em_count = 0; - int i; - cmark_strbuf buf = CMARK_BUF_INIT(subj->mem); - - if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes - em_count = numhyphens / 3; - } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes - en_count = numhyphens / 2; - } else if (numhyphens % 3 == 2) { // use one en dash at end - en_count = 1; - em_count = (numhyphens - 2) / 3; - } else { // use two en dashes at the end - en_count = 2; - em_count = (numhyphens - 4) / 3; - } - - for (i = em_count; i > 0; i--) { - cmark_strbuf_puts(&buf, EMDASH); - } - - for (i = en_count; i > 0; i--) { - cmark_strbuf_puts(&buf, ENDASH); - } - - return make_str(subj, startpos, subj->pos - 1, cmark_chunk_buf_detach(&buf)); -} - -// Assumes we have a period at the current position. -static cmark_node *handle_period(subject *subj, bool smart) { - advance(subj); - if (smart && peek_char(subj) == '.') { - advance(subj); - if (peek_char(subj) == '.') { - advance(subj); - return make_str(subj, subj->pos - 3, subj->pos - 1, cmark_chunk_literal(ELLIPSES)); - } else { - return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal("..")); - } - } else { - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal(".")); - } -} - -static void process_emphasis(subject *subj, delimiter *stack_bottom) { - delimiter *closer = subj->last_delim; - delimiter *opener; - delimiter *old_closer; - bool opener_found; - int openers_bottom_index = 0; - delimiter *openers_bottom[6] = {stack_bottom, stack_bottom, stack_bottom, - stack_bottom, stack_bottom, stack_bottom}; - - // move back to first relevant delim. - while (closer != NULL && closer->previous != stack_bottom) { - closer = closer->previous; - } - - // now move forward, looking for closers, and handling each - while (closer != NULL) { - if (closer->can_close) { - switch (closer->delim_char) { - case '"': - openers_bottom_index = 0; - break; - case '\'': - openers_bottom_index = 1; - break; - case '_': - openers_bottom_index = 2; - break; - case '*': - openers_bottom_index = 3 + (closer->length % 3); - break; - default: - assert(false); - } - - // Now look backwards for first matching opener: - opener = closer->previous; - opener_found = false; - while (opener != NULL && opener != openers_bottom[openers_bottom_index]) { - if (opener->can_open && opener->delim_char == closer->delim_char) { - // interior closer of size 2 can't match opener of size 1 - // or of size 1 can't match 2 - if (!(closer->can_open || opener->can_close) || - closer->length % 3 == 0 || - (opener->length + closer->length) % 3 != 0) { - opener_found = true; - break; - } - } - opener = opener->previous; - } - old_closer = closer; - if (closer->delim_char == '*' || closer->delim_char == '_') { - if (opener_found) { - closer = S_insert_emph(subj, opener, closer); - } else { - closer = closer->next; - } - } else if (closer->delim_char == '\'') { - cmark_chunk_free(subj->mem, &closer->inl_text->as.literal); - closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE); - if (opener_found) { - cmark_chunk_free(subj->mem, &opener->inl_text->as.literal); - opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE); - } - closer = closer->next; - } else if (closer->delim_char == '"') { - cmark_chunk_free(subj->mem, &closer->inl_text->as.literal); - closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE); - if (opener_found) { - cmark_chunk_free(subj->mem, &opener->inl_text->as.literal); - opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE); - } - closer = closer->next; - } - if (!opener_found) { - // set lower bound for future searches for openers - openers_bottom[openers_bottom_index] = old_closer->previous; - if (!old_closer->can_open) { - // we can remove a closer that can't be an - // opener, once we've seen there's no - // matching opener: - remove_delimiter(subj, old_closer); - } - } - } else { - closer = closer->next; - } - } - // free all delimiters in list until stack_bottom: - while (subj->last_delim != NULL && subj->last_delim != stack_bottom) { - remove_delimiter(subj, subj->last_delim); - } -} - -static delimiter *S_insert_emph(subject *subj, delimiter *opener, - delimiter *closer) { - delimiter *delim, *tmp_delim; - bufsize_t use_delims; - cmark_node *opener_inl = opener->inl_text; - cmark_node *closer_inl = closer->inl_text; - bufsize_t opener_num_chars = opener_inl->as.literal.len; - bufsize_t closer_num_chars = closer_inl->as.literal.len; - cmark_node *tmp, *tmpnext, *emph; - - // calculate the actual number of characters used from this closer - use_delims = (closer_num_chars >= 2 && opener_num_chars >= 2) ? 2 : 1; - - // remove used characters from associated inlines. - opener_num_chars -= use_delims; - closer_num_chars -= use_delims; - opener_inl->as.literal.len = opener_num_chars; - closer_inl->as.literal.len = closer_num_chars; - - // free delimiters between opener and closer - delim = closer->previous; - while (delim != NULL && delim != opener) { - tmp_delim = delim->previous; - remove_delimiter(subj, delim); - delim = tmp_delim; - } - - // create new emph or strong, and splice it in to our inlines - // between the opener and closer - emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem); - - tmp = opener_inl->next; - while (tmp && tmp != closer_inl) { - tmpnext = tmp->next; - cmark_node_append_child(emph, tmp); - tmp = tmpnext; - } - cmark_node_insert_after(opener_inl, emph); - - emph->start_line = opener_inl->start_line; - emph->end_line = closer_inl->end_line; - emph->start_column = opener_inl->start_column; - emph->end_column = closer_inl->end_column; - - // if opener has 0 characters, remove it and its associated inline - if (opener_num_chars == 0) { - cmark_node_free(opener_inl); - remove_delimiter(subj, opener); - } - - // if closer has 0 characters, remove it and its associated inline - if (closer_num_chars == 0) { - // remove empty closer inline - cmark_node_free(closer_inl); - // remove closer from list - tmp_delim = closer->next; - remove_delimiter(subj, closer); - closer = tmp_delim; - } - - return closer; -} - -// Parse backslash-escape or just a backslash, returning an inline. -static cmark_node *handle_backslash(subject *subj) { - advance(subj); - unsigned char nextchar = peek_char(subj); - if (cmark_ispunct( - nextchar)) { // only ascii symbols and newline can be escaped - advance(subj); - return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_dup(&subj->input, subj->pos - 1, 1)); - } else if (!is_eof(subj) && skip_line_end(subj)) { - return make_linebreak(subj->mem); - } else { - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("\\")); - } -} - -// Parse an entity or a regular "&" string. -// Assumes the subject has an '&' character at the current position. -static cmark_node *handle_entity(subject *subj) { - cmark_strbuf ent = CMARK_BUF_INIT(subj->mem); - bufsize_t len; - - advance(subj); - - len = houdini_unescape_ent(&ent, subj->input.data + subj->pos, - subj->input.len - subj->pos); - - if (len == 0) - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("&")); - - subj->pos += len; - return make_str(subj, subj->pos - 1 - len, subj->pos - 1, cmark_chunk_buf_detach(&ent)); -} - -// Clean a URL: remove surrounding whitespace, and remove \ that escape -// punctuation. -cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) { - cmark_strbuf buf = CMARK_BUF_INIT(mem); - - cmark_chunk_trim(url); - - if (url->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } - - houdini_unescape_html_f(&buf, url->data, url->len); - - cmark_strbuf_unescape(&buf); - return cmark_chunk_buf_detach(&buf); -} - -cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) { - cmark_strbuf buf = CMARK_BUF_INIT(mem); - unsigned char first, last; - - if (title->len == 0) { - cmark_chunk result = CMARK_CHUNK_EMPTY; - return result; - } - - first = title->data[0]; - last = title->data[title->len - 1]; - - // remove surrounding quotes if any: - if ((first == '\'' && last == '\'') || (first == '(' && last == ')') || - (first == '"' && last == '"')) { - houdini_unescape_html_f(&buf, title->data + 1, title->len - 2); - } else { - houdini_unescape_html_f(&buf, title->data, title->len); - } - - cmark_strbuf_unescape(&buf); - return cmark_chunk_buf_detach(&buf); -} - -// Parse an autolink or HTML tag. -// Assumes the subject has a '<' character at the current position. -static cmark_node *handle_pointy_brace(subject *subj, int options) { - bufsize_t matchlen = 0; - cmark_chunk contents; - - advance(subj); // advance past first < - - // first try to match a URL autolink - matchlen = scan_autolink_uri(&subj->input, subj->pos); - if (matchlen > 0) { - contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); - subj->pos += matchlen; - - return make_autolink(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 0); - } - - // next try to match an email autolink - matchlen = scan_autolink_email(&subj->input, subj->pos); - if (matchlen > 0) { - contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1); - subj->pos += matchlen; - - return make_autolink(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 1); - } - - // finally, try to match an html tag - matchlen = scan_html_tag(&subj->input, subj->pos); - if (matchlen > 0) { - contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1); - subj->pos += matchlen; - cmark_node *node = make_raw_html(subj, subj->pos - matchlen - 1, subj->pos - 1, contents); - adjust_subj_node_newlines(subj, node, matchlen, 1, options); - return node; - } - - // if nothing matches, just return the opening <: - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("<")); -} - -// Parse a link label. Returns 1 if successful. -// Note: unescaped brackets are not allowed in labels. -// The label begins with `[` and ends with the first `]` character -// encountered. Backticks in labels do not start code spans. -static int link_label(subject *subj, cmark_chunk *raw_label) { - bufsize_t startpos = subj->pos; - int length = 0; - unsigned char c; - - // advance past [ - if (peek_char(subj) == '[') { - advance(subj); - } else { - return 0; - } - - while ((c = peek_char(subj)) && c != '[' && c != ']') { - if (c == '\\') { - advance(subj); - length++; - if (cmark_ispunct(peek_char(subj))) { - advance(subj); - length++; - } - } else { - advance(subj); - length++; - } - if (length > MAX_LINK_LABEL_LENGTH) { - goto noMatch; - } - } - - if (c == ']') { // match found - *raw_label = - cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1)); - cmark_chunk_trim(raw_label); - advance(subj); // advance past ] - return 1; - } - -noMatch: - subj->pos = startpos; // rewind - return 0; -} - -static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset, - cmark_chunk *output) { - bufsize_t i = offset; - size_t nb_p = 0; - - while (i < input->len) { - if (input->data[i] == '\\' && - i + 1 < input-> len && - cmark_ispunct(input->data[i+1])) - i += 2; - else if (input->data[i] == '(') { - ++nb_p; - ++i; - if (nb_p > 32) - return -1; - } else if (input->data[i] == ')') { - if (nb_p == 0) - break; - --nb_p; - ++i; - } else if (cmark_isspace(input->data[i])) { - if (i == offset) { - return -1; - } - break; - } else { - ++i; - } - } - - if (i >= input->len) - return -1; - - { - cmark_chunk result = {input->data + offset, i - offset, 0}; - *output = result; - } - return i - offset; -} - -static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset, - cmark_chunk *output) { - bufsize_t i = offset; - - if (i < input->len && input->data[i] == '<') { - ++i; - while (i < input->len) { - if (input->data[i] == '>') { - ++i; - break; - } else if (input->data[i] == '\\') - i += 2; - else if (input->data[i] == '\n' || input->data[i] == '<') - return -1; - else - ++i; - } - } else { - return manual_scan_link_url_2(input, offset, output); - } - - if (i >= input->len) - return -1; - - { - cmark_chunk result = {input->data + offset + 1, i - 2 - offset, 0}; - *output = result; - } - return i - offset; -} - -// Return a link, an image, or a literal close bracket. -static cmark_node *handle_close_bracket(subject *subj) { - bufsize_t initial_pos, after_link_text_pos; - bufsize_t endurl, starttitle, endtitle, endall; - bufsize_t sps, n; - cmark_reference *ref = NULL; - cmark_chunk url_chunk, title_chunk; - cmark_chunk url, title; - bracket *opener; - cmark_node *inl; - cmark_chunk raw_label; - int found_label; - cmark_node *tmp, *tmpnext; - bool is_image; - - advance(subj); // advance past ] - initial_pos = subj->pos; - - // get last [ or ![ - opener = subj->last_bracket; - - if (opener == NULL) { - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]")); - } - - if (!opener->active) { - // take delimiter off stack - pop_bracket(subj); - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]")); - } - - // If we got here, we matched a potential link/image text. - // Now we check to see if it's a link/image. - is_image = opener->image; - - after_link_text_pos = subj->pos; - - // First, look for an inline link. - if (peek_char(subj) == '(' && - ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) && - ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps, - &url_chunk)) > -1)) { - - // try to parse an explicit link: - endurl = subj->pos + 1 + sps + n; - starttitle = endurl + scan_spacechars(&subj->input, endurl); - - // ensure there are spaces btw url and title - endtitle = (starttitle == endurl) - ? starttitle - : starttitle + scan_link_title(&subj->input, starttitle); - - endall = endtitle + scan_spacechars(&subj->input, endtitle); - - if (peek_at(subj, endall) == ')') { - subj->pos = endall + 1; - - title_chunk = - cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle); - url = cmark_clean_url(subj->mem, &url_chunk); - title = cmark_clean_title(subj->mem, &title_chunk); - cmark_chunk_free(subj->mem, &url_chunk); - cmark_chunk_free(subj->mem, &title_chunk); - goto match; - - } else { - // it could still be a shortcut reference link - subj->pos = after_link_text_pos; - } - } - - // Next, look for a following [link label] that matches in refmap. - // skip spaces - raw_label = cmark_chunk_literal(""); - found_label = link_label(subj, &raw_label); - if (!found_label) { - // If we have a shortcut reference link, back up - // to before the spacse we skipped. - subj->pos = initial_pos; - } - - if ((!found_label || raw_label.len == 0) && !opener->bracket_after) { - cmark_chunk_free(subj->mem, &raw_label); - raw_label = cmark_chunk_dup(&subj->input, opener->position, - initial_pos - opener->position - 1); - found_label = true; - } - - if (found_label) { - ref = cmark_reference_lookup(subj->refmap, &raw_label); - cmark_chunk_free(subj->mem, &raw_label); - } - - if (ref != NULL) { // found - url = chunk_clone(subj->mem, &ref->url); - title = chunk_clone(subj->mem, &ref->title); - goto match; - } else { - goto noMatch; - } - -noMatch: - // If we fall through to here, it means we didn't match a link: - pop_bracket(subj); // remove this opener from delimiter list - subj->pos = initial_pos; - return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]")); - -match: - inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK); - inl->as.link.url = url; - inl->as.link.title = title; - inl->start_line = inl->end_line = subj->line; - inl->start_column = opener->inl_text->start_column; - inl->end_column = subj->pos + subj->column_offset + subj->block_offset; - cmark_node_insert_before(opener->inl_text, inl); - // Add link text: - tmp = opener->inl_text->next; - while (tmp) { - tmpnext = tmp->next; - cmark_node_append_child(inl, tmp); - tmp = tmpnext; - } - - // Free the bracket [: - cmark_node_free(opener->inl_text); - - process_emphasis(subj, opener->previous_delimiter); - pop_bracket(subj); - - // Now, if we have a link, we also want to deactivate earlier link - // delimiters. (This code can be removed if we decide to allow links - // inside links.) - if (!is_image) { - opener = subj->last_bracket; - while (opener != NULL) { - if (!opener->image) { - if (!opener->active) { - break; - } else { - opener->active = false; - } - } - opener = opener->previous; - } - } - - return NULL; -} - -// Parse a hard or soft linebreak, returning an inline. -// Assumes the subject has a cr or newline at the current position. -static cmark_node *handle_newline(subject *subj) { - bufsize_t nlpos = subj->pos; - // skip over cr, crlf, or lf: - if (peek_at(subj, subj->pos) == '\r') { - advance(subj); - } - if (peek_at(subj, subj->pos) == '\n') { - advance(subj); - } - ++subj->line; - subj->column_offset = -subj->pos; - // skip spaces at beginning of line - skip_spaces(subj); - if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' && - peek_at(subj, nlpos - 2) == ' ') { - return make_linebreak(subj->mem); - } else { - return make_softbreak(subj->mem); - } -} - -static bufsize_t subject_find_special_char(subject *subj, int options) { - // "\r\n\\`&_*[]<!" - static const int8_t SPECIAL_CHARS[256] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; - - // " ' . - - static const char SMART_PUNCT_CHARS[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - bufsize_t n = subj->pos + 1; - - while (n < subj->input.len) { - if (SPECIAL_CHARS[subj->input.data[n]]) - return n; - if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]]) - return n; - n++; - } - - return subj->input.len; -} - -// Parse an inline, advancing subject, and add it as a child of parent. -// Return 0 if no inline can be parsed, 1 otherwise. -static int parse_inline(subject *subj, cmark_node *parent, int options) { - cmark_node *new_inl = NULL; - cmark_chunk contents; - unsigned char c; - bufsize_t startpos, endpos; - c = peek_char(subj); - if (c == 0) { - return 0; - } - switch (c) { - case '\r': - case '\n': - new_inl = handle_newline(subj); - break; - case '`': - new_inl = handle_backticks(subj, options); - break; - case '\\': - new_inl = handle_backslash(subj); - break; - case '&': - new_inl = handle_entity(subj); - break; - case '<': - new_inl = handle_pointy_brace(subj, options); - break; - case '*': - case '_': - case '\'': - case '"': - new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0); - break; - case '-': - new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0); - break; - case '.': - new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0); - break; - case '[': - advance(subj); - new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("[")); - push_bracket(subj, false, new_inl); - break; - case ']': - new_inl = handle_close_bracket(subj); - break; - case '!': - advance(subj); - if (peek_char(subj) == '[') { - advance(subj); - new_inl = make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal("![")); - push_bracket(subj, true, new_inl); - } else { - new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("!")); - } - break; - default: - endpos = subject_find_special_char(subj, options); - contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos); - startpos = subj->pos; - subj->pos = endpos; - - // if we're at a newline, strip trailing spaces. - if (S_is_line_end_char(peek_char(subj))) { - cmark_chunk_rtrim(&contents); - } - - new_inl = make_str(subj, startpos, endpos - 1, contents); - } - if (new_inl != NULL) { - cmark_node_append_child(parent, new_inl); - } - - return 1; -} - -// Parse inlines from parent's string_content, adding as children of parent. -extern void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, - cmark_reference_map *refmap, int options) { - subject subj; - cmark_chunk content = {parent->content.ptr, parent->content.size, 0}; - subject_from_buf(mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &content, refmap); - cmark_chunk_rtrim(&subj.input); - - while (!is_eof(&subj) && parse_inline(&subj, parent, options)) - ; - - process_emphasis(&subj, NULL); - // free bracket and delim stack - while (subj.last_delim) { - remove_delimiter(&subj, subj.last_delim); - } - while (subj.last_bracket) { - pop_bracket(&subj); - } -} - -// Parse zero or more space characters, including at most one newline. -static void spnl(subject *subj) { - skip_spaces(subj); - if (skip_line_end(subj)) { - skip_spaces(subj); - } -} - -// Parse reference. Assumes string begins with '[' character. -// Modify refmap if a reference is encountered. -// Return 0 if no reference found, otherwise position of subject -// after reference is parsed. -bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input, - cmark_reference_map *refmap) { - subject subj; - - cmark_chunk lab; - cmark_chunk url; - cmark_chunk title; - - bufsize_t matchlen = 0; - bufsize_t beforetitle; - - subject_from_buf(mem, -1, 0, &subj, input, NULL); - - // parse label: - if (!link_label(&subj, &lab) || lab.len == 0) - return 0; - - // colon: - if (peek_char(&subj) == ':') { - advance(&subj); - } else { - return 0; - } - - // parse link url: - spnl(&subj); - if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1) { - subj.pos += matchlen; - } else { - return 0; - } - - // parse optional link_title - beforetitle = subj.pos; - spnl(&subj); - matchlen = subj.pos == beforetitle ? 0 : scan_link_title(&subj.input, subj.pos); - if (matchlen) { - title = cmark_chunk_dup(&subj.input, subj.pos, matchlen); - subj.pos += matchlen; - } else { - subj.pos = beforetitle; - title = cmark_chunk_literal(""); - } - - // parse final spaces and newline: - skip_spaces(&subj); - if (!skip_line_end(&subj)) { - if (matchlen) { // try rewinding before title - subj.pos = beforetitle; - skip_spaces(&subj); - if (!skip_line_end(&subj)) { - return 0; - } - } else { - return 0; - } - } - // insert reference into refmap - cmark_reference_create(refmap, &lab, &url, &title); - return subj.pos; -} diff --git a/Pods/Down/Source/cmark/inlines.h b/Pods/Down/Source/cmark/inlines.h deleted file mode 100755 index 39d3363..0000000 --- a/Pods/Down/Source/cmark/inlines.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef CMARK_INLINES_H -#define CMARK_INLINES_H - -#ifdef __cplusplus -extern "C" { -#endif - -cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url); -cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title); - -void cmark_parse_inlines(cmark_mem *mem, cmark_node *parent, - cmark_reference_map *refmap, int options); - -bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input, - cmark_reference_map *refmap); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/iterator.c b/Pods/Down/Source/cmark/iterator.c deleted file mode 100755 index f5cd802..0000000 --- a/Pods/Down/Source/cmark/iterator.c +++ /dev/null @@ -1,121 +0,0 @@ -#include <assert.h> -#include <stdlib.h> - -#include "config.h" -#include "node.h" -#include "cmark.h" -#include "iterator.h" - -static const int S_leaf_mask = - (1 << CMARK_NODE_HTML_BLOCK) | (1 << CMARK_NODE_THEMATIC_BREAK) | - (1 << CMARK_NODE_CODE_BLOCK) | (1 << CMARK_NODE_TEXT) | - (1 << CMARK_NODE_SOFTBREAK) | (1 << CMARK_NODE_LINEBREAK) | - (1 << CMARK_NODE_CODE) | (1 << CMARK_NODE_HTML_INLINE); - -cmark_iter *cmark_iter_new(cmark_node *root) { - if (root == NULL) { - return NULL; - } - cmark_mem *mem = root->content.mem; - cmark_iter *iter = (cmark_iter *)mem->calloc(1, sizeof(cmark_iter)); - iter->mem = mem; - iter->root = root; - iter->cur.ev_type = CMARK_EVENT_NONE; - iter->cur.node = NULL; - iter->next.ev_type = CMARK_EVENT_ENTER; - iter->next.node = root; - return iter; -} - -void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); } - -static bool S_is_leaf(cmark_node *node) { - return ((1 << node->type) & S_leaf_mask) != 0; -} - -cmark_event_type cmark_iter_next(cmark_iter *iter) { - cmark_event_type ev_type = iter->next.ev_type; - cmark_node *node = iter->next.node; - - iter->cur.ev_type = ev_type; - iter->cur.node = node; - - if (ev_type == CMARK_EVENT_DONE) { - return ev_type; - } - - /* roll forward to next item, setting both fields */ - if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) { - if (node->first_child == NULL) { - /* stay on this node but exit */ - iter->next.ev_type = CMARK_EVENT_EXIT; - } else { - iter->next.ev_type = CMARK_EVENT_ENTER; - iter->next.node = node->first_child; - } - } else if (node == iter->root) { - /* don't move past root */ - iter->next.ev_type = CMARK_EVENT_DONE; - iter->next.node = NULL; - } else if (node->next) { - iter->next.ev_type = CMARK_EVENT_ENTER; - iter->next.node = node->next; - } else if (node->parent) { - iter->next.ev_type = CMARK_EVENT_EXIT; - iter->next.node = node->parent; - } else { - assert(false); - iter->next.ev_type = CMARK_EVENT_DONE; - iter->next.node = NULL; - } - - return ev_type; -} - -void cmark_iter_reset(cmark_iter *iter, cmark_node *current, - cmark_event_type event_type) { - iter->next.ev_type = event_type; - iter->next.node = current; - cmark_iter_next(iter); -} - -cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; } - -cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) { - return iter->cur.ev_type; -} - -cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; } - -void cmark_consolidate_text_nodes(cmark_node *root) { - if (root == NULL) { - return; - } - cmark_iter *iter = cmark_iter_new(root); - cmark_strbuf buf = CMARK_BUF_INIT(iter->mem); - cmark_event_type ev_type; - cmark_node *cur, *tmp, *next; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT && - cur->next && cur->next->type == CMARK_NODE_TEXT) { - cmark_strbuf_clear(&buf); - cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len); - tmp = cur->next; - while (tmp && tmp->type == CMARK_NODE_TEXT) { - cmark_iter_next(iter); // advance pointer - cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len); - cur->end_column = tmp->end_column; - next = tmp->next; - cmark_node_free(tmp); - tmp = next; - } - cmark_chunk_free(iter->mem, &cur->as.literal); - cur->as.literal = cmark_chunk_buf_detach(&buf); - } - } - - cmark_strbuf_free(&buf); - cmark_iter_free(iter); -} diff --git a/Pods/Down/Source/cmark/iterator.h b/Pods/Down/Source/cmark/iterator.h deleted file mode 100755 index 30ce76f..0000000 --- a/Pods/Down/Source/cmark/iterator.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef CMARK_ITERATOR_H -#define CMARK_ITERATOR_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "cmark.h" - -typedef struct { - cmark_event_type ev_type; - cmark_node *node; -} cmark_iter_state; - -struct cmark_iter { - cmark_mem *mem; - cmark_node *root; - cmark_iter_state cur; - cmark_iter_state next; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/latex.c b/Pods/Down/Source/cmark/latex.c deleted file mode 100755 index 0d9517d..0000000 --- a/Pods/Down/Source/cmark/latex.c +++ /dev/null @@ -1,453 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> - -#include "config.h" -#include "cmark.h" -#include "node.h" -#include "buffer.h" -#include "utf8.h" -#include "scanners.h" -#include "render.h" - -#define OUT(s, wrap, escaping) renderer->out(renderer, s, wrap, escaping) -#define LIT(s) renderer->out(renderer, s, false, LITERAL) -#define CR() renderer->cr(renderer) -#define BLANKLINE() renderer->blankline(renderer) -#define LIST_NUMBER_STRING_SIZE 20 - -static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_escaping escape, - int32_t c, unsigned char nextc) { - if (escape == LITERAL) { - cmark_render_code_point(renderer, c); - return; - } - - switch (c) { - case 123: // '{' - case 125: // '}' - case 35: // '#' - case 37: // '%' - case 38: // '&' - cmark_render_ascii(renderer, "\\"); - cmark_render_code_point(renderer, c); - break; - case 36: // '$' - case 95: // '_' - if (escape == NORMAL) { - cmark_render_ascii(renderer, "\\"); - } - cmark_render_code_point(renderer, c); - break; - case 45: // '-' - if (nextc == 45) { // prevent ligature - cmark_render_ascii(renderer, "-{}"); - } else { - cmark_render_ascii(renderer, "-"); - } - break; - case 126: // '~' - if (escape == NORMAL) { - cmark_render_ascii(renderer, "\\textasciitilde{}"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 94: // '^' - cmark_render_ascii(renderer, "\\^{}"); - break; - case 92: // '\\' - if (escape == URL) { - // / acts as path sep even on windows: - cmark_render_ascii(renderer, "/"); - } else { - cmark_render_ascii(renderer, "\\textbackslash{}"); - } - break; - case 124: // '|' - cmark_render_ascii(renderer, "\\textbar{}"); - break; - case 60: // '<' - cmark_render_ascii(renderer, "\\textless{}"); - break; - case 62: // '>' - cmark_render_ascii(renderer, "\\textgreater{}"); - break; - case 91: // '[' - case 93: // ']' - cmark_render_ascii(renderer, "{"); - cmark_render_code_point(renderer, c); - cmark_render_ascii(renderer, "}"); - break; - case 34: // '"' - cmark_render_ascii(renderer, "\\textquotedbl{}"); - // requires \usepackage[T1]{fontenc} - break; - case 39: // '\'' - cmark_render_ascii(renderer, "\\textquotesingle{}"); - // requires \usepackage{textcomp} - break; - case 160: // nbsp - cmark_render_ascii(renderer, "~"); - break; - case 8230: // hellip - cmark_render_ascii(renderer, "\\ldots{}"); - break; - case 8216: // lsquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "`"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8217: // rsquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "\'"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8220: // ldquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "``"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8221: // rdquo - if (escape == NORMAL) { - cmark_render_ascii(renderer, "''"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8212: // emdash - if (escape == NORMAL) { - cmark_render_ascii(renderer, "---"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 8211: // endash - if (escape == NORMAL) { - cmark_render_ascii(renderer, "--"); - } else { - cmark_render_code_point(renderer, c); - } - break; - default: - cmark_render_code_point(renderer, c); - } -} - -typedef enum { - NO_LINK, - URL_AUTOLINK, - EMAIL_AUTOLINK, - NORMAL_LINK, - INTERNAL_LINK -} link_type; - -static link_type get_link_type(cmark_node *node) { - size_t title_len, url_len; - cmark_node *link_text; - char *realurl; - int realurllen; - bool isemail = false; - - if (node->type != CMARK_NODE_LINK) { - return NO_LINK; - } - - const char *url = cmark_node_get_url(node); - cmark_chunk url_chunk = cmark_chunk_literal(url); - - if (url && *url == '#') { - return INTERNAL_LINK; - } - - url_len = strlen(url); - if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) { - return NO_LINK; - } - - const char *title = cmark_node_get_title(node); - title_len = strlen(title); - // if it has a title, we can't treat it as an autolink: - if (title_len == 0) { - - link_text = node->first_child; - cmark_consolidate_text_nodes(link_text); - - if (!link_text) - return NO_LINK; - - realurl = (char *)url; - realurllen = (int)url_len; - if (strncmp(realurl, "mailto:", 7) == 0) { - realurl += 7; - realurllen -= 7; - isemail = true; - } - if (realurllen == link_text->as.literal.len && - strncmp(realurl, (char *)link_text->as.literal.data, - link_text->as.literal.len) == 0) { - if (isemail) { - return EMAIL_AUTOLINK; - } else { - return URL_AUTOLINK; - } - } - } - - return NORMAL_LINK; -} - -static int S_get_enumlevel(cmark_node *node) { - int enumlevel = 0; - cmark_node *tmp = node; - while (tmp) { - if (tmp->type == CMARK_NODE_LIST && - cmark_node_get_list_type(node) == CMARK_ORDERED_LIST) { - enumlevel++; - } - tmp = tmp->parent; - } - return enumlevel; -} - -static int S_render_node(cmark_renderer *renderer, cmark_node *node, - cmark_event_type ev_type, int options) { - int list_number; - int enumlevel; - char list_number_string[LIST_NUMBER_STRING_SIZE]; - bool entering = (ev_type == CMARK_EVENT_ENTER); - cmark_list_type list_type; - bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options); - - // avoid warning about unused parameter: - (void)(options); - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - LIT("\\begin{quote}"); - CR(); - } else { - LIT("\\end{quote}"); - BLANKLINE(); - } - break; - - case CMARK_NODE_LIST: - list_type = cmark_node_get_list_type(node); - if (entering) { - LIT("\\begin{"); - LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize"); - LIT("}"); - CR(); - list_number = cmark_node_get_list_start(node); - if (list_number > 1) { - enumlevel = S_get_enumlevel(node); - // latex normally supports only five levels - if (enumlevel >= 1 && enumlevel <= 5) { - snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d", - list_number); - LIT("\\setcounter{enum"); - switch (enumlevel) { - case 1: LIT("i"); break; - case 2: LIT("ii"); break; - case 3: LIT("iii"); break; - case 4: LIT("iv"); break; - case 5: LIT("v"); break; - default: LIT("i"); break; - } - LIT("}{"); - OUT(list_number_string, false, NORMAL); - LIT("}"); - } - CR(); - } - } else { - LIT("\\end{"); - LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize"); - LIT("}"); - BLANKLINE(); - } - break; - - case CMARK_NODE_ITEM: - if (entering) { - LIT("\\item "); - } else { - CR(); - } - break; - - case CMARK_NODE_HEADING: - if (entering) { - switch (cmark_node_get_heading_level(node)) { - case 1: - LIT("\\section"); - break; - case 2: - LIT("\\subsection"); - break; - case 3: - LIT("\\subsubsection"); - break; - case 4: - LIT("\\paragraph"); - break; - case 5: - LIT("\\subparagraph"); - break; - } - LIT("{"); - } else { - LIT("}"); - BLANKLINE(); - } - break; - - case CMARK_NODE_CODE_BLOCK: - CR(); - LIT("\\begin{verbatim}"); - CR(); - OUT(cmark_node_get_literal(node), false, LITERAL); - CR(); - LIT("\\end{verbatim}"); - BLANKLINE(); - break; - - case CMARK_NODE_HTML_BLOCK: - break; - - case CMARK_NODE_CUSTOM_BLOCK: - CR(); - OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), - false, LITERAL); - CR(); - break; - - case CMARK_NODE_THEMATIC_BREAK: - BLANKLINE(); - LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}"); - BLANKLINE(); - break; - - case CMARK_NODE_PARAGRAPH: - if (!entering) { - BLANKLINE(); - } - break; - - case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); - break; - - case CMARK_NODE_LINEBREAK: - LIT("\\\\"); - CR(); - break; - - case CMARK_NODE_SOFTBREAK: - if (options & CMARK_OPT_HARDBREAKS) { - LIT("\\\\"); - CR(); - } else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) { - CR(); - } else { - OUT(" ", allow_wrap, NORMAL); - } - break; - - case CMARK_NODE_CODE: - LIT("\\texttt{"); - OUT(cmark_node_get_literal(node), false, NORMAL); - LIT("}"); - break; - - case CMARK_NODE_HTML_INLINE: - break; - - case CMARK_NODE_CUSTOM_INLINE: - OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), - false, LITERAL); - break; - - case CMARK_NODE_STRONG: - if (entering) { - LIT("\\textbf{"); - } else { - LIT("}"); - } - break; - - case CMARK_NODE_EMPH: - if (entering) { - LIT("\\emph{"); - } else { - LIT("}"); - } - break; - - case CMARK_NODE_LINK: - if (entering) { - const char *url = cmark_node_get_url(node); - // requires \usepackage{hyperref} - switch (get_link_type(node)) { - case URL_AUTOLINK: - LIT("\\url{"); - OUT(url, false, URL); - LIT("}"); - return 0; // Don't process further nodes to avoid double-rendering artefacts - case EMAIL_AUTOLINK: - LIT("\\href{"); - OUT(url, false, URL); - LIT("}\\nolinkurl{"); - break; - case NORMAL_LINK: - LIT("\\href{"); - OUT(url, false, URL); - LIT("}{"); - break; - case INTERNAL_LINK: - LIT("\\protect\\hyperlink{"); - OUT(url + 1, false, URL); - LIT("}{"); - break; - case NO_LINK: - LIT("{"); // error? - } - } else { - LIT("}"); - } - - break; - - case CMARK_NODE_IMAGE: - if (entering) { - LIT("\\protect\\includegraphics{"); - // requires \include{graphicx} - OUT(cmark_node_get_url(node), false, URL); - LIT("}"); - return 0; - } - break; - - default: - assert(false); - break; - } - - return 1; -} - -char *cmark_render_latex(cmark_node *root, int options, int width) { - return cmark_render(root, options, width, outc, S_render_node); -} diff --git a/Pods/Down/Source/cmark/man.c b/Pods/Down/Source/cmark/man.c deleted file mode 100755 index 1c76f68..0000000 --- a/Pods/Down/Source/cmark/man.c +++ /dev/null @@ -1,252 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> - -#include "config.h" -#include "cmark.h" -#include "node.h" -#include "buffer.h" -#include "utf8.h" -#include "render.h" - -#define OUT(s, wrap, escaping) renderer->out(renderer, s, wrap, escaping) -#define LIT(s) renderer->out(renderer, s, false, LITERAL) -#define CR() renderer->cr(renderer) -#define BLANKLINE() renderer->blankline(renderer) -#define LIST_NUMBER_SIZE 20 - -// Functions to convert cmark_nodes to groff man strings. -static void S_outc(cmark_renderer *renderer, cmark_escaping escape, int32_t c, - unsigned char nextc) { - (void)(nextc); - - if (escape == LITERAL) { - cmark_render_code_point(renderer, c); - return; - } - - switch (c) { - case 46: - if (renderer->begin_line) { - cmark_render_ascii(renderer, "\\&."); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 39: - if (renderer->begin_line) { - cmark_render_ascii(renderer, "\\&'"); - } else { - cmark_render_code_point(renderer, c); - } - break; - case 45: - cmark_render_ascii(renderer, "\\-"); - break; - case 92: - cmark_render_ascii(renderer, "\\e"); - break; - case 8216: // left single quote - cmark_render_ascii(renderer, "\\[oq]"); - break; - case 8217: // right single quote - cmark_render_ascii(renderer, "\\[cq]"); - break; - case 8220: // left double quote - cmark_render_ascii(renderer, "\\[lq]"); - break; - case 8221: // right double quote - cmark_render_ascii(renderer, "\\[rq]"); - break; - case 8212: // em dash - cmark_render_ascii(renderer, "\\[em]"); - break; - case 8211: // en dash - cmark_render_ascii(renderer, "\\[en]"); - break; - default: - cmark_render_code_point(renderer, c); - } -} - -static int S_render_node(cmark_renderer *renderer, cmark_node *node, - cmark_event_type ev_type, int options) { - cmark_node *tmp; - int list_number; - bool entering = (ev_type == CMARK_EVENT_ENTER); - bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options); - - // avoid unused parameter error: - (void)(options); - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - break; - - case CMARK_NODE_BLOCK_QUOTE: - if (entering) { - CR(); - LIT(".RS"); - CR(); - } else { - CR(); - LIT(".RE"); - CR(); - } - break; - - case CMARK_NODE_LIST: - break; - - case CMARK_NODE_ITEM: - if (entering) { - CR(); - LIT(".IP "); - if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) { - LIT("\\[bu] 2"); - } else { - list_number = cmark_node_get_list_start(node->parent); - tmp = node; - while (tmp->prev) { - tmp = tmp->prev; - list_number += 1; - } - char list_number_s[LIST_NUMBER_SIZE]; - snprintf(list_number_s, LIST_NUMBER_SIZE, "\"%d.\" 4", list_number); - LIT(list_number_s); - } - CR(); - } else { - CR(); - } - break; - - case CMARK_NODE_HEADING: - if (entering) { - CR(); - LIT(cmark_node_get_heading_level(node) == 1 ? ".SH" : ".SS"); - CR(); - } else { - CR(); - } - break; - - case CMARK_NODE_CODE_BLOCK: - CR(); - LIT(".IP\n.nf\n\\f[C]\n"); - OUT(cmark_node_get_literal(node), false, NORMAL); - CR(); - LIT("\\f[]\n.fi"); - CR(); - break; - - case CMARK_NODE_HTML_BLOCK: - break; - - case CMARK_NODE_CUSTOM_BLOCK: - CR(); - OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), - false, LITERAL); - CR(); - break; - - case CMARK_NODE_THEMATIC_BREAK: - CR(); - LIT(".PP\n * * * * *"); - CR(); - break; - - case CMARK_NODE_PARAGRAPH: - if (entering) { - // no blank line if first paragraph in list: - if (node->parent && node->parent->type == CMARK_NODE_ITEM && - node->prev == NULL) { - // no blank line or .PP - } else { - CR(); - LIT(".PP"); - CR(); - } - } else { - CR(); - } - break; - - case CMARK_NODE_TEXT: - OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); - break; - - case CMARK_NODE_LINEBREAK: - LIT(".PD 0\n.P\n.PD"); - CR(); - break; - - case CMARK_NODE_SOFTBREAK: - if (options & CMARK_OPT_HARDBREAKS) { - LIT(".PD 0\n.P\n.PD"); - CR(); - } else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) { - CR(); - } else { - OUT(" ", allow_wrap, LITERAL); - } - break; - - case CMARK_NODE_CODE: - LIT("\\f[C]"); - OUT(cmark_node_get_literal(node), allow_wrap, NORMAL); - LIT("\\f[]"); - break; - - case CMARK_NODE_HTML_INLINE: - break; - - case CMARK_NODE_CUSTOM_INLINE: - OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node), - false, LITERAL); - break; - - case CMARK_NODE_STRONG: - if (entering) { - LIT("\\f[B]"); - } else { - LIT("\\f[]"); - } - break; - - case CMARK_NODE_EMPH: - if (entering) { - LIT("\\f[I]"); - } else { - LIT("\\f[]"); - } - break; - - case CMARK_NODE_LINK: - if (!entering) { - LIT(" ("); - OUT(cmark_node_get_url(node), allow_wrap, URL); - LIT(")"); - } - break; - - case CMARK_NODE_IMAGE: - if (entering) { - LIT("[IMAGE: "); - } else { - LIT("]"); - } - break; - - default: - assert(false); - break; - } - - return 1; -} - -char *cmark_render_man(cmark_node *root, int options, int width) { - return cmark_render(root, options, width, S_outc, S_render_node); -} diff --git a/Pods/Down/Source/cmark/node.c b/Pods/Down/Source/cmark/node.c deleted file mode 100755 index c6c2902..0000000 --- a/Pods/Down/Source/cmark/node.c +++ /dev/null @@ -1,858 +0,0 @@ -#include <stdlib.h> -#include <string.h> - -#include "config.h" -#include "node.h" - -static void S_node_unlink(cmark_node *node); - -#define NODE_MEM(node) cmark_node_mem(node) - -static CMARK_INLINE bool S_is_block(cmark_node *node) { - if (node == NULL) { - return false; - } - return node->type >= CMARK_NODE_FIRST_BLOCK && - node->type <= CMARK_NODE_LAST_BLOCK; -} - -static CMARK_INLINE bool S_is_inline(cmark_node *node) { - if (node == NULL) { - return false; - } - return node->type >= CMARK_NODE_FIRST_INLINE && - node->type <= CMARK_NODE_LAST_INLINE; -} - -static bool S_can_contain(cmark_node *node, cmark_node *child) { - cmark_node *cur; - - if (node == NULL || child == NULL) { - return false; - } - - // Verify that child is not an ancestor of node or equal to node. - cur = node; - do { - if (cur == child) { - return false; - } - cur = cur->parent; - } while (cur != NULL); - - if (child->type == CMARK_NODE_DOCUMENT) { - return false; - } - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - case CMARK_NODE_BLOCK_QUOTE: - case CMARK_NODE_ITEM: - return S_is_block(child) && child->type != CMARK_NODE_ITEM; - - case CMARK_NODE_LIST: - return child->type == CMARK_NODE_ITEM; - - case CMARK_NODE_CUSTOM_BLOCK: - return true; - - case CMARK_NODE_PARAGRAPH: - case CMARK_NODE_HEADING: - case CMARK_NODE_EMPH: - case CMARK_NODE_STRONG: - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - case CMARK_NODE_CUSTOM_INLINE: - return S_is_inline(child); - - default: - break; - } - - return false; -} - -cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem) { - cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node)); - cmark_strbuf_init(mem, &node->content, 0); - node->type = (uint16_t)type; - - switch (node->type) { - case CMARK_NODE_HEADING: - node->as.heading.level = 1; - break; - - case CMARK_NODE_LIST: { - cmark_list *list = &node->as.list; - list->list_type = CMARK_BULLET_LIST; - list->start = 0; - list->tight = false; - break; - } - - default: - break; - } - - return node; -} - -cmark_node *cmark_node_new(cmark_node_type type) { - extern cmark_mem DEFAULT_MEM_ALLOCATOR; - return cmark_node_new_with_mem(type, &DEFAULT_MEM_ALLOCATOR); -} - -// Free a cmark_node list and any children. -static void S_free_nodes(cmark_node *e) { - cmark_node *next; - while (e != NULL) { - cmark_strbuf_free(&e->content); - switch (e->type) { - case CMARK_NODE_CODE_BLOCK: - cmark_chunk_free(NODE_MEM(e), &e->as.code.info); - cmark_chunk_free(NODE_MEM(e), &e->as.code.literal); - break; - case CMARK_NODE_TEXT: - case CMARK_NODE_HTML_INLINE: - case CMARK_NODE_CODE: - case CMARK_NODE_HTML_BLOCK: - cmark_chunk_free(NODE_MEM(e), &e->as.literal); - break; - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - cmark_chunk_free(NODE_MEM(e), &e->as.link.url); - cmark_chunk_free(NODE_MEM(e), &e->as.link.title); - break; - case CMARK_NODE_CUSTOM_BLOCK: - case CMARK_NODE_CUSTOM_INLINE: - cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_enter); - cmark_chunk_free(NODE_MEM(e), &e->as.custom.on_exit); - break; - default: - break; - } - if (e->last_child) { - // Splice children into list - e->last_child->next = e->next; - e->next = e->first_child; - } - next = e->next; - NODE_MEM(e)->free(e); - e = next; - } -} - -void cmark_node_free(cmark_node *node) { - S_node_unlink(node); - node->next = NULL; - S_free_nodes(node); -} - -cmark_node_type cmark_node_get_type(cmark_node *node) { - if (node == NULL) { - return CMARK_NODE_NONE; - } else { - return (cmark_node_type)node->type; - } -} - -const char *cmark_node_get_type_string(cmark_node *node) { - if (node == NULL) { - return "NONE"; - } - - switch (node->type) { - case CMARK_NODE_NONE: - return "none"; - case CMARK_NODE_DOCUMENT: - return "document"; - case CMARK_NODE_BLOCK_QUOTE: - return "block_quote"; - case CMARK_NODE_LIST: - return "list"; - case CMARK_NODE_ITEM: - return "item"; - case CMARK_NODE_CODE_BLOCK: - return "code_block"; - case CMARK_NODE_HTML_BLOCK: - return "html_block"; - case CMARK_NODE_CUSTOM_BLOCK: - return "custom_block"; - case CMARK_NODE_PARAGRAPH: - return "paragraph"; - case CMARK_NODE_HEADING: - return "heading"; - case CMARK_NODE_THEMATIC_BREAK: - return "thematic_break"; - case CMARK_NODE_TEXT: - return "text"; - case CMARK_NODE_SOFTBREAK: - return "softbreak"; - case CMARK_NODE_LINEBREAK: - return "linebreak"; - case CMARK_NODE_CODE: - return "code"; - case CMARK_NODE_HTML_INLINE: - return "html_inline"; - case CMARK_NODE_CUSTOM_INLINE: - return "custom_inline"; - case CMARK_NODE_EMPH: - return "emph"; - case CMARK_NODE_STRONG: - return "strong"; - case CMARK_NODE_LINK: - return "link"; - case CMARK_NODE_IMAGE: - return "image"; - } - - return "<unknown>"; -} - -cmark_node *cmark_node_next(cmark_node *node) { - if (node == NULL) { - return NULL; - } else { - return node->next; - } -} - -cmark_node *cmark_node_previous(cmark_node *node) { - if (node == NULL) { - return NULL; - } else { - return node->prev; - } -} - -cmark_node *cmark_node_parent(cmark_node *node) { - if (node == NULL) { - return NULL; - } else { - return node->parent; - } -} - -cmark_node *cmark_node_first_child(cmark_node *node) { - if (node == NULL) { - return NULL; - } else { - return node->first_child; - } -} - -cmark_node *cmark_node_last_child(cmark_node *node) { - if (node == NULL) { - return NULL; - } else { - return node->last_child; - } -} - -void *cmark_node_get_user_data(cmark_node *node) { - if (node == NULL) { - return NULL; - } else { - return node->user_data; - } -} - -int cmark_node_set_user_data(cmark_node *node, void *user_data) { - if (node == NULL) { - return 0; - } - node->user_data = user_data; - return 1; -} - -const char *cmark_node_get_literal(cmark_node *node) { - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case CMARK_NODE_HTML_BLOCK: - case CMARK_NODE_TEXT: - case CMARK_NODE_HTML_INLINE: - case CMARK_NODE_CODE: - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal); - - case CMARK_NODE_CODE_BLOCK: - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.literal); - - default: - break; - } - - return NULL; -} - -int cmark_node_set_literal(cmark_node *node, const char *content) { - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_HTML_BLOCK: - case CMARK_NODE_TEXT: - case CMARK_NODE_HTML_INLINE: - case CMARK_NODE_CODE: - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content); - return 1; - - case CMARK_NODE_CODE_BLOCK: - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content); - return 1; - - default: - break; - } - - return 0; -} - -int cmark_node_get_heading_level(cmark_node *node) { - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_HEADING: - return node->as.heading.level; - - default: - break; - } - - return 0; -} - -int cmark_node_set_heading_level(cmark_node *node, int level) { - if (node == NULL || level < 1 || level > 6) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_HEADING: - node->as.heading.level = level; - return 1; - - default: - break; - } - - return 0; -} - -cmark_list_type cmark_node_get_list_type(cmark_node *node) { - if (node == NULL) { - return CMARK_NO_LIST; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.list_type; - } else { - return CMARK_NO_LIST; - } -} - -int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) { - if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) { - return 0; - } - - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.list_type = type; - return 1; - } else { - return 0; - } -} - -cmark_delim_type cmark_node_get_list_delim(cmark_node *node) { - if (node == NULL) { - return CMARK_NO_DELIM; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.delimiter; - } else { - return CMARK_NO_DELIM; - } -} - -int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) { - if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) { - return 0; - } - - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.delimiter = delim; - return 1; - } else { - return 0; - } -} - -int cmark_node_get_list_start(cmark_node *node) { - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.start; - } else { - return 0; - } -} - -int cmark_node_set_list_start(cmark_node *node, int start) { - if (node == NULL || start < 0) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.start = start; - return 1; - } else { - return 0; - } -} - -int cmark_node_get_list_tight(cmark_node *node) { - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - return node->as.list.tight; - } else { - return 0; - } -} - -int cmark_node_set_list_tight(cmark_node *node, int tight) { - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_LIST) { - node->as.list.tight = tight == 1; - return 1; - } else { - return 0; - } -} - -const char *cmark_node_get_fence_info(cmark_node *node) { - if (node == NULL) { - return NULL; - } - - if (node->type == CMARK_NODE_CODE_BLOCK) { - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.info); - } else { - return NULL; - } -} - -int cmark_node_set_fence_info(cmark_node *node, const char *info) { - if (node == NULL) { - return 0; - } - - if (node->type == CMARK_NODE_CODE_BLOCK) { - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info); - return 1; - } else { - return 0; - } -} - -const char *cmark_node_get_url(cmark_node *node) { - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.url); - default: - break; - } - - return NULL; -} - -int cmark_node_set_url(cmark_node *node, const char *url) { - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.url, url); - return 1; - default: - break; - } - - return 0; -} - -const char *cmark_node_get_title(cmark_node *node) { - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.title); - default: - break; - } - - return NULL; -} - -int cmark_node_set_title(cmark_node *node, const char *title) { - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title); - return 1; - default: - break; - } - - return 0; -} - -const char *cmark_node_get_on_enter(cmark_node *node) { - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case CMARK_NODE_CUSTOM_INLINE: - case CMARK_NODE_CUSTOM_BLOCK: - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_enter); - default: - break; - } - - return NULL; -} - -int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) { - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_CUSTOM_INLINE: - case CMARK_NODE_CUSTOM_BLOCK: - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_enter, on_enter); - return 1; - default: - break; - } - - return 0; -} - -const char *cmark_node_get_on_exit(cmark_node *node) { - if (node == NULL) { - return NULL; - } - - switch (node->type) { - case CMARK_NODE_CUSTOM_INLINE: - case CMARK_NODE_CUSTOM_BLOCK: - return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_exit); - default: - break; - } - - return NULL; -} - -int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) { - if (node == NULL) { - return 0; - } - - switch (node->type) { - case CMARK_NODE_CUSTOM_INLINE: - case CMARK_NODE_CUSTOM_BLOCK: - cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_exit, on_exit); - return 1; - default: - break; - } - - return 0; -} - -int cmark_node_get_start_line(cmark_node *node) { - if (node == NULL) { - return 0; - } - return node->start_line; -} - -int cmark_node_get_start_column(cmark_node *node) { - if (node == NULL) { - return 0; - } - return node->start_column; -} - -int cmark_node_get_end_line(cmark_node *node) { - if (node == NULL) { - return 0; - } - return node->end_line; -} - -int cmark_node_get_end_column(cmark_node *node) { - if (node == NULL) { - return 0; - } - return node->end_column; -} - -// Unlink a node without adjusting its next, prev, and parent pointers. -static void S_node_unlink(cmark_node *node) { - if (node == NULL) { - return; - } - - if (node->prev) { - node->prev->next = node->next; - } - if (node->next) { - node->next->prev = node->prev; - } - - // Adjust first_child and last_child of parent. - cmark_node *parent = node->parent; - if (parent) { - if (parent->first_child == node) { - parent->first_child = node->next; - } - if (parent->last_child == node) { - parent->last_child = node->prev; - } - } -} - -void cmark_node_unlink(cmark_node *node) { - S_node_unlink(node); - - node->next = NULL; - node->prev = NULL; - node->parent = NULL; -} - -int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) { - if (node == NULL || sibling == NULL) { - return 0; - } - - if (!node->parent || !S_can_contain(node->parent, sibling)) { - return 0; - } - - S_node_unlink(sibling); - - cmark_node *old_prev = node->prev; - - // Insert 'sibling' between 'old_prev' and 'node'. - if (old_prev) { - old_prev->next = sibling; - } - sibling->prev = old_prev; - sibling->next = node; - node->prev = sibling; - - // Set new parent. - cmark_node *parent = node->parent; - sibling->parent = parent; - - // Adjust first_child of parent if inserted as first child. - if (parent && !old_prev) { - parent->first_child = sibling; - } - - return 1; -} - -int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) { - if (node == NULL || sibling == NULL) { - return 0; - } - - if (!node->parent || !S_can_contain(node->parent, sibling)) { - return 0; - } - - S_node_unlink(sibling); - - cmark_node *old_next = node->next; - - // Insert 'sibling' between 'node' and 'old_next'. - if (old_next) { - old_next->prev = sibling; - } - sibling->next = old_next; - sibling->prev = node; - node->next = sibling; - - // Set new parent. - cmark_node *parent = node->parent; - sibling->parent = parent; - - // Adjust last_child of parent if inserted as last child. - if (parent && !old_next) { - parent->last_child = sibling; - } - - return 1; -} - -int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) { - if (!cmark_node_insert_before(oldnode, newnode)) { - return 0; - } - cmark_node_unlink(oldnode); - return 1; -} - -int cmark_node_prepend_child(cmark_node *node, cmark_node *child) { - if (!S_can_contain(node, child)) { - return 0; - } - - S_node_unlink(child); - - cmark_node *old_first_child = node->first_child; - - child->next = old_first_child; - child->prev = NULL; - child->parent = node; - node->first_child = child; - - if (old_first_child) { - old_first_child->prev = child; - } else { - // Also set last_child if node previously had no children. - node->last_child = child; - } - - return 1; -} - -int cmark_node_append_child(cmark_node *node, cmark_node *child) { - if (!S_can_contain(node, child)) { - return 0; - } - - S_node_unlink(child); - - cmark_node *old_last_child = node->last_child; - - child->next = NULL; - child->prev = old_last_child; - child->parent = node; - node->last_child = child; - - if (old_last_child) { - old_last_child->next = child; - } else { - // Also set first_child if node previously had no children. - node->first_child = child; - } - - return 1; -} - -static void S_print_error(FILE *out, cmark_node *node, const char *elem) { - if (out == NULL) { - return; - } - fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem, - cmark_node_get_type_string(node), node->start_line, - node->start_column); -} - -int cmark_node_check(cmark_node *node, FILE *out) { - cmark_node *cur; - int errors = 0; - - if (!node) { - return 0; - } - - cur = node; - for (;;) { - if (cur->first_child) { - if (cur->first_child->prev != NULL) { - S_print_error(out, cur->first_child, "prev"); - cur->first_child->prev = NULL; - ++errors; - } - if (cur->first_child->parent != cur) { - S_print_error(out, cur->first_child, "parent"); - cur->first_child->parent = cur; - ++errors; - } - cur = cur->first_child; - continue; - } - - next_sibling: - if (cur == node) { - break; - } - if (cur->next) { - if (cur->next->prev != cur) { - S_print_error(out, cur->next, "prev"); - cur->next->prev = cur; - ++errors; - } - if (cur->next->parent != cur->parent) { - S_print_error(out, cur->next, "parent"); - cur->next->parent = cur->parent; - ++errors; - } - cur = cur->next; - continue; - } - - if (cur->parent->last_child != cur) { - S_print_error(out, cur->parent, "last_child"); - cur->parent->last_child = cur; - ++errors; - } - cur = cur->parent; - goto next_sibling; - } - - return errors; -} diff --git a/Pods/Down/Source/cmark/node.h b/Pods/Down/Source/cmark/node.h deleted file mode 100755 index 2163230..0000000 --- a/Pods/Down/Source/cmark/node.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef CMARK_NODE_H -#define CMARK_NODE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdio.h> -#include <stdint.h> - -#include "cmark.h" -#include "buffer.h" -#include "chunk.h" - -typedef struct { - cmark_list_type list_type; - int marker_offset; - int padding; - int start; - cmark_delim_type delimiter; - unsigned char bullet_char; - bool tight; -} cmark_list; - -typedef struct { - cmark_chunk info; - cmark_chunk literal; - uint8_t fence_length; - uint8_t fence_offset; - unsigned char fence_char; - int8_t fenced; -} cmark_code; - -typedef struct { - int level; - bool setext; -} cmark_heading; - -typedef struct { - cmark_chunk url; - cmark_chunk title; -} cmark_link; - -typedef struct { - cmark_chunk on_enter; - cmark_chunk on_exit; -} cmark_custom; - -enum cmark_node__internal_flags { - CMARK_NODE__OPEN = (1 << 0), - CMARK_NODE__LAST_LINE_BLANK = (1 << 1), - CMARK_NODE__LAST_LINE_CHECKED = (1 << 2), -}; - -struct cmark_node { - cmark_strbuf content; - - struct cmark_node *next; - struct cmark_node *prev; - struct cmark_node *parent; - struct cmark_node *first_child; - struct cmark_node *last_child; - - void *user_data; - - int start_line; - int start_column; - int end_line; - int end_column; - int internal_offset; - uint16_t type; - uint16_t flags; - - union { - cmark_chunk literal; - cmark_list list; - cmark_code code; - cmark_heading heading; - cmark_link link; - cmark_custom custom; - int html_block_type; - } as; -}; - -static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) { - return node->content.mem; -} -CMARK_EXPORT int cmark_node_check(cmark_node *node, FILE *out); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/parser.h b/Pods/Down/Source/cmark/parser.h deleted file mode 100755 index f41f099..0000000 --- a/Pods/Down/Source/cmark/parser.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef CMARK_AST_H -#define CMARK_AST_H - -#include <stdio.h> -#include "references.h" -#include "node.h" -#include "buffer.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define MAX_LINK_LABEL_LENGTH 1000 - -struct cmark_parser { - struct cmark_mem *mem; - struct cmark_reference_map *refmap; - struct cmark_node *root; - struct cmark_node *current; - int line_number; - bufsize_t offset; - bufsize_t column; - bufsize_t first_nonspace; - bufsize_t first_nonspace_column; - bufsize_t thematic_break_kill_pos; - int indent; - bool blank; - bool partially_consumed_tab; - cmark_strbuf curline; - bufsize_t last_line_length; - cmark_strbuf linebuf; - int options; - bool last_buffer_ended_with_cr; -}; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/references.c b/Pods/Down/Source/cmark/references.c deleted file mode 100755 index 89f2dc8..0000000 --- a/Pods/Down/Source/cmark/references.c +++ /dev/null @@ -1,146 +0,0 @@ -#include "cmark.h" -#include "utf8.h" -#include "parser.h" -#include "references.h" -#include "inlines.h" -#include "chunk.h" - -static unsigned int refhash(const unsigned char *link_ref) { - unsigned int hash = 0; - - while (*link_ref) - hash = (*link_ref++) + (hash << 6) + (hash << 16) - hash; - - return hash; -} - -static void reference_free(cmark_reference_map *map, cmark_reference *ref) { - cmark_mem *mem = map->mem; - if (ref != NULL) { - mem->free(ref->label); - cmark_chunk_free(mem, &ref->url); - cmark_chunk_free(mem, &ref->title); - mem->free(ref); - } -} - -// normalize reference: collapse internal whitespace to single space, -// remove leading/trailing whitespace, case fold -// Return NULL if the reference name is actually empty (i.e. composed -// solely from whitespace) -static unsigned char *normalize_reference(cmark_mem *mem, cmark_chunk *ref) { - cmark_strbuf normalized = CMARK_BUF_INIT(mem); - unsigned char *result; - - if (ref == NULL) - return NULL; - - if (ref->len == 0) - return NULL; - - cmark_utf8proc_case_fold(&normalized, ref->data, ref->len); - cmark_strbuf_trim(&normalized); - cmark_strbuf_normalize_whitespace(&normalized); - - result = cmark_strbuf_detach(&normalized); - assert(result); - - if (result[0] == '\0') { - mem->free(result); - return NULL; - } - - return result; -} - -static void add_reference(cmark_reference_map *map, cmark_reference *ref) { - cmark_reference *t = ref->next = map->table[ref->hash % REFMAP_SIZE]; - - while (t) { - if (t->hash == ref->hash && !strcmp((char *)t->label, (char *)ref->label)) { - reference_free(map, ref); - return; - } - - t = t->next; - } - - map->table[ref->hash % REFMAP_SIZE] = ref; -} - -void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, - cmark_chunk *url, cmark_chunk *title) { - cmark_reference *ref; - unsigned char *reflabel = normalize_reference(map->mem, label); - - /* empty reference name, or composed from only whitespace */ - if (reflabel == NULL) - return; - - ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref)); - ref->label = reflabel; - ref->hash = refhash(ref->label); - ref->url = cmark_clean_url(map->mem, url); - ref->title = cmark_clean_title(map->mem, title); - ref->next = NULL; - - add_reference(map, ref); -} - -// Returns reference if refmap contains a reference with matching -// label, otherwise NULL. -cmark_reference *cmark_reference_lookup(cmark_reference_map *map, - cmark_chunk *label) { - cmark_reference *ref = NULL; - unsigned char *norm; - unsigned int hash; - - if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH) - return NULL; - - if (map == NULL) - return NULL; - - norm = normalize_reference(map->mem, label); - if (norm == NULL) - return NULL; - - hash = refhash(norm); - ref = map->table[hash % REFMAP_SIZE]; - - while (ref) { - if (ref->hash == hash && !strcmp((char *)ref->label, (char *)norm)) - break; - ref = ref->next; - } - - map->mem->free(norm); - return ref; -} - -void cmark_reference_map_free(cmark_reference_map *map) { - unsigned int i; - - if (map == NULL) - return; - - for (i = 0; i < REFMAP_SIZE; ++i) { - cmark_reference *ref = map->table[i]; - cmark_reference *next; - - while (ref) { - next = ref->next; - reference_free(map, ref); - ref = next; - } - } - - map->mem->free(map); -} - -cmark_reference_map *cmark_reference_map_new(cmark_mem *mem) { - cmark_reference_map *map = - (cmark_reference_map *)mem->calloc(1, sizeof(cmark_reference_map)); - map->mem = mem; - return map; -} diff --git a/Pods/Down/Source/cmark/references.h b/Pods/Down/Source/cmark/references.h deleted file mode 100755 index 8d3631f..0000000 --- a/Pods/Down/Source/cmark/references.h +++ /dev/null @@ -1,40 +0,0 @@ -#ifndef CMARK_REFERENCES_H -#define CMARK_REFERENCES_H - -#include "chunk.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define REFMAP_SIZE 16 - -struct cmark_reference { - struct cmark_reference *next; - unsigned char *label; - cmark_chunk url; - cmark_chunk title; - unsigned int hash; -}; - -typedef struct cmark_reference cmark_reference; - -struct cmark_reference_map { - cmark_mem *mem; - cmark_reference *table[REFMAP_SIZE]; -}; - -typedef struct cmark_reference_map cmark_reference_map; - -cmark_reference_map *cmark_reference_map_new(cmark_mem *mem); -void cmark_reference_map_free(cmark_reference_map *map); -cmark_reference *cmark_reference_lookup(cmark_reference_map *map, - cmark_chunk *label); -extern void cmark_reference_create(cmark_reference_map *map, cmark_chunk *label, - cmark_chunk *url, cmark_chunk *title); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/render.c b/Pods/Down/Source/cmark/render.c deleted file mode 100755 index fdd73df..0000000 --- a/Pods/Down/Source/cmark/render.c +++ /dev/null @@ -1,188 +0,0 @@ -#include <stdlib.h> -#include "buffer.h" -#include "chunk.h" -#include "cmark.h" -#include "utf8.h" -#include "render.h" -#include "node.h" - -static CMARK_INLINE void S_cr(cmark_renderer *renderer) { - if (renderer->need_cr < 1) { - renderer->need_cr = 1; - } -} - -static CMARK_INLINE void S_blankline(cmark_renderer *renderer) { - if (renderer->need_cr < 2) { - renderer->need_cr = 2; - } -} - -static void S_out(cmark_renderer *renderer, const char *source, bool wrap, - cmark_escaping escape) { - int length = strlen(source); - unsigned char nextc; - int32_t c; - int i = 0; - int last_nonspace; - int len; - cmark_chunk remainder = cmark_chunk_literal(""); - int k = renderer->buffer->size - 1; - - wrap = wrap && !renderer->no_linebreaks; - - if (renderer->in_tight_list_item && renderer->need_cr > 1) { - renderer->need_cr = 1; - } - while (renderer->need_cr) { - if (k < 0 || renderer->buffer->ptr[k] == '\n') { - k -= 1; - } else { - cmark_strbuf_putc(renderer->buffer, '\n'); - if (renderer->need_cr > 1) { - cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, - renderer->prefix->size); - } - } - renderer->column = 0; - renderer->last_breakable = 0; - renderer->begin_line = true; - renderer->begin_content = true; - renderer->need_cr -= 1; - } - - while (i < length) { - if (renderer->begin_line) { - cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, - renderer->prefix->size); - // note: this assumes prefix is ascii: - renderer->column = renderer->prefix->size; - } - - len = cmark_utf8proc_iterate((const uint8_t *)source + i, length - i, &c); - if (len == -1) { // error condition - return; // return without rendering rest of string - } - nextc = source[i + len]; - if (c == 32 && wrap) { - if (!renderer->begin_line) { - last_nonspace = renderer->buffer->size; - cmark_strbuf_putc(renderer->buffer, ' '); - renderer->column += 1; - renderer->begin_line = false; - renderer->begin_content = false; - // skip following spaces - while (source[i + 1] == ' ') { - i++; - } - // We don't allow breaks that make a digit the first character - // because this causes problems with commonmark output. - if (!cmark_isdigit(source[i + 1])) { - renderer->last_breakable = last_nonspace; - } - } - - } else if (escape == LITERAL) { - if (c == 10) { - cmark_strbuf_putc(renderer->buffer, '\n'); - renderer->column = 0; - renderer->begin_line = true; - renderer->begin_content = true; - renderer->last_breakable = 0; - } else { - cmark_render_code_point(renderer, c); - renderer->begin_line = false; - // we don't set 'begin_content' to false til we've - // finished parsing a digit. Reason: in commonmark - // we need to escape a potential list marker after - // a digit: - renderer->begin_content = - renderer->begin_content && cmark_isdigit(c) == 1; - } - } else { - (renderer->outc)(renderer, escape, c, nextc); - renderer->begin_line = false; - renderer->begin_content = - renderer->begin_content && cmark_isdigit(c) == 1; - } - - // If adding the character went beyond width, look for an - // earlier place where the line could be broken: - if (renderer->width > 0 && renderer->column > renderer->width && - !renderer->begin_line && renderer->last_breakable > 0) { - - // copy from last_breakable to remainder - cmark_chunk_set_cstr(renderer->mem, &remainder, - (char *)renderer->buffer->ptr + - renderer->last_breakable + 1); - // truncate at last_breakable - cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable); - // add newline, prefix, and remainder - cmark_strbuf_putc(renderer->buffer, '\n'); - cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr, - renderer->prefix->size); - cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len); - renderer->column = renderer->prefix->size + remainder.len; - cmark_chunk_free(renderer->mem, &remainder); - renderer->last_breakable = 0; - renderer->begin_line = false; - renderer->begin_content = false; - } - - i += len; - } -} - -// Assumes no newlines, assumes ascii content: -void cmark_render_ascii(cmark_renderer *renderer, const char *s) { - int origsize = renderer->buffer->size; - cmark_strbuf_puts(renderer->buffer, s); - renderer->column += renderer->buffer->size - origsize; -} - -void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) { - cmark_utf8proc_encode_char(c, renderer->buffer); - renderer->column += 1; -} - -char *cmark_render(cmark_node *root, int options, int width, - void (*outc)(cmark_renderer *, cmark_escaping, int32_t, - unsigned char), - int (*render_node)(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, int options)) { - cmark_mem *mem = cmark_node_mem(root); - cmark_strbuf pref = CMARK_BUF_INIT(mem); - cmark_strbuf buf = CMARK_BUF_INIT(mem); - cmark_node *cur; - cmark_event_type ev_type; - char *result; - cmark_iter *iter = cmark_iter_new(root); - - cmark_renderer renderer = {mem, &buf, &pref, 0, width, - 0, 0, true, true, false, - false, outc, S_cr, S_blankline, S_out}; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (!render_node(&renderer, cur, ev_type, options)) { - // a false value causes us to skip processing - // the node's contents. this is used for - // autolinks. - cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT); - } - } - - // ensure final newline - if (renderer.buffer->size == 0 || renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') { - cmark_strbuf_putc(renderer.buffer, '\n'); - } - - result = (char *)cmark_strbuf_detach(renderer.buffer); - - cmark_iter_free(iter); - cmark_strbuf_free(renderer.prefix); - cmark_strbuf_free(renderer.buffer); - - return result; -} diff --git a/Pods/Down/Source/cmark/render.h b/Pods/Down/Source/cmark/render.h deleted file mode 100755 index ab11039..0000000 --- a/Pods/Down/Source/cmark/render.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef CMARK_RENDER_H -#define CMARK_RENDER_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include <stdlib.h> -#include "buffer.h" -#include "chunk.h" - -typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping; - -struct cmark_renderer { - cmark_mem *mem; - cmark_strbuf *buffer; - cmark_strbuf *prefix; - int column; - int width; - int need_cr; - bufsize_t last_breakable; - bool begin_line; - bool begin_content; - bool no_linebreaks; - bool in_tight_list_item; - void (*outc)(struct cmark_renderer *, cmark_escaping, int32_t, unsigned char); - void (*cr)(struct cmark_renderer *); - void (*blankline)(struct cmark_renderer *); - void (*out)(struct cmark_renderer *, const char *, bool, cmark_escaping); -}; - -typedef struct cmark_renderer cmark_renderer; - -void cmark_render_ascii(cmark_renderer *renderer, const char *s); - -void cmark_render_code_point(cmark_renderer *renderer, uint32_t c); - -char *cmark_render(cmark_node *root, int options, int width, - void (*outc)(cmark_renderer *, cmark_escaping, int32_t, - unsigned char), - int (*render_node)(cmark_renderer *renderer, - cmark_node *node, - cmark_event_type ev_type, int options)); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/scanners.c b/Pods/Down/Source/cmark/scanners.c deleted file mode 100755 index f8e6c15..0000000 --- a/Pods/Down/Source/cmark/scanners.c +++ /dev/null @@ -1,13787 +0,0 @@ -/* Generated by re2c 0.16 */ -#include <stdlib.h> -#include "chunk.h" -#include "scanners.h" - -bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, - bufsize_t offset) { - bufsize_t res; - unsigned char *ptr = (unsigned char *)c->data; - - if (ptr == NULL || offset > c->len) { - return 0; - } else { - unsigned char lim = ptr[c->len]; - - ptr[c->len] = '\0'; - res = scanner(ptr + offset); - ptr[c->len] = lim; - } - - return res; -} - -// Try to match a scheme including colon. -bufsize_t _scan_scheme(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - yych = *p; - if (yych <= '@') - goto yy2; - if (yych <= 'Z') - goto yy4; - if (yych <= '`') - goto yy2; - if (yych <= 'z') - goto yy4; - yy2: - ++p; - yy3 : { return 0; } - yy4: - yych = *(marker = ++p); - if (yych <= '/') { - if (yych <= '+') { - if (yych <= '*') - goto yy3; - } else { - if (yych <= ',') - goto yy3; - if (yych >= '/') - goto yy3; - } - } else { - if (yych <= 'Z') { - if (yych <= '9') - goto yy5; - if (yych <= '@') - goto yy3; - } else { - if (yych <= '`') - goto yy3; - if (yych >= '{') - goto yy3; - } - } - yy5: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych == '+') - goto yy7; - } else { - if (yych != '/') - goto yy7; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych >= 'A') - goto yy7; - } else { - if (yych <= '`') - goto yy6; - if (yych <= 'z') - goto yy7; - } - } - yy6: - p = marker; - goto yy3; - yy7: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych == '+') - goto yy10; - goto yy6; - } else { - if (yych == '/') - goto yy6; - goto yy10; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - goto yy10; - } else { - if (yych <= '`') - goto yy6; - if (yych <= 'z') - goto yy10; - goto yy6; - } - } - yy8: - ++p; - { return (bufsize_t)(p - start); } - yy10: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy6; - } else { - if (yych == '/') - goto yy6; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy8; - if (yych <= '@') - goto yy6; - } else { - if (yych <= '`') - goto yy6; - if (yych >= '{') - goto yy6; - } - } - ++p; - if ((yych = *p) == ':') - goto yy8; - goto yy6; - } -} - -// Try to match URI autolink after first <, returning number of chars matched. -bufsize_t _scan_autolink_uri(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= '@') - goto yy41; - if (yych <= 'Z') - goto yy43; - if (yych <= '`') - goto yy41; - if (yych <= 'z') - goto yy43; - yy41: - ++p; - yy42 : { return 0; } - yy43: - yych = *(marker = ++p); - if (yych <= '/') { - if (yych <= '+') { - if (yych <= '*') - goto yy42; - } else { - if (yych <= ',') - goto yy42; - if (yych >= '/') - goto yy42; - } - } else { - if (yych <= 'Z') { - if (yych <= '9') - goto yy44; - if (yych <= '@') - goto yy42; - } else { - if (yych <= '`') - goto yy42; - if (yych >= '{') - goto yy42; - } - } - yy44: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych == '+') - goto yy46; - } else { - if (yych != '/') - goto yy46; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych >= 'A') - goto yy46; - } else { - if (yych <= '`') - goto yy45; - if (yych <= 'z') - goto yy46; - } - } - yy45: - p = marker; - goto yy42; - yy46: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych == '+') - goto yy49; - goto yy45; - } else { - if (yych == '/') - goto yy45; - goto yy49; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - goto yy49; - } else { - if (yych <= '`') - goto yy45; - if (yych <= 'z') - goto yy49; - goto yy45; - } - } - yy47: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy47; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '<') - goto yy45; - if (yych <= '>') - goto yy50; - goto yy45; - } else { - if (yych <= 0xDF) - goto yy52; - if (yych <= 0xE0) - goto yy53; - goto yy54; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy55; - if (yych <= 0xEF) - goto yy54; - goto yy56; - } else { - if (yych <= 0xF3) - goto yy57; - if (yych <= 0xF4) - goto yy58; - goto yy45; - } - } - yy49: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych == '+') - goto yy59; - goto yy45; - } else { - if (yych == '/') - goto yy45; - goto yy59; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - goto yy59; - } else { - if (yych <= '`') - goto yy45; - if (yych <= 'z') - goto yy59; - goto yy45; - } - } - yy50: - ++p; - { return (bufsize_t)(p - start); } - yy52: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy47; - goto yy45; - yy53: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy45; - if (yych <= 0xBF) - goto yy52; - goto yy45; - yy54: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy52; - goto yy45; - yy55: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x9F) - goto yy52; - goto yy45; - yy56: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy45; - if (yych <= 0xBF) - goto yy54; - goto yy45; - yy57: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0xBF) - goto yy54; - goto yy45; - yy58: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy45; - if (yych <= 0x8F) - goto yy54; - goto yy45; - yy59: - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - yych = *++p; - if (yych <= '9') { - if (yych <= ',') { - if (yych != '+') - goto yy45; - } else { - if (yych == '/') - goto yy45; - } - } else { - if (yych <= 'Z') { - if (yych <= ':') - goto yy47; - if (yych <= '@') - goto yy45; - } else { - if (yych <= '`') - goto yy45; - if (yych >= '{') - goto yy45; - } - } - ++p; - if ((yych = *p) == ':') - goto yy47; - goto yy45; - } -} - -// Try to match email autolink after first <, returning num of chars matched. -bufsize_t _scan_autolink_email(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, 128, 128, 0, 0, - 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= '9') { - if (yych <= '\'') { - if (yych == '!') - goto yy91; - if (yych >= '#') - goto yy91; - } else { - if (yych <= ')') - goto yy89; - if (yych != ',') - goto yy91; - } - } else { - if (yych <= '?') { - if (yych == '=') - goto yy91; - if (yych >= '?') - goto yy91; - } else { - if (yych <= 'Z') { - if (yych >= 'A') - goto yy91; - } else { - if (yych <= ']') - goto yy89; - if (yych <= '~') - goto yy91; - } - } - } - yy89: - ++p; - yy90 : { return 0; } - yy91: - yych = *(marker = ++p); - if (yych <= ',') { - if (yych <= '"') { - if (yych == '!') - goto yy93; - goto yy90; - } else { - if (yych <= '\'') - goto yy93; - if (yych <= ')') - goto yy90; - if (yych <= '+') - goto yy93; - goto yy90; - } - } else { - if (yych <= '>') { - if (yych <= '9') - goto yy93; - if (yych == '=') - goto yy93; - goto yy90; - } else { - if (yych <= 'Z') - goto yy93; - if (yych <= ']') - goto yy90; - if (yych <= '~') - goto yy93; - goto yy90; - } - } - yy92: - ++p; - yych = *p; - yy93: - if (yybm[0 + yych] & 128) { - goto yy92; - } - if (yych <= '>') - goto yy94; - if (yych <= '@') - goto yy95; - yy94: - p = marker; - goto yy90; - yy95: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy94; - if (yych >= ':') - goto yy94; - } else { - if (yych <= 'Z') - goto yy96; - if (yych <= '`') - goto yy94; - if (yych >= '{') - goto yy94; - } - yy96: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy98; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy98; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy98; - goto yy94; - } - } - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy101; - if (yych <= '/') - goto yy94; - goto yy102; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy102; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy102; - goto yy94; - } - } - yy98: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych <= '-') - goto yy101; - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy102; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy102; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy102; - goto yy94; - } - } - yy99: - ++p; - { return (bufsize_t)(p - start); } - yy101: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy103; - if (yych <= '/') - goto yy94; - goto yy104; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy104; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy104; - goto yy94; - } - } - yy102: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy104; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy104; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy104; - goto yy94; - } - } - yy103: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy105; - if (yych <= '/') - goto yy94; - goto yy106; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy106; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy106; - goto yy94; - } - } - yy104: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy106; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy106; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy106; - goto yy94; - } - } - yy105: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy107; - if (yych <= '/') - goto yy94; - goto yy108; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy108; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy108; - goto yy94; - } - } - yy106: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy108; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy108; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy108; - goto yy94; - } - } - yy107: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy109; - if (yych <= '/') - goto yy94; - goto yy110; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy110; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy110; - goto yy94; - } - } - yy108: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy110; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy110; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy110; - goto yy94; - } - } - yy109: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy111; - if (yych <= '/') - goto yy94; - goto yy112; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy112; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy112; - goto yy94; - } - } - yy110: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy112; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy112; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy112; - goto yy94; - } - } - yy111: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy113; - if (yych <= '/') - goto yy94; - goto yy114; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy114; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy114; - goto yy94; - } - } - yy112: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy114; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy114; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy114; - goto yy94; - } - } - yy113: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy115; - if (yych <= '/') - goto yy94; - goto yy116; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy116; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy116; - goto yy94; - } - } - yy114: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy116; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy116; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy116; - goto yy94; - } - } - yy115: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy117; - if (yych <= '/') - goto yy94; - goto yy118; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy118; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy118; - goto yy94; - } - } - yy116: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy118; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy118; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy118; - goto yy94; - } - } - yy117: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy119; - if (yych <= '/') - goto yy94; - goto yy120; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy120; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy120; - goto yy94; - } - } - yy118: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy120; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy120; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy120; - goto yy94; - } - } - yy119: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy121; - if (yych <= '/') - goto yy94; - goto yy122; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy122; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy122; - goto yy94; - } - } - yy120: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy122; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy122; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy122; - goto yy94; - } - } - yy121: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy123; - if (yych <= '/') - goto yy94; - goto yy124; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy124; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy124; - goto yy94; - } - } - yy122: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy124; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy124; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy124; - goto yy94; - } - } - yy123: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy125; - if (yych <= '/') - goto yy94; - goto yy126; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy126; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy126; - goto yy94; - } - } - yy124: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy126; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy126; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy126; - goto yy94; - } - } - yy125: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy127; - if (yych <= '/') - goto yy94; - goto yy128; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy128; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy128; - goto yy94; - } - } - yy126: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy128; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy128; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy128; - goto yy94; - } - } - yy127: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy129; - if (yych <= '/') - goto yy94; - goto yy130; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy130; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy130; - goto yy94; - } - } - yy128: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy130; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy130; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy130; - goto yy94; - } - } - yy129: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy131; - if (yych <= '/') - goto yy94; - goto yy132; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy132; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy132; - goto yy94; - } - } - yy130: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy132; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy132; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy132; - goto yy94; - } - } - yy131: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy133; - if (yych <= '/') - goto yy94; - goto yy134; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy134; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy134; - goto yy94; - } - } - yy132: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy134; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy134; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy134; - goto yy94; - } - } - yy133: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy135; - if (yych <= '/') - goto yy94; - goto yy136; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy136; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy136; - goto yy94; - } - } - yy134: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy136; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy136; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy136; - goto yy94; - } - } - yy135: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy137; - if (yych <= '/') - goto yy94; - goto yy138; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy138; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy138; - goto yy94; - } - } - yy136: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy138; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy138; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy138; - goto yy94; - } - } - yy137: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy139; - if (yych <= '/') - goto yy94; - goto yy140; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy140; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy140; - goto yy94; - } - } - yy138: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy140; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy140; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy140; - goto yy94; - } - } - yy139: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy141; - if (yych <= '/') - goto yy94; - goto yy142; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy142; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy142; - goto yy94; - } - } - yy140: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy142; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy142; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy142; - goto yy94; - } - } - yy141: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy143; - if (yych <= '/') - goto yy94; - goto yy144; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy144; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy144; - goto yy94; - } - } - yy142: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy144; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy144; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy144; - goto yy94; - } - } - yy143: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy145; - if (yych <= '/') - goto yy94; - goto yy146; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy146; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy146; - goto yy94; - } - } - yy144: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy146; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy146; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy146; - goto yy94; - } - } - yy145: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy147; - if (yych <= '/') - goto yy94; - goto yy148; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy148; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy148; - goto yy94; - } - } - yy146: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy148; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy148; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy148; - goto yy94; - } - } - yy147: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy149; - if (yych <= '/') - goto yy94; - goto yy150; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy150; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy150; - goto yy94; - } - } - yy148: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy150; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy150; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy150; - goto yy94; - } - } - yy149: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy151; - if (yych <= '/') - goto yy94; - goto yy152; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy152; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy152; - goto yy94; - } - } - yy150: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy152; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy152; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy152; - goto yy94; - } - } - yy151: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy153; - if (yych <= '/') - goto yy94; - goto yy154; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy154; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy154; - goto yy94; - } - } - yy152: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy154; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy154; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy154; - goto yy94; - } - } - yy153: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy155; - if (yych <= '/') - goto yy94; - goto yy156; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy156; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy156; - goto yy94; - } - } - yy154: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy156; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy156; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy156; - goto yy94; - } - } - yy155: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy157; - if (yych <= '/') - goto yy94; - goto yy158; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy158; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy158; - goto yy94; - } - } - yy156: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy158; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy158; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy158; - goto yy94; - } - } - yy157: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy159; - if (yych <= '/') - goto yy94; - goto yy160; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy160; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy160; - goto yy94; - } - } - yy158: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy160; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy160; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy160; - goto yy94; - } - } - yy159: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy161; - if (yych <= '/') - goto yy94; - goto yy162; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy162; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy162; - goto yy94; - } - } - yy160: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy162; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy162; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy162; - goto yy94; - } - } - yy161: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy163; - if (yych <= '/') - goto yy94; - goto yy164; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy164; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy164; - goto yy94; - } - } - yy162: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy164; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy164; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy164; - goto yy94; - } - } - yy163: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy165; - if (yych <= '/') - goto yy94; - goto yy166; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy166; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy166; - goto yy94; - } - } - yy164: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy166; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy166; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy166; - goto yy94; - } - } - yy165: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy167; - if (yych <= '/') - goto yy94; - goto yy168; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy168; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy168; - goto yy94; - } - } - yy166: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy168; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy168; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy168; - goto yy94; - } - } - yy167: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy169; - if (yych <= '/') - goto yy94; - goto yy170; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy170; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy170; - goto yy94; - } - } - yy168: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy170; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy170; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy170; - goto yy94; - } - } - yy169: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy171; - if (yych <= '/') - goto yy94; - goto yy172; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy172; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy172; - goto yy94; - } - } - yy170: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy172; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy172; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy172; - goto yy94; - } - } - yy171: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy173; - if (yych <= '/') - goto yy94; - goto yy174; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy174; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy174; - goto yy94; - } - } - yy172: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy174; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy174; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy174; - goto yy94; - } - } - yy173: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy175; - if (yych <= '/') - goto yy94; - goto yy176; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy176; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy176; - goto yy94; - } - } - yy174: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy176; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy176; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy176; - goto yy94; - } - } - yy175: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy177; - if (yych <= '/') - goto yy94; - goto yy178; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy178; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy178; - goto yy94; - } - } - yy176: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy178; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy178; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy178; - goto yy94; - } - } - yy177: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy179; - if (yych <= '/') - goto yy94; - goto yy180; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy180; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy180; - goto yy94; - } - } - yy178: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy180; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy180; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy180; - goto yy94; - } - } - yy179: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy181; - if (yych <= '/') - goto yy94; - goto yy182; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy182; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy182; - goto yy94; - } - } - yy180: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy182; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy182; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy182; - goto yy94; - } - } - yy181: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy183; - if (yych <= '/') - goto yy94; - goto yy184; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy184; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy184; - goto yy94; - } - } - yy182: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy184; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy184; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy184; - goto yy94; - } - } - yy183: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy185; - if (yych <= '/') - goto yy94; - goto yy186; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy186; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy186; - goto yy94; - } - } - yy184: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy186; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy186; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy186; - goto yy94; - } - } - yy185: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy187; - if (yych <= '/') - goto yy94; - goto yy188; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy188; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy188; - goto yy94; - } - } - yy186: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy188; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy188; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy188; - goto yy94; - } - } - yy187: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy189; - if (yych <= '/') - goto yy94; - goto yy190; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy190; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy190; - goto yy94; - } - } - yy188: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy190; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy190; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy190; - goto yy94; - } - } - yy189: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy191; - if (yych <= '/') - goto yy94; - goto yy192; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy192; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy192; - goto yy94; - } - } - yy190: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy192; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy192; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy192; - goto yy94; - } - } - yy191: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy193; - if (yych <= '/') - goto yy94; - goto yy194; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy194; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy194; - goto yy94; - } - } - yy192: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy194; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy194; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy194; - goto yy94; - } - } - yy193: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy195; - if (yych <= '/') - goto yy94; - goto yy196; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy196; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy196; - goto yy94; - } - } - yy194: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy196; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy196; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy196; - goto yy94; - } - } - yy195: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy197; - if (yych <= '/') - goto yy94; - goto yy198; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy198; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy198; - goto yy94; - } - } - yy196: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy198; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy198; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy198; - goto yy94; - } - } - yy197: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy199; - if (yych <= '/') - goto yy94; - goto yy200; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy200; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy200; - goto yy94; - } - } - yy198: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy200; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy200; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy200; - goto yy94; - } - } - yy199: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy201; - if (yych <= '/') - goto yy94; - goto yy202; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy202; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy202; - goto yy94; - } - } - yy200: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy202; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy202; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy202; - goto yy94; - } - } - yy201: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy203; - if (yych <= '/') - goto yy94; - goto yy204; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy204; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy204; - goto yy94; - } - } - yy202: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy204; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy204; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy204; - goto yy94; - } - } - yy203: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy205; - if (yych <= '/') - goto yy94; - goto yy206; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy206; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy206; - goto yy94; - } - } - yy204: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy206; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy206; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy206; - goto yy94; - } - } - yy205: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy207; - if (yych <= '/') - goto yy94; - goto yy208; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy208; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy208; - goto yy94; - } - } - yy206: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy208; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy208; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy208; - goto yy94; - } - } - yy207: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy209; - if (yych <= '/') - goto yy94; - goto yy210; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy210; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy210; - goto yy94; - } - } - yy208: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy210; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy210; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy210; - goto yy94; - } - } - yy209: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy211; - if (yych <= '/') - goto yy94; - goto yy212; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy212; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy212; - goto yy94; - } - } - yy210: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy212; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy212; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy212; - goto yy94; - } - } - yy211: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy213; - if (yych <= '/') - goto yy94; - goto yy214; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy214; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy214; - goto yy94; - } - } - yy212: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy214; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy214; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy214; - goto yy94; - } - } - yy213: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy215; - if (yych <= '/') - goto yy94; - goto yy216; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy216; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy216; - goto yy94; - } - } - yy214: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy216; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy216; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy216; - goto yy94; - } - } - yy215: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy217; - if (yych <= '/') - goto yy94; - goto yy218; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy218; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy218; - goto yy94; - } - } - yy216: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy218; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy218; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy218; - goto yy94; - } - } - yy217: - ++p; - yych = *p; - if (yych <= '9') { - if (yych == '-') - goto yy219; - if (yych <= '/') - goto yy94; - goto yy220; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy94; - goto yy220; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy220; - goto yy94; - } - } - yy218: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= ',') - goto yy94; - if (yych >= '.') - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy220; - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - goto yy220; - } else { - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy220; - goto yy94; - } - } - yy219: - ++p; - yych = *p; - if (yych <= '@') { - if (yych <= '/') - goto yy94; - if (yych <= '9') - goto yy221; - goto yy94; - } else { - if (yych <= 'Z') - goto yy221; - if (yych <= '`') - goto yy94; - if (yych <= 'z') - goto yy221; - goto yy94; - } - yy220: - ++p; - yych = *p; - if (yych <= '=') { - if (yych <= '.') { - if (yych <= '-') - goto yy94; - goto yy95; - } else { - if (yych <= '/') - goto yy94; - if (yych >= ':') - goto yy94; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy99; - if (yych <= '@') - goto yy94; - } else { - if (yych <= '`') - goto yy94; - if (yych >= '{') - goto yy94; - } - } - yy221: - ++p; - yych = *p; - if (yych == '.') - goto yy95; - if (yych == '>') - goto yy99; - goto yy94; - } -} - -// Try to match an HTML tag after first <, returning num of chars matched. -bufsize_t _scan_html_tag(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - /* table 1 .. 8: 0 */ - 0, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 235, - 235, - 235, - 235, - 235, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 250, - 235, - 250, - 202, - 250, - 250, - 250, - 250, - 170, - 250, - 250, - 250, - 250, - 250, - 246, - 254, - 250, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 250, - 234, - 234, - 232, - 250, - 250, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 250, - 250, - 122, - 250, - 254, - 234, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 254, - 250, - 250, - 250, - 250, - 250, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - /* table 9 .. 11: 256 */ - 0, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 128, - 192, - 128, - 128, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 128, - 128, - 128, - 128, - 128, - 0, - 128, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 224, - 128, - 128, - 128, - 128, - 128, - 128, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 192, - 128, - 128, - 128, - 128, - 128, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - }; - yych = *p; - if (yych <= '>') { - if (yych <= '!') { - if (yych >= '!') - goto yy226; - } else { - if (yych == '/') - goto yy227; - } - } else { - if (yych <= 'Z') { - if (yych <= '?') - goto yy228; - if (yych >= 'A') - goto yy229; - } else { - if (yych <= '`') - goto yy224; - if (yych <= 'z') - goto yy229; - } - } - yy224: - ++p; - yy225 : { return 0; } - yy226: - yych = *(marker = ++p); - if (yybm[256 + yych] & 32) { - goto yy232; - } - if (yych == '-') - goto yy230; - if (yych <= '@') - goto yy225; - if (yych <= '[') - goto yy234; - goto yy225; - yy227: - yych = *(marker = ++p); - if (yych <= '@') - goto yy225; - if (yych <= 'Z') - goto yy235; - if (yych <= '`') - goto yy225; - if (yych <= 'z') - goto yy235; - goto yy225; - yy228: - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy225; - if (yych <= 0x7F) - goto yy238; - if (yych <= 0xC1) - goto yy225; - if (yych <= 0xF4) - goto yy238; - goto yy225; - yy229: - yych = *(marker = ++p); - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy249; - goto yy225; - } else { - if (yych <= '/') - goto yy251; - if (yych <= '9') - goto yy249; - goto yy225; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy252; - if (yych <= '@') - goto yy225; - goto yy249; - } else { - if (yych <= '`') - goto yy225; - if (yych <= 'z') - goto yy249; - goto yy225; - } - } - yy230: - yych = *++p; - if (yych == '-') - goto yy254; - yy231: - p = marker; - goto yy225; - yy232: - ++p; - yych = *p; - if (yybm[256 + yych] & 32) { - goto yy232; - } - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy255; - if (yych == ' ') - goto yy255; - goto yy231; - yy234: - yych = *++p; - if (yych == 'C') - goto yy257; - if (yych == 'c') - goto yy257; - goto yy231; - yy235: - ++p; - yych = *p; - if (yybm[256 + yych] & 64) { - goto yy235; - } - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy258; - goto yy231; - } else { - if (yych <= ' ') - goto yy258; - if (yych == '>') - goto yy252; - goto yy231; - } - yy237: - ++p; - yych = *p; - yy238: - if (yybm[256 + yych] & 128) { - goto yy237; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych >= '@') - goto yy231; - } else { - if (yych <= 0xDF) - goto yy240; - if (yych <= 0xE0) - goto yy241; - goto yy242; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy243; - if (yych <= 0xEF) - goto yy242; - goto yy244; - } else { - if (yych <= 0xF3) - goto yy245; - if (yych <= 0xF4) - goto yy246; - goto yy231; - } - } - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy231; - if (yych <= '=') - goto yy237; - goto yy252; - } else { - if (yych <= 0x7F) - goto yy237; - if (yych <= 0xC1) - goto yy231; - if (yych >= 0xE0) - goto yy241; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy243; - goto yy242; - } else { - if (yych <= 0xF0) - goto yy244; - if (yych <= 0xF3) - goto yy245; - if (yych <= 0xF4) - goto yy246; - goto yy231; - } - } - yy240: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy237; - goto yy231; - yy241: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy240; - goto yy231; - yy242: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy240; - goto yy231; - yy243: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy240; - goto yy231; - yy244: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy242; - goto yy231; - yy245: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy242; - goto yy231; - yy246: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy242; - goto yy231; - yy247: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych <= '>') { - if (yych <= '9') { - if (yych == '/') - goto yy251; - goto yy231; - } else { - if (yych <= ':') - goto yy260; - if (yych <= '=') - goto yy231; - goto yy252; - } - } else { - if (yych <= '^') { - if (yych <= '@') - goto yy231; - if (yych <= 'Z') - goto yy260; - goto yy231; - } else { - if (yych == '`') - goto yy231; - if (yych <= 'z') - goto yy260; - goto yy231; - } - } - yy249: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy249; - goto yy231; - } else { - if (yych <= '/') - goto yy251; - if (yych <= '9') - goto yy249; - goto yy231; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy252; - if (yych <= '@') - goto yy231; - goto yy249; - } else { - if (yych <= '`') - goto yy231; - if (yych <= 'z') - goto yy249; - goto yy231; - } - } - yy251: - yych = *++p; - if (yych != '>') - goto yy231; - yy252: - ++p; - { return (bufsize_t)(p - start); } - yy254: - yych = *++p; - if (yych == '-') - goto yy264; - if (yych == '>') - goto yy231; - goto yy263; - yy255: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy255; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '>') - goto yy252; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy272; - if (yych <= 0xE0) - goto yy273; - goto yy274; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy275; - if (yych <= 0xEF) - goto yy274; - goto yy276; - } else { - if (yych <= 0xF3) - goto yy277; - if (yych <= 0xF4) - goto yy278; - goto yy231; - } - } - yy257: - yych = *++p; - if (yych == 'D') - goto yy279; - if (yych == 'd') - goto yy279; - goto yy231; - yy258: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy258; - goto yy231; - } else { - if (yych <= ' ') - goto yy258; - if (yych == '>') - goto yy252; - goto yy231; - } - yy260: - ++p; - yych = *p; - if (yybm[0 + yych] & 4) { - goto yy260; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy231; - goto yy280; - } else { - if (yych == ' ') - goto yy280; - goto yy231; - } - } else { - if (yych <= '<') { - if (yych <= '/') - goto yy251; - goto yy231; - } else { - if (yych <= '=') - goto yy282; - if (yych <= '>') - goto yy252; - goto yy231; - } - } - yy262: - ++p; - yych = *p; - yy263: - if (yybm[0 + yych] & 8) { - goto yy262; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '-') - goto yy284; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy265; - if (yych <= 0xE0) - goto yy266; - goto yy267; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy268; - if (yych <= 0xEF) - goto yy267; - goto yy269; - } else { - if (yych <= 0xF3) - goto yy270; - if (yych <= 0xF4) - goto yy271; - goto yy231; - } - } - yy264: - yych = *++p; - if (yych == '-') - goto yy251; - if (yych == '>') - goto yy231; - goto yy263; - yy265: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy262; - goto yy231; - yy266: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy265; - goto yy231; - yy267: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy265; - goto yy231; - yy268: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy265; - goto yy231; - yy269: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy267; - goto yy231; - yy270: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy267; - goto yy231; - yy271: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy267; - goto yy231; - yy272: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy255; - goto yy231; - yy273: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy272; - goto yy231; - yy274: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy272; - goto yy231; - yy275: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy272; - goto yy231; - yy276: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy274; - goto yy231; - yy277: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy274; - goto yy231; - yy278: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy274; - goto yy231; - yy279: - yych = *++p; - if (yych == 'A') - goto yy285; - if (yych == 'a') - goto yy285; - goto yy231; - yy280: - ++p; - yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy231; - if (yych <= '\r') - goto yy280; - if (yych <= 0x1F) - goto yy231; - goto yy280; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy231; - goto yy251; - } else { - if (yych == ':') - goto yy260; - goto yy231; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') - goto yy282; - if (yych <= '>') - goto yy252; - if (yych <= '@') - goto yy231; - goto yy260; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy231; - goto yy260; - } else { - if (yych <= '`') - goto yy231; - if (yych <= 'z') - goto yy260; - goto yy231; - } - } - } - yy282: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy286; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) - goto yy231; - if (yych <= ' ') - goto yy282; - goto yy288; - } else { - if (yych <= '\'') - goto yy290; - if (yych <= 0xC1) - goto yy231; - if (yych <= 0xDF) - goto yy292; - goto yy293; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy295; - goto yy294; - } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } - } - yy284: - ++p; - yych = *p; - if (yybm[0 + yych] & 8) { - goto yy262; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '-') - goto yy251; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy265; - if (yych <= 0xE0) - goto yy266; - goto yy267; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy268; - if (yych <= 0xEF) - goto yy267; - goto yy269; - } else { - if (yych <= 0xF3) - goto yy270; - if (yych <= 0xF4) - goto yy271; - goto yy231; - } - } - yy285: - yych = *++p; - if (yych == 'T') - goto yy299; - if (yych == 't') - goto yy299; - goto yy231; - yy286: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy286; - } - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy231; - if (yych <= ' ') - goto yy247; - goto yy231; - } else { - if (yych <= '>') - goto yy252; - if (yych <= 0xC1) - goto yy231; - if (yych <= 0xDF) - goto yy292; - goto yy293; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy295; - goto yy294; - } else { - if (yych <= 0xF0) - goto yy296; - if (yych <= 0xF3) - goto yy297; - if (yych <= 0xF4) - goto yy298; - goto yy231; - } - } - yy288: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy288; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '"') - goto yy300; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy301; - if (yych <= 0xE0) - goto yy302; - goto yy303; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy304; - if (yych <= 0xEF) - goto yy303; - goto yy305; - } else { - if (yych <= 0xF3) - goto yy306; - if (yych <= 0xF4) - goto yy307; - goto yy231; - } - } - yy290: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy290; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= '\'') - goto yy300; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy308; - if (yych <= 0xE0) - goto yy309; - goto yy310; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy311; - if (yych <= 0xEF) - goto yy310; - goto yy312; - } else { - if (yych <= 0xF3) - goto yy313; - if (yych <= 0xF4) - goto yy314; - goto yy231; - } - } - yy292: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy286; - goto yy231; - yy293: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy292; - goto yy231; - yy294: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy292; - goto yy231; - yy295: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy292; - goto yy231; - yy296: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy294; - goto yy231; - yy297: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy294; - goto yy231; - yy298: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy294; - goto yy231; - yy299: - yych = *++p; - if (yych == 'A') - goto yy315; - if (yych == 'a') - goto yy315; - goto yy231; - yy300: - ++p; - yych = *p; - if (yybm[0 + yych] & 1) { - goto yy247; - } - if (yych == '/') - goto yy251; - if (yych == '>') - goto yy252; - goto yy231; - yy301: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy288; - goto yy231; - yy302: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy301; - goto yy231; - yy303: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy301; - goto yy231; - yy304: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy301; - goto yy231; - yy305: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy303; - goto yy231; - yy306: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy303; - goto yy231; - yy307: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy303; - goto yy231; - yy308: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy290; - goto yy231; - yy309: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy308; - goto yy231; - yy310: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy308; - goto yy231; - yy311: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy308; - goto yy231; - yy312: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy310; - goto yy231; - yy313: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy310; - goto yy231; - yy314: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy310; - goto yy231; - yy315: - yych = *++p; - if (yych != '[') - goto yy231; - yy316: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy316; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych >= '^') - goto yy231; - } else { - if (yych <= 0xDF) - goto yy319; - if (yych <= 0xE0) - goto yy320; - goto yy321; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy322; - if (yych <= 0xEF) - goto yy321; - goto yy323; - } else { - if (yych <= 0xF3) - goto yy324; - if (yych <= 0xF4) - goto yy325; - goto yy231; - } - } - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy316; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy231; - if (yych <= ']') - goto yy326; - goto yy231; - } else { - if (yych <= 0xDF) - goto yy319; - if (yych <= 0xE0) - goto yy320; - goto yy321; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy322; - if (yych <= 0xEF) - goto yy321; - goto yy323; - } else { - if (yych <= 0xF3) - goto yy324; - if (yych <= 0xF4) - goto yy325; - goto yy231; - } - } - yy319: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy316; - goto yy231; - yy320: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy231; - if (yych <= 0xBF) - goto yy319; - goto yy231; - yy321: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy319; - goto yy231; - yy322: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x9F) - goto yy319; - goto yy231; - yy323: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy231; - if (yych <= 0xBF) - goto yy321; - goto yy231; - yy324: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0xBF) - goto yy321; - goto yy231; - yy325: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy231; - if (yych <= 0x8F) - goto yy321; - goto yy231; - yy326: - ++p; - yych = *p; - if (yych <= 0xE0) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy231; - if (yych <= '=') - goto yy316; - goto yy252; - } else { - if (yych <= 0x7F) - goto yy316; - if (yych <= 0xC1) - goto yy231; - if (yych <= 0xDF) - goto yy319; - goto yy320; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy322; - goto yy321; - } else { - if (yych <= 0xF0) - goto yy323; - if (yych <= 0xF3) - goto yy324; - if (yych <= 0xF4) - goto yy325; - goto yy231; - } - } - } -} - -// Try to match an HTML block tag start line, returning -// an integer code for the type of block (1-6, matching the spec). -// #7 is handled by a separate function, below. -bufsize_t _scan_html_block_start(const unsigned char *p) { - const unsigned char *marker = NULL; - - { - unsigned char yych; - yych = *p; - if (yych == '<') - goto yy331; - ++p; - yy330 : { return 0; } - yy331: - yych = *(marker = ++p); - switch (yych) { - case '!': - goto yy332; - case '/': - goto yy334; - case '?': - goto yy335; - case 'A': - case 'a': - goto yy337; - case 'B': - case 'b': - goto yy338; - case 'C': - case 'c': - goto yy339; - case 'D': - case 'd': - goto yy340; - case 'F': - case 'f': - goto yy341; - case 'H': - case 'h': - goto yy342; - case 'I': - case 'i': - goto yy343; - case 'L': - case 'l': - goto yy344; - case 'M': - case 'm': - goto yy345; - case 'N': - case 'n': - goto yy346; - case 'O': - case 'o': - goto yy347; - case 'P': - case 'p': - goto yy348; - case 'S': - case 's': - goto yy349; - case 'T': - case 't': - goto yy350; - case 'U': - case 'u': - goto yy351; - default: - goto yy330; - } - yy332: - yych = *++p; - if (yych <= '@') { - if (yych == '-') - goto yy352; - } else { - if (yych <= 'Z') - goto yy353; - if (yych <= '[') - goto yy355; - } - yy333: - p = marker; - goto yy330; - yy334: - yych = *++p; - switch (yych) { - case 'A': - case 'a': - goto yy337; - case 'B': - case 'b': - goto yy338; - case 'C': - case 'c': - goto yy339; - case 'D': - case 'd': - goto yy340; - case 'F': - case 'f': - goto yy341; - case 'H': - case 'h': - goto yy342; - case 'I': - case 'i': - goto yy343; - case 'L': - case 'l': - goto yy344; - case 'M': - case 'm': - goto yy345; - case 'N': - case 'n': - goto yy346; - case 'O': - case 'o': - goto yy347; - case 'P': - case 'p': - goto yy356; - case 'S': - case 's': - goto yy357; - case 'T': - case 't': - goto yy350; - case 'U': - case 'u': - goto yy351; - default: - goto yy333; - } - yy335: - ++p; - { return 3; } - yy337: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'D') { - if (yych <= 'C') - goto yy333; - goto yy358; - } else { - if (yych <= 'Q') - goto yy333; - if (yych <= 'R') - goto yy359; - goto yy360; - } - } else { - if (yych <= 'q') { - if (yych == 'd') - goto yy358; - goto yy333; - } else { - if (yych <= 'r') - goto yy359; - if (yych <= 's') - goto yy360; - goto yy333; - } - } - yy338: - yych = *++p; - if (yych <= 'O') { - if (yych <= 'K') { - if (yych == 'A') - goto yy361; - goto yy333; - } else { - if (yych <= 'L') - goto yy362; - if (yych <= 'N') - goto yy333; - goto yy363; - } - } else { - if (yych <= 'k') { - if (yych == 'a') - goto yy361; - goto yy333; - } else { - if (yych <= 'l') - goto yy362; - if (yych == 'o') - goto yy363; - goto yy333; - } - } - yy339: - yych = *++p; - if (yych <= 'O') { - if (yych <= 'D') { - if (yych == 'A') - goto yy364; - goto yy333; - } else { - if (yych <= 'E') - goto yy365; - if (yych <= 'N') - goto yy333; - goto yy366; - } - } else { - if (yych <= 'd') { - if (yych == 'a') - goto yy364; - goto yy333; - } else { - if (yych <= 'e') - goto yy365; - if (yych == 'o') - goto yy366; - goto yy333; - } - } - yy340: - yych = *++p; - switch (yych) { - case 'D': - case 'L': - case 'T': - case 'd': - case 'l': - case 't': - goto yy367; - case 'E': - case 'e': - goto yy368; - case 'I': - case 'i': - goto yy369; - default: - goto yy333; - } - yy341: - yych = *++p; - if (yych <= 'R') { - if (yych <= 'N') { - if (yych == 'I') - goto yy370; - goto yy333; - } else { - if (yych <= 'O') - goto yy371; - if (yych <= 'Q') - goto yy333; - goto yy372; - } - } else { - if (yych <= 'n') { - if (yych == 'i') - goto yy370; - goto yy333; - } else { - if (yych <= 'o') - goto yy371; - if (yych == 'r') - goto yy372; - goto yy333; - } - } - yy342: - yych = *++p; - if (yych <= 'S') { - if (yych <= 'D') { - if (yych <= '0') - goto yy333; - if (yych <= '6') - goto yy367; - goto yy333; - } else { - if (yych <= 'E') - goto yy373; - if (yych == 'R') - goto yy367; - goto yy333; - } - } else { - if (yych <= 'q') { - if (yych <= 'T') - goto yy374; - if (yych == 'e') - goto yy373; - goto yy333; - } else { - if (yych <= 'r') - goto yy367; - if (yych == 't') - goto yy374; - goto yy333; - } - } - yy343: - yych = *++p; - if (yych == 'F') - goto yy375; - if (yych == 'f') - goto yy375; - goto yy333; - yy344: - yych = *++p; - if (yych <= 'I') { - if (yych == 'E') - goto yy376; - if (yych <= 'H') - goto yy333; - goto yy377; - } else { - if (yych <= 'e') { - if (yych <= 'd') - goto yy333; - goto yy376; - } else { - if (yych == 'i') - goto yy377; - goto yy333; - } - } - yy345: - yych = *++p; - if (yych <= 'E') { - if (yych == 'A') - goto yy378; - if (yych <= 'D') - goto yy333; - goto yy379; - } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy333; - goto yy378; - } else { - if (yych == 'e') - goto yy379; - goto yy333; - } - } - yy346: - yych = *++p; - if (yych <= 'O') { - if (yych == 'A') - goto yy380; - if (yych <= 'N') - goto yy333; - goto yy381; - } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy333; - goto yy380; - } else { - if (yych == 'o') - goto yy381; - goto yy333; - } - } - yy347: - yych = *++p; - if (yych <= 'P') { - if (yych == 'L') - goto yy367; - if (yych <= 'O') - goto yy333; - goto yy382; - } else { - if (yych <= 'l') { - if (yych <= 'k') - goto yy333; - goto yy367; - } else { - if (yych == 'p') - goto yy382; - goto yy333; - } - } - yy348: - yych = *++p; - if (yych <= '>') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - if (yych <= 0x1F) - goto yy333; - goto yy383; - } else { - if (yych == '/') - goto yy385; - if (yych <= '=') - goto yy333; - goto yy383; - } - } else { - if (yych <= 'R') { - if (yych == 'A') - goto yy386; - if (yych <= 'Q') - goto yy333; - goto yy387; - } else { - if (yych <= 'a') { - if (yych <= '`') - goto yy333; - goto yy386; - } else { - if (yych == 'r') - goto yy387; - goto yy333; - } - } - } - yy349: - yych = *++p; - switch (yych) { - case 'C': - case 'c': - goto yy388; - case 'E': - case 'e': - goto yy389; - case 'O': - case 'o': - goto yy390; - case 'T': - case 't': - goto yy391; - case 'U': - case 'u': - goto yy392; - default: - goto yy333; - } - yy350: - yych = *++p; - switch (yych) { - case 'A': - case 'a': - goto yy393; - case 'B': - case 'b': - goto yy394; - case 'D': - case 'd': - goto yy367; - case 'F': - case 'f': - goto yy395; - case 'H': - case 'h': - goto yy396; - case 'I': - case 'i': - goto yy397; - case 'R': - case 'r': - goto yy398; - default: - goto yy333; - } - yy351: - yych = *++p; - if (yych == 'L') - goto yy367; - if (yych == 'l') - goto yy367; - goto yy333; - yy352: - yych = *++p; - if (yych == '-') - goto yy399; - goto yy333; - yy353: - ++p; - { return 4; } - yy355: - yych = *++p; - if (yych == 'C') - goto yy401; - if (yych == 'c') - goto yy401; - goto yy333; - yy356: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= '@') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'A') - goto yy386; - if (yych == 'a') - goto yy386; - goto yy333; - } - } - yy357: - yych = *++p; - if (yych <= 'U') { - if (yych <= 'N') { - if (yych == 'E') - goto yy389; - goto yy333; - } else { - if (yych <= 'O') - goto yy390; - if (yych <= 'T') - goto yy333; - goto yy392; - } - } else { - if (yych <= 'n') { - if (yych == 'e') - goto yy389; - goto yy333; - } else { - if (yych <= 'o') - goto yy390; - if (yych == 'u') - goto yy392; - goto yy333; - } - } - yy358: - yych = *++p; - if (yych == 'D') - goto yy402; - if (yych == 'd') - goto yy402; - goto yy333; - yy359: - yych = *++p; - if (yych == 'T') - goto yy403; - if (yych == 't') - goto yy403; - goto yy333; - yy360: - yych = *++p; - if (yych == 'I') - goto yy404; - if (yych == 'i') - goto yy404; - goto yy333; - yy361: - yych = *++p; - if (yych == 'S') - goto yy405; - if (yych == 's') - goto yy405; - goto yy333; - yy362: - yych = *++p; - if (yych == 'O') - goto yy406; - if (yych == 'o') - goto yy406; - goto yy333; - yy363: - yych = *++p; - if (yych == 'D') - goto yy407; - if (yych == 'd') - goto yy407; - goto yy333; - yy364: - yych = *++p; - if (yych == 'P') - goto yy408; - if (yych == 'p') - goto yy408; - goto yy333; - yy365: - yych = *++p; - if (yych == 'N') - goto yy409; - if (yych == 'n') - goto yy409; - goto yy333; - yy366: - yych = *++p; - if (yych == 'L') - goto yy410; - if (yych == 'l') - goto yy410; - goto yy333; - yy367: - yych = *++p; - if (yych <= ' ') { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - if (yych <= 0x1F) - goto yy333; - goto yy383; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy333; - goto yy385; - } else { - if (yych == '>') - goto yy383; - goto yy333; - } - } - yy368: - yych = *++p; - if (yych == 'T') - goto yy411; - if (yych == 't') - goto yy411; - goto yy333; - yy369: - yych = *++p; - if (yych <= 'V') { - if (yych <= 'Q') { - if (yych == 'A') - goto yy412; - goto yy333; - } else { - if (yych <= 'R') - goto yy367; - if (yych <= 'U') - goto yy333; - goto yy367; - } - } else { - if (yych <= 'q') { - if (yych == 'a') - goto yy412; - goto yy333; - } else { - if (yych <= 'r') - goto yy367; - if (yych == 'v') - goto yy367; - goto yy333; - } - } - yy370: - yych = *++p; - if (yych <= 'G') { - if (yych == 'E') - goto yy413; - if (yych <= 'F') - goto yy333; - goto yy414; - } else { - if (yych <= 'e') { - if (yych <= 'd') - goto yy333; - goto yy413; - } else { - if (yych == 'g') - goto yy414; - goto yy333; - } - } - yy371: - yych = *++p; - if (yych <= 'R') { - if (yych == 'O') - goto yy409; - if (yych <= 'Q') - goto yy333; - goto yy415; - } else { - if (yych <= 'o') { - if (yych <= 'n') - goto yy333; - goto yy409; - } else { - if (yych == 'r') - goto yy415; - goto yy333; - } - } - yy372: - yych = *++p; - if (yych == 'A') - goto yy416; - if (yych == 'a') - goto yy416; - goto yy333; - yy373: - yych = *++p; - if (yych == 'A') - goto yy417; - if (yych == 'a') - goto yy417; - goto yy333; - yy374: - yych = *++p; - if (yych == 'M') - goto yy351; - if (yych == 'm') - goto yy351; - goto yy333; - yy375: - yych = *++p; - if (yych == 'R') - goto yy418; - if (yych == 'r') - goto yy418; - goto yy333; - yy376: - yych = *++p; - if (yych == 'G') - goto yy419; - if (yych == 'g') - goto yy419; - goto yy333; - yy377: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'M') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'N') - goto yy420; - if (yych == 'n') - goto yy420; - goto yy333; - } - } - yy378: - yych = *++p; - if (yych == 'I') - goto yy421; - if (yych == 'i') - goto yy421; - goto yy333; - yy379: - yych = *++p; - if (yych == 'N') - goto yy422; - if (yych == 'n') - goto yy422; - goto yy333; - yy380: - yych = *++p; - if (yych == 'V') - goto yy367; - if (yych == 'v') - goto yy367; - goto yy333; - yy381: - yych = *++p; - if (yych == 'F') - goto yy423; - if (yych == 'f') - goto yy423; - goto yy333; - yy382: - yych = *++p; - if (yych == 'T') - goto yy424; - if (yych == 't') - goto yy424; - goto yy333; - yy383: - ++p; - { return 6; } - yy385: - yych = *++p; - if (yych == '>') - goto yy383; - goto yy333; - yy386: - yych = *++p; - if (yych == 'R') - goto yy425; - if (yych == 'r') - goto yy425; - goto yy333; - yy387: - yych = *++p; - if (yych == 'E') - goto yy426; - if (yych == 'e') - goto yy426; - goto yy333; - yy388: - yych = *++p; - if (yych == 'R') - goto yy427; - if (yych == 'r') - goto yy427; - goto yy333; - yy389: - yych = *++p; - if (yych == 'C') - goto yy408; - if (yych == 'c') - goto yy408; - goto yy333; - yy390: - yych = *++p; - if (yych == 'U') - goto yy428; - if (yych == 'u') - goto yy428; - goto yy333; - yy391: - yych = *++p; - if (yych == 'Y') - goto yy429; - if (yych == 'y') - goto yy429; - goto yy333; - yy392: - yych = *++p; - if (yych == 'M') - goto yy430; - if (yych == 'm') - goto yy430; - goto yy333; - yy393: - yych = *++p; - if (yych == 'B') - goto yy431; - if (yych == 'b') - goto yy431; - goto yy333; - yy394: - yych = *++p; - if (yych == 'O') - goto yy363; - if (yych == 'o') - goto yy363; - goto yy333; - yy395: - yych = *++p; - if (yych == 'O') - goto yy432; - if (yych == 'o') - goto yy432; - goto yy333; - yy396: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'D') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'E') - goto yy433; - if (yych == 'e') - goto yy433; - goto yy333; - } - } - yy397: - yych = *++p; - if (yych == 'T') - goto yy431; - if (yych == 't') - goto yy431; - goto yy333; - yy398: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= '@') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'A') - goto yy434; - if (yych == 'a') - goto yy434; - goto yy333; - } - } - yy399: - ++p; - { return 2; } - yy401: - yych = *++p; - if (yych == 'D') - goto yy435; - if (yych == 'd') - goto yy435; - goto yy333; - yy402: - yych = *++p; - if (yych == 'R') - goto yy436; - if (yych == 'r') - goto yy436; - goto yy333; - yy403: - yych = *++p; - if (yych == 'I') - goto yy437; - if (yych == 'i') - goto yy437; - goto yy333; - yy404: - yych = *++p; - if (yych == 'D') - goto yy438; - if (yych == 'd') - goto yy438; - goto yy333; - yy405: - yych = *++p; - if (yych == 'E') - goto yy439; - if (yych == 'e') - goto yy439; - goto yy333; - yy406: - yych = *++p; - if (yych == 'C') - goto yy440; - if (yych == 'c') - goto yy440; - goto yy333; - yy407: - yych = *++p; - if (yych == 'Y') - goto yy367; - if (yych == 'y') - goto yy367; - goto yy333; - yy408: - yych = *++p; - if (yych == 'T') - goto yy441; - if (yych == 't') - goto yy441; - goto yy333; - yy409: - yych = *++p; - if (yych == 'T') - goto yy442; - if (yych == 't') - goto yy442; - goto yy333; - yy410: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'F') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'G') - goto yy443; - if (yych == 'g') - goto yy443; - goto yy333; - } - } - yy411: - yych = *++p; - if (yych == 'A') - goto yy444; - if (yych == 'a') - goto yy444; - goto yy333; - yy412: - yych = *++p; - if (yych == 'L') - goto yy445; - if (yych == 'l') - goto yy445; - goto yy333; - yy413: - yych = *++p; - if (yych == 'L') - goto yy446; - if (yych == 'l') - goto yy446; - goto yy333; - yy414: - yych = *++p; - if (yych <= 'U') { - if (yych == 'C') - goto yy447; - if (yych <= 'T') - goto yy333; - goto yy448; - } else { - if (yych <= 'c') { - if (yych <= 'b') - goto yy333; - goto yy447; - } else { - if (yych == 'u') - goto yy448; - goto yy333; - } - } - yy415: - yych = *++p; - if (yych == 'M') - goto yy367; - if (yych == 'm') - goto yy367; - goto yy333; - yy416: - yych = *++p; - if (yych == 'M') - goto yy449; - if (yych == 'm') - goto yy449; - goto yy333; - yy417: - yych = *++p; - if (yych == 'D') - goto yy450; - if (yych == 'd') - goto yy450; - goto yy333; - yy418: - yych = *++p; - if (yych == 'A') - goto yy451; - if (yych == 'a') - goto yy451; - goto yy333; - yy419: - yych = *++p; - if (yych == 'E') - goto yy452; - if (yych == 'e') - goto yy452; - goto yy333; - yy420: - yych = *++p; - if (yych == 'K') - goto yy367; - if (yych == 'k') - goto yy367; - goto yy333; - yy421: - yych = *++p; - if (yych == 'N') - goto yy367; - if (yych == 'n') - goto yy367; - goto yy333; - yy422: - yych = *++p; - if (yych == 'U') - goto yy453; - if (yych == 'u') - goto yy453; - goto yy333; - yy423: - yych = *++p; - if (yych == 'R') - goto yy454; - if (yych == 'r') - goto yy454; - goto yy333; - yy424: - yych = *++p; - if (yych <= 'I') { - if (yych == 'G') - goto yy443; - if (yych <= 'H') - goto yy333; - goto yy455; - } else { - if (yych <= 'g') { - if (yych <= 'f') - goto yy333; - goto yy443; - } else { - if (yych == 'i') - goto yy455; - goto yy333; - } - } - yy425: - yych = *++p; - if (yych == 'A') - goto yy415; - if (yych == 'a') - goto yy415; - goto yy333; - yy426: - yych = *++p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy456; - goto yy333; - } else { - if (yych <= ' ') - goto yy456; - if (yych == '>') - goto yy456; - goto yy333; - } - yy427: - yych = *++p; - if (yych == 'I') - goto yy458; - if (yych == 'i') - goto yy458; - goto yy333; - yy428: - yych = *++p; - if (yych == 'R') - goto yy459; - if (yych == 'r') - goto yy459; - goto yy333; - yy429: - yych = *++p; - if (yych == 'L') - goto yy387; - if (yych == 'l') - goto yy387; - goto yy333; - yy430: - yych = *++p; - if (yych == 'M') - goto yy460; - if (yych == 'm') - goto yy460; - goto yy333; - yy431: - yych = *++p; - if (yych == 'L') - goto yy438; - if (yych == 'l') - goto yy438; - goto yy333; - yy432: - yych = *++p; - if (yych == 'O') - goto yy461; - if (yych == 'o') - goto yy461; - goto yy333; - yy433: - yych = *++p; - if (yych == 'A') - goto yy462; - if (yych == 'a') - goto yy462; - goto yy333; - yy434: - yych = *++p; - if (yych == 'C') - goto yy420; - if (yych == 'c') - goto yy420; - goto yy333; - yy435: - yych = *++p; - if (yych == 'A') - goto yy463; - if (yych == 'a') - goto yy463; - goto yy333; - yy436: - yych = *++p; - if (yych == 'E') - goto yy464; - if (yych == 'e') - goto yy464; - goto yy333; - yy437: - yych = *++p; - if (yych == 'C') - goto yy431; - if (yych == 'c') - goto yy431; - goto yy333; - yy438: - yych = *++p; - if (yych == 'E') - goto yy367; - if (yych == 'e') - goto yy367; - goto yy333; - yy439: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'E') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'F') - goto yy465; - if (yych == 'f') - goto yy465; - goto yy333; - } - } - yy440: - yych = *++p; - if (yych == 'K') - goto yy466; - if (yych == 'k') - goto yy466; - goto yy333; - yy441: - yych = *++p; - if (yych == 'I') - goto yy455; - if (yych == 'i') - goto yy455; - goto yy333; - yy442: - yych = *++p; - if (yych == 'E') - goto yy467; - if (yych == 'e') - goto yy467; - goto yy333; - yy443: - yych = *++p; - if (yych == 'R') - goto yy468; - if (yych == 'r') - goto yy468; - goto yy333; - yy444: - yych = *++p; - if (yych == 'I') - goto yy469; - if (yych == 'i') - goto yy469; - goto yy333; - yy445: - yych = *++p; - if (yych == 'O') - goto yy470; - if (yych == 'o') - goto yy470; - goto yy333; - yy446: - yych = *++p; - if (yych == 'D') - goto yy471; - if (yych == 'd') - goto yy471; - goto yy333; - yy447: - yych = *++p; - if (yych == 'A') - goto yy364; - if (yych == 'a') - goto yy364; - goto yy333; - yy448: - yych = *++p; - if (yych == 'R') - goto yy438; - if (yych == 'r') - goto yy438; - goto yy333; - yy449: - yych = *++p; - if (yych == 'E') - goto yy472; - if (yych == 'e') - goto yy472; - goto yy333; - yy450: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'D') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'E') - goto yy467; - if (yych == 'e') - goto yy467; - goto yy333; - } - } - yy451: - yych = *++p; - if (yych == 'M') - goto yy438; - if (yych == 'm') - goto yy438; - goto yy333; - yy452: - yych = *++p; - if (yych == 'N') - goto yy462; - if (yych == 'n') - goto yy462; - goto yy333; - yy453: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'H') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'I') - goto yy473; - if (yych == 'i') - goto yy473; - goto yy333; - } - } - yy454: - yych = *++p; - if (yych == 'A') - goto yy474; - if (yych == 'a') - goto yy474; - goto yy333; - yy455: - yych = *++p; - if (yych == 'O') - goto yy421; - if (yych == 'o') - goto yy421; - goto yy333; - yy456: - ++p; - { return 1; } - yy458: - yych = *++p; - if (yych == 'P') - goto yy475; - if (yych == 'p') - goto yy475; - goto yy333; - yy459: - yych = *++p; - if (yych == 'C') - goto yy438; - if (yych == 'c') - goto yy438; - goto yy333; - yy460: - yych = *++p; - if (yych == 'A') - goto yy476; - if (yych == 'a') - goto yy476; - goto yy333; - yy461: - yych = *++p; - if (yych == 'T') - goto yy367; - if (yych == 't') - goto yy367; - goto yy333; - yy462: - yych = *++p; - if (yych == 'D') - goto yy367; - if (yych == 'd') - goto yy367; - goto yy333; - yy463: - yych = *++p; - if (yych == 'T') - goto yy477; - if (yych == 't') - goto yy477; - goto yy333; - yy464: - yych = *++p; - if (yych == 'S') - goto yy478; - if (yych == 's') - goto yy478; - goto yy333; - yy465: - yych = *++p; - if (yych == 'O') - goto yy479; - if (yych == 'o') - goto yy479; - goto yy333; - yy466: - yych = *++p; - if (yych == 'Q') - goto yy480; - if (yych == 'q') - goto yy480; - goto yy333; - yy467: - yych = *++p; - if (yych == 'R') - goto yy367; - if (yych == 'r') - goto yy367; - goto yy333; - yy468: - yych = *++p; - if (yych == 'O') - goto yy481; - if (yych == 'o') - goto yy481; - goto yy333; - yy469: - yych = *++p; - if (yych == 'L') - goto yy478; - if (yych == 'l') - goto yy478; - goto yy333; - yy470: - yych = *++p; - if (yych == 'G') - goto yy367; - if (yych == 'g') - goto yy367; - goto yy333; - yy471: - yych = *++p; - if (yych == 'S') - goto yy482; - if (yych == 's') - goto yy482; - goto yy333; - yy472: - yych = *++p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy333; - if (yych <= '\r') - goto yy383; - goto yy333; - } else { - if (yych <= ' ') - goto yy383; - if (yych <= '.') - goto yy333; - goto yy385; - } - } else { - if (yych <= 'R') { - if (yych == '>') - goto yy383; - goto yy333; - } else { - if (yych <= 'S') - goto yy482; - if (yych == 's') - goto yy482; - goto yy333; - } - } - yy473: - yych = *++p; - if (yych == 'T') - goto yy483; - if (yych == 't') - goto yy483; - goto yy333; - yy474: - yych = *++p; - if (yych == 'M') - goto yy484; - if (yych == 'm') - goto yy484; - goto yy333; - yy475: - yych = *++p; - if (yych == 'T') - goto yy426; - if (yych == 't') - goto yy426; - goto yy333; - yy476: - yych = *++p; - if (yych == 'R') - goto yy407; - if (yych == 'r') - goto yy407; - goto yy333; - yy477: - yych = *++p; - if (yych == 'A') - goto yy485; - if (yych == 'a') - goto yy485; - goto yy333; - yy478: - yych = *++p; - if (yych == 'S') - goto yy367; - if (yych == 's') - goto yy367; - goto yy333; - yy479: - yych = *++p; - if (yych == 'N') - goto yy461; - if (yych == 'n') - goto yy461; - goto yy333; - yy480: - yych = *++p; - if (yych == 'U') - goto yy486; - if (yych == 'u') - goto yy486; - goto yy333; - yy481: - yych = *++p; - if (yych == 'U') - goto yy487; - if (yych == 'u') - goto yy487; - goto yy333; - yy482: - yych = *++p; - if (yych == 'E') - goto yy461; - if (yych == 'e') - goto yy461; - goto yy333; - yy483: - yych = *++p; - if (yych == 'E') - goto yy415; - if (yych == 'e') - goto yy415; - goto yy333; - yy484: - yych = *++p; - if (yych == 'E') - goto yy478; - if (yych == 'e') - goto yy478; - goto yy333; - yy485: - yych = *++p; - if (yych == '[') - goto yy488; - goto yy333; - yy486: - yych = *++p; - if (yych == 'O') - goto yy490; - if (yych == 'o') - goto yy490; - goto yy333; - yy487: - yych = *++p; - if (yych == 'P') - goto yy367; - if (yych == 'p') - goto yy367; - goto yy333; - yy488: - ++p; - { return 5; } - yy490: - ++p; - if ((yych = *p) == 'T') - goto yy438; - if (yych == 't') - goto yy438; - goto yy333; - } -} - -// Try to match an HTML block tag start line of type 7, returning -// 7 if successful, 0 if not. -bufsize_t _scan_html_block_start_7(const unsigned char *p) { - const unsigned char *marker = NULL; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224, - 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, - 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych == '<') - goto yy495; - ++p; - yy494 : { return 0; } - yy495: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '@') { - if (yych != '/') - goto yy494; - } else { - if (yych <= 'Z') - goto yy498; - if (yych <= '`') - goto yy494; - if (yych <= 'z') - goto yy498; - goto yy494; - } - yych = *++p; - if (yych <= '@') - goto yy497; - if (yych <= 'Z') - goto yy500; - if (yych <= '`') - goto yy497; - if (yych <= 'z') - goto yy500; - yy497: - p = marker; - if (yyaccept == 0) { - goto yy494; - } else { - goto yy513; - } - yy498: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy502; - } - if (yych <= '=') { - if (yych <= '.') { - if (yych == '-') - goto yy498; - goto yy497; - } else { - if (yych <= '/') - goto yy504; - if (yych <= '9') - goto yy498; - goto yy497; - } - } else { - if (yych <= 'Z') { - if (yych <= '>') - goto yy505; - if (yych <= '@') - goto yy497; - goto yy498; - } else { - if (yych <= '`') - goto yy497; - if (yych <= 'z') - goto yy498; - goto yy497; - } - } - yy500: - ++p; - yych = *p; - if (yych <= '/') { - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy507; - goto yy497; - } else { - if (yych <= ' ') - goto yy507; - if (yych == '-') - goto yy500; - goto yy497; - } - } else { - if (yych <= '@') { - if (yych <= '9') - goto yy500; - if (yych == '>') - goto yy505; - goto yy497; - } else { - if (yych <= 'Z') - goto yy500; - if (yych <= '`') - goto yy497; - if (yych <= 'z') - goto yy500; - goto yy497; - } - } - yy502: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy502; - } - if (yych <= '>') { - if (yych <= '9') { - if (yych != '/') - goto yy497; - } else { - if (yych <= ':') - goto yy509; - if (yych <= '=') - goto yy497; - goto yy505; - } - } else { - if (yych <= '^') { - if (yych <= '@') - goto yy497; - if (yych <= 'Z') - goto yy509; - goto yy497; - } else { - if (yych == '`') - goto yy497; - if (yych <= 'z') - goto yy509; - goto yy497; - } - } - yy504: - yych = *++p; - if (yych != '>') - goto yy497; - yy505: - ++p; - yych = *p; - if (yybm[0 + yych] & 4) { - goto yy505; - } - if (yych <= 0x08) - goto yy497; - if (yych <= '\n') - goto yy511; - if (yych <= '\v') - goto yy497; - if (yych <= '\r') - goto yy514; - goto yy497; - yy507: - ++p; - yych = *p; - if (yych <= 0x1F) { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy507; - goto yy497; - } else { - if (yych <= ' ') - goto yy507; - if (yych == '>') - goto yy505; - goto yy497; - } - yy509: - ++p; - yych = *p; - if (yybm[0 + yych] & 8) { - goto yy509; - } - if (yych <= ',') { - if (yych <= '\r') { - if (yych <= 0x08) - goto yy497; - goto yy515; - } else { - if (yych == ' ') - goto yy515; - goto yy497; - } - } else { - if (yych <= '<') { - if (yych <= '/') - goto yy504; - goto yy497; - } else { - if (yych <= '=') - goto yy517; - if (yych <= '>') - goto yy505; - goto yy497; - } - } - yy511: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 4) { - goto yy505; - } - if (yych <= 0x08) - goto yy513; - if (yych <= '\n') - goto yy511; - if (yych <= '\v') - goto yy513; - if (yych <= '\r') - goto yy514; - yy513 : { return 7; } - yy514: - yych = *++p; - goto yy513; - yy515: - ++p; - yych = *p; - if (yych <= '<') { - if (yych <= ' ') { - if (yych <= 0x08) - goto yy497; - if (yych <= '\r') - goto yy515; - if (yych <= 0x1F) - goto yy497; - goto yy515; - } else { - if (yych <= '/') { - if (yych <= '.') - goto yy497; - goto yy504; - } else { - if (yych == ':') - goto yy509; - goto yy497; - } - } - } else { - if (yych <= 'Z') { - if (yych <= '=') - goto yy517; - if (yych <= '>') - goto yy505; - if (yych <= '@') - goto yy497; - goto yy509; - } else { - if (yych <= '_') { - if (yych <= '^') - goto yy497; - goto yy509; - } else { - if (yych <= '`') - goto yy497; - if (yych <= 'z') - goto yy509; - goto yy497; - } - } - } - yy517: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy519; - } - if (yych <= 0xE0) { - if (yych <= '"') { - if (yych <= 0x00) - goto yy497; - if (yych <= ' ') - goto yy517; - goto yy521; - } else { - if (yych <= '\'') - goto yy523; - if (yych <= 0xC1) - goto yy497; - if (yych <= 0xDF) - goto yy525; - goto yy526; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy528; - goto yy527; - } else { - if (yych <= 0xF0) - goto yy529; - if (yych <= 0xF3) - goto yy530; - if (yych <= 0xF4) - goto yy531; - goto yy497; - } - } - yy519: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy519; - } - if (yych <= 0xE0) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy497; - if (yych <= ' ') - goto yy502; - goto yy497; - } else { - if (yych <= '>') - goto yy505; - if (yych <= 0xC1) - goto yy497; - if (yych <= 0xDF) - goto yy525; - goto yy526; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy528; - goto yy527; - } else { - if (yych <= 0xF0) - goto yy529; - if (yych <= 0xF3) - goto yy530; - if (yych <= 0xF4) - goto yy531; - goto yy497; - } - } - yy521: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy521; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy497; - if (yych <= '"') - goto yy532; - goto yy497; - } else { - if (yych <= 0xDF) - goto yy533; - if (yych <= 0xE0) - goto yy534; - goto yy535; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy536; - if (yych <= 0xEF) - goto yy535; - goto yy537; - } else { - if (yych <= 0xF3) - goto yy538; - if (yych <= 0xF4) - goto yy539; - goto yy497; - } - } - yy523: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy523; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy497; - if (yych <= '\'') - goto yy532; - goto yy497; - } else { - if (yych <= 0xDF) - goto yy540; - if (yych <= 0xE0) - goto yy541; - goto yy542; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy543; - if (yych <= 0xEF) - goto yy542; - goto yy544; - } else { - if (yych <= 0xF3) - goto yy545; - if (yych <= 0xF4) - goto yy546; - goto yy497; - } - } - yy525: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy519; - goto yy497; - yy526: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy497; - if (yych <= 0xBF) - goto yy525; - goto yy497; - yy527: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy525; - goto yy497; - yy528: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0x9F) - goto yy525; - goto yy497; - yy529: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy497; - if (yych <= 0xBF) - goto yy527; - goto yy497; - yy530: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy527; - goto yy497; - yy531: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0x8F) - goto yy527; - goto yy497; - yy532: - ++p; - yych = *p; - if (yybm[0 + yych] & 2) { - goto yy502; - } - if (yych == '/') - goto yy504; - if (yych == '>') - goto yy505; - goto yy497; - yy533: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy521; - goto yy497; - yy534: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy497; - if (yych <= 0xBF) - goto yy533; - goto yy497; - yy535: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy533; - goto yy497; - yy536: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0x9F) - goto yy533; - goto yy497; - yy537: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy497; - if (yych <= 0xBF) - goto yy535; - goto yy497; - yy538: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy535; - goto yy497; - yy539: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0x8F) - goto yy535; - goto yy497; - yy540: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy523; - goto yy497; - yy541: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy497; - if (yych <= 0xBF) - goto yy540; - goto yy497; - yy542: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy540; - goto yy497; - yy543: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0x9F) - goto yy540; - goto yy497; - yy544: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy497; - if (yych <= 0xBF) - goto yy542; - goto yy497; - yy545: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0xBF) - goto yy542; - goto yy497; - yy546: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy497; - if (yych <= 0x8F) - goto yy542; - goto yy497; - } -} - -// Try to match an HTML block end line of type 1 -bufsize_t _scan_html_block_end_1(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= 0xDF) { - if (yych <= ';') { - if (yych <= 0x00) - goto yy549; - if (yych != '\n') - goto yy551; - } else { - if (yych <= '<') - goto yy552; - if (yych <= 0x7F) - goto yy551; - if (yych >= 0xC2) - goto yy553; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy554; - if (yych == 0xED) - goto yy556; - goto yy555; - } else { - if (yych <= 0xF0) - goto yy557; - if (yych <= 0xF3) - goto yy558; - if (yych <= 0xF4) - goto yy559; - } - } - yy549: - ++p; - yy550 : { return 0; } - yy551: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '\n') { - if (yych <= 0x00) - goto yy550; - if (yych <= '\t') - goto yy561; - goto yy550; - } else { - if (yych <= 0x7F) - goto yy561; - if (yych <= 0xC1) - goto yy550; - if (yych <= 0xF4) - goto yy561; - goto yy550; - } - yy552: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '.') { - if (yych <= 0x00) - goto yy550; - if (yych == '\n') - goto yy550; - goto yy561; - } else { - if (yych <= 0x7F) { - if (yych <= '/') - goto yy572; - goto yy561; - } else { - if (yych <= 0xC1) - goto yy550; - if (yych <= 0xF4) - goto yy561; - goto yy550; - } - } - yy553: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy550; - if (yych <= 0xBF) - goto yy560; - goto yy550; - yy554: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x9F) - goto yy550; - if (yych <= 0xBF) - goto yy565; - goto yy550; - yy555: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy550; - if (yych <= 0xBF) - goto yy565; - goto yy550; - yy556: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy550; - if (yych <= 0x9F) - goto yy565; - goto yy550; - yy557: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x8F) - goto yy550; - if (yych <= 0xBF) - goto yy567; - goto yy550; - yy558: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy550; - if (yych <= 0xBF) - goto yy567; - goto yy550; - yy559: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy550; - if (yych <= 0x8F) - goto yy567; - goto yy550; - yy560: - ++p; - yych = *p; - yy561: - if (yybm[0 + yych] & 64) { - goto yy560; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy562; - if (yych <= '<') - goto yy563; - } else { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - goto yy567; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy568; - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - } - } - yy562: - p = marker; - if (yyaccept == 0) { - goto yy550; - } else { - goto yy582; - } - yy563: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xDF) { - if (yych <= '.') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= '/') - goto yy572; - if (yych <= 0x7F) - goto yy560; - if (yych <= 0xC1) - goto yy562; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy566; - if (yych == 0xED) - goto yy568; - goto yy567; - } else { - if (yych <= 0xF0) - goto yy569; - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - yy565: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy562; - if (yych <= 0xBF) - goto yy560; - goto yy562; - yy566: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy562; - if (yych <= 0xBF) - goto yy565; - goto yy562; - yy567: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy562; - if (yych <= 0xBF) - goto yy565; - goto yy562; - yy568: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy562; - if (yych <= 0x9F) - goto yy565; - goto yy562; - yy569: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy562; - if (yych <= 0xBF) - goto yy567; - goto yy562; - yy570: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy562; - if (yych <= 0xBF) - goto yy567; - goto yy562; - yy571: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy562; - if (yych <= 0x8F) - goto yy567; - goto yy562; - yy572: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 's') { - if (yych <= 'P') { - if (yych <= '\t') { - if (yych <= 0x00) - goto yy562; - goto yy560; - } else { - if (yych <= '\n') - goto yy562; - if (yych <= 'O') - goto yy560; - } - } else { - if (yych <= 'o') { - if (yych == 'S') - goto yy574; - goto yy560; - } else { - if (yych <= 'p') - goto yy573; - if (yych <= 'r') - goto yy560; - goto yy574; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy560; - goto yy562; - } else { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - goto yy567; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy568; - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy573: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'Q') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'q') { - if (yych <= 'R') - goto yy575; - goto yy560; - } else { - if (yych <= 'r') - goto yy575; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy574: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 't') { - if (yych <= 'C') { - if (yych <= '\t') { - if (yych <= 0x00) - goto yy562; - goto yy560; - } else { - if (yych <= '\n') - goto yy562; - if (yych <= 'B') - goto yy560; - goto yy576; - } - } else { - if (yych <= 'b') { - if (yych == 'T') - goto yy577; - goto yy560; - } else { - if (yych <= 'c') - goto yy576; - if (yych <= 's') - goto yy560; - goto yy577; - } - } - } else { - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x7F) - goto yy560; - goto yy562; - } else { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - goto yy567; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy568; - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy575: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'D') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'd') { - if (yych <= 'E') - goto yy578; - goto yy560; - } else { - if (yych <= 'e') - goto yy578; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy576: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'Q') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'q') { - if (yych <= 'R') - goto yy579; - goto yy560; - } else { - if (yych <= 'r') - goto yy579; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy577: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'X') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'x') { - if (yych <= 'Y') - goto yy580; - goto yy560; - } else { - if (yych <= 'y') - goto yy580; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy578: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= '>') - goto yy581; - if (yych <= 0x7F) - goto yy560; - if (yych <= 0xC1) - goto yy562; - goto yy565; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy566; - if (yych == 0xED) - goto yy568; - goto yy567; - } else { - if (yych <= 0xF0) - goto yy569; - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - yy579: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'H') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'h') { - if (yych <= 'I') - goto yy583; - goto yy560; - } else { - if (yych <= 'i') - goto yy583; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy580: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'K') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'k') { - if (yych <= 'L') - goto yy575; - goto yy560; - } else { - if (yych <= 'l') - goto yy575; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy581: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy560; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy582; - if (yych <= '<') - goto yy563; - } else { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - goto yy567; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy568; - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - } - } - yy582 : { return (bufsize_t)(p - start); } - yy583: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'O') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 'o') { - if (yych >= 'Q') - goto yy560; - } else { - if (yych <= 'p') - goto yy584; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - yy584: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy563; - } - if (yych <= 0xC1) { - if (yych <= 'S') { - if (yych <= 0x00) - goto yy562; - if (yych == '\n') - goto yy562; - goto yy560; - } else { - if (yych <= 's') { - if (yych <= 'T') - goto yy578; - goto yy560; - } else { - if (yych <= 't') - goto yy578; - if (yych <= 0x7F) - goto yy560; - goto yy562; - } - } - } else { - if (yych <= 0xED) { - if (yych <= 0xDF) - goto yy565; - if (yych <= 0xE0) - goto yy566; - if (yych <= 0xEC) - goto yy567; - goto yy568; - } else { - if (yych <= 0xF0) { - if (yych <= 0xEF) - goto yy567; - goto yy569; - } else { - if (yych <= 0xF3) - goto yy570; - if (yych <= 0xF4) - goto yy571; - goto yy562; - } - } - } - } -} - -// Try to match an HTML block end line of type 2 -bufsize_t _scan_html_block_end_2(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= 0xDF) { - if (yych <= ',') { - if (yych <= 0x00) - goto yy587; - if (yych != '\n') - goto yy589; - } else { - if (yych <= '-') - goto yy590; - if (yych <= 0x7F) - goto yy589; - if (yych >= 0xC2) - goto yy591; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy592; - if (yych == 0xED) - goto yy594; - goto yy593; - } else { - if (yych <= 0xF0) - goto yy595; - if (yych <= 0xF3) - goto yy596; - if (yych <= 0xF4) - goto yy597; - } - } - yy587: - ++p; - yy588 : { return 0; } - yy589: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '\n') { - if (yych <= 0x00) - goto yy588; - if (yych <= '\t') - goto yy599; - goto yy588; - } else { - if (yych <= 0x7F) - goto yy599; - if (yych <= 0xC1) - goto yy588; - if (yych <= 0xF4) - goto yy599; - goto yy588; - } - yy590: - yyaccept = 0; - yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy609; - } - if (yych <= '\n') { - if (yych <= 0x00) - goto yy588; - if (yych <= '\t') - goto yy599; - goto yy588; - } else { - if (yych <= 0x7F) - goto yy599; - if (yych <= 0xC1) - goto yy588; - if (yych <= 0xF4) - goto yy599; - goto yy588; - } - yy591: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy588; - if (yych <= 0xBF) - goto yy598; - goto yy588; - yy592: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x9F) - goto yy588; - if (yych <= 0xBF) - goto yy602; - goto yy588; - yy593: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy588; - if (yych <= 0xBF) - goto yy602; - goto yy588; - yy594: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy588; - if (yych <= 0x9F) - goto yy602; - goto yy588; - yy595: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x8F) - goto yy588; - if (yych <= 0xBF) - goto yy604; - goto yy588; - yy596: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy588; - if (yych <= 0xBF) - goto yy604; - goto yy588; - yy597: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy588; - if (yych <= 0x8F) - goto yy604; - goto yy588; - yy598: - ++p; - yych = *p; - yy599: - if (yybm[0 + yych] & 64) { - goto yy598; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy600; - if (yych <= '-') - goto yy601; - } else { - if (yych <= 0xDF) - goto yy602; - if (yych <= 0xE0) - goto yy603; - goto yy604; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy605; - if (yych <= 0xEF) - goto yy604; - goto yy606; - } else { - if (yych <= 0xF3) - goto yy607; - if (yych <= 0xF4) - goto yy608; - } - } - yy600: - p = marker; - if (yyaccept == 0) { - goto yy588; - } else { - goto yy612; - } - yy601: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy598; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy600; - if (yych <= '-') - goto yy609; - goto yy600; - } else { - if (yych <= 0xDF) - goto yy602; - if (yych <= 0xE0) - goto yy603; - goto yy604; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy605; - if (yych <= 0xEF) - goto yy604; - goto yy606; - } else { - if (yych <= 0xF3) - goto yy607; - if (yych <= 0xF4) - goto yy608; - goto yy600; - } - } - yy602: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy600; - if (yych <= 0xBF) - goto yy598; - goto yy600; - yy603: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy600; - if (yych <= 0xBF) - goto yy602; - goto yy600; - yy604: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy600; - if (yych <= 0xBF) - goto yy602; - goto yy600; - yy605: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy600; - if (yych <= 0x9F) - goto yy602; - goto yy600; - yy606: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy600; - if (yych <= 0xBF) - goto yy604; - goto yy600; - yy607: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy600; - if (yych <= 0xBF) - goto yy604; - goto yy600; - yy608: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy600; - if (yych <= 0x8F) - goto yy604; - goto yy600; - yy609: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy609; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy600; - if (yych == '\n') - goto yy600; - goto yy598; - } else { - if (yych <= '>') - goto yy611; - if (yych <= 0x7F) - goto yy598; - if (yych <= 0xC1) - goto yy600; - goto yy602; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy603; - if (yych == 0xED) - goto yy605; - goto yy604; - } else { - if (yych <= 0xF0) - goto yy606; - if (yych <= 0xF3) - goto yy607; - if (yych <= 0xF4) - goto yy608; - goto yy600; - } - } - yy611: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy598; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy612; - if (yych <= '-') - goto yy601; - } else { - if (yych <= 0xDF) - goto yy602; - if (yych <= 0xE0) - goto yy603; - goto yy604; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy605; - if (yych <= 0xEF) - goto yy604; - goto yy606; - } else { - if (yych <= 0xF3) - goto yy607; - if (yych <= 0xF4) - goto yy608; - } - } - yy612 : { return (bufsize_t)(p - start); } - } -} - -// Try to match an HTML block end line of type 3 -bufsize_t _scan_html_block_end_3(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= 0xDF) { - if (yych <= '>') { - if (yych <= 0x00) - goto yy615; - if (yych != '\n') - goto yy617; - } else { - if (yych <= '?') - goto yy618; - if (yych <= 0x7F) - goto yy617; - if (yych >= 0xC2) - goto yy619; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy620; - if (yych == 0xED) - goto yy622; - goto yy621; - } else { - if (yych <= 0xF0) - goto yy623; - if (yych <= 0xF3) - goto yy624; - if (yych <= 0xF4) - goto yy625; - } - } - yy615: - ++p; - yy616 : { return 0; } - yy617: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '\n') { - if (yych <= 0x00) - goto yy616; - if (yych <= '\t') - goto yy627; - goto yy616; - } else { - if (yych <= 0x7F) - goto yy627; - if (yych <= 0xC1) - goto yy616; - if (yych <= 0xF4) - goto yy627; - goto yy616; - } - yy618: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '=') { - if (yych <= 0x00) - goto yy616; - if (yych == '\n') - goto yy616; - goto yy627; - } else { - if (yych <= 0x7F) { - if (yych <= '>') - goto yy638; - goto yy627; - } else { - if (yych <= 0xC1) - goto yy616; - if (yych <= 0xF4) - goto yy627; - goto yy616; - } - } - yy619: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy616; - if (yych <= 0xBF) - goto yy626; - goto yy616; - yy620: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x9F) - goto yy616; - if (yych <= 0xBF) - goto yy631; - goto yy616; - yy621: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy616; - if (yych <= 0xBF) - goto yy631; - goto yy616; - yy622: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy616; - if (yych <= 0x9F) - goto yy631; - goto yy616; - yy623: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x8F) - goto yy616; - if (yych <= 0xBF) - goto yy633; - goto yy616; - yy624: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy616; - if (yych <= 0xBF) - goto yy633; - goto yy616; - yy625: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy616; - if (yych <= 0x8F) - goto yy633; - goto yy616; - yy626: - ++p; - yych = *p; - yy627: - if (yybm[0 + yych] & 64) { - goto yy626; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy628; - if (yych <= '?') - goto yy629; - } else { - if (yych <= 0xDF) - goto yy631; - if (yych <= 0xE0) - goto yy632; - goto yy633; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy634; - if (yych <= 0xEF) - goto yy633; - goto yy635; - } else { - if (yych <= 0xF3) - goto yy636; - if (yych <= 0xF4) - goto yy637; - } - } - yy628: - p = marker; - if (yyaccept == 0) { - goto yy616; - } else { - goto yy639; - } - yy629: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy629; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy628; - if (yych == '\n') - goto yy628; - goto yy626; - } else { - if (yych <= '>') - goto yy638; - if (yych <= 0x7F) - goto yy626; - if (yych <= 0xC1) - goto yy628; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy632; - if (yych == 0xED) - goto yy634; - goto yy633; - } else { - if (yych <= 0xF0) - goto yy635; - if (yych <= 0xF3) - goto yy636; - if (yych <= 0xF4) - goto yy637; - goto yy628; - } - } - yy631: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy628; - if (yych <= 0xBF) - goto yy626; - goto yy628; - yy632: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy628; - if (yych <= 0xBF) - goto yy631; - goto yy628; - yy633: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy628; - if (yych <= 0xBF) - goto yy631; - goto yy628; - yy634: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy628; - if (yych <= 0x9F) - goto yy631; - goto yy628; - yy635: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy628; - if (yych <= 0xBF) - goto yy633; - goto yy628; - yy636: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy628; - if (yych <= 0xBF) - goto yy633; - goto yy628; - yy637: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy628; - if (yych <= 0x8F) - goto yy633; - goto yy628; - yy638: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy626; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy639; - if (yych <= '?') - goto yy629; - } else { - if (yych <= 0xDF) - goto yy631; - if (yych <= 0xE0) - goto yy632; - goto yy633; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy634; - if (yych <= 0xEF) - goto yy633; - goto yy635; - } else { - if (yych <= 0xF3) - goto yy636; - if (yych <= 0xF4) - goto yy637; - } - } - yy639 : { return (bufsize_t)(p - start); } - } -} - -// Try to match an HTML block end line of type 4 -bufsize_t _scan_html_block_end_4(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy645; - } - if (yych <= 0xE0) { - if (yych <= '\n') { - if (yych <= 0x00) - goto yy642; - if (yych <= '\t') - goto yy644; - } else { - if (yych <= 0x7F) - goto yy644; - if (yych <= 0xC1) - goto yy642; - if (yych <= 0xDF) - goto yy648; - goto yy649; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy651; - goto yy650; - } else { - if (yych <= 0xF0) - goto yy652; - if (yych <= 0xF3) - goto yy653; - if (yych <= 0xF4) - goto yy654; - } - } - yy642: - ++p; - yy643 : { return 0; } - yy644: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '\n') { - if (yych <= 0x00) - goto yy643; - if (yych <= '\t') - goto yy656; - goto yy643; - } else { - if (yych <= 0x7F) - goto yy656; - if (yych <= 0xC1) - goto yy643; - if (yych <= 0xF4) - goto yy656; - goto yy643; - } - yy645: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy655; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy647; - if (yych <= '>') - goto yy645; - } else { - if (yych <= 0xDF) - goto yy658; - if (yych <= 0xE0) - goto yy659; - goto yy660; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy661; - if (yych <= 0xEF) - goto yy660; - goto yy662; - } else { - if (yych <= 0xF3) - goto yy663; - if (yych <= 0xF4) - goto yy664; - } - } - yy647 : { return (bufsize_t)(p - start); } - yy648: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy643; - if (yych <= 0xBF) - goto yy655; - goto yy643; - yy649: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x9F) - goto yy643; - if (yych <= 0xBF) - goto yy658; - goto yy643; - yy650: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy643; - if (yych <= 0xBF) - goto yy658; - goto yy643; - yy651: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy643; - if (yych <= 0x9F) - goto yy658; - goto yy643; - yy652: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x8F) - goto yy643; - if (yych <= 0xBF) - goto yy660; - goto yy643; - yy653: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy643; - if (yych <= 0xBF) - goto yy660; - goto yy643; - yy654: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy643; - if (yych <= 0x8F) - goto yy660; - goto yy643; - yy655: - ++p; - yych = *p; - yy656: - if (yybm[0 + yych] & 128) { - goto yy655; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy657; - if (yych <= '>') - goto yy645; - } else { - if (yych <= 0xDF) - goto yy658; - if (yych <= 0xE0) - goto yy659; - goto yy660; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy661; - if (yych <= 0xEF) - goto yy660; - goto yy662; - } else { - if (yych <= 0xF3) - goto yy663; - if (yych <= 0xF4) - goto yy664; - } - } - yy657: - p = marker; - if (yyaccept == 0) { - goto yy643; - } else { - goto yy647; - } - yy658: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy657; - if (yych <= 0xBF) - goto yy655; - goto yy657; - yy659: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy657; - if (yych <= 0xBF) - goto yy658; - goto yy657; - yy660: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy657; - if (yych <= 0xBF) - goto yy658; - goto yy657; - yy661: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy657; - if (yych <= 0x9F) - goto yy658; - goto yy657; - yy662: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy657; - if (yych <= 0xBF) - goto yy660; - goto yy657; - yy663: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy657; - if (yych <= 0xBF) - goto yy660; - goto yy657; - yy664: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy657; - if (yych <= 0x8F) - goto yy660; - goto yy657; - } -} - -// Try to match an HTML block end line of type 5 -bufsize_t _scan_html_block_end_5(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= 0xDF) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy667; - if (yych != '\n') - goto yy669; - } else { - if (yych <= ']') - goto yy670; - if (yych <= 0x7F) - goto yy669; - if (yych >= 0xC2) - goto yy671; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy672; - if (yych == 0xED) - goto yy674; - goto yy673; - } else { - if (yych <= 0xF0) - goto yy675; - if (yych <= 0xF3) - goto yy676; - if (yych <= 0xF4) - goto yy677; - } - } - yy667: - ++p; - yy668 : { return 0; } - yy669: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '\n') { - if (yych <= 0x00) - goto yy668; - if (yych <= '\t') - goto yy679; - goto yy668; - } else { - if (yych <= 0x7F) - goto yy679; - if (yych <= 0xC1) - goto yy668; - if (yych <= 0xF4) - goto yy679; - goto yy668; - } - yy670: - yyaccept = 0; - yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy689; - } - if (yych <= '\n') { - if (yych <= 0x00) - goto yy668; - if (yych <= '\t') - goto yy679; - goto yy668; - } else { - if (yych <= 0x7F) - goto yy679; - if (yych <= 0xC1) - goto yy668; - if (yych <= 0xF4) - goto yy679; - goto yy668; - } - yy671: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy668; - if (yych <= 0xBF) - goto yy678; - goto yy668; - yy672: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x9F) - goto yy668; - if (yych <= 0xBF) - goto yy682; - goto yy668; - yy673: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy668; - if (yych <= 0xBF) - goto yy682; - goto yy668; - yy674: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy668; - if (yych <= 0x9F) - goto yy682; - goto yy668; - yy675: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x8F) - goto yy668; - if (yych <= 0xBF) - goto yy684; - goto yy668; - yy676: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy668; - if (yych <= 0xBF) - goto yy684; - goto yy668; - yy677: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x7F) - goto yy668; - if (yych <= 0x8F) - goto yy684; - goto yy668; - yy678: - ++p; - yych = *p; - yy679: - if (yybm[0 + yych] & 64) { - goto yy678; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy680; - if (yych <= ']') - goto yy681; - } else { - if (yych <= 0xDF) - goto yy682; - if (yych <= 0xE0) - goto yy683; - goto yy684; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy685; - if (yych <= 0xEF) - goto yy684; - goto yy686; - } else { - if (yych <= 0xF3) - goto yy687; - if (yych <= 0xF4) - goto yy688; - } - } - yy680: - p = marker; - if (yyaccept == 0) { - goto yy668; - } else { - goto yy692; - } - yy681: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy678; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy680; - if (yych <= ']') - goto yy689; - goto yy680; - } else { - if (yych <= 0xDF) - goto yy682; - if (yych <= 0xE0) - goto yy683; - goto yy684; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy685; - if (yych <= 0xEF) - goto yy684; - goto yy686; - } else { - if (yych <= 0xF3) - goto yy687; - if (yych <= 0xF4) - goto yy688; - goto yy680; - } - } - yy682: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy680; - if (yych <= 0xBF) - goto yy678; - goto yy680; - yy683: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy680; - if (yych <= 0xBF) - goto yy682; - goto yy680; - yy684: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy680; - if (yych <= 0xBF) - goto yy682; - goto yy680; - yy685: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy680; - if (yych <= 0x9F) - goto yy682; - goto yy680; - yy686: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy680; - if (yych <= 0xBF) - goto yy684; - goto yy680; - yy687: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy680; - if (yych <= 0xBF) - goto yy684; - goto yy680; - yy688: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy680; - if (yych <= 0x8F) - goto yy684; - goto yy680; - yy689: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy689; - } - if (yych <= 0xDF) { - if (yych <= '=') { - if (yych <= 0x00) - goto yy680; - if (yych == '\n') - goto yy680; - goto yy678; - } else { - if (yych <= '>') - goto yy691; - if (yych <= 0x7F) - goto yy678; - if (yych <= 0xC1) - goto yy680; - goto yy682; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy683; - if (yych == 0xED) - goto yy685; - goto yy684; - } else { - if (yych <= 0xF0) - goto yy686; - if (yych <= 0xF3) - goto yy687; - if (yych <= 0xF4) - goto yy688; - goto yy680; - } - } - yy691: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy678; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= '\n') - goto yy692; - if (yych <= ']') - goto yy681; - } else { - if (yych <= 0xDF) - goto yy682; - if (yych <= 0xE0) - goto yy683; - goto yy684; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy685; - if (yych <= 0xEF) - goto yy684; - goto yy686; - } else { - if (yych <= 0xF3) - goto yy687; - if (yych <= 0xF4) - goto yy688; - } - } - yy692 : { return (bufsize_t)(p - start); } - } -} - -// Try to match a link title (in single quotes, in double quotes, or -// in parentheses), returning number of chars matched. Allow one -// level of internal nesting (quotes within quotes). -bufsize_t _scan_link_title(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - static const unsigned char yybm[] = { - 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 80, 80, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych <= '&') { - if (yych == '"') - goto yy697; - } else { - if (yych <= '\'') - goto yy698; - if (yych <= '(') - goto yy699; - } - ++p; - yy696 : { return 0; } - yy697: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy696; - if (yych <= 0x7F) - goto yy701; - if (yych <= 0xC1) - goto yy696; - if (yych <= 0xF4) - goto yy701; - goto yy696; - yy698: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= 0x00) - goto yy696; - if (yych <= 0x7F) - goto yy715; - if (yych <= 0xC1) - goto yy696; - if (yych <= 0xF4) - goto yy715; - goto yy696; - yy699: - yyaccept = 0; - yych = *(marker = ++p); - if (yych <= '(') { - if (yych <= 0x00) - goto yy696; - if (yych <= '\'') - goto yy728; - goto yy696; - } else { - if (yych <= 0x7F) - goto yy728; - if (yych <= 0xC1) - goto yy696; - if (yych <= 0xF4) - goto yy728; - goto yy696; - } - yy700: - ++p; - yych = *p; - yy701: - if (yybm[0 + yych] & 16) { - goto yy700; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy702; - if (yych <= '"') - goto yy703; - goto yy705; - } else { - if (yych <= 0xC1) - goto yy702; - if (yych <= 0xDF) - goto yy707; - goto yy708; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy710; - goto yy709; - } else { - if (yych <= 0xF0) - goto yy711; - if (yych <= 0xF3) - goto yy712; - if (yych <= 0xF4) - goto yy713; - } - } - yy702: - p = marker; - if (yyaccept <= 1) { - if (yyaccept == 0) { - goto yy696; - } else { - goto yy704; - } - } else { - if (yyaccept == 2) { - goto yy717; - } else { - goto yy730; - } - } - yy703: - ++p; - yy704 : { return (bufsize_t)(p - start); } - yy705: - ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy700; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy702; - if (yych <= '"') - goto yy740; - goto yy705; - } else { - if (yych <= 0xC1) - goto yy702; - if (yych >= 0xE0) - goto yy708; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy710; - goto yy709; - } else { - if (yych <= 0xF0) - goto yy711; - if (yych <= 0xF3) - goto yy712; - if (yych <= 0xF4) - goto yy713; - goto yy702; - } - } - yy707: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy700; - goto yy702; - yy708: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy702; - if (yych <= 0xBF) - goto yy707; - goto yy702; - yy709: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy707; - goto yy702; - yy710: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0x9F) - goto yy707; - goto yy702; - yy711: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy702; - if (yych <= 0xBF) - goto yy709; - goto yy702; - yy712: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy709; - goto yy702; - yy713: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0x8F) - goto yy709; - goto yy702; - yy714: - ++p; - yych = *p; - yy715: - if (yybm[0 + yych] & 64) { - goto yy714; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy702; - if (yych >= '(') - goto yy718; - } else { - if (yych <= 0xC1) - goto yy702; - if (yych <= 0xDF) - goto yy720; - goto yy721; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy723; - goto yy722; - } else { - if (yych <= 0xF0) - goto yy724; - if (yych <= 0xF3) - goto yy725; - if (yych <= 0xF4) - goto yy726; - goto yy702; - } - } - yy716: - ++p; - yy717 : { return (bufsize_t)(p - start); } - yy718: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy714; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy702; - if (yych <= '\'') - goto yy741; - goto yy718; - } else { - if (yych <= 0xC1) - goto yy702; - if (yych >= 0xE0) - goto yy721; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy723; - goto yy722; - } else { - if (yych <= 0xF0) - goto yy724; - if (yych <= 0xF3) - goto yy725; - if (yych <= 0xF4) - goto yy726; - goto yy702; - } - } - yy720: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy714; - goto yy702; - yy721: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy702; - if (yych <= 0xBF) - goto yy720; - goto yy702; - yy722: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy720; - goto yy702; - yy723: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0x9F) - goto yy720; - goto yy702; - yy724: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy702; - if (yych <= 0xBF) - goto yy722; - goto yy702; - yy725: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy722; - goto yy702; - yy726: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0x8F) - goto yy722; - goto yy702; - yy727: - ++p; - yych = *p; - yy728: - if (yybm[0 + yych] & 128) { - goto yy727; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '(') - goto yy702; - if (yych >= '*') - goto yy731; - } else { - if (yych <= 0xC1) - goto yy702; - if (yych <= 0xDF) - goto yy733; - goto yy734; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy736; - goto yy735; - } else { - if (yych <= 0xF0) - goto yy737; - if (yych <= 0xF3) - goto yy738; - if (yych <= 0xF4) - goto yy739; - goto yy702; - } - } - yy729: - ++p; - yy730 : { return (bufsize_t)(p - start); } - yy731: - ++p; - yych = *p; - if (yych <= 0xDF) { - if (yych <= '[') { - if (yych <= 0x00) - goto yy702; - if (yych == ')') - goto yy742; - goto yy727; - } else { - if (yych <= '\\') - goto yy731; - if (yych <= 0x7F) - goto yy727; - if (yych <= 0xC1) - goto yy702; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy734; - if (yych == 0xED) - goto yy736; - goto yy735; - } else { - if (yych <= 0xF0) - goto yy737; - if (yych <= 0xF3) - goto yy738; - if (yych <= 0xF4) - goto yy739; - goto yy702; - } - } - yy733: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy727; - goto yy702; - yy734: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy702; - if (yych <= 0xBF) - goto yy733; - goto yy702; - yy735: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy733; - goto yy702; - yy736: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0x9F) - goto yy733; - goto yy702; - yy737: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy702; - if (yych <= 0xBF) - goto yy735; - goto yy702; - yy738: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0xBF) - goto yy735; - goto yy702; - yy739: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy702; - if (yych <= 0x8F) - goto yy735; - goto yy702; - yy740: - yyaccept = 1; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 16) { - goto yy700; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy704; - if (yych <= '"') - goto yy703; - goto yy705; - } else { - if (yych <= 0xC1) - goto yy704; - if (yych <= 0xDF) - goto yy707; - goto yy708; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy710; - goto yy709; - } else { - if (yych <= 0xF0) - goto yy711; - if (yych <= 0xF3) - goto yy712; - if (yych <= 0xF4) - goto yy713; - goto yy704; - } - } - yy741: - yyaccept = 2; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy714; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= 0x00) - goto yy717; - if (yych <= '\'') - goto yy716; - goto yy718; - } else { - if (yych <= 0xC1) - goto yy717; - if (yych <= 0xDF) - goto yy720; - goto yy721; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy723; - goto yy722; - } else { - if (yych <= 0xF0) - goto yy724; - if (yych <= 0xF3) - goto yy725; - if (yych <= 0xF4) - goto yy726; - goto yy717; - } - } - yy742: - yyaccept = 3; - marker = ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy727; - } - if (yych <= 0xE0) { - if (yych <= '\\') { - if (yych <= '(') - goto yy730; - if (yych <= ')') - goto yy729; - goto yy731; - } else { - if (yych <= 0xC1) - goto yy730; - if (yych <= 0xDF) - goto yy733; - goto yy734; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy736; - goto yy735; - } else { - if (yych <= 0xF0) - goto yy737; - if (yych <= 0xF3) - goto yy738; - if (yych <= 0xF4) - goto yy739; - goto yy730; - } - } - } -} - -// Match space characters, including newlines. -bufsize_t _scan_spacechars(const unsigned char *p) { - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy747; - } - ++p; - { return 0; } - yy747: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy747; - } - { return (bufsize_t)(p - start); } - } -} - -// Match ATX heading start. -bufsize_t _scan_atx_heading_start(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - yych = *p; - if (yych == '#') - goto yy754; - ++p; - yy753 : { return 0; } - yy754: - yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy755; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy753; - if (yych <= '\n') - goto yy758; - goto yy753; - } else { - if (yych <= '\r') - goto yy758; - if (yych == '#') - goto yy759; - goto yy753; - } - yy755: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy755; - } - yy757 : { return (bufsize_t)(p - start); } - yy758: - yych = *++p; - goto yy757; - yy759: - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy755; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy760; - if (yych <= '\n') - goto yy758; - } else { - if (yych <= '\r') - goto yy758; - if (yych == '#') - goto yy761; - } - yy760: - p = marker; - goto yy753; - yy761: - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy755; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy760; - if (yych <= '\n') - goto yy758; - goto yy760; - } else { - if (yych <= '\r') - goto yy758; - if (yych != '#') - goto yy760; - } - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy755; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy760; - if (yych <= '\n') - goto yy758; - goto yy760; - } else { - if (yych <= '\r') - goto yy758; - if (yych != '#') - goto yy760; - } - yych = *++p; - if (yybm[0 + yych] & 128) { - goto yy755; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy760; - if (yych <= '\n') - goto yy758; - goto yy760; - } else { - if (yych <= '\r') - goto yy758; - if (yych != '#') - goto yy760; - } - ++p; - if (yybm[0 + (yych = *p)] & 128) { - goto yy755; - } - if (yych <= 0x08) - goto yy760; - if (yych <= '\n') - goto yy758; - if (yych == '\r') - goto yy758; - goto yy760; - } -} - -// Match setext heading line. Return 1 for level-1 heading, -// 2 for level-2, 0 for no match. -bufsize_t _scan_setext_heading_line(const unsigned char *p) { - const unsigned char *marker = NULL; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - yych = *p; - if (yych == '-') - goto yy769; - if (yych == '=') - goto yy770; - ++p; - yy768 : { return 0; } - yy769: - yych = *(marker = ++p); - if (yybm[0 + yych] & 64) { - goto yy776; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy768; - if (yych <= '\n') - goto yy772; - goto yy768; - } else { - if (yych <= '\r') - goto yy772; - if (yych == ' ') - goto yy772; - goto yy768; - } - yy770: - yych = *(marker = ++p); - if (yybm[0 + yych] & 128) { - goto yy782; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy768; - if (yych <= '\n') - goto yy779; - goto yy768; - } else { - if (yych <= '\r') - goto yy779; - if (yych == ' ') - goto yy779; - goto yy768; - } - yy771: - ++p; - yych = *p; - yy772: - if (yybm[0 + yych] & 32) { - goto yy771; - } - if (yych <= 0x08) - goto yy773; - if (yych <= '\n') - goto yy774; - if (yych == '\r') - goto yy774; - yy773: - p = marker; - goto yy768; - yy774: - ++p; - { return 2; } - yy776: - ++p; - yych = *p; - if (yybm[0 + yych] & 32) { - goto yy771; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy773; - if (yych <= '\n') - goto yy774; - goto yy773; - } else { - if (yych <= '\r') - goto yy774; - if (yych == '-') - goto yy776; - goto yy773; - } - yy778: - ++p; - yych = *p; - yy779: - if (yych <= '\f') { - if (yych <= 0x08) - goto yy773; - if (yych <= '\t') - goto yy778; - if (yych >= '\v') - goto yy773; - } else { - if (yych <= '\r') - goto yy780; - if (yych == ' ') - goto yy778; - goto yy773; - } - yy780: - ++p; - { return 1; } - yy782: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy782; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy773; - if (yych <= '\t') - goto yy778; - if (yych <= '\n') - goto yy780; - goto yy773; - } else { - if (yych <= '\r') - goto yy780; - if (yych == ' ') - goto yy778; - goto yy773; - } - } -} - -// Scan an opening code fence. -bufsize_t _scan_open_code_fence(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 224, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, - }; - yych = *p; - if (yych == '`') - goto yy788; - if (yych == '~') - goto yy789; - ++p; - yy787 : { return 0; } - yy788: - yych = *(marker = ++p); - if (yych == '`') - goto yy790; - goto yy787; - yy789: - yych = *(marker = ++p); - if (yych == '~') - goto yy792; - goto yy787; - yy790: - yych = *++p; - if (yybm[0 + yych] & 16) { - goto yy793; - } - yy791: - p = marker; - goto yy787; - yy792: - yych = *++p; - if (yybm[0 + yych] & 32) { - goto yy795; - } - goto yy791; - yy793: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 64) { - goto yy797; - } - if (yych <= 0xE0) { - if (yych <= '`') { - if (yych <= 0x00) - goto yy791; - if (yych <= '\r') - goto yy799; - goto yy793; - } else { - if (yych <= 0xC1) - goto yy791; - if (yych <= 0xDF) - goto yy801; - goto yy802; - } - } else { - if (yych <= 0xEF) { - if (yych == 0xED) - goto yy804; - goto yy803; - } else { - if (yych <= 0xF0) - goto yy805; - if (yych <= 0xF3) - goto yy806; - if (yych <= 0xF4) - goto yy807; - goto yy791; - } - } - yy795: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 32) { - goto yy795; - } - if (yych <= 0xDF) { - if (yych <= '\f') { - if (yych <= 0x00) - goto yy791; - if (yych == '\n') - goto yy810; - goto yy808; - } else { - if (yych <= '\r') - goto yy810; - if (yych <= 0x7F) - goto yy808; - if (yych <= 0xC1) - goto yy791; - goto yy812; - } - } else { - if (yych <= 0xEF) { - if (yych <= 0xE0) - goto yy813; - if (yych == 0xED) - goto yy815; - goto yy814; - } else { - if (yych <= 0xF0) - goto yy816; - if (yych <= 0xF3) - goto yy817; - if (yych <= 0xF4) - goto yy818; - goto yy791; - } - } - yy797: - ++p; - yych = *p; - if (yybm[0 + yych] & 64) { - goto yy797; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy791; - if (yych >= 0x0E) - goto yy791; - } else { - if (yych <= 0xDF) - goto yy801; - if (yych <= 0xE0) - goto yy802; - goto yy803; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy804; - if (yych <= 0xEF) - goto yy803; - goto yy805; - } else { - if (yych <= 0xF3) - goto yy806; - if (yych <= 0xF4) - goto yy807; - goto yy791; - } - } - yy799: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy801: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0xBF) - goto yy797; - goto yy791; - yy802: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy791; - if (yych <= 0xBF) - goto yy801; - goto yy791; - yy803: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0xBF) - goto yy801; - goto yy791; - yy804: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0x9F) - goto yy801; - goto yy791; - yy805: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy791; - if (yych <= 0xBF) - goto yy803; - goto yy791; - yy806: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0xBF) - goto yy803; - goto yy791; - yy807: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0x8F) - goto yy803; - goto yy791; - yy808: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy808; - } - if (yych <= 0xEC) { - if (yych <= 0xC1) { - if (yych <= 0x00) - goto yy791; - if (yych >= 0x0E) - goto yy791; - } else { - if (yych <= 0xDF) - goto yy812; - if (yych <= 0xE0) - goto yy813; - goto yy814; - } - } else { - if (yych <= 0xF0) { - if (yych <= 0xED) - goto yy815; - if (yych <= 0xEF) - goto yy814; - goto yy816; - } else { - if (yych <= 0xF3) - goto yy817; - if (yych <= 0xF4) - goto yy818; - goto yy791; - } - } - yy810: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy812: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0xBF) - goto yy808; - goto yy791; - yy813: - ++p; - yych = *p; - if (yych <= 0x9F) - goto yy791; - if (yych <= 0xBF) - goto yy812; - goto yy791; - yy814: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0xBF) - goto yy812; - goto yy791; - yy815: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0x9F) - goto yy812; - goto yy791; - yy816: - ++p; - yych = *p; - if (yych <= 0x8F) - goto yy791; - if (yych <= 0xBF) - goto yy814; - goto yy791; - yy817: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0xBF) - goto yy814; - goto yy791; - yy818: - ++p; - yych = *p; - if (yych <= 0x7F) - goto yy791; - if (yych <= 0x8F) - goto yy814; - goto yy791; - } -} - -// Scan a closing code fence with length at least len. -bufsize_t _scan_close_code_fence(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - static const unsigned char yybm[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - yych = *p; - if (yych == '`') - goto yy823; - if (yych == '~') - goto yy824; - ++p; - yy822 : { return 0; } - yy823: - yych = *(marker = ++p); - if (yych == '`') - goto yy825; - goto yy822; - yy824: - yych = *(marker = ++p); - if (yych == '~') - goto yy827; - goto yy822; - yy825: - yych = *++p; - if (yybm[0 + yych] & 32) { - goto yy828; - } - yy826: - p = marker; - goto yy822; - yy827: - yych = *++p; - if (yybm[0 + yych] & 64) { - goto yy830; - } - goto yy826; - yy828: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 128) { - goto yy832; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy826; - if (yych <= '\n') - goto yy834; - goto yy826; - } else { - if (yych <= '\r') - goto yy834; - if (yych == '`') - goto yy828; - goto yy826; - } - yy830: - ++p; - yych = *p; - marker = p; - if (yybm[0 + yych] & 64) { - goto yy830; - } - if (yych <= '\f') { - if (yych <= 0x08) - goto yy826; - if (yych <= '\t') - goto yy836; - if (yych <= '\n') - goto yy838; - goto yy826; - } else { - if (yych <= '\r') - goto yy838; - if (yych == ' ') - goto yy836; - goto yy826; - } - yy832: - ++p; - yych = *p; - if (yybm[0 + yych] & 128) { - goto yy832; - } - if (yych <= 0x08) - goto yy826; - if (yych <= '\n') - goto yy834; - if (yych != '\r') - goto yy826; - yy834: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - yy836: - ++p; - yych = *p; - if (yych <= '\f') { - if (yych <= 0x08) - goto yy826; - if (yych <= '\t') - goto yy836; - if (yych >= '\v') - goto yy826; - } else { - if (yych <= '\r') - goto yy838; - if (yych == ' ') - goto yy836; - goto yy826; - } - yy838: - ++p; - p = marker; - { return (bufsize_t)(p - start); } - } -} - -// Scans an entity. -// Returns number of chars matched. -bufsize_t _scan_entity(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - yych = *p; - if (yych == '&') - goto yy844; - ++p; - yy843 : { return 0; } - yy844: - yych = *(marker = ++p); - if (yych <= '@') { - if (yych != '#') - goto yy843; - } else { - if (yych <= 'Z') - goto yy847; - if (yych <= '`') - goto yy843; - if (yych <= 'z') - goto yy847; - goto yy843; - } - yych = *++p; - if (yych <= 'W') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy848; - } else { - if (yych <= 'X') - goto yy849; - if (yych == 'x') - goto yy849; - } - yy846: - p = marker; - goto yy843; - yy847: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy850; - goto yy846; - } else { - if (yych <= 'Z') - goto yy850; - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy850; - goto yy846; - } - yy848: - yych = *++p; - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy851; - if (yych == ';') - goto yy852; - goto yy846; - yy849: - yych = *++p; - if (yych <= '@') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy854; - goto yy846; - } else { - if (yych <= 'F') - goto yy854; - if (yych <= '`') - goto yy846; - if (yych <= 'f') - goto yy854; - goto yy846; - } - yy850: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy855; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy855; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy855; - goto yy846; - } - } - yy851: - yych = *++p; - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy856; - if (yych != ';') - goto yy846; - yy852: - ++p; - { return (bufsize_t)(p - start); } - yy854: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy857; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'F') { - if (yych <= '@') - goto yy846; - goto yy857; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'f') - goto yy857; - goto yy846; - } - } - yy855: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy858; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy858; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy858; - goto yy846; - } - } - yy856: - yych = *++p; - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy859; - if (yych == ';') - goto yy852; - goto yy846; - yy857: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy860; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'F') { - if (yych <= '@') - goto yy846; - goto yy860; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'f') - goto yy860; - goto yy846; - } - } - yy858: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy861; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy861; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy861; - goto yy846; - } - } - yy859: - yych = *++p; - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy862; - if (yych == ';') - goto yy852; - goto yy846; - yy860: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy863; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'F') { - if (yych <= '@') - goto yy846; - goto yy863; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'f') - goto yy863; - goto yy846; - } - } - yy861: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy864; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy864; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy864; - goto yy846; - } - } - yy862: - yych = *++p; - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy865; - if (yych == ';') - goto yy852; - goto yy846; - yy863: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy866; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'F') { - if (yych <= '@') - goto yy846; - goto yy866; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'f') - goto yy866; - goto yy846; - } - } - yy864: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy867; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy867; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy867; - goto yy846; - } - } - yy865: - yych = *++p; - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy868; - if (yych == ';') - goto yy852; - goto yy846; - yy866: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy868; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'F') { - if (yych <= '@') - goto yy846; - goto yy868; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'f') - goto yy868; - goto yy846; - } - } - yy867: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy869; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy869; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy869; - goto yy846; - } - } - yy868: - yych = *++p; - if (yych == ';') - goto yy852; - goto yy846; - yy869: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy870; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy870: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy871; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy871: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy872; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy872: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy873; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy873: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy874; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy874: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy875; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy875: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy876; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy876: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy877; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy877: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy878; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy878: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy879; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy879: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy880; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy880: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy881; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy881: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy882; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy882: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy883; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy883: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy884; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy884: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy885; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy885: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy886; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy886: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy887; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy887: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy888; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy888: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy889; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy889: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy890; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy890: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy891; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy891: - yych = *++p; - if (yych <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy892; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - } else { - if (yych <= '`') - goto yy846; - if (yych >= '{') - goto yy846; - } - } - yy892: - ++p; - if ((yych = *p) <= ';') { - if (yych <= '/') - goto yy846; - if (yych <= '9') - goto yy868; - if (yych <= ':') - goto yy846; - goto yy852; - } else { - if (yych <= 'Z') { - if (yych <= '@') - goto yy846; - goto yy868; - } else { - if (yych <= '`') - goto yy846; - if (yych <= 'z') - goto yy868; - goto yy846; - } - } - } -} - -// Returns positive value if a URL begins in a way that is potentially -// dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0. -bufsize_t _scan_dangerous_url(const unsigned char *p) { - const unsigned char *marker = NULL; - const unsigned char *start = p; - - { - unsigned char yych; - unsigned int yyaccept = 0; - yych = *p; - if (yych <= 'V') { - if (yych <= 'F') { - if (yych == 'D') - goto yy897; - if (yych >= 'F') - goto yy898; - } else { - if (yych == 'J') - goto yy899; - if (yych >= 'V') - goto yy900; - } - } else { - if (yych <= 'f') { - if (yych == 'd') - goto yy897; - if (yych >= 'f') - goto yy898; - } else { - if (yych <= 'j') { - if (yych >= 'j') - goto yy899; - } else { - if (yych == 'v') - goto yy900; - } - } - } - ++p; - yy896 : { return 0; } - yy897: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'A') - goto yy901; - if (yych == 'a') - goto yy901; - goto yy896; - yy898: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'I') - goto yy903; - if (yych == 'i') - goto yy903; - goto yy896; - yy899: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'A') - goto yy904; - if (yych == 'a') - goto yy904; - goto yy896; - yy900: - yyaccept = 0; - yych = *(marker = ++p); - if (yych == 'B') - goto yy905; - if (yych == 'b') - goto yy905; - goto yy896; - yy901: - yych = *++p; - if (yych == 'T') - goto yy906; - if (yych == 't') - goto yy906; - yy902: - p = marker; - if (yyaccept == 0) { - goto yy896; - } else { - goto yy914; - } - yy903: - yych = *++p; - if (yych == 'L') - goto yy907; - if (yych == 'l') - goto yy907; - goto yy902; - yy904: - yych = *++p; - if (yych == 'V') - goto yy908; - if (yych == 'v') - goto yy908; - goto yy902; - yy905: - yych = *++p; - if (yych == 'S') - goto yy909; - if (yych == 's') - goto yy909; - goto yy902; - yy906: - yych = *++p; - if (yych == 'A') - goto yy910; - if (yych == 'a') - goto yy910; - goto yy902; - yy907: - yych = *++p; - if (yych == 'E') - goto yy911; - if (yych == 'e') - goto yy911; - goto yy902; - yy908: - yych = *++p; - if (yych == 'A') - goto yy905; - if (yych == 'a') - goto yy905; - goto yy902; - yy909: - yych = *++p; - if (yych == 'C') - goto yy912; - if (yych == 'c') - goto yy912; - goto yy902; - yy910: - yych = *++p; - if (yych == ':') - goto yy913; - goto yy902; - yy911: - yych = *++p; - if (yych == ':') - goto yy915; - goto yy902; - yy912: - yych = *++p; - if (yych == 'R') - goto yy916; - if (yych == 'r') - goto yy916; - goto yy902; - yy913: - yyaccept = 1; - yych = *(marker = ++p); - if (yych == 'I') - goto yy917; - if (yych == 'i') - goto yy917; - yy914 : { return (bufsize_t)(p - start); } - yy915: - yych = *++p; - goto yy914; - yy916: - yych = *++p; - if (yych == 'I') - goto yy918; - if (yych == 'i') - goto yy918; - goto yy902; - yy917: - yych = *++p; - if (yych == 'M') - goto yy919; - if (yych == 'm') - goto yy919; - goto yy902; - yy918: - yych = *++p; - if (yych == 'P') - goto yy920; - if (yych == 'p') - goto yy920; - goto yy902; - yy919: - yych = *++p; - if (yych == 'A') - goto yy921; - if (yych == 'a') - goto yy921; - goto yy902; - yy920: - yych = *++p; - if (yych == 'T') - goto yy911; - if (yych == 't') - goto yy911; - goto yy902; - yy921: - yych = *++p; - if (yych == 'G') - goto yy922; - if (yych != 'g') - goto yy902; - yy922: - yych = *++p; - if (yych == 'E') - goto yy923; - if (yych != 'e') - goto yy902; - yy923: - yych = *++p; - if (yych != '/') - goto yy902; - yych = *++p; - if (yych <= 'W') { - if (yych <= 'J') { - if (yych == 'G') - goto yy925; - if (yych <= 'I') - goto yy902; - goto yy926; - } else { - if (yych == 'P') - goto yy927; - if (yych <= 'V') - goto yy902; - goto yy928; - } - } else { - if (yych <= 'j') { - if (yych == 'g') - goto yy925; - if (yych <= 'i') - goto yy902; - goto yy926; - } else { - if (yych <= 'p') { - if (yych <= 'o') - goto yy902; - goto yy927; - } else { - if (yych == 'w') - goto yy928; - goto yy902; - } - } - } - yy925: - yych = *++p; - if (yych == 'I') - goto yy929; - if (yych == 'i') - goto yy929; - goto yy902; - yy926: - yych = *++p; - if (yych == 'P') - goto yy930; - if (yych == 'p') - goto yy930; - goto yy902; - yy927: - yych = *++p; - if (yych == 'N') - goto yy931; - if (yych == 'n') - goto yy931; - goto yy902; - yy928: - yych = *++p; - if (yych == 'E') - goto yy932; - if (yych == 'e') - goto yy932; - goto yy902; - yy929: - yych = *++p; - if (yych == 'F') - goto yy933; - if (yych == 'f') - goto yy933; - goto yy902; - yy930: - yych = *++p; - if (yych == 'E') - goto yy931; - if (yych != 'e') - goto yy902; - yy931: - yych = *++p; - if (yych == 'G') - goto yy933; - if (yych == 'g') - goto yy933; - goto yy902; - yy932: - yych = *++p; - if (yych == 'B') - goto yy935; - if (yych == 'b') - goto yy935; - goto yy902; - yy933: - ++p; - { return 0; } - yy935: - ++p; - if ((yych = *p) == 'P') - goto yy933; - if (yych == 'p') - goto yy933; - goto yy902; - } -} diff --git a/Pods/Down/Source/cmark/scanners.h b/Pods/Down/Source/cmark/scanners.h deleted file mode 100755 index bcb5fe8..0000000 --- a/Pods/Down/Source/cmark/scanners.h +++ /dev/null @@ -1,53 +0,0 @@ -#include "cmark.h" -#include "chunk.h" - -#ifdef __cplusplus -extern "C" { -#endif - -bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, - bufsize_t offset); -bufsize_t _scan_scheme(const unsigned char *p); -bufsize_t _scan_autolink_uri(const unsigned char *p); -bufsize_t _scan_autolink_email(const unsigned char *p); -bufsize_t _scan_html_tag(const unsigned char *p); -bufsize_t _scan_html_block_start(const unsigned char *p); -bufsize_t _scan_html_block_start_7(const unsigned char *p); -bufsize_t _scan_html_block_end_1(const unsigned char *p); -bufsize_t _scan_html_block_end_2(const unsigned char *p); -bufsize_t _scan_html_block_end_3(const unsigned char *p); -bufsize_t _scan_html_block_end_4(const unsigned char *p); -bufsize_t _scan_html_block_end_5(const unsigned char *p); -bufsize_t _scan_link_title(const unsigned char *p); -bufsize_t _scan_spacechars(const unsigned char *p); -bufsize_t _scan_atx_heading_start(const unsigned char *p); -bufsize_t _scan_setext_heading_line(const unsigned char *p); -bufsize_t _scan_open_code_fence(const unsigned char *p); -bufsize_t _scan_close_code_fence(const unsigned char *p); -bufsize_t _scan_entity(const unsigned char *p); -bufsize_t _scan_dangerous_url(const unsigned char *p); - -#define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n) -#define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n) -#define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n) -#define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n) -#define scan_html_block_start(c, n) _scan_at(&_scan_html_block_start, c, n) -#define scan_html_block_start_7(c, n) _scan_at(&_scan_html_block_start_7, c, n) -#define scan_html_block_end_1(c, n) _scan_at(&_scan_html_block_end_1, c, n) -#define scan_html_block_end_2(c, n) _scan_at(&_scan_html_block_end_2, c, n) -#define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n) -#define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n) -#define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n) -#define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n) -#define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n) -#define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n) -#define scan_setext_heading_line(c, n) \ - _scan_at(&_scan_setext_heading_line, c, n) -#define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n) -#define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n) -#define scan_entity(c, n) _scan_at(&_scan_entity, c, n) -#define scan_dangerous_url(c, n) _scan_at(&_scan_dangerous_url, c, n) - -#ifdef __cplusplus -} -#endif diff --git a/Pods/Down/Source/cmark/utf8.c b/Pods/Down/Source/cmark/utf8.c deleted file mode 100755 index c29bbf7..0000000 --- a/Pods/Down/Source/cmark/utf8.c +++ /dev/null @@ -1,317 +0,0 @@ -#include <stdlib.h> -#include <stdint.h> -#include <assert.h> - -#include "cmark_ctype.h" -#include "utf8.h" - -static const int8_t utf8proc_utf8class[256] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0}; - -static void encode_unknown(cmark_strbuf *buf) { - static const uint8_t repl[] = {239, 191, 189}; - cmark_strbuf_put(buf, repl, 3); -} - -static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) { - int length, i; - - if (!str_len) - return 0; - - length = utf8proc_utf8class[str[0]]; - - if (!length) - return -1; - - if (str_len >= 0 && (bufsize_t)length > str_len) - return -str_len; - - for (i = 1; i < length; i++) { - if ((str[i] & 0xC0) != 0x80) - return -i; - } - - return length; -} - -// Validate a single UTF-8 character according to RFC 3629. -static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) { - int length = utf8proc_utf8class[str[0]]; - - if (!length) - return -1; - - if ((bufsize_t)length > str_len) - return -str_len; - - switch (length) { - case 2: - if ((str[1] & 0xC0) != 0x80) - return -1; - if (str[0] < 0xC2) { - // Overlong - return -length; - } - break; - - case 3: - if ((str[1] & 0xC0) != 0x80) - return -1; - if ((str[2] & 0xC0) != 0x80) - return -2; - if (str[0] == 0xE0) { - if (str[1] < 0xA0) { - // Overlong - return -length; - } - } else if (str[0] == 0xED) { - if (str[1] >= 0xA0) { - // Surrogate - return -length; - } - } - break; - - case 4: - if ((str[1] & 0xC0) != 0x80) - return -1; - if ((str[2] & 0xC0) != 0x80) - return -2; - if ((str[3] & 0xC0) != 0x80) - return -3; - if (str[0] == 0xF0) { - if (str[1] < 0x90) { - // Overlong - return -length; - } - } else if (str[0] >= 0xF4) { - if (str[0] > 0xF4 || str[1] >= 0x90) { - // Above 0x10FFFF - return -length; - } - } - break; - } - - return length; -} - -void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line, - bufsize_t size) { - bufsize_t i = 0; - - while (i < size) { - bufsize_t org = i; - int charlen = 0; - - while (i < size) { - if (line[i] < 0x80 && line[i] != 0) { - i++; - } else if (line[i] >= 0x80) { - charlen = utf8proc_valid(line + i, size - i); - if (charlen < 0) { - charlen = -charlen; - break; - } - i += charlen; - } else if (line[i] == 0) { - // ASCII NUL is technically valid but rejected - // for security reasons. - charlen = 1; - break; - } - } - - if (i > org) { - cmark_strbuf_put(ob, line + org, i - org); - } - - if (i >= size) { - break; - } else { - // Invalid UTF-8 - encode_unknown(ob); - i += charlen; - } - } -} - -int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, - int32_t *dst) { - int length; - int32_t uc = -1; - - *dst = -1; - length = utf8proc_charlen(str, str_len); - if (length < 0) - return -1; - - switch (length) { - case 1: - uc = str[0]; - break; - case 2: - uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F); - if (uc < 0x80) - uc = -1; - break; - case 3: - uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F); - if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000)) - uc = -1; - break; - case 4: - uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) + - ((str[2] & 0x3F) << 6) + (str[3] & 0x3F); - if (uc < 0x10000 || uc >= 0x110000) - uc = -1; - break; - } - - if (uc < 0) - return -1; - - *dst = uc; - return length; -} - -void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) { - uint8_t dst[4]; - bufsize_t len = 0; - - assert(uc >= 0); - - if (uc < 0x80) { - dst[0] = (uint8_t)(uc); - len = 1; - } else if (uc < 0x800) { - dst[0] = (uint8_t)(0xC0 + (uc >> 6)); - dst[1] = 0x80 + (uc & 0x3F); - len = 2; - } else if (uc == 0xFFFF) { - dst[0] = 0xFF; - len = 1; - } else if (uc == 0xFFFE) { - dst[0] = 0xFE; - len = 1; - } else if (uc < 0x10000) { - dst[0] = (uint8_t)(0xE0 + (uc >> 12)); - dst[1] = 0x80 + ((uc >> 6) & 0x3F); - dst[2] = 0x80 + (uc & 0x3F); - len = 3; - } else if (uc < 0x110000) { - dst[0] = (uint8_t)(0xF0 + (uc >> 18)); - dst[1] = 0x80 + ((uc >> 12) & 0x3F); - dst[2] = 0x80 + ((uc >> 6) & 0x3F); - dst[3] = 0x80 + (uc & 0x3F); - len = 4; - } else { - encode_unknown(buf); - return; - } - - cmark_strbuf_put(buf, dst, len); -} - -void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, - bufsize_t len) { - int32_t c; - -#define bufpush(x) cmark_utf8proc_encode_char(x, dest) - - while (len > 0) { - bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c); - - if (char_len >= 0) { -#include "case_fold_switch.inc" - } else { - encode_unknown(dest); - char_len = -char_len; - } - - str += char_len; - len -= char_len; - } -} - -// matches anything in the Zs class, plus LF, CR, TAB, FF. -int cmark_utf8proc_is_space(int32_t uc) { - return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 || - uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 || - uc == 8287 || uc == 12288); -} - -// matches anything in the P[cdefios] classes. -int cmark_utf8proc_is_punctuation(int32_t uc) { - return ( - (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 || - uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 || - uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 || - uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 || - uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 || - uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 || - (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) || - (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 || - uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 || - uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) || - uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 || - (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 || - (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) || - uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 || - (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 || - (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) || - (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 || - uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) || - (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) || - (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 || - (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) || - (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) || - (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 || - uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 || - (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 || - (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) || - (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 || - (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 || - uc == 11632 || (uc >= 11776 && uc <= 11822) || - (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) || - (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) || - uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 || - uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 || - uc == 42622 || (uc >= 42738 && uc <= 42743) || - (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 || - (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 || - uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 || - uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 || - uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 || - uc == 64831 || (uc >= 65040 && uc <= 65049) || - (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) || - uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 || - (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) || - (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 || - uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) || - uc == 65343 || uc == 65371 || uc == 65373 || - (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) || - uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 || - uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 || - (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) || - (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) || - uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) || - (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 || - (uc >= 70085 && uc <= 70088) || uc == 70093 || - (uc >= 70200 && uc <= 70205) || uc == 70854 || - (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) || - (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 || - uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 || - uc == 113823); -} diff --git a/Pods/Down/Source/cmark/utf8.h b/Pods/Down/Source/cmark/utf8.h deleted file mode 100755 index 8e45714..0000000 --- a/Pods/Down/Source/cmark/utf8.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef CMARK_UTF8_H -#define CMARK_UTF8_H - -#include <stdint.h> -#include "buffer.h" - -#ifdef __cplusplus -extern "C" { -#endif - -void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str, - bufsize_t len); -void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf); -int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst); -void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line, - bufsize_t size); -int cmark_utf8proc_is_space(int32_t uc); -int cmark_utf8proc_is_punctuation(int32_t uc); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Pods/Down/Source/cmark/xml.c b/Pods/Down/Source/cmark/xml.c deleted file mode 100755 index 48674cc..0000000 --- a/Pods/Down/Source/cmark/xml.c +++ /dev/null @@ -1,170 +0,0 @@ -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <assert.h> - -#include "config.h" -#include "cmark.h" -#include "node.h" -#include "buffer.h" -#include "houdini.h" - -#define BUFFER_SIZE 100 - -// Functions to convert cmark_nodes to XML strings. - -static void escape_xml(cmark_strbuf *dest, const unsigned char *source, - bufsize_t length) { - houdini_escape_html0(dest, source, length, 0); -} - -struct render_state { - cmark_strbuf *xml; - int indent; -}; - -static CMARK_INLINE void indent(struct render_state *state) { - int i; - for (i = 0; i < state->indent; i++) { - cmark_strbuf_putc(state->xml, ' '); - } -} - -static int S_render_node(cmark_node *node, cmark_event_type ev_type, - struct render_state *state, int options) { - cmark_strbuf *xml = state->xml; - bool literal = false; - cmark_delim_type delim; - bool entering = (ev_type == CMARK_EVENT_ENTER); - char buffer[BUFFER_SIZE]; - - if (entering) { - indent(state); - cmark_strbuf_putc(xml, '<'); - cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); - - if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) { - snprintf(buffer, BUFFER_SIZE, " sourcepos=\"%d:%d-%d:%d\"", - node->start_line, node->start_column, node->end_line, - node->end_column); - cmark_strbuf_puts(xml, buffer); - } - - literal = false; - - switch (node->type) { - case CMARK_NODE_DOCUMENT: - cmark_strbuf_puts(xml, " xmlns=\"http://commonmark.org/xml/1.0\""); - break; - case CMARK_NODE_TEXT: - case CMARK_NODE_CODE: - case CMARK_NODE_HTML_BLOCK: - case CMARK_NODE_HTML_INLINE: - cmark_strbuf_puts(xml, " xml:space=\"preserve\">"); - escape_xml(xml, node->as.literal.data, node->as.literal.len); - cmark_strbuf_puts(xml, "</"); - cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); - literal = true; - break; - case CMARK_NODE_LIST: - switch (cmark_node_get_list_type(node)) { - case CMARK_ORDERED_LIST: - cmark_strbuf_puts(xml, " type=\"ordered\""); - snprintf(buffer, BUFFER_SIZE, " start=\"%d\"", - cmark_node_get_list_start(node)); - cmark_strbuf_puts(xml, buffer); - delim = cmark_node_get_list_delim(node); - if (delim == CMARK_PAREN_DELIM) { - cmark_strbuf_puts(xml, " delim=\"paren\""); - } else if (delim == CMARK_PERIOD_DELIM) { - cmark_strbuf_puts(xml, " delim=\"period\""); - } - break; - case CMARK_BULLET_LIST: - cmark_strbuf_puts(xml, " type=\"bullet\""); - break; - default: - break; - } - snprintf(buffer, BUFFER_SIZE, " tight=\"%s\"", - (cmark_node_get_list_tight(node) ? "true" : "false")); - cmark_strbuf_puts(xml, buffer); - break; - case CMARK_NODE_HEADING: - snprintf(buffer, BUFFER_SIZE, " level=\"%d\"", node->as.heading.level); - cmark_strbuf_puts(xml, buffer); - break; - case CMARK_NODE_CODE_BLOCK: - if (node->as.code.info.len > 0) { - cmark_strbuf_puts(xml, " info=\""); - escape_xml(xml, node->as.code.info.data, node->as.code.info.len); - cmark_strbuf_putc(xml, '"'); - } - cmark_strbuf_puts(xml, " xml:space=\"preserve\">"); - escape_xml(xml, node->as.code.literal.data, node->as.code.literal.len); - cmark_strbuf_puts(xml, "</"); - cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); - literal = true; - break; - case CMARK_NODE_CUSTOM_BLOCK: - case CMARK_NODE_CUSTOM_INLINE: - cmark_strbuf_puts(xml, " on_enter=\""); - escape_xml(xml, node->as.custom.on_enter.data, - node->as.custom.on_enter.len); - cmark_strbuf_putc(xml, '"'); - cmark_strbuf_puts(xml, " on_exit=\""); - escape_xml(xml, node->as.custom.on_exit.data, - node->as.custom.on_exit.len); - cmark_strbuf_putc(xml, '"'); - break; - case CMARK_NODE_LINK: - case CMARK_NODE_IMAGE: - cmark_strbuf_puts(xml, " destination=\""); - escape_xml(xml, node->as.link.url.data, node->as.link.url.len); - cmark_strbuf_putc(xml, '"'); - cmark_strbuf_puts(xml, " title=\""); - escape_xml(xml, node->as.link.title.data, node->as.link.title.len); - cmark_strbuf_putc(xml, '"'); - break; - default: - break; - } - if (node->first_child) { - state->indent += 2; - } else if (!literal) { - cmark_strbuf_puts(xml, " /"); - } - cmark_strbuf_puts(xml, ">\n"); - - } else if (node->first_child) { - state->indent -= 2; - indent(state); - cmark_strbuf_puts(xml, "</"); - cmark_strbuf_puts(xml, cmark_node_get_type_string(node)); - cmark_strbuf_puts(xml, ">\n"); - } - - return 1; -} - -char *cmark_render_xml(cmark_node *root, int options) { - char *result; - cmark_strbuf xml = CMARK_BUF_INIT(cmark_node_mem(root)); - cmark_event_type ev_type; - cmark_node *cur; - struct render_state state = {&xml, 0}; - - cmark_iter *iter = cmark_iter_new(root); - - cmark_strbuf_puts(state.xml, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); - cmark_strbuf_puts(state.xml, - "<!DOCTYPE document SYSTEM \"CommonMark.dtd\">\n"); - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - S_render_node(cur, ev_type, &state, options); - } - result = (char *)cmark_strbuf_detach(&xml); - - cmark_iter_free(iter); - return result; -} diff --git a/Pods/Local Podspecs/CwlUtils.podspec.json b/Pods/Local Podspecs/CwlUtils.podspec.json deleted file mode 100644 index d8f89db..0000000 --- a/Pods/Local Podspecs/CwlUtils.podspec.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "CwlUtils", - "version": "2.2.0", - "summary": "A collection of Swift utilities as documented on cocoawithlove.com", - "description": "Stack traces, system information with sysctl, presentation of unanticipated errors, random number generators, mutexes, dispatch timers, a Result type, copy-on-write double-ended queue, function execution contexts, testing actions over time. See [Cocoa with Love](https://cocoawithlove.com) for more.", - "homepage": "https://github.com/mattgallagher/CwlUtils", - "license": { - "type": "ISC", - "file": "LICENSE.txt" - }, - "authors": "Matt Gallagher", - "swift_versions": "5.0", - "platforms": { - "ios": "8.0", - "osx": "10.10" - }, - "source": { - "git": "https://github.com/mattgallagher/CwlUtils.git", - "tag": "2.2.0" - }, - "source_files": [ - "Sources/CwlUtils/*.{swift,h}", - "Sources/CwlFrameAddress/**/*.{c,h}" - ], - "swift_version": "5.0" -} diff --git a/Pods/Manifest.lock b/Pods/Manifest.lock deleted file mode 100644 index df5b1b9..0000000 --- a/Pods/Manifest.lock +++ /dev/null @@ -1,72 +0,0 @@ -PODS: - - Alamofire (4.9.1) - - CwlUtils (2.2.0) - - Down (0.9.4) - - Netable (0.10.2) - - ObjcExceptionBridging (1.0.1): - - ObjcExceptionBridging/ObjcExceptionBridging (= 1.0.1) - - ObjcExceptionBridging/ObjcExceptionBridging (1.0.1) - - ReachabilitySwift (5.0.0) - - SnapKit (5.0.1) - - SwiftLint (0.42.0) - - SwiftyJSON (5.0.0) - - SwiftyUserDefaults (4.0.0) - - Valet (4.1.1) - - XCGLogger (6.1.0): - - XCGLogger/Core (= 6.1.0) - - XCGLogger/Core (6.1.0): - - ObjcExceptionBridging - -DEPENDENCIES: - - Alamofire (~> 4.7) - - CwlUtils (from `https://github.com/mattgallagher/CwlUtils.git`) - - Down - - Netable - - ReachabilitySwift - - SnapKit - - SwiftLint - - SwiftyJSON - - SwiftyUserDefaults (~> 4.0) - - Valet - - XCGLogger (~> 6.1.0) - -SPEC REPOS: - trunk: - - Alamofire - - Down - - Netable - - ObjcExceptionBridging - - ReachabilitySwift - - SnapKit - - SwiftLint - - SwiftyJSON - - SwiftyUserDefaults - - Valet - - XCGLogger - -EXTERNAL SOURCES: - CwlUtils: - :git: https://github.com/mattgallagher/CwlUtils.git - -CHECKOUT OPTIONS: - CwlUtils: - :commit: 0bfc4587d01cfc796b6c7e118fc631333dd8ab33 - :git: https://github.com/mattgallagher/CwlUtils.git - -SPEC CHECKSUMS: - Alamofire: 85e8a02c69d6020a0d734f6054870d7ecb75cf18 - CwlUtils: 33e0095342412c8fcde26dc3a21326ab125a762c - Down: 276f2c3eeeaf30345873bdad25f44b2640fcfa3a - Netable: f6cd47f79aa133c63a83c3f5015f35b310f1d05f - ObjcExceptionBridging: c30e00eb3700467e695faeea30e26e18bd445001 - ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825 - SnapKit: 97b92857e3df3a0c71833cce143274bf6ef8e5eb - SwiftLint: 4fa9579c63416865179bc416f0a92d55f009600d - SwiftyJSON: 36413e04c44ee145039d332b4f4e2d3e8d6c4db7 - SwiftyUserDefaults: 6a1951df1daa19337862b677dd9a4b9bd4c288cd - Valet: 11ab0e318b7284888a81392e36136563b4af5deb - XCGLogger: 7f7f43f15dfe3a305fa1342b7dc29af656289abd - -PODFILE CHECKSUM: 468987039732bf8f93fc1bced1ef05984ee6e15c - -COCOAPODS: 1.9.3 diff --git a/Pods/Netable/LICENSE b/Pods/Netable/LICENSE deleted file mode 100644 index e6c97fb..0000000 --- a/Pods/Netable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2018 Steamclock Software - -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/Pods/Netable/Netable/Netable/DelayedOperations.swift b/Pods/Netable/Netable/Netable/DelayedOperations.swift deleted file mode 100644 index c3f4709..0000000 --- a/Pods/Netable/Netable/Netable/DelayedOperations.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// DelayedOperations.swift -// Netable -// -// Created by Nigel Brooke on 2020-06-30. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -// Utility class for scheduling future operations that can easily be identified and cancelled later -// Used to hold in-flight requests that are waiting for a retry. -internal class DelayedOperations { - private var localQueue = DispatchQueue(label: "Netable DelayedOperations") - private var actionQueue: DispatchQueue - private var operations: [(timer: DispatchSourceTimer, id: String)] = [] - - init(dispatchOn: DispatchQueue = DispatchQueue.main) { - actionQueue = dispatchOn - } - - func delay(_ delay: TimeInterval, withID id: String, doAction action: @escaping () -> Void) { - let timer = DispatchSource.makeTimerSource(queue: actionQueue) - timer.schedule(deadline: .now() + delay) - timer.setEventHandler { - self.cancel(id) - action() - } - - localQueue.sync { - operations.append((timer: timer, id: id)) - } - - timer.resume() - } - - @discardableResult - func cancel(_ id: String) -> Bool { - self.localQueue.sync { - let origCount = operations.count - operations.removeAll { $0.id == id } - return operations.count != origCount - } - } - - func cancelAll() { - self.localQueue.sync { - operations.removeAll() - } - } -} diff --git a/Pods/Netable/Netable/Netable/Error.swift b/Pods/Netable/Netable/Netable/Error.swift deleted file mode 100644 index 7a5bc6e..0000000 --- a/Pods/Netable/Netable/Netable/Error.swift +++ /dev/null @@ -1,116 +0,0 @@ -// -// Error.swift -// Netable -// -// Created by Jeremy Chiang on 2019-04-08. -// Copyright © 2018 Steamclock Software. All rights reserved. -// - -import Foundation - -/// All errors returned by Netable are NetableErrors. -public enum NetableError: Error { - /// Something went wrong while encoding request parameters. - case codingError(String) - - /// Something went wrong while decoding the response. - case decodingError(Error, Data?) - - /// The request was successful, but returned a non-200 status code. - case httpError(Int, Data?) - - /// The URL provided isn't properly formatted. - case malformedURL - - /// Request failed to complete, usually due to a connectivity problem. - case requestFailed(Error) - - /// The fully qualified URL's server does not match the base URL. - /// Something's gone wrong while validating the URL. - case wrongServer - - /// The server response was expected to contain data but is instead empty. - case noData - - /// Something went wrong while trying to parse response data. - /// Throw this error if something goes wrong while calling Request.finalize(). - case resourceExtractionError(String) - - /// We're not sure what went wrong, but something did. - case unknownError(Error) -} - -extension NetableError: LocalizedError { - public var errorCode: Int? { - switch self { - case .codingError: - return 0 - case .decodingError: - return 1 - case .httpError(let statusCode, _): - return statusCode < 100 ? 2 : statusCode - case .malformedURL: - return 3 - case .requestFailed: - return 4 - case .wrongServer: - return 5 - case .noData: - return 6 - case .resourceExtractionError: - return 7 - case .unknownError: - return 8 - } - } - - public var errorDescription: String? { - switch self { - case .codingError(let message): - return "Coding error: \(message)" - case .decodingError(let error, _): - return "Decoding error: \(error.localizedDescription)" - case .httpError(let statusCode, _): - return "HTTP status code: \(statusCode)" - case .malformedURL: - return "Malformed URL" - case .requestFailed(let error): - return "Request failed: \(error.localizedDescription)" - case .wrongServer: - return "Wrong server" - case .noData: - return "No data" - case .resourceExtractionError(let message): - return "Resource Extraction Error: The raw result could not be turned into the final resource: \(message)" - case .unknownError(let error): - return "Unknown error: \(error.localizedDescription)" - } - } -} - -extension NetableError: Equatable { - public static func == (lhs: NetableError, rhs: NetableError) -> Bool { - switch (lhs, rhs) { - case (.codingError(let lhsMessage), .codingError(let rhsMessage)): - return lhsMessage == rhsMessage - case (.decodingError(let lhsError, let lhsData), .decodingError(let rhsError, let rhsData)): - return lhsError.localizedDescription == rhsError.localizedDescription && lhsData == rhsData - case (.httpError(let lhsCode, let lhsData), .httpError(let rhsCode, let rhsData)): - return lhsCode == rhsCode && lhsData == rhsData - case (.malformedURL, .malformedURL): - return true - case (.requestFailed(let lhsError), .requestFailed(let rhsError)): - return lhsError.localizedDescription == rhsError.localizedDescription - case (.wrongServer, .wrongServer): - return true - case (.noData, .noData): - return true - case (.resourceExtractionError(let lhsMessage), .resourceExtractionError(let rhsMessage)): - return lhsMessage == rhsMessage - case (.unknownError(let lhsError), .unknownError(let rhsError)): - return lhsError.localizedDescription == rhsError.localizedDescription - default: - return false - } - } -} diff --git a/Pods/Netable/Netable/Netable/HTTPMethod.swift b/Pods/Netable/Netable/Netable/HTTPMethod.swift deleted file mode 100644 index 3148c17..0000000 --- a/Pods/Netable/Netable/Netable/HTTPMethod.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// HTTPMethod.swift -// Netable -// -// Created by Jeremy Chiang on 2020-02-04. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -/// Type representing all supported HTTP methods. -public enum HTTPMethod: String { - case delete = "DELETE" - case get = "GET" - case post = "POST" - case put = "PUT" - case patch = "PATCH" -} diff --git a/Pods/Netable/Netable/Netable/LogDestination.swift b/Pods/Netable/Netable/Netable/LogDestination.swift deleted file mode 100644 index f286d4f..0000000 --- a/Pods/Netable/Netable/Netable/LogDestination.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// NetableLoggingDestination.swift -// Netable -// -// Created by Brendan on 2020-03-12. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -/// Wrapper class for log events emitted by Netable. -public enum LogEvent: CustomDebugStringConvertible { - public struct RequestInfo { - public let urlString: String - public let method: HTTPMethod - public let headers: [String: Any] - public let params: [String: Any]? - } - - /// Print up some debugging info at start. - case startupInfo(baseURL: URL, logDestination: LogDestination) - - /// A generic message, not tied to request state. - case message(StaticString) - - /// Request has failed prior to sucessfully starting a network task for the request - case requestCreationFailed(urlString: String, error: NetableError) - - /// Request has been successfully initiated. - case requestStarted(request: RequestInfo) - - /// Request has sucessfully completed. - /// Note: taskTime only covers the time it took the current network request to run, in retry scenarios the time for the whole request may be longer. - case requestSuccess(request: RequestInfo, taskTime: TimeInterval, statusCode: Int, responseData: Data?, finalizedResult: Any?) - - /// Sent when a request fails but will be retried. Note: taskTime only cover the time it took the current network request to run, in retry scenarios the time for the whole request may be longer. - case requestRetrying(request: RequestInfo, taskTime: TimeInterval, error: NetableError) - - /// Sent when a request fails (and all retries have been compelted, if retries are enabled) - case requestFailed(request: RequestInfo, taskTime: TimeInterval, error: NetableError) - - /// Default overrides, used by the default logging destination. - public var debugDescription: String { - switch self { - case .startupInfo(let baseURL, let logDestination): - return "Netable instance initiated. Here we go! Base URL: \(baseURL.absoluteString). Log Destination: \(logDestination)" - case .message(let message): - return message.description - case .requestCreationFailed(let urlString, let error): - return "Request (\(urlString)) failed: \(error.localizedDescription)" - case .requestStarted(let request): - return "Started \(request.method.rawValue) request... URL: \(request.urlString) Headers: \(request.headers) Params: \(request.params ?? [:])" - case .requestSuccess(let request, _, let statusCode, let responseData, let finalizedResult): - return "Request (\(request.urlString)) completed with status code \(statusCode) Data: \(responseData ?? Data()) Finalized data: \(String(describing: finalizedResult))" - case .requestRetrying(let request, _, let error): - return "Request (\(request.urlString)) retrying: \(error.localizedDescription)" - case .requestFailed(let request, _, let error): - switch error { - case .httpError(let statusCode, let data): - return "Request (\(request.urlString)) failed with status code \(statusCode) Data: \(data ?? Data())" - default: - return "Request (\(request.urlString)) failed: \(error.localizedDescription)" - } - } - } -} - -/// Conform to `LogDestination` to receive and handle log events emitted by Netable. -public protocol LogDestination { - /** - * Log an event emitted by the Netable client. - * - * - Parameter event: The event to log. - */ - func log(event: LogEvent) -} - -/// A default log destination that will print all messages using `debugPrint()` -public final class DefaultLogDestination: LogDestination { - public init() {} - - /* - * Log an event using `debugPrint` - * - * - Parameter event: The event to log. - */ - public func log(event: LogEvent) { - debugPrint(event.debugDescription) - } -} - -/// Log Destination that does not print anywhere. -public final class EmptyLogDestination: LogDestination { - public init() {} - - public func log(event: LogEvent) { - // This page left intentionally blank - } -} diff --git a/Pods/Netable/Netable/Netable/Netable.h b/Pods/Netable/Netable/Netable/Netable.h deleted file mode 100644 index 9e9dcc4..0000000 --- a/Pods/Netable/Netable/Netable/Netable.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// Netable.h -// Netable -// -// Created by Jeremy Chiang on 2020-02-04. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -#import <Foundation/Foundation.h> - -//! Project version number for Netable. -FOUNDATION_EXPORT double NetableVersionNumber; - -//! Project version string for Netable. -FOUNDATION_EXPORT const unsigned char NetableVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import <Netable/PublicHeader.h> - - diff --git a/Pods/Netable/Netable/Netable/Netable.swift b/Pods/Netable/Netable/Netable/Netable.swift deleted file mode 100644 index bfda176..0000000 --- a/Pods/Netable/Netable/Netable/Netable.swift +++ /dev/null @@ -1,270 +0,0 @@ -// -// Netable.swift -// Netable -// -// Created by Nigel Brooke on 2018-10-17. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation -#if canImport(FoundationNetworking) -import FoundationNetworking -#endif -#if canImport(QuartzCore) -import QuartzCore -#else -func CACurrentMediaTime() -> TimeInterval { - return Date.timeIntervalSinceReferenceDate -} -#endif - -open class Netable { - /// The URL session requests are run through. - private let urlSession: URLSession - - /// The base URL of your api endpoint. - public var baseURL: URL - - /// Headers to be sent with each request. - public var headers: [String: String] = [:] - - /// Destination that logs will be printed to during network requests. - public var logDestination: LogDestination - - /// Settings for if / how retries will be handled - public var retryConfiguration: RetryConfiguration - - /// Settings for if / how retries will be handled - private var delayedOperations = DelayedOperations() - - /** - * Create a new instance of `Netable` with a base URL. - * - * - parameter baseURL: The base URL of your endpoint. - * - parameter configuration: Configuration such as timeouts and caching policies for the underlying url session. - */ - public init(baseURL: URL, configuration: URLSessionConfiguration = .ephemeral, logDestination: LogDestination = DefaultLogDestination(), retryConfiguration: RetryConfiguration = RetryConfiguration()) { - self.baseURL = baseURL - self.urlSession = URLSession(configuration: configuration) - self.logDestination = logDestination - self.retryConfiguration = retryConfiguration - - log(.startupInfo(baseURL: baseURL, logDestination: logDestination)) - } - - /** - * Create and send a new request. - * - * - parameter request: The request to send, this has to extend `Request`. - * - parameter completion: Your completion handler for the request. - */ - @discardableResult public func request<T: Request>(_ request: T, completion unsafeCompletion: @escaping (Result<T.FinalResource, NetableError>) -> Void) -> RequestIdentifier { - // Make sure the completion is dispatched on the main thread. - let completion: (Result<T.FinalResource, NetableError>) -> Void = { result in - DispatchQueue.main.async { - unsafeCompletion(result) - } - } - - var urlRequest: URLRequest! - do { - let finalURL = try fullyQualifiedURLFrom(path: request.path) - urlRequest = URLRequest(url: finalURL) - urlRequest.httpMethod = request.method.rawValue - - guard finalURL.scheme?.lowercased() == "https" || finalURL.scheme?.lowercased() == "http" else { - self.log(.message("Only HTTP and HTTPS request are supported currently.")) - throw NetableError.malformedURL - } - - if T.Parameters.self != Empty.self { - try urlRequest.encodeParameters(for: request) - } - } catch { - let netableError = (error as? NetableError) ?? NetableError.unknownError(error) - log(.requestCreationFailed(urlString: request.path, error: netableError)) - completion(.failure(netableError)) - return RequestIdentifier(id: "invalid", session: self) - } - - headers.forEach { key, value in - urlRequest.setValue(value, forHTTPHeaderField: key) - } - - return startRequestTask(request, urlRequest: urlRequest, id: UUID().uuidString, retriesLeft: retryConfiguration.count, completion: completion) - } - - private func startRequestTask<T: Request>(_ request: T, urlRequest: URLRequest, id: String, retriesLeft: UInt, completion: @escaping (Result<T.FinalResource, NetableError>) -> Void) -> RequestIdentifier { - let startTimestamp = CACurrentMediaTime() - - let requestInfo = LogEvent.RequestInfo( - urlString: urlRequest.url?.absoluteString ?? "UNDEFINED", - method: request.method, - headers: urlRequest.allHTTPHeaderFields ?? [:], - params: try? request.parameters.toParameterDictionary(encodingStrategy: request.jsonKeyEncodingStrategy)) - - log(.requestStarted(request: requestInfo)) - - let retryConfiguration = self.retryConfiguration - - let task = urlSession.dataTask(with: urlRequest) { data, response, error in - let time = CACurrentMediaTime() - startTimestamp - - do { - if let error = error { - throw NetableError.requestFailed(error) - } - - guard let response = response as? HTTPURLResponse else { fatalError("Casting response to HTTPURLResponse failed") } - - guard 200...299 ~= response.statusCode else { - throw NetableError.httpError(response.statusCode, data) - } - - let decoded = request.decode(data) - switch decoded { - case .success(let raw): - let finalizedData = request.finalize(raw: raw) - self.log(.requestSuccess(request: requestInfo, taskTime: time, statusCode: response.statusCode, responseData: data, finalizedResult: finalizedData)) - completion(finalizedData) - case .failure(let error): - throw error - } - } catch { - let netableError = (error as? NetableError) ?? NetableError.unknownError(error) - - var allowRetry = true - - // We totally supress retrying cancels (becasue then it would be impossible to cancel a request at all) - // and timeouts (becasue they generally take so long to fail that allowing retries would cause enormous waits, - // might want to relax this eventually if we know a shorter timeout is in use) - if case .requestFailed(let error) = netableError { - let nsError = error as NSError - if nsError.domain == NSURLErrorDomain { - if (nsError.code == NSURLErrorCancelled) || (nsError.code == NSURLErrorTimedOut) { - allowRetry = false - } - } - } - - if allowRetry && retryConfiguration.enabled && retriesLeft > 0 && retryConfiguration.errors.shouldRetry(netableError) { - self.log(.requestRetrying(request: requestInfo, taskTime: time, error: netableError)) - self.delayedOperations.delay(retryConfiguration.delay, withID: id) { - _ = self.startRequestTask(request, urlRequest: urlRequest, id: id, retriesLeft: retriesLeft - 1, completion: completion) - } - } - else { - self.log(.requestFailed(request: requestInfo, taskTime: time, error: netableError)) - completion(.failure(netableError)) - } - } - } - - task.taskDescription = id - task.resume() - - return RequestIdentifier(id: id, session: self) - } - - /** - * Cancel a specific ongoing request. - * - * - parameter request: The request to cancel. - */ - open func cancel(byId taskId: RequestIdentifier) { - guard taskId.session == self else { - fatalError("Attempted to cancel a task from a different Netable session") - } - - self.log(.message("Cancelling request by task identifier.")) - - if delayedOperations.cancel(taskId.id) { - self.log(.message("Cancelled delayed retry task.")) - return - } - - urlSession.getAllTasks { tasks in - guard let task = tasks.first(where: { $0.taskDescription == taskId.id }) else { - self.log(.message("Failed to cancel request, no request with that id was found.")) - return - } - self.log(.message("Task cancelled.")) - task.cancel() - } - } - - /** - * Cancel any ongoing requests. - */ - open func cancelAllTasks() { - delayedOperations.cancelAll() - - urlSession.getAllTasks { tasks in - self.log(.message("Cancelling all ongoing tasks.")) - for task in tasks { - task.cancel() - } - } - } - - // MARK: Private Helper Functions - - /** - * Helper function for logging, to avoid having to reference the log destination everywhere and so we can possibly change the semantics of, - * for example, what thread these are dispatched on later. - * - * - parameter event: The event to log - * - */ - internal func log(_ event: LogEvent) { - if Thread.isMainThread { - self.logDestination.log(event: event) - } else { - DispatchQueue.main.async { - self.logDestination.log(event: event) - } - } - } - - /** - * Make the provided path into a fully qualified URL. It may be invalid or partially qualified. - * - * - parameter path: The request path to qualify. - * - * - Throws: `NetableError` if the provided URL is invalid and unable to be corrected. - * - * - returns: A fully qualified URL if successful, an `Error` if not. - */ - internal func fullyQualifiedURLFrom(path: String) throws -> URL { - // Make sure the url is a well formed path. - guard let url = URL(string: path) else { - throw NetableError.malformedURL - } - - let finalURL: URL - - if url.scheme != nil { - // Fully qualified URL, check it's okay. - finalURL = url - - guard finalURL.absoluteString.hasPrefix(baseURL.absoluteString) else { - throw NetableError.wrongServer - } - } else { - // Partially qualified URL, add baseURL. - guard let combinedURL = URL(string: path, relativeTo: baseURL) else { - throw NetableError.malformedURL - } - - finalURL = combinedURL - } - - return finalURL - } -} - -extension Netable: Equatable { - public static func == (lhs: Netable, rhs: Netable) -> Bool { - lhs.urlSession == rhs.urlSession - } -} diff --git a/Pods/Netable/Netable/Netable/Request.swift b/Pods/Netable/Netable/Netable/Request.swift deleted file mode 100644 index 7d8f85b..0000000 --- a/Pods/Netable/Netable/Netable/Request.swift +++ /dev/null @@ -1,106 +0,0 @@ -// -// Request.swift -// Netable -// -// Created by Brendan Lensink on 2018-10-18. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -/// The Request protocol defines the structure for any network requests run through Netable. -public protocol Request { - /// Parameters will be encoded and sent along with the request. - associatedtype Parameters: Encodable - - /// The raw data returned by the server from the request. - associatedtype RawResource: Any - - /// An optional convienience type that allows for unwrapping of raw data to a predefined type. - /// See `GetCatRequest` for a demonstration of this in action. - associatedtype FinalResource: Any = RawResource - - /// HTTP method the request will use. Currently GET, POST, PUT and PATCH are supported. - var method: HTTPMethod { get } - - /// The path for this request, relative to the base URL defined when you created your Netable instance. - var path: String { get } - - /// Parameters to be encoded and sent with the request. - var parameters: Parameters { get } - - /// Optional: The key decoding strategy to be used when decoding return JSON. - var jsonKeyDecodingStrategy: JSONDecoder.KeyDecodingStrategy { get } - - /// Optional: The key encoding strategy to be used when encoding JSON parameters. - var jsonKeyEncodingStrategy: JSONEncoder.KeyEncodingStrategy { get } - - /// Optional: The method to decode Data into your RawResource - func decode(_ data: Data?) -> Result<RawResource, NetableError> - - /// Optional: The method to convert your RawResource returned by the server to FinalResource. - func finalize(raw: RawResource) -> Result<FinalResource, NetableError> -} - -public extension Request where Parameters == Empty { - /// Don't require filling in parameters for requests that don't send any. - var parameters: Parameters { - return Empty() - } -} - -public extension Request { - /// Set the default key decoding strategy. - var jsonKeyDecodingStrategy: JSONDecoder.KeyDecodingStrategy { - return .useDefaultKeys - } - - /// Set the default key encoding strategy. - var jsonKeyEncodingStrategy: JSONEncoder.KeyEncodingStrategy { - return .useDefaultKeys - } -} - -public extension Request where FinalResource == RawResource { - /// By default, `finalize` just returns the RawResource. - func finalize(raw: RawResource) -> Result<FinalResource, NetableError> { - return .success(raw) - } -} - -public extension Request where RawResource: Decodable { - func decode(_ data: Data?) -> Result<RawResource, NetableError> { - do { - let decoder = JSONDecoder() - decoder.dateDecodingStrategy = .iso8601 - decoder.keyDecodingStrategy = jsonKeyDecodingStrategy - - if RawResource.self == Empty.self { - let raw = try decoder.decode(RawResource.self, from: Empty.data) - return .success(raw) - } else if let data = data { - let raw = try decoder.decode(RawResource.self, from: data) - return .success(raw) - } else { - return .failure(.noData) - } - } catch { - let error = NetableError.decodingError(error, data) - return .failure(error) - } - } -} - -public extension Request where RawResource == Data { - func decode(_ data : Data?) -> Result<RawResource, NetableError> { - if let data = data { - return .success(data) - } else { - return .failure(.noData) - } - } -} - -public struct Empty: Codable { - public static let data = "{}".data(using: .utf8)! -} diff --git a/Pods/Netable/Netable/Netable/RequestIdentifier.swift b/Pods/Netable/Netable/Netable/RequestIdentifier.swift deleted file mode 100644 index c5bd5ec..0000000 --- a/Pods/Netable/Netable/Netable/RequestIdentifier.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// RequestIdentifier.swift -// Netable -// -// Created by Brendan on 2020-04-03. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -/// Wrapper for `taskIdentifier` used to manage active requests. -public struct RequestIdentifier { - /// Unique task id to identify a request - internal let id: String - - /// A reference to the Netable session that started the request. - /// Keep track of this to prevent accidental misuse of `Netable.cancel`. - internal weak var session: Netable? - - /* - * Cancel an ongoing request without needing to store a reference to the `Netable` instance. - */ - public func cancel() { - session?.cancel(byId: self) - } -} diff --git a/Pods/Netable/Netable/Netable/RetryConfiguration.swift b/Pods/Netable/Netable/Netable/RetryConfiguration.swift deleted file mode 100644 index 481298a..0000000 --- a/Pods/Netable/Netable/Netable/RetryConfiguration.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// RetryConfiguration.swift -// Netable -// -// Created by Nigel Brooke on 2020-06-30. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -public struct RetryConfiguration { - /// Specify types of networking errors to retry - public enum Errors { - /// No retries will happen - case none - - /// Retry all errors that occur as part of a attempted network request, including network failures and all non-200 HTTP responses (failures like malformed URLs, as well as intentional cancellations, and network timeouts will still not be retried) - case all - - /// Retry any physical networking errors, other than timeouts - case transport - - /// Test the errors with a user supplied closure. Custom errors are limited in the same way that ".all" is, there are certain types of errors (request formatting errors, cancellation, network timeouts) that this will NOT be called for and there is no option to retry. Note: will be called on a background thread so closure must be thread safe - case custom(retryTest: (NetableError) -> Bool) - - internal func shouldRetry(_ error: NetableError) -> Bool { - switch self { - case .none: - return false - case .all: - return true - case .transport: - switch error { - case .requestFailed: - return true - default: - return false - } - case .custom(let test): - return test(error) - } - } - } - - /// Which networking errors should be retried - public let errors: Errors - - /// How many times to rety before giving up and failing for good - public let count: UInt - - /// Delay time between retry attempts - public let delay: TimeInterval - - public init(errors: Errors = .transport, count: UInt = 2, delay: TimeInterval = 5.0 ) { - self.errors = errors - self.count = count - self.delay = delay - } - - internal var enabled: Bool { - switch errors { - case .none: - return false - default: - return count > 0 - } - } -} diff --git a/Pods/Netable/Netable/Netable/URLRequest+EncodeParameters.swift b/Pods/Netable/Netable/Netable/URLRequest+EncodeParameters.swift deleted file mode 100644 index 1337fac..0000000 --- a/Pods/Netable/Netable/Netable/URLRequest+EncodeParameters.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// URLRequest+EncodeParameters.swift -// Netable -// -// Created by Brendan Lensink on 2018-10-26. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation -#if canImport(FoundationNetworking) -import FoundationNetworking -#endif - -extension Encodable { - /** - * Convenience function to transform `Encodable` parameters into Dictionaries. - * Does NOT currently support nested collections. - * - * - Throws: `NetableError` if the parameters can't be unwrapped or there are nested collections. - * - * - parameter encodingStrategy: The key encoding strategy to use while encoding parameters - * - * - Returns: A [String: String] dictionary of the parameters. - */ - func toParameterDictionary(encodingStrategy: JSONEncoder.KeyEncodingStrategy) throws -> [String: String] { - do { - let encoder = JSONEncoder() - encoder.keyEncodingStrategy = encodingStrategy - let paramsData = try encoder.encode(self) - - guard - let params = try? JSONSerialization.jsonObject(with: paramsData), - let paramsDictionary = params as? [String: Any] - else { - throw NetableError.codingError("Failed to unwrap parameter dictionary") - } - - // Make sure that our encoded dictionary doesn't contain any nested collections. - for (_, value) in paramsDictionary where - (value as? [Any]) != nil || - (value as? [AnyHashable: Any]) != nil { - throw NetableError.codingError("Cannot encode nested collections") - } - - // Convert anything that isn't a string to a string. - let stringsOnlyDictionary: [String: String] = paramsDictionary.mapValues { value -> String in - "\(value)" - } - - return stringsOnlyDictionary - } catch { - throw NetableError.codingError(error.localizedDescription) - } - } -} - -extension URLRequest { - /** - * Encode the parameters for a request base on its `HTTPMethod`. - * - * - Parameter request: The request to attach parameters to. - * - * - Throws: `NetableError` if parameter encoding fails. - */ - mutating func encodeParameters<T: Request>(for request: T) throws { - switch request.method { - case .get: - do { - guard let url = url, - var components = URLComponents(url: url, resolvingAgainstBaseURL: true) else { - throw NetableError.codingError("Encoding Error: Failed to unwrap url components") - } - - let paramsDictionary = try request.parameters.toParameterDictionary(encodingStrategy: request.jsonKeyEncodingStrategy) - components.queryItems = paramsDictionary.map { - URLQueryItem(name: $0, value: $1) - } - - self.url = components.url - } catch { - throw NetableError.codingError("Encoding Error: Failed to create url parameters: \(error)") - } - case .post: - do { - if request is MultipartFormData { - try setMultipartFormData(try request.parameters.toParameterDictionary(encodingStrategy: request.jsonKeyEncodingStrategy)) - } else if request is UrlEncodedFormData { - setUrlEncodedFormData(try request.parameters.toParameterDictionary(encodingStrategy: request.jsonKeyEncodingStrategy)) - } else { - fallthrough - } - } catch { - throw NetableError.codingError("Encoding Error: Failed to create request body: \(error.localizedDescription)") - } - default: - setValue("application/json", forHTTPHeaderField: "Content-Type") - - do { - httpBody = try JSONEncoder().encode(request.parameters) - } catch { - throw NetableError.codingError("Encoding Error: Failed to create request body: \(error.localizedDescription)") - } - } - } -} diff --git a/Pods/Netable/Netable/Netable/URLRequest+EncodeURL.swift b/Pods/Netable/Netable/Netable/URLRequest+EncodeURL.swift deleted file mode 100644 index 1f6d209..0000000 --- a/Pods/Netable/Netable/Netable/URLRequest+EncodeURL.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// URLRequest+EncodeURL.swift -// Netable -// -// Created by Jeremy Chiang on 2020-02-04. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation - -public protocol UrlEncodedFormData { } -#if canImport(FoundationNetworking) -import FoundationNetworking -#endif - -extension URLRequest { - /** - * Escape any unsafe characters within the given string bit percent encoding. - * - * - Parameter string: The string to encode. - * - * - Returns: The string with all dangerous characters percent encoded. - */ - private func percentEscapeString(_ string: String) -> String { - var characterSet = CharacterSet.alphanumerics - characterSet.insert(charactersIn: "-._* ") - - return string - .addingPercentEncoding(withAllowedCharacters: characterSet)! - .replacingOccurrences(of: " ", with: "+") - .replacingOccurrences(of: " ", with: "+", options: [], range: nil) - } - - /** - * Encodes the given parameters into the request. - * - * - Parameter parameters: The parameters to be encoded into the URLRequest. - */ - public mutating func setUrlEncodedFormData(_ parameters: [String: String]) { - httpMethod = "POST" - - addValue("application/json, text/plain, */*", forHTTPHeaderField: "Accept") - addValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") - - let parameterArray = parameters.map { arg -> String in - let (key, value) = arg - return "\(key)=\(self.percentEscapeString(value))" - } - - httpBody = parameterArray.joined(separator: "&").data(using: String.Encoding.utf8) - } -} diff --git a/Pods/Netable/Netable/Netable/URLRequest+Multipart.swift b/Pods/Netable/Netable/Netable/URLRequest+Multipart.swift deleted file mode 100644 index cfcba3d..0000000 --- a/Pods/Netable/Netable/Netable/URLRequest+Multipart.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// URLRequest+Multipart.swift -// Netable -// -// Created by Jeremy Chiang on 2020-02-04. -// Copyright © 2020 Steamclock Software. All rights reserved. -// - -import Foundation -#if canImport(FoundationNetworking) -import FoundationNetworking -#endif - -/// Any errors thrown while encoding `multipart/form-data` infomation will conform to this. -public enum MultipartFormDataEncodingError: Error { - /// Failed to encode a name. - case name(String) - - /// Failed to encode a value. - case value(String, name: String) -} - -public protocol MultipartFormData { } - -extension URLRequest { - /** - * Configures the URL request for `multipart/form-data`. - * The request's `httpBody` is set, and a value is set for the HTTP header field `Content-Type`. - * - * - Parameter parameters: The form data to set. - * - Parameter encoding: The encoding to use for the keys and values. - * - * - Throws: `MultipartFormDataEncodingError` if any keys or values in `parameters` are not entirely in `encoding`. - * - * - Note: The default `httpMethod` is `GET`, and `GET` requests do not typically have a response body. Remember to set the `httpMethod` to e.g. `POST` before sending the request. - * - * - Seealso: https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#multipart-form-data - */ - public mutating func setMultipartFormData(_ parameters: [String: String]) throws { - let makeRandom = { UInt32.random(in: (.min)...(.max)) } - let boundary = String(format: "------------------------%08X%08X", makeRandom(), makeRandom()) - - let contentType = "multipart/form-data; charset=utf-8; boundary=\(boundary)" - addValue(contentType, forHTTPHeaderField: "Content-Type") - - httpBody = try { - var body = Data() - - for (rawName, rawValue) in parameters { - if !body.isEmpty { - body.append("\r\n".data(using: .utf8)!) - } - - body.append("--\(boundary)\r\n".data(using: .utf8)!) - - guard - rawName.canBeConverted(to: .utf8), - let disposition = "Content-Disposition: form-data; name=\"\(rawName)\"\r\n".data(using: .utf8) else { - throw MultipartFormDataEncodingError.name(rawName) - } - body.append(disposition) - - body.append("\r\n".data(using: .utf8)!) - - guard let value = rawValue.data(using: .utf8) else { - throw MultipartFormDataEncodingError.value(rawValue, name: rawName) - } - - body.append(value) - } - - body.append("\r\n--\(boundary)--\r\n".data(using: .utf8)!) - - return body - }() - } -} diff --git a/Pods/Netable/README.md b/Pods/Netable/README.md deleted file mode 100644 index 716f142..0000000 --- a/Pods/Netable/README.md +++ /dev/null @@ -1,168 +0,0 @@ -![](header.png) - -[![Swift Package Manager compatible](https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg)](https://github.com/apple/swift-package-manager)[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/Netable.svg)](https://img.shields.io/cocoapods/v/Netable.svg) [![Platform](https://img.shields.io/cocoapods/p/Netable.svg?style=flat)](http://cocoapods.org/pods/Netable) - -Modern apps interact with a lot of different APIs. Netable makes that easier by providing a simple interface for using those APIs to drive high quality iOS and MacOS apps, built on Swift `Codable`, while still supporting non-standard and unusual APIs when need be. - -- [Features](#features) -- [Usage](#usage) -- [Example](#example) -- [Requirements](#requirements) -- [Installation](#installation) -- [License](#license) - -## Features - -Netable's core philosophy is to ensure that developers can write simple code for simple APIS, while providing various options for wrangling strange or non-standard APIs. -1. Every request is an independent type - 1. Facilitates breaking up requests into separate files, avoiding monolithic networking classes -1. `Codable`-based `Result` return types - 1. Easy interfacing between model and controller layers - 1. Reduces need for wrapper types -1. Can automatically convert request responses into usable objects -1. Easily integrates with existing logging libraries, or logs to `debugPrint` by default -1. Comprehensive error types make handling expected and unexpected errors painless - -## Usage - -### Standard Usage - -#### Make a new instance of `Netable`, and pass in your base URL: -```swift -let netable = Netable(baseURL: URL(string: "https://api.thecatapi.com/v1/")!) -``` - -#### Extend `Request` -```swift -struct CatImage: Decodable { - let id: String - let url: String -} - -struct GetCatImages: Request { - typealias Parameters = [String: String] - typealias RawResource = [CatImage] - - public var method: HTTPMethod { return .get } - - public var path: String { - return "images/search" - } - - public var parameters: [String: String] { - return ["mime_type": "jpg,png", "limit": "2"] - } -} -``` - -#### Make your request and handle the result: - -```swift -netable.request(GetCatImages()) { result in - switch result { - case .success(let catImages): - if let firstCat = catImages.first, - let url = URL(string: firstCat.url), - let imageData = try? Data(contentsOf: url) { - self.catsImageView1.image = UIImage(data: imageData) - } - - if let lastCat = catImages.last, - let url = URL(string: lastCat.url), - let imageData = try? Data(contentsOf: url) { - self.catsImageView2.image = UIImage(data: imageData) - } - case .failure(let error): - let alert = UIAlertController( - title: "Uh oh!", - message: "Get cats request failed with error: \(error)", - preferredStyle: .alert - ) - - alert.addAction(UIAlertAction(title: "OK", style: .cancel)) - self.present(alert, animated: true, completion: nil) - } -} -``` - -### Resource Extraction - -#### Have your request object handle extracting a usable object from the raw resource - -```swift -struct CatImage: Decodable { - let id: String - let url: String -} - -struct GetCatImageURL: Request { - typealias Parameters = [String: String] - typealias RawResource = [CatImage] - typealias FinalResource = URL - - // ... - - func finalize(raw: RawResource) -> Result<FinalResource, NetableError> { - guard let catImage = raw.first else { - return .failure(NetableError.resourceExtractionError("The CatImage array is empty")) - } - - guard let url = URL(string: catImage.url) else { - return .failure(NetableError.resourceExtractionError("Could not build URL from CatImage url string")) - } - - return .success(url) - } -} -``` - -#### Leave your network code to deal with the important stuff - -```swift -netable.request(GetCatImageURL()) { result in - switch result { - case .success(let catUrl): - guard let imageData = try? Data(contentsOf: catUrl) else { - return - } - - self.imageView.image = UIImage(data: imageData) - case .failure(let error): - // ... - } -} -``` - -### Full Documentation - -[In-depth documentation](https://steamclock.github.io/netable/) is provided through Jazzy and GitHub Pages. - -## Example - -To run the example project, clone the repo, and run `pod install` from inside the Example directory first. - -## Requirements - -- iOS 10.0+ -- MacOS 10.15+ -- Xcode 11.0+ - -## Installation - -Netable is available through **[Swift Package Manager](https://swift.org/package-manager/)**. To install it, follow these steps: - -1. In Xcode, click **File**, then **Swift Package Manager**, then **Add Package Dependency** -2. Choose your project -3. Enter this URL in the search bar `https://github.com/steamclock/netable.git` - -Netable is also available through **[CocoaPods](https://cocoapods.org/pods/Netable)**. To install -it, simply add the following line to your Podfile: - -```ruby -pod 'Netable' -``` -Then run `pod install`. - -## License - -Netable is available under the MIT license. See the [License.md](https://github.com/steamclock/netable/blob/master/LICENSE.md) for more info. diff --git a/Pods/ObjcExceptionBridging/LICENSE.txt b/Pods/ObjcExceptionBridging/LICENSE.txt deleted file mode 100644 index 58aaa4d..0000000 --- a/Pods/ObjcExceptionBridging/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Pods/ObjcExceptionBridging/README.md b/Pods/ObjcExceptionBridging/README.md deleted file mode 100644 index aeddc91..0000000 --- a/Pods/ObjcExceptionBridging/README.md +++ /dev/null @@ -1,583 +0,0 @@ -![XCGLogger][xcglogger-logo] - -[![badge-language]][swift.org] -[![badge-platforms]][swift.org] -[![badge-license]][license] - -[![badge-travis]][travis] -[![badge-swiftpm]][swiftpm] -[![badge-cocoapods]][cocoapods-xcglogger] -[![badge-carthage]][carthage] - -[![badge-sponsors]][cerebral-gardens] -[![badge-twitter]][twitter-davewoodx] - -## tl;dr -XCGLogger is the original debug log module for use in Swift projects. - -Swift does not include a C preprocessor so developers are unable to use the debug log `#define` macros they would use in Objective-C. This means our traditional way of generating nice debug logs no longer works. Resorting to just plain old `print` calls means you lose a lot of helpful information, or requires you to type a lot more code. - -XCGLogger allows you to log details to the console (and optionally a file, or other custom destinations), just like you would have with `NSLog()` or `print()`, but with additional information, such as the date, function name, filename and line number. - -Go from this: - -```Simple message``` - -to this: - -```2014-06-09 06:44:43.600 [Debug] [AppDelegate.swift:40] application(_:didFinishLaunchingWithOptions:): Simple message``` - -#### Example -<img src="https://raw.githubusercontent.com/DaveWoodCom/XCGLogger/master/ReadMeImages/SampleLog.png" alt="Example" style="width: 690px;" /> - -### Communication _(Hat Tip AlamoFire)_ - -* If you need help, use [Stack Overflow][stackoverflow] (Tag '[xcglogger][stackoverflow]'). -* If you'd like to ask a general question, use [Stack Overflow][stackoverflow]. -* If you've found a bug, open an issue. -* If you have a feature request, open an issue. -* If you want to contribute, submit a pull request. -* If you use XCGLogger, please Star the project on [GitHub][github-xcglogger] - -## Installation - -### Git Submodule - -Execute: - -```git submodule add https://github.com/DaveWoodCom/XCGLogger.git``` - -in your repository folder. - -### [Carthage][carthage] - -Add the following line to your `Cartfile`. - -```github "DaveWoodCom/XCGLogger" ~> 5.0.1``` - -Then run `carthage update --no-use-binaries` or just `carthage update`. For details of the installation and usage of Carthage, visit [it's project page][carthage]. - -### [CocoaPods][cocoapods] - -Add something similar to the following lines to your `Podfile`. You may need to adjust based on your platform, version/branch etc. - -``` -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '8.0' -use_frameworks! - -pod 'XCGLogger', '~> 5.0.1' -``` - -Specifying the pod `XCGLogger` on its own will include the core framework. We're starting to add subspecs to allow you to include optional components as well: - -`pod 'XCGLogger/UserInfoHelpers', '~> 5.0.1'`: Include some experimental code to help deal with using UserInfo dictionaries to tag log messages. - -Then run `pod install`. For details of the installation and usage of CocoaPods, visit [it's official web site][cocoapods]. - -### [Swift Package Manager][swiftpm] - -Add the following entry to your package's dependencies: - -``` -.Package(url: "https://github.com/DaveWoodCom/XCGLogger.git", majorVersion: 5) -``` - -### Backwards Compatibility - -Use: -* XCGLogger version [5.0.1][xcglogger-5.0.1] for Swift 3.0-3.1 -* XCGLogger version [3.6.0][xcglogger-3.6.0] for Swift 2.3 -* XCGLogger version [3.5.3][xcglogger-3.5.3] for Swift 2.2 -* XCGLogger version [3.2][xcglogger-3.2] for Swift 2.0-2.1 -* XCGLogger version [2.x][xcglogger-2.x] for Swift 1.2 -* XCGLogger version [1.x][xcglogger-1.x] for Swift 1.1 and below. - -## Basic Usage (Quick Start) - -_This quick start method is intended just to get you up and running with the logger. You should however use the [advanced usage below](#advanced-usage-recommended) to get the most out of this library._ - -Add the XCGLogger project as a subproject to your project, and add the appropriate library as a dependancy of your target(s). -Under the `General` tab of your target, add `XCGLogger.framework` and `ObjcExceptionBridging.framework` to the `Embedded Binaries` section. - -Then, in each source file: - -```Swift -import XCGLogger -``` - -In your AppDelegate (or other global file), declare a global constant to the default XCGLogger instance. - -```Swift -let log = XCGLogger.default -``` - -In the -```Swift -application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) // iOS, tvOS -``` - -or - -```Swift -applicationDidFinishLaunching(_ notification: Notification) // macOS -``` - -function, configure the options you need: - -```Swift -log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: "path/to/file", fileLevel: .debug) -``` - -The value for `writeToFile:` can be a `String` or `URL`. If the file already exists, it will be cleared before we use it. Omit the parameter or set it to `nil` to log to the console only. You can optionally set a different log level for the file output using the `fileLevel:` parameter. Set it to `nil` or omit it to use the same log level as the console. - -Then, whenever you'd like to log something, use one of the convenience methods: - -```Swift -log.verbose("A verbose message, usually useful when working on a specific problem") -log.debug("A debug message") -log.info("An info message, probably useful to power users looking in console.app") -log.warning("A warning message, may indicate a possible error") -log.error("An error occurred, but it's recoverable, just info about what happened") -log.severe("A severe error occurred, we are likely about to crash now") -``` - -The different methods set the log level of the message. XCGLogger will only print messages with a log level that is greater to or equal to it's current log level setting. So a logger with a level of `.error` will only output log messages with a level of `.error`, or `.severe`. - -## Advanced Usage (Recommended) - -XCGLogger aims to be simple to use and get you up and running quickly with as few as 2 lines of code above. But it allows for much greater control and flexibility. - -A logger can be configured to deliver log messages to a variety of destinations. Using the basic setup above, the logger will output log messages to the standard Xcode debug console, and optionally a file if a path is provided. It's quite likely you'll want to send logs to more interesting places, such as the Apple System Console, a database, third party server, or another application such as [NSLogger][NSLogger]. This is accomplished by adding the destination to the logger. - -Here's an example of configuring the logger to output to the Apple System Log as well as a file. - -```Swift -// Create a logger object with no destinations -let log = XCGLogger(identifier: "advancedLogger", includeDefaultDestinations: false) - -// Create a destination for the system console log (via NSLog) -let systemDestination = AppleSystemLogDestination(identifier: "advancedLogger.systemDestination") - -// Optionally set some configuration options -systemDestination.outputLevel = .Debug -systemDestination.showLogIdentifier = false -systemDestination.showFunctionName = true -systemDestination.showThreadName = true -systemDestination.showLevel = true -systemDestination.showFileName = true -systemDestination.showLineNumber = true -systemDestination.showDate = true - -// Add the destination to the logger -log.add(destination: systemDestination) - -// Create a file log destination -let fileDestination = FileDestination(writeToFile: "/path/to/file", identifier: "advancedLogger.fileDestination") - -// Optionally set some configuration options -fileDestination.outputLevel = .Debug -fileDestination.showLogIdentifier = false -fileDestination.showFunctionName = true -fileDestination.showThreadName = true -fileDestination.showLevel = true -fileDestination.showFileName = true -fileDestination.showLineNumber = true -fileDestination.showDate = true - -// Process this destination in the background -fileDestination.logQueue = XCGLogger.logQueue - -// Add the destination to the logger -log.add(destination: fileDestination) - -// Add basic app info, version info etc, to the start of the logs -log.logAppDetails() -``` - -You can configure each log destination with different options depending on your needs. - -Another common usage pattern is to have multiple loggers, perhaps one for UI issues, one for networking, and another for data issues. - -Each log destination can have its own log level. As a convenience, you can set the log level on the log object itself and it will pass that level to each destination. Then set the destinations that need to be different. - -**Note**: A destination object can only be added to one logger object, adding it to a second will remove it from the first. - -### Initialization Using A Closure - -Alternatively you can use a closure to initialize your global variable, so that all initialization is done in one place -```Swift -let log: XCGLogger = { - let log = XCGLogger(identifier: "advancedLogger", includeDefaultDestinations: false) - - // Customize as needed - - return log -}() -``` - -**Note**: This creates the log object lazily, which means it's not created until it's actually needed. This delays the initial output of the app information details. Because of this, I recommend forcing the log object to be created at app launch by adding the line `let _ = log` at the top of your `didFinishLaunching` method if you don't already log something on app launch. - -### Log Anything - -You can log strings: - -```Swift -log.debug("Hi there!") -``` - -or pretty much anything you want: - -```Swift -log.debug(true) -log.debug(CGPoint(x: 1.1, y: 2.2)) -log.debug(MyEnum.Option) -log.debug((4, 2)) -log.debug(["Device": "iPhone", "Version": 7]) -``` - -### Filtering Log Messages - -New to XCGLogger 4, you can now create filters to apply to your logger (or to specific destinations). Create and configure your filters (examples below), and then add them to the logger or destination objects by setting the optional `filters` property to an array containing the filters. Filters are applied in the order they exist in the array. During processing, each filter is asked if the log message should be excluded from the log. If any filter excludes the log message, it's excluded. Filters have no way to reverse the exclusion of another filter. - -If a destination's `filters` property is `nil`, the log's `filters` property is used instead. To have one destination log everything, while having all other destinations filter something, add the filters to the log object and set the one destination's `filters` property to an empty array `[]`. - -**Note**: Unlike destinations, you can add the same filter object to multiple loggers and/or multiple destinations. - -#### Filter by Filename - -To exclude all log messages from a specific file, create an exclusion filter like so: - -```Swift -log.filters = [FileNameFilter(excludeFrom: ["AppDelegate.swift"], excludePathWhenMatching: true)] -``` - -`excludeFrom:` takes an `Array<String>` or `Set<String>` so you can specify multiple files at the same time. - -`excludePathWhenMatching:` defaults to `true` so you can omit it unless you want to match path's as well. - -To include log messages only for a specific set to files, create the filter using the `includeFrom:` initializer. It's also possible to just toggle the `inverse` property to flip the exclusion filter to an inclusion filter. - -#### Filter by Tag - -In order to filter log messages by tag, you must of course be able to set a tag on the log messages. Each log message can now have additional, user defined data attached to them, to be used by filters (and/or formatters etc). This is handled with a `userInfo: Dictionary<String, Any>` object. The dictionary key should be a namespaced string to avoid collisions with future additions. Official keys will begin with `com.cerebralgardens.xcglogger`. The tag key can be accessed by `XCGLogger.Constants.userInfoKeyTags`. You definitely don't want to be typing that, so feel free to create a global shortcut: `let tags = XCGLogger.Constants.userInfoKeyTags`. Now you can easily tag your logs: - -```Swift -let sensitiveTag = "Sensitive" -log.debug("A tagged log message", userInfo: [tags: sensitiveTag]) -``` - -The value for tags can be an `Array<String>`, `Set<String>`, or just a `String`, depending on your needs. They'll all work the same way when filtered. - -Depending on your workflow and usage, you'll probably create faster methods to set up the `userInfo` dictionary. See [below](#mixing-and-matching) for other possible shortcuts. - -Now that you have your logs tagged, you can filter easily: - -```Swift -log.filters = [TagFilter(excludeFrom: [sensitiveTag])] -``` - -Just like the `FileNameFilter`, you can use `includeFrom:` or toggle `inverse` to include only log messages that have the specified tags. - -#### Filter by Developer - -Filtering by developer is exactly like filtering by tag, only using the `userInfo` key of `XCGLogger.Constants.userInfoKeyDevs`. In fact, both filters are subclasses of the `UserInfoFilter` class that you can use to create additional filters. See [Extending XCGLogger](#extending-xcglogger) below. - -#### Mixing and Matching - -In large projects with multiple developers, you'll probably want to start tagging log messages, as well as indicate the developer that added the message. - -While extremely flexible, the `userInfo` dictionary can be a little cumbersome to use. There are a few possible methods you can use to simply things. I'm still testing these out myself so they're not officially part of the library yet (I'd love feedback or other suggestions). - -I have created some experimental code to help create the UserInfo dictionaries. (Include the optional `UserInfoHelpers` subspec if using CocoaPods). Check the iOS Demo app to see it in use. - -There are two structs that conform to the `UserInfoTaggingProtocol` protocol. `Tag` and `Dev`. - -You can create an extension on each of these that suit your project. For example: - -```Swift -extension Tag { - static let sensitive = Tag("sensitive") - static let ui = Tag("ui") - static let data = Tag("data") -} - -extension Dev { - static let dave = Dev("dave") - static let sabby = Dev("sabby") -} -``` - -Along with these types, there's an overloaded operator `|` that can be used to merge them together into a dictionary compatible with the `UserInfo:` parameter of the logging calls. - -Then you can log messages like this: - -```Swift -log.debug("A tagged log message", userInfo: Dev.dave | Tag.sensitive) -``` - -There are some current issues I see with these `UserInfoHelpers`, which is why I've made it optional/experimental for now. I'd love to hear comments/suggestions for improvements. - -1. The overloaded operator `|` merges dictionaries so long as there are no `Set`s. If one of the dictionaries contains a `Set`, it'll use one of them, without merging them. Preferring the left hand side if both sides have a set for the same key. -2. Since the `userInfo:` parameter needs a dictionary, you can't pass in a single Dev or Tag object. You need to use at least two with the `|` operator to have it automatically convert to a compatible dictionary. If you only want one Tag for example, you must access the `.dictionary` parameter manually: `userInfo: Tag("Blah").dictionary`. - -### Selectively Executing Code - -All log methods operate on closures. Using the same syntactic sugar as Swift's `assert()` function, this approach ensures we don't waste resources building log messages that won't be output anyway, while at the same time preserving a clean call site. - -For example, the following log statement won't waste resources if the debug log level is suppressed: - -```Swift -log.debug("The description of \(thisObject) is really expensive to create") -``` - -Similarly, let's say you have to iterate through a loop in order to do some calculation before logging the result. In Objective-C, you could put that code block between `#if` `#endif`, and prevent the code from running. But in Swift, previously you would need to still process that loop, wasting resources. With `XCGLogger` it's as simple as: - -```Swift -log.debug { - var total = 0.0 - for receipt in receipts { - total += receipt.total - } - - return "Total of all receipts: \(total)" -} -``` - -In cases where you wish to selectively execute code without generating a log line, return `nil`, or use one of the methods: `verboseExec`, `debugExec`, `infoExec`, `warningExec`, `errorExec`, and `severeExec`. - -### Custom Date Formats - -You can create your own `DateFormatter` object and assign it to the logger. - -```Swift -let dateFormatter = DateFormatter() -dateFormatter.dateFormat = "MM/dd/yyyy hh:mma" -dateFormatter.locale = Locale.current -log.dateFormatter = dateFormatter -``` - -### Enhancing Log Messages With Colour - -XCGLogger supports adding formatting codes to your log messages to enable colour in various places. The original option was to use the [XcodeColors plug-in][XcodeColors]. However, Xcode 8 no longer officially supports plug-ins. You can still view your logs in colour, just not in Xcode 8 at the moment ([see note below](#restore-plug-in-support)). You can still use Xcode 7 if desired (after adding the Swift 3 toolchain), or you can use the new ANSI colour support to add colour to your fileDestination objects and view your logs via a terminal window. This gives you some extra options such as adding Bold, Italics, or (please don't) Blinking! - -Once enabled, each log level can have its own colour. These colours can be customized as desired. If using multiple loggers, you could alternatively set each logger to its own colour. - -An example of setting up the ANSI formatter: - -```Swift -if let fileDestination: FileDestination = log.destination(withIdentifier: XCGLogger.Constants.fileDestinationIdentifier) as? FileDestination { - let ansiColorLogFormatter: ANSIColorLogFormatter = ANSIColorLogFormatter() - ansiColorLogFormatter.colorize(level: .verbose, with: .colorIndex(number: 244), options: [.faint]) - ansiColorLogFormatter.colorize(level: .debug, with: .black) - ansiColorLogFormatter.colorize(level: .info, with: .blue, options: [.underline]) - ansiColorLogFormatter.colorize(level: .warning, with: .red, options: [.faint]) - ansiColorLogFormatter.colorize(level: .error, with: .red, options: [.bold]) - ansiColorLogFormatter.colorize(level: .severe, with: .white, on: .red) - fileDestination.formatters = [ansiColorLogFormatter] -} -``` - -As with filters, you can use the same formatter objects for multiple loggers and/or multiple destinations. If a destination's `formatters` property is `nil`, the logger's `formatters` property will be used instead. - -See [Extending XCGLogger](#extending-xcglogger) below for info on creating your own custom formatters. - -### Alternate Configurations - -By using Swift build flags, different log levels can be used in debugging versus staging/production. -Go to Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags and add `-DDEBUG` to the Debug entry. - -```Swift -#if DEBUG - log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) -#else - log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) -#endif -``` - -You can set any number of options up in a similar fashion. See the updated iOSDemo app for an example of using different log destinations based on options, search for `USE_NSLOG`. - -### Background Log Processing - -By default, the supplied log destinations will process the logs on the thread they're called on. This is to ensure the log message is displayed immediately when debugging an application. You can add a breakpoint immediately after a log call and see the results when the breakpoint hits. - -However, if you're not actively debugging the application, processing the logs on the current thread can introduce a performance hit. You can now specify a destination process it's logs on a dispatch queue of your choice (or even use a default supplied one). - -```Swift -fileDestination.logQueue = XCGLogger.logQueue -``` - -or even - -```Swift -fileDestination.logQueue = DispatchQueue.global(qos: .background) -``` - -This works extremely well when combined with the [Alternate Configurations](#alternate-configurations) method above. - -```Swift -#if DEBUG - log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) -#else - log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) - if let consoleLog = log.logDestination(XCGLogger.Constants.baseConsoleDestinationIdentifier) as? ConsoleDestination { - consoleLog.logQueue = XCGLogger.logQueue - } -#endif -``` - -### Append To Existing Log File - -When using the advanced configuration of the logger (see [Advanced Usage above](#advanced-usage-recommended)), you can now specify that the logger append to an existing log file, instead of automatically overwriting it. - -Add the optional `shouldAppend:` parameter when initializing the `FileDestination` object. You can also add the `appendMarker:` parameter to add a marker to the log file indicating where a new instance of your app started appending. By default we'll add `-- ** ** ** --` if the parameter is omitted. Set it to `nil` to skip appending the marker. - -```let fileDestination = FileDestination(writeToFile: "/path/to/file", identifier: "advancedLogger.fileDestination", shouldAppend: true, appendMarker: "-- Relauched App --")``` - - -### Automatic Log File Rotation - -When logging to a file, you have the option to automatically rotate the log file to an archived destination, and have the logger automatically create a new log file in place of the old one. - -Create a destination using the `AutoRotatingFileDestination` class and set the following properties: - -`targetMaxFileSize`: Auto rotate once the file is larger than this - -`targetMaxTimeInterval`: Auto rotate after this many seconds - -`targetMaxLogFiles`: Number of archived log files to keep, older ones are automatically deleted - -Those are all guidelines for the logger, not hard limits. - -### Extending XCGLogger - -You can create alternate log destinations (besides the built in ones). Your custom log destination must implement the `DestinationProtocol` protocol. Instantiate your object, configure it, and then add it to the `XCGLogger` object with `add(destination:)`. There are two base destination classes (`BaseDestination` and `BaseQueuedDestination`) you can inherit from to handle most of the process for you, requiring you to only implement one additional method in your custom class. Take a look at `ConsoleDestination` and `FileDestination` for examples. - -You can also create custom filters or formatters. Take a look at the provided versions as a starting point. Note that filters and formatters have the ability to alter the log messages as they're processed. This means you can create a filter that strips passwords, highlights specific words, encrypts messages, etc. - -## Contributing - -XCGLogger is the best logger available for Swift because of the contributions from the community like you. There are many ways you can help continue to make it great. - -1. Star the project on [GitHub][github-xcglogger]. -2. Report issues/bugs you find. -3. Suggest features. -4. Submit pull requests. - -**Note**: when submitting a pull request, please use lots of small commits verses one huge commit. It makes it much easier to merge in when there are several pull requests that need to be combined for a new version. - -## Third Party Tools That Work With XCGLogger - -**Note**: These plug-ins no longer 'officially' work in Xcode 8. File a [bug report](http://openradar.appspot.com/27447585) if you'd like to see plug-ins return to Xcode. See [below](#xcode_8_tips) for a workaround... - -[**XcodeColors:**][XcodeColors] Enable colour in the Xcode console -<br /> -[**KZLinkedConsole:**][KZLinkedConsole] Link from a log line directly to the code that produced it - -**Note**: These may not yet work with the Swift 3 version of XCGLogger. - -[**XCGLoggerNSLoggerConnector:**][XCGLoggerNSLoggerConnector] Send your logs to [NSLogger][NSLogger] - -## Xcode 8 Tips - -### Restore Plug-In Support - -One of the biggest issues you'll notice when using Xcode 8, is that by default it will no longer load plug-ins. Personally, I really like the benefits the plug-ins add to Xcode, especially XcodeColors. With so many other frameworks, or even Xcode itself spewing messages into the debug console, it's really helpful to be able to have your logs stand out with colour. It is currently possible to re-enable plug-ins in Xcode 8. If you do so, you'll be able to use the new `XcodeColorsLogFormatter` class to colour your log messages again. See the demo apps for example code. - -**Be Warned**: If you follow these instructions to re-enable plug-ins, there could be unforeseen consequences. I would definitely only do this on a development machine, with the assumption that you have another machine (or at least an unmodified version of Xcode) to do your App Store/Distribution builds. **Do not** attempt to upload a binary to Apple that was built with a modified version of Xcode. **I take no responsibility for anything that happens if you follow these instructions. You have been warned**. - -Now, assuming you've read the above warning, and you have a development only machine, and you really want to use your awesome plug-ins, here's my recommended method to re-enable plug-ins. - -1. Clone the [unsign](https://github.com/steakknife/unsign) repository. -2. Build it following their dead-simple instructions (`make`). -3. Close Xcode if it's open. -4. In your favourite shell/terminal, execute the following commands (may need to be root, or just `sudo`): - - - `cd /Applications/Xcode.app/Contents/MacOS` *Substitute another Xcode path if you like* - - `/path/to/unsign Xcode` *Creates a new `Xcode.unsigned` binary* - - `mv Xcode Xcode.signed` *Move the original file* - - `ln -sf Xcode.unsigned Xcode` *Link the unsigned version to the original filename* - -5. Launch Xcode and use your favourite plug-ins. You may have to reauthorize access to your keychain, but it should be a one time task. -6. You can flip back and forth between the signed and unsigned versions by repeating the `ln -sf Xcode.unsigned Xcode` command, just changing `.unsigned` to `.signed` etc. -7. Do not use this version of Xcode to submit apps! -8. Pray Apple doesn't disable this workaround. -9. File a radar requesting official plug-in support again. You can dup this [radar](http://openradar.appspot.com/27447585). - -Thanks to [@inket](https://github.com/inket/update_xcode_plugins) and [@steakknife](https://github.com/steakknife/unsign) for providing the knowledge and tools for this tip! - -<!-- This tip no longer works as of macOS 10.12.4, it appears to disable all logs, on iOS now. --- ### Disable Xcode's Log Noise --- --- For some reason, the simulators in the final version of Xcode 8 are printing lots of their own debug messages to the console. These messages make reading your own debug logs cumbersome. You can prevent those logs from being displayed by adding the environment variable `OS_ACTIVITY_MODE` to your debug scheme, and setting the value to `disable`. --- --- <img src="https://raw.githubusercontent.com/DaveWoodCom/XCGLogger/swift_3.0/ReadMeImages/OSActivityMode.png" alt="Environment Variable" style="width: 690px; height: 401px;" /> --- --- Thanks to [@rustyshelf](https://twitter.com/rustyshelf/status/775505191160328194) and [@bersaelor](https://twitter.com/bersaelor/status/776317530549919744) for this tip! ---> - -## To Do - -- Add more examples of some advanced use cases -- Add additional log destination types -- Add Objective-C support -- Add Linux support - -## More - -If you find this library helpful, you'll definitely find these other tools helpful: - -Watchdog: http://watchdogforxcode.com/ -Slender: http://martiancraft.com/products/slender -Briefs: http://giveabrief.com/ - -Also, please check out some of my other projects: - -Rudoku: [App Store](https://itunes.apple.com/app/apple-store/id965105321?pt=17255&ct=github&mt=8&at=11lMGu) -TV Tune Up: https://www.cerebralgardens.com/tvtuneup - -### Change Log - -The change log is now in it's own file: [CHANGELOG.md](CHANGELOG.md) - -[xcglogger-logo]: https://github.com/DaveWoodCom/XCGLogger/raw/master/ReadMeImages/XCGLoggerLogo_326x150.png -[swift.org]: https://swift.org/ -[license]: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -[travis]: https://travis-ci.org/DaveWoodCom/XCGLogger -[swiftpm]: https://swift.org/package-manager/ -[cocoapods]: https://cocoapods.org/ -[cocoapods-xcglogger]: https://cocoapods.org/pods/XCGLogger -[carthage]: https://github.com/Carthage/Carthage -[cerebral-gardens]: https://www.cerebralgardens.com/ -[twitter-davewoodx]: https://twitter.com/davewoodx -[github-xcglogger]: https://github.com/DaveWoodCom/XCGLogger -[stackoverflow]: http://stackoverflow.com/questions/tagged/xcglogger - -[badge-language]: https://img.shields.io/badge/Swift-1.x%20%7C%202.x%20%7C%203.x-orange.svg?style=flat -[badge-platforms]: https://img.shields.io/badge/Platforms-macOS%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-lightgray.svg?style=flat -[badge-license]: https://img.shields.io/badge/License-MIT-lightgrey.svg?style=flat -[badge-travis]: https://img.shields.io/travis/DaveWoodCom/XCGLogger/master.svg?style=flat -[badge-swiftpm]: https://img.shields.io/badge/Swift_Package_Manager-v5.0.1-64a6dd.svg?style=flat -[badge-cocoapods]: https://img.shields.io/cocoapods/v/XCGLogger.svg?style=flat -[badge-carthage]: https://img.shields.io/badge/Carthage-v5.0.1-64a6dd.svg?style=flat - -[badge-sponsors]: https://img.shields.io/badge/Sponsors-Cerebral%20Gardens-orange.svg?style=flat -[badge-twitter]: https://img.shields.io/twitter/follow/DaveWoodX.svg?style=social - -[XcodeColors]: https://github.com/robbiehanson/XcodeColors -[KZLinkedConsole]: https://github.com/krzysztofzablocki/KZLinkedConsole -[NSLogger]: https://github.com/fpillet/NSLogger -[XCGLoggerNSLoggerConnector]: https://github.com/markuswinkler/XCGLoggerNSLoggerConnector -[Firelog]: http://jogabo.github.io/firelog/ -[Firebase]: https://www.firebase.com/ - -[xcglogger-5.0.1]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/5.0.1 -[xcglogger-3.6.0]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.6.0 -[xcglogger-3.5.3]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.5.3 -[xcglogger-3.2]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.2.0 -[xcglogger-2.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/2.4.0 -[xcglogger-1.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/1.8.1 diff --git a/Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/ObjectiveCMarker.m b/Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/ObjectiveCMarker.m deleted file mode 100644 index 2734893..0000000 --- a/Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/ObjectiveCMarker.m +++ /dev/null @@ -1,3 +0,0 @@ -// -// This file is unused and only exists so the Swift Package Manager can identify this module as one using Objective-C. -// diff --git a/Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/include/ObjcExceptionBridging.h b/Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/include/ObjcExceptionBridging.h deleted file mode 100644 index 9589704..0000000 --- a/Pods/ObjcExceptionBridging/Sources/ObjcExceptionBridging/include/ObjcExceptionBridging.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// ObjcExceptionBridging.h -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -#import <Foundation/Foundation.h> - -//! Project version number for ObjcExceptionBridging. -FOUNDATION_EXPORT double ObjcExceptionBridgingVersionNumber; - -//! Project version string for ObjcExceptionBridging. -FOUNDATION_EXPORT const unsigned char ObjcExceptionBridgingVersionString[]; - -// In this header, you should import all the public headers of your framework using statements like #import <ObjcExceptionBridging/PublicHeader.h> - -/** - Execute Swift code that could generate an Objective-C exception in here to catch and handle it gracefully (ie don't crash) - - @param tryBlock Block/Closure to execute that could thrown an Objective-C exception - @param catchBlock Block/Closure to use if an exception is thrown in the tryBlock - @param finallyBlock Block/Closure to execute after the tryBlock (or catchBlock if an exception was thrown) - - @note Loosely based on the code here: https://stackoverflow.com/a/35003095/144857 and here: https://github.com/williamFalcon/SwiftTryCatch - */ -NS_INLINE void _try_objc(void(^_Nonnull tryBlock)(void), void(^_Nonnull catchBlock)(NSException* _Nonnull exception), void(^_Nonnull finallyBlock)(void)) { - @try { - tryBlock(); - } - @catch (NSException* exception) { - catchBlock(exception); - } - @finally { - finallyBlock(); - } -} - -/** - Throw an Objective-C exception - - @param exception NSException object to throw - - @note Loosely based on the code here: https://github.com/williamFalcon/SwiftTryCatch - */ -NS_INLINE void _throw_objc(NSException* _Nonnull exception) -{ - @throw exception; -} diff --git a/Pods/Pods.xcodeproj/project.pbxproj b/Pods/Pods.xcodeproj/project.pbxproj deleted file mode 100644 index 034914e..0000000 --- a/Pods/Pods.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4699 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 52; - objects = { - -/* Begin PBXAggregateTarget section */ - 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */ = { - isa = PBXAggregateTarget; - buildConfigurationList = C07DA746BF6BF0030CB4F28FC1A5B161 /* Build configuration list for PBXAggregateTarget "SwiftLint" */; - buildPhases = ( - ); - dependencies = ( - ); - name = SwiftLint; - productName = SwiftLint; - }; -/* End PBXAggregateTarget section */ - -/* Begin PBXBuildFile section */ - 00286AEEBF1B593B3613984A02FEA956 /* Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4D965747054282F02FDB5B0EF92A807 /* Service.swift */; }; - 0120A3BB087EDF464B2C27C20D81179F /* DownOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4323F0A51A309AD987E55963F71A81E4 /* DownOptions.swift */; }; - 0191799F818C45E5F4EC602FA34BE24A /* MultipartFormData.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED710913E2098DB117BA6A6697F599F3 /* MultipartFormData.swift */; }; - 0281915C27AC17F0A289857A658E19CE /* ConstraintMultiplierTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = D05B44706629BB6A3B0BE0CA85992C95 /* ConstraintMultiplierTarget.swift */; }; - 03B9411FDA1CFF14355924E3908220A2 /* CwlUtils-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 77EA823E366709D6F72C2C00C89671B6 /* CwlUtils-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0466BEC4AED4943C62BCCC9E796B6C09 /* xml.c in Sources */ = {isa = PBXBuildFile; fileRef = 15925D1178399947FFA350B6D0A50E27 /* xml.c */; }; - 04729A98EDB5FEDCD496F06098C318A6 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B65FDF5AFED74E62E95550BF2DA6B9 /* List.swift */; }; - 05E578D376F026BEEE5BECD6EA921CCA /* Valet.h in Headers */ = {isa = PBXBuildFile; fileRef = F18349D54D2C16B5455A6E0CB34A6B80 /* Valet.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 06381102F51B39BF59AC2259F54A4530 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE102B34566CF9B07DBCAF8A317C8E3 /* Validation.swift */; }; - 08DFE967333D036185ED2A778D98772E /* DefaultsSerializable+BuiltIns.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DE1E9E14A3E68C3EBB674D51E4473B /* DefaultsSerializable+BuiltIns.swift */; }; - 08E70B0319231D533CE3668533410907 /* MigrationError.swift in Sources */ = {isa = PBXBuildFile; fileRef = A43460F03BF97E0607AEF210DEAB2DA7 /* MigrationError.swift */; }; - 0A3E4DAC9E454676C8264617B3F33E00 /* URLRequest+EncodeURL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A67066413838BD06E05CD86613D3054 /* URLRequest+EncodeURL.swift */; }; - 0A3EF0F6971C5646520F83C3C2CC5BE1 /* Debugging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BC4A4FF6B59ED4DC80B82CB0C234E75 /* Debugging.swift */; }; - 0A8F61DA97A974643008DC69196C5330 /* ConstraintRelation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91A07F1DFC3D3EA178AC2A0EA4804770 /* ConstraintRelation.swift */; }; - 0B98341DCD3B9399CD90B144DE80E7F9 /* Styler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60437014A525019EC80FCB948DED9311 /* Styler.swift */; }; - 0CBF7FDD39D8339DEFBB47133BED9D78 /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0B5D38B19C16842E1235C9E0217A000 /* Accessibility.swift */; }; - 0CE9F5031B1B34D1084E2F383C253ACA /* references.c in Sources */ = {isa = PBXBuildFile; fileRef = 7009F72EA49BB6886B1A448A514FED38 /* references.c */; }; - 0D43092DE7884ACF49346B1FDF4698CA /* CodeBlockOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AC82D0F9C6F570239096376ADCC338D /* CodeBlockOptions.swift */; }; - 0D55B09D93F68DF5BE427E43308BCA44 /* SecureEnclave.swift in Sources */ = {isa = PBXBuildFile; fileRef = A4AC514372EE01110CAF88F3F3B9A96B /* SecureEnclave.swift */; }; - 0D93A4677603033F2F34AF9B512299BF /* AutoRotatingFileDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73A807A3F2F3BE739662AC6372AF85E3 /* AutoRotatingFileDestination.swift */; }; - 0DE97F88E157B408F829C9E8112D2156 /* Base64LogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3E46F970D04898E9718B3A7AED0FAF /* Base64LogFormatter.swift */; }; - 0E794448B651E93AD4CE37021FF77FCF /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 43090A59CB768538D6445FFC4569A2EB /* buffer.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0EE78CC7C4211E448DC38F9C1884A990 /* Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = 238B330EEBDF38E736F0023F5E3BBB12 /* Alamofire.swift */; }; - 0FD155BFA61B2A8EA6A309EE39CD274B /* RetryConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 759866940DB08E719C29234364E4CF6D /* RetryConfiguration.swift */; }; - 101B2CFD52EF7216870C5079690DA0A8 /* SinglePromptSecureEnclaveValet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 860F7079A4EDCC8671D5B8FEE1A12740 /* SinglePromptSecureEnclaveValet.swift */; }; - 104350ED09FC48D6D86B7B73B8B03D42 /* SecureEnclaveValet.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF831C009D2B4741083AF169E52E7052 /* SecureEnclaveValet.swift */; }; - 119204FB97A7455734F4DB8F7DF043B5 /* Down.h in Headers */ = {isa = PBXBuildFile; fileRef = 20693984F54A9883759E963D9B4F37CD /* Down.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1574FF8438628E51A2A8984767134455 /* Defaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302A905D3C42E5148462079A86819BFF /* Defaults.swift */; }; - 15ED4D723BD527AB4D890DAB79EA02D8 /* Code.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A3A59717680DBB9B7FF0AD7F8CE313 /* Code.swift */; }; - 177E9F5FD1014BA41FC0E32F9B388BB0 /* FileNameFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1C12795C8377029B232DD291E6D4CF1 /* FileNameFilter.swift */; }; - 17CD22B31486A244DD91A488F2D48E08 /* CwlDeferredWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = F5524297D7B687C35F48CC61A34C82C2 /* CwlDeferredWork.swift */; }; - 18BFF4ECC04F68AFD3F8B32D9E776606 /* ListItemPrefixGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0046860E8C77E6250D4434B69CF2F646 /* ListItemPrefixGenerator.swift */; }; - 18F1630374A421394E42DB344683643E /* ConstraintLayoutSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF1EA3DD4404D51B63139E296AA90408 /* ConstraintLayoutSupport.swift */; }; - 1B169A9E64E8A66A61C92D042EBDB19F /* DownLayoutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C701833139DFA72F6B580C2639624321 /* DownLayoutManager.swift */; }; - 1CCBA31F458FA56BE4B20A8426EA8855 /* CwlUtils-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 887599C323AED7F80DE24CE15D25DE87 /* CwlUtils-dummy.m */; }; - 1F5992998470932328D3DB7C88BFDBC7 /* HtmlBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D98092C190BC0448681382C392EA303C /* HtmlBlock.swift */; }; - 2006772478C98A592E24A5CDF07C8195 /* ListItemParagraphStyler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B852929F2881D285C102BEFAC433D6 /* ListItemParagraphStyler.swift */; }; - 203135489B23E91F8704E827AD875194 /* Pods-Quests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CAC6515151F58137037D599D3CB46214 /* Pods-Quests-dummy.m */; }; - 238176E241F0AE9E0DD5714A661C27A8 /* ObjectiveCMarker.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A57513319E8E7DD6A9E0D75DB562B4 /* ObjectiveCMarker.m */; }; - 246408C0019F974D7C8E9A61BC95AC7D /* ConstraintLayoutGuideDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A4DEDA557FECEA0ACFEC26265878877 /* ConstraintLayoutGuideDSL.swift */; }; - 24925FE0BB1706C731D8E3AAA7897E98 /* latex.c in Sources */ = {isa = PBXBuildFile; fileRef = 7C49518C9662BD7FF49B56634CFDEC6F /* latex.c */; }; - 24FA0B53000DF7AE85690E410D13F74C /* DownErrors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 007630DCE309A86B3C01C980CEDFA2E9 /* DownErrors.swift */; }; - 28A2E0163F37EB4FB673BCF0C99A49EE /* NSAttributedString+HTML.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87DE2A9CB91C9F68A0E64A1DA95D214F /* NSAttributedString+HTML.swift */; }; - 294FB14D160808CABB9F3391681BEFC9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - 2B2667D50A8C3B799C270D13EB1B11FB /* DispatchQueue+Alamofire.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDE9BEF6AFB820D8F902223664EDA857 /* DispatchQueue+Alamofire.swift */; }; - 2BCC237C30B9ACE04E8836B4690AED5B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - 2C68363732D710E2EB6859780FE6AF00 /* QuoteStripeOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 46D136B44F02DE1122F3A27CE012FCFA /* QuoteStripeOptions.swift */; }; - 2DACF398D90283086926539E0ABD8B12 /* AppleSystemLogDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBF087C7A261AF95E766DE04FD10DA5F /* AppleSystemLogDestination.swift */; }; - 2E7DF0D1465F23EBB961D6E95E3814C1 /* DownView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5D6F71F88B1E9596CEA4DA312B8413 /* DownView.swift */; }; - 2EC73DB34331582083E99A2B84EF321A /* node.h in Headers */ = {isa = PBXBuildFile; fileRef = 8039C515478BDF83C488F6890E3AAA43 /* node.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3020716F2430874CD2906855980801B5 /* Alamofire-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BD51F0B55ECCD878F746238F6F1E420 /* Alamofire-dummy.m */; }; - 3295095412ACA107BB19591891AE4B68 /* Valet-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F714FC99B15E1DEF873C471B5E2A3A /* Valet-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33273F03E69E0CC3A7E1F6B56B7F5CC3 /* DefaultsKeys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F1F2F156CC0EF892B17FC37C88E6FE2 /* DefaultsKeys.swift */; }; - 332F795B1E9D5C3410511BE80088062C /* FontCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607D62F11A96A8B260650FBCB93CCB67 /* FontCollection.swift */; }; - 33433F6DDA32CC719477034F3636262C /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5FBF54EA51BB0314734BCC54440D450 /* Item.swift */; }; - 339756CC10D02BC67C42F2AF4AE56E6A /* XCGLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86237AC72A38FA030DE94BE7A5847F08 /* XCGLogger.swift */; }; - 33C34A4213BD8431011E20DFD947E6C8 /* CloudAccessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D4F824C874FC0A4482BFD3A14D473B3 /* CloudAccessibility.swift */; }; - 33C8F33D54E9AEFAAF7713FDFF11B275 /* CwlStackFrame.swift in Sources */ = {isa = PBXBuildFile; fileRef = 582BCBAE32F6249D74F24C46F3301D33 /* CwlStackFrame.swift */; }; - 358DF57B7379B4B3DA0FECCA0F568C49 /* DownDebugLayoutManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEB68179B64754FED5C63E03D9F647D6 /* DownDebugLayoutManager.swift */; }; - 3753F374F901A95B79F6748C904EED8C /* DestinationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3625C1E94EA43B13572A085AAADF1E99 /* DestinationProtocol.swift */; }; - 37B6B2C11709F425E8FD56C6F999DD4B /* TagFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1289849BFD7121E178A3C765D115B2FA /* TagFilter.swift */; }; - 3836C7747B144E4D5695EA418B30E4CA /* Valet-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = AB00DA18DF38C0B4EE67AC0F7F6B5A48 /* Valet-dummy.m */; }; - 3839EE8A38D5FDB34820379016386879 /* ConstraintOffsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8219D76EF85A7E294A866D2C296FB02A /* ConstraintOffsetTarget.swift */; }; - 38ABE5A86F1BA347C507922DB82B5774 /* ConstraintPriority.swift in Sources */ = {isa = PBXBuildFile; fileRef = 374B221DA2F85351E855CC12F36E72C8 /* ConstraintPriority.swift */; }; - 39A9E79A051DC7E670FCEAD7F8FEF6D0 /* ConstraintLayoutGuide+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FFC4C45344256C2491CFF8FA90A3947 /* ConstraintLayoutGuide+Extensions.swift */; }; - 39D72BEAEA5A9CADC97BA4765C321CF8 /* FilterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C3492C7019CEE9234D102F4FE38BB2A /* FilterProtocol.swift */; }; - 39D7DC625309DDEB9260F9C8141DE05D /* .swift-version in Resources */ = {isa = PBXBuildFile; fileRef = 65D2A0D819B7AB225B07FD3B4399F46B /* .swift-version */; }; - 3BB4570C2207BACF8951DDBD4FC7A231 /* DefaultsBridges.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52DB3CB5FA25A6ECC0AE2E02220FFD8C /* DefaultsBridges.swift */; }; - 3C375FACA5AEBF27F5EA8EB9BBD9642E /* ChildSequence.swift in Sources */ = {isa = PBXBuildFile; fileRef = E87AC200EC3397E1998EB1A20921518E /* ChildSequence.swift */; }; - 3C857ECD05C719340DC1913D3991BD3F /* cmark.c in Sources */ = {isa = PBXBuildFile; fileRef = D36D43CCD8C284C922AFEABB279DEB65 /* cmark.c */; }; - 3CAF584D4CD117F7753C301F03CC5CF4 /* ConstraintDirectionalInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79BD059EB91906D9ECC927581D5B8D95 /* ConstraintDirectionalInsetTarget.swift */; }; - 3DF41C4CDAE85D807E5D1A9C62BF5B68 /* DownAttributedStringRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21964FBCF19F00B1F591F246EAE17B96 /* DownAttributedStringRenderable.swift */; }; - 3F9A5B3ECC5CE4D0A3CFF71330FEA2D9 /* SwiftyUserDefaults-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A0305697366CA91FFF1FD4A20D63B02 /* SwiftyUserDefaults-dummy.m */; }; - 40D05816F768CC138AB90B6C1DAF5959 /* Timeline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10AFED9690DE5F05F44EB12E1D472661 /* Timeline.swift */; }; - 43A9FB1FEF5DB6A7CE4AD57C73BFE0F0 /* LayoutConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80262AB0252C7E0ACC2CD04CADFC9B2 /* LayoutConstraint.swift */; }; - 4902B03990C4B33DA15F4CC19BCBF1E8 /* ConstraintDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 04DA0B4B7859765FB9CF6D29BD4347BF /* ConstraintDSL.swift */; }; - 4980EEFC18BE6564D2A34691B2D2513F /* ConstraintDescription.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5352ACF3B3E7379270F4FAF819792C90 /* ConstraintDescription.swift */; }; - 49C2A371CBEE120754F4F28B7C6634A6 /* houdini_html_e.c in Sources */ = {isa = PBXBuildFile; fileRef = 57EF65AB927CD026BE9E26C3B7678190 /* houdini_html_e.c */; }; - 49DFC1774823235425AE09205027E3E6 /* Heading.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68D7754A6883A74528E6B5E7D4EA404C /* Heading.swift */; }; - 4BC837DB8C9521C058314048DD166685 /* CwlFrameAddress.h in Headers */ = {isa = PBXBuildFile; fileRef = 1AC58E3834D5DF74927CF05C9E637666 /* CwlFrameAddress.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C3828DF6F9CB5DA56FE87EEC3A4D23F /* chunk.h in Headers */ = {isa = PBXBuildFile; fileRef = DE151E44E5FF561B11C59C29D20952D3 /* chunk.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4DB45BA6EEEB8D996816E42BB6FB7FD2 /* Keychain.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA31BF8BEF00AFAE4266444BC2B8BAF4 /* Keychain.swift */; }; - 4E17B77A5570EBE54CC50F8E14AA74EB /* URLRequest+Multipart.swift in Sources */ = {isa = PBXBuildFile; fileRef = 785833AD4A54C2BAAA470C1EF052743C /* URLRequest+Multipart.swift */; }; - 50145919747081A75CC0D9950C19848A /* render.c in Sources */ = {isa = PBXBuildFile; fileRef = 76480365DE31961A4E5E2F19B30C3B83 /* render.c */; }; - 51A0404301CA0CB0EC678CF20FBC3749 /* ConstraintConstantTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C5A791D823EDA9C970F9989E42E311B /* ConstraintConstantTarget.swift */; }; - 51F16576E2D663A9763E28C8A9E275AB /* XCGLogger-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3BA6262A9DBD6E322E48062FA76DCEE4 /* XCGLogger-dummy.m */; }; - 5380F9EB23C4B85B5E7647EAEF6D3ABC /* Node.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2218986D56C85CB3DE114397B4C8F37B /* Node.swift */; }; - 543AE25225F0E554257BA2BEAE4267C5 /* ObjcExceptionBridging-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = AF407EE74FCFE7869CCAD42CCD281A24 /* ObjcExceptionBridging-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55481BFDE7FAE62DD080CA3544D9E6B4 /* NSMutableAttributedString+Attributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DDD719AC029B64B2C929ED7C8FC08E /* NSMutableAttributedString+Attributes.swift */; }; - 559A7D544E30F94CF908313101AF058B /* CwlCaseNameCodable.swift in Sources */ = {isa = PBXBuildFile; fileRef = A124759FC36633C4BCFF442DDC0DD139 /* CwlCaseNameCodable.swift */; }; - 567F85CE8C428A8455283134A52D2248 /* ThematicBreakAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2172B5336BB539626104D9C01841FE60 /* ThematicBreakAttribute.swift */; }; - 56DB266A71084AC4135FDA4C9A2726D1 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = F1B81A594455334D161994299EE56FA3 /* utf8.c */; }; - 5711A868B2F3A49D0B7BDA36AB4DD34F /* CwlSysctl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 623DCFB34EEC1C4CF0B58DB5CF23F300 /* CwlSysctl.swift */; }; - 58448BB05AAEE135491D3C8F7D4A6F8F /* ConstraintConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = F640D7BB5441BC054BD994A785A82BE9 /* ConstraintConfig.swift */; }; - 58898C5667DB996E90913FB534507BF6 /* Identifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = CFE72A7CB20F59F67980B52462518FA2 /* Identifier.swift */; }; - 5929C9D7CC208C63A6C6AD3D707DCB8C /* cmark_version.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DADBD42B644CF60DC4806C82994987D /* cmark_version.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5993B3186A8CD3CCAD8DE4F46A16E5E8 /* DownStyler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 654BA7CE925A4B04EEE52FF78910109E /* DownStyler.swift */; }; - 59E7C55C00180629503238B7937D86FC /* Reachability.swift in Sources */ = {isa = PBXBuildFile; fileRef = D65963AD7D72E4A7788BDD54EFA81EE8 /* Reachability.swift */; }; - 5A636CF138E3DD68F7AF625E0EE24573 /* BlockBackgroundColorAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830E5F588A3D15E2971C9EDBA54FB31C /* BlockBackgroundColorAttribute.swift */; }; - 5ACB65EED23E9EE9424D9EDEAEFCB0EE /* SharedGroupIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC5735224AF8F8C69E4B83D86C80972 /* SharedGroupIdentifier.swift */; }; - 5B561D99511B21095074C974432B7BC1 /* ConstraintLayoutGuide.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1816C379B3AA025CF1CA8AA3CD9475FF /* ConstraintLayoutGuide.swift */; }; - 5BF1EEBBB118EC6178CC361C200C9306 /* DelayedOperations.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70C8CCE17C228EDE38212144FDA68672 /* DelayedOperations.swift */; }; - 5DE371D72609DEF65369FD84AF16A99A /* Defaults+StringToBool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EFE400347E43DDF7C0E7D41ED3619B8 /* Defaults+StringToBool.swift */; }; - 5EFF0224F9505D50144F2627746C0868 /* QuoteStripeAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = C32228FF7C37F248307B5DA36A3C1137 /* QuoteStripeAttribute.swift */; }; - 5FF54384C260732FAFE16E11A0D2146B /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = F32506B5FDF53E6BFEA0A76C0FDB119A /* Request.swift */; }; - 608FD3B3707767B3246354E9DB1601D9 /* ServerTrustPolicy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A1C453AC2DC5DDF5275222D42CCC55B /* ServerTrustPolicy.swift */; }; - 621E0346E05C7947C3661539E051DFC1 /* Link.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE199618C02D9D4150C92BD18E2A7F6A /* Link.swift */; }; - 624B8D6A83501662EE1F4C5A80956CDE /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = D878461D1533DDDCE36BED42C2C79AB4 /* config.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 63F9E6EC00932E2450ED8D2602C27894 /* LogDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9DD087477CBEEC587B0EF1E147E6BE8 /* LogDestination.swift */; }; - 64C8EBF9FB4FFDF6CDAB1627A2CC69D3 /* DownASTRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADFB607451E937893442321C79C96583 /* DownASTRenderable.swift */; }; - 650BC30A686FF441CCFCBB2A04306E3D /* Down-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F825C62B1E64CE1004FEB9B29271CB66 /* Down-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 652C5E2F9CBC8303B84D2272B520A8AB /* ConstraintMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42F1E2222E73241DF913AB0CB2355622 /* ConstraintMakerExtendable.swift */; }; - 65946B5D469B29D060A0B2A9E8768F78 /* ConstraintMakerEditable.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB4E7490C68F6991248C5E70224F256D /* ConstraintMakerEditable.swift */; }; - 68DF690E4CD4C4B486570630556C7EC4 /* DownXMLRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D641ECE4C2827934598BAE548054E367 /* DownXMLRenderable.swift */; }; - 6BC4A8269EE279A148573440F89B75E6 /* CwlExec.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA18A98AF687D59BD204D682BDB59A6F /* CwlExec.swift */; }; - 6D4E93991D8022436C43EB92D98CCF39 /* TaskDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D91F685862A523B8DA6191ACDC09657E /* TaskDelegate.swift */; }; - 6DCAF434D0450314AA558F60329CB930 /* OptionalType.swift in Sources */ = {isa = PBXBuildFile; fileRef = F78C8BBD4232A4F11C629502B760955C /* OptionalType.swift */; }; - 6E2925AA24F1EC6287A1143BB29E43B7 /* KeychainError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56BCD87146375A2FF4E2C4283DE6A39D /* KeychainError.swift */; }; - 6E4793C9F6E7F27BA5FDE0A0FA0FA710 /* ANSIColorLogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 657095BDC3709F78C26D91E9D611FC3C /* ANSIColorLogFormatter.swift */; }; - 70293943A4A2026CCED7D9156FD9E6C2 /* CwlFrameAddress.c in Sources */ = {isa = PBXBuildFile; fileRef = 504E0843DC8892A271BF34186360679E /* CwlFrameAddress.c */; }; - 7208E714E3181A336149083C2519305F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - 727013BDC6702DE3C61B008D141E1B25 /* scanners.h in Headers */ = {isa = PBXBuildFile; fileRef = BBE51BAC15FAD226B70F0F31A12CF61D /* scanners.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 732E43B4945BE0E3942B26788A1D8626 /* Constraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B062796F6710BFDFCA36378797FA6A5 /* Constraint.swift */; }; - 744FA60F91EC1E4D33284D01445D382C /* Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 133AE864BC883B7257B70F90E32DFEB0 /* Notifications.swift */; }; - 7548C473173A587673047F0FE3BA7E04 /* ConstraintLayoutSupportDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = E23D18647DE004A1D2CEE1310E6AB441 /* ConstraintLayoutSupportDSL.swift */; }; - 76FBAB1D0B963D13F2E1A87BC11A9A48 /* DownView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2BB5F01AE6D0F412759FF440A2FF6387 /* DownView.bundle */; }; - 77FD8BAD77A8805BD4CC3E8A6D9BEB98 /* UserInfoFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1794A9E55649F8950EBB3A1ADF09AF /* UserInfoFilter.swift */; }; - 79D050A1BF690095FBC17BB949AF6E07 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - 7AFC25390B3D1AD4889E945A73889D5A /* cmark_ctype.c in Sources */ = {isa = PBXBuildFile; fileRef = B2DF875D9CF32F80CF666130FE1FDBA8 /* cmark_ctype.c */; }; - 7CEFE12E3A97F9E3BD7DDEAB461F7787 /* CwlCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0BFCF7534C452C415E20577EB6470CE /* CwlCollection.swift */; }; - 7CFB2DD4F95C1180A7CE1C27157F515F /* ObjcExceptionBridging.h in Headers */ = {isa = PBXBuildFile; fileRef = 7162BD4638407733290E4195E52B1CB0 /* ObjcExceptionBridging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E125C61800DB02A48617493BEC61663 /* CGRect+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F3E4C8CB68C05C761DBEB855142F24E /* CGRect+Helpers.swift */; }; - 7E1582CE441A7E85FE0846B6D2B0015A /* ThematicBreakOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF2D8F80A7A1555A093DF571EC8D5263 /* ThematicBreakOptions.swift */; }; - 7EBFE733C9C5C3B2AC91B003FCBC09CC /* CwlDebugContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBA96A2EBAEAB029D331DFD8594A75D9 /* CwlDebugContext.swift */; }; - 802529140F9CC4B60B66C2E74CD88213 /* ColorCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3BBFE7510841838DD77B8B6BC67C14 /* ColorCollection.swift */; }; - 8114672436C787DF9C365BE9D7CDDE9F /* SecItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 121C719496F287194EE55831B5040185 /* SecItem.swift */; }; - 812835A396E9BDAADE7F6C2557FCD07B /* String+ToHTML.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9222E289FA0973A7B68852726F37B546 /* String+ToHTML.swift */; }; - 840339F416121CE3A07A792187807CA4 /* XCGLogger-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 186E40461E2FE48E915192953ACCEAB4 /* XCGLogger-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A1A6EC1CDE3787669EBAA2060FEAF8E /* Request.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28DFB7DB5690FD745C23CCC4082D9C66 /* Request.swift */; }; - 8A2D8C4CA4EB5C7CC20F0E0AC85A450F /* ConstraintAttributes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 571FC3B0277F04AF40239568EFC057D9 /* ConstraintAttributes.swift */; }; - 8AB91523F7516DFEE68A381835A97544 /* Pods-Quests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = EA000F0ADAA23342F235DD04A6A81819 /* Pods-Quests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B188203470FE6E24AA4E2AF82991A12 /* buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 8997BC92BBEFC740F15DEE27867E2F72 /* buffer.c */; }; - 8C3169C1891EEC89180EAA4C1044B7DF /* CwlExecutionType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85950F857DAA1CF1776B29E1B7A3FABA /* CwlExecutionType.swift */; }; - 8C49239703F6A3BC0F96503D4AE7C341 /* Down.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42CA7C75C68A30C71715C7533A650183 /* Down.swift */; }; - 8C6C44945A9C30E96A1EEE529E0D361B /* Text.swift in Sources */ = {isa = PBXBuildFile; fileRef = 319060E13A7883C6ED840C02693874D8 /* Text.swift */; }; - 8C93AB834293BF246ED86C25A12553C2 /* ConstraintDirectionalInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE0F235AC4FEB441C5FAECF778BC65AF /* ConstraintDirectionalInsets.swift */; }; - 8D282B9B7516638E2CCC0CDCBEF3902A /* CwlMutex.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3E4DC044AF61276F1406624156814F9 /* CwlMutex.swift */; }; - 8D959FF79724C7EC49C2B036B07D2239 /* render.h in Headers */ = {isa = PBXBuildFile; fileRef = C6E74128C1B4F2BC12357E12DF531AAF /* render.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8DB24500054A26BE964C0134591E5CD1 /* CodeBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 562BCE8DA84EEA1AA190ACC3D26ABEBE /* CodeBlock.swift */; }; - 8DBDB753F04CDF4CB9A3B90D8F3EAFAC /* ResponseSerialization.swift in Sources */ = {isa = PBXBuildFile; fileRef = CADFAE862A0274C1B2A562C20D3399E5 /* ResponseSerialization.swift */; }; - 8DDF97AC23E153DC8076D2EA59823EF3 /* DefaultsSerializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA820A177ED255B9DD6CAE664A8FFBFA /* DefaultsSerializable.swift */; }; - 8DF5F0EF9321F222A9DBFFC8E3F13F6B /* CustomBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92BFA6528AF5E515A1D559DBBAD54D8 /* CustomBlock.swift */; }; - 8E3E2575377EBCF92F7272492AC48535 /* ConstraintViewDSL.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21C1192ECF7251808FCE7A8582897537 /* ConstraintViewDSL.swift */; }; - 8EB49CAC4DB6CEBB88C1775664C62344 /* Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B9806F9D9219F8DB4DFF8BD73C5037A /* Image.swift */; }; - 8EBD27764ECB325E5FFFC32172911358 /* NetworkReachabilityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12C66BC029C36AC1D2A223503293A305 /* NetworkReachabilityManager.swift */; }; - 8EF8B6963529FBD1FCEB0C7664F1F31C /* ConstraintMakerRelatable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F704F6C8B1E43AE024AE3616D65E37CD /* ConstraintMakerRelatable.swift */; }; - 8F71F7630FC1E0F55C6BDB9EC5ADA7A1 /* ConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34A581D8CDBA4E311F0D407F90C67878 /* ConstraintItem.swift */; }; - 90CD1FEA9FF90AC9C40A11B6ACE63945 /* MigratableKeyValuePair.swift in Sources */ = {isa = PBXBuildFile; fileRef = A15656353C0E201B5FB291A23D065F4C /* MigratableKeyValuePair.swift */; }; - 90E378BCEF930C65D0CF7F17B09B41D1 /* HtmlInline.swift in Sources */ = {isa = PBXBuildFile; fileRef = 349201D73DAA51E775F6E4C21B4B07DA /* HtmlInline.swift */; }; - 915CA969C8AE559B7E037BA999428BBA /* SwiftyJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = AAD608246B69F940724E408CB1F97F32 /* SwiftyJSON.swift */; }; - 91DC5DA302BCBB2E95A76B92DFF5CBE2 /* ReachabilitySwift-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CBDA58A528C8BEAE43C3D7B994A73226 /* ReachabilitySwift-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9207AF544AD013B051AA787F664822D0 /* Defaults+Subscripts.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66C8E8A33F8CB49E6170F410444D3779 /* Defaults+Subscripts.swift */; }; - 92AE44D09A10BE17BBE665CB52D2D8CC /* DownLaTeXRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBC68A0E81D6DDC8B3DE414389CDB178 /* DownLaTeXRenderable.swift */; }; - 930A94B59B7D6DAAA4321E006CF5F5DD /* LogDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5D4776B46399FAF0CD598A7CCE69388 /* LogDetails.swift */; }; - 933AD73A0DCF5F2389B27B1F961F8E4A /* DefaultsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 26CF637DA27AAECE2D60B6B282B1A3BA /* DefaultsObserver.swift */; }; - 9374D18CCAFDAF1A57F664A14002B5B4 /* cmark_export.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6B5EA7A8DB975CF0C8BB6F4F7CC31D /* cmark_export.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 95FCC097C699246A312D67CE81E4358D /* ParagraphStyleCollection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC3D803BAF2B9EC9B31227268930E4C /* ParagraphStyleCollection.swift */; }; - 96210C9045C6B42415264A573A424C14 /* LayoutConstraintItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52E6D41B0506678C3718E22F65ACE80C /* LayoutConstraintItem.swift */; }; - 9631EF398D70C6850AE121E0A6509AC2 /* UIFont+Traits.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8F945DF129C6082E40D84AE4A0E2015 /* UIFont+Traits.swift */; }; - 980F92960E0039793BF3CA6BF1B291CF /* SessionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7869F3B1F1CFB2D98916E6CAF60D44 /* SessionDelegate.swift */; }; - 994001F3881D966A4C32A9EF112EA393 /* XcodeColorsLogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 615DF487334FA5F26E2286B0444830B1 /* XcodeColorsLogFormatter.swift */; }; - 9A15E1DCC5ECEB76BCEB83345DDF4D21 /* FileDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 215AC509102DE153EE595ACC1C363351 /* FileDestination.swift */; }; - 9AB5DE24F51943247366CF8EA2932CC7 /* houdini_html_u.c in Sources */ = {isa = PBXBuildFile; fileRef = 3A3BF02D02AB334493280CFB9E22542F /* houdini_html_u.c */; }; - 9BFE74E8A6BEFC89A4F778F7F778ADFD /* SwiftyJSON-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 87DA4EC98A3FE56C9439E8A29B3E1FEC /* SwiftyJSON-dummy.m */; }; - 9D21477F0FD13BCF0ECE5E3B2393AC2A /* utf8.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FBEA927D8BB8FD71C656732BFFBCF82 /* utf8.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9DCB43C2933A74CB4D1315673914DD7C /* AttributedStringVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE3CC0DC911B0A12181D13DEF997D637 /* AttributedStringVisitor.swift */; }; - A169FF34482994C8910E4DEC14F6EEEB /* Netable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88A6652ADB1FCECCCEC4185CB1B48271 /* Netable.swift */; }; - A1E54F9CFF19A8EC30F786B3DC7043B3 /* houdini.h in Headers */ = {isa = PBXBuildFile; fileRef = C50302015ADBB77548037508DC75364C /* houdini.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1E753C6B6AF255B04A7B523DA10F9BD /* LogFormatterProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 132F84B48C90959E8399EA4B7EEBF525 /* LogFormatterProtocol.swift */; }; - A2245EB7A2CFF1CA094BD7A2E150DF65 /* URLRequest+EncodeParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CF6D33536A7E041A81625573DA0DED4 /* URLRequest+EncodeParameters.swift */; }; - A30BCE89ED81E21EBE2319FB0F5868C2 /* CwlUnanticipatedError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05A2D11FF02427F1B6C2BFE8F2DB173B /* CwlUnanticipatedError.swift */; }; - A3734DF78BD614C261F0DD48B6166CFD /* ConstraintPriorityTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8781707031CBBB5C8D285EC274E7350 /* ConstraintPriorityTarget.swift */; }; - A5953EEA3BA3BEB952D40183022D1C56 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2177DBCF4E795DA115B7682C5DD3C445 /* Security.framework */; }; - A7C4E03FE811EF82062D0001E14F96B3 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - A7E064A15ACF074AB12204FFD66EF075 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - A9216D3144412182532D297BB125BB62 /* CustomInline.swift in Sources */ = {isa = PBXBuildFile; fileRef = CBAD449DB7E4C0031C492D13EC3D882F /* CustomInline.swift */; }; - A999407A7193AB97F00AB9CEC18B63BB /* DownDebugTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7778C64992EFE8E9A40402D6EB1674C /* DownDebugTextView.swift */; }; - AC1327A09DC503346A2FD856E6490B21 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - ACFA0FC19CBB3B71FF3E157023ED25AE /* SwiftyJSON-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7517D9011A8D080FCA3F2AFCC4470A3 /* SwiftyJSON-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACFFA50F04910B874D155DBA3934390C /* cmark.h in Headers */ = {isa = PBXBuildFile; fileRef = FDC69D8EC61218A7FD0E608849C2E419 /* cmark.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF77FEBA76B123281049FB0034BAE4A3 /* blocks.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A9247A47297D44D4E93FEA5875F5F3B /* blocks.c */; }; - AF8FB9CEC9A140ED0FF7441A60A3707C /* BlockQuote.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0D45EACEDD6D5FB2481F21F240A457C /* BlockQuote.swift */; }; - AFC6FAFEA35B2510B7EAD85EEF5CC5D2 /* HTTPMethod.swift in Sources */ = {isa = PBXBuildFile; fileRef = 046FD5E57F4B883549501BFD0B50BC97 /* HTTPMethod.swift */; }; - B06783B9D3FEA91846A7220EE69AC469 /* CwlDispatch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90F1EE952647A49B24394781B2EE749F /* CwlDispatch.swift */; }; - B20CEBF0CE230358955BA758F422C9A9 /* inlines.c in Sources */ = {isa = PBXBuildFile; fileRef = 990B82C56E795F245324493A40368941 /* inlines.c */; }; - B3793020900550BC8089CBD1EEC35160 /* Netable-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 90FFACAD9C1B239BFD7D226DFF95D9BF /* Netable-dummy.m */; }; - B4FC6F762135A3A6F1DDE1EEC10286C9 /* Defaults+Observing.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE4F1A15A683A497E8CC80C813234625 /* Defaults+Observing.swift */; }; - B4FDA63711E11D0B14734EA605D7FBDE /* ConstraintInsets.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF7E92DA0FFD491B641CF414C80A9710 /* ConstraintInsets.swift */; }; - B56D1DD5D3C79213EEDDC517F348EC4B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - B5A8D4F1FCA93019E828F443CFB03F19 /* parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 575C61A285FBA9A5816AAD9EED5545A9 /* parser.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B65FCE33CECA8FA22740D2C3326169FA /* BaseQueuedDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25690F4C04AA595ACF0A1138DA0DF9CB /* BaseQueuedDestination.swift */; }; - B6D0AF71EB6079503B97F22B25DFDB3C /* Response.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86CA4E18580FA8A6D3A7779CA3CC2269 /* Response.swift */; }; - B74DEB79CE1083D1F1D44F3B11B27219 /* Netable-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 875082FB2395F154D808DE9CD0471394 /* Netable-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7ADDC15BF71272B0FD52FA361DB3213 /* CGPoint+Translate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67147485D634A6108537FC74E1175258 /* CGPoint+Translate.swift */; }; - B7B03FD5C15F7B703C0CF647C379DF8D /* commonmark.c in Sources */ = {isa = PBXBuildFile; fileRef = 1BE20A7603B980909541FA6C3E0954FC /* commonmark.c */; }; - B8D3287CABDF8356A90473BD1C61CB0D /* DownStylerConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20DAB868673CC5CC8F0C00E80B60A8F8 /* DownStylerConfiguration.swift */; }; - B9F169FCCCB4E561A26661D04C11356F /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6989D5F6AFA1D7893A4A24BFF4F8DBF /* Configuration.swift */; }; - B9F32C60D18D2EDD48CDFF6262505584 /* houdini_href_e.c in Sources */ = {isa = PBXBuildFile; fileRef = 73B24FD1EFB89FECBE6BB9559409A07D /* houdini_href_e.c */; }; - BA907F50B9C2BAA5B201CFCFD90C8D09 /* man.c in Sources */ = {isa = PBXBuildFile; fileRef = 7D535DC2DDCF312C3AE940CA980518AF /* man.c */; }; - BC4DC169451980A56E5A18E7CAB8AB9C /* Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B59AC46CE7D01E5E28733DDE5AC4385 /* Document.swift */; }; - BF922B938AF6C17B9B13A76C42DA0082 /* Result.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDC8FDA771B206A24DEF46DD0698B00E /* Result.swift */; }; - BFA347D9E86EF3A86E1035066078EA63 /* cmark_ctype.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CC5AA098C5B8E2690592B5AAC8C8860 /* cmark_ctype.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1E5E03EECD78A90C23B0BBCBEE61429 /* node.c in Sources */ = {isa = PBXBuildFile; fileRef = 6FD690BFF43FC7A22F3FE9718ACC731A /* node.c */; }; - C62A62772401A62877F04DA2A7B304B6 /* URL+XCGAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62C1A6DE6F727EFFDDC3CDC53F4F7F87 /* URL+XCGAdditions.swift */; }; - C7DD09A8F376578A729E16C499375052 /* SessionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD06BF6006C785A0AF87B391C6ACE4E4 /* SessionManager.swift */; }; - C9E4A348C347435C5FA0054AD2610017 /* DownRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DD7442645DB8444B769DF9E0FBC8D1D /* DownRenderable.swift */; }; - CAE4B6ECADB357252DDC3CE22A6F7A9C /* DownTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA1E2C35BA5EE60D91A5175C146E42D3 /* DownTextView.swift */; }; - CB3202096CBF126A20FFE9B5F43C42B6 /* DownHTMLRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 437B523EA1EAF19248CC460B1242C746 /* DownHTMLRenderable.swift */; }; - CB9D0156940B0CEB82DBA6824442776E /* Alamofire-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C488A1E48EFFDCF13F9FB3587D3F32D6 /* Alamofire-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDBD7E8F9F271D952640DA95DC7604E6 /* ListItemOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB29C1071C75A54D994234731B55817 /* ListItemOptions.swift */; }; - CDC9978B1CC0D719050E24F32D71D341 /* Strong.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5D8A1C850EB1AA7D7DA7EE91C341BB7 /* Strong.swift */; }; - D0316DC48C044E9CF709A5F9CF9DA04F /* CwlWrappers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52540E2B96A66127E702E30DEA1554E9 /* CwlWrappers.swift */; }; - D0348D986CE44B2425398B7E1CDC35CD /* Valet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40E80E6B38647701DCED0F13ACD0CADF /* Valet.swift */; }; - D0B3CC9D69EE070969D373B2AA018820 /* ConstraintRelatableTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41F7B92275566009F9A7A5C65373BC5E /* ConstraintRelatableTarget.swift */; }; - D0E87E993C9077B2BA11272207DC7F8D /* SnapKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DDD40DC10A8629512DFF149F8C5CF78C /* SnapKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2683DEBA2B21CF6C0FDBBA87D374D89 /* CwlDeque.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4466AFC0FE228CBF0498DBA664C738EF /* CwlDeque.swift */; }; - D2BC1CD805051E5FFFF1C10F6696BD14 /* references.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D4AC309B572BF5D65200BDF51900E1B /* references.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3C7CE270812C8636A8E6C3E457B084C /* SoftBreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F7E958ED335F2F2638913E5275F3256 /* SoftBreak.swift */; }; - D3D78BDF54D7BA4AA747FAA9B00AA444 /* DownCommonMarkRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A86CC926C8ED616B391E9B47816A666 /* DownCommonMarkRenderable.swift */; }; - D3F0988655C295B361BDAA3DD2FF4031 /* CwlOnDelete.swift in Sources */ = {isa = PBXBuildFile; fileRef = A883D0984AAB83018D974AC31E0C663A /* CwlOnDelete.swift */; }; - D4B4B5E4C20BA6780F312222B4AC0CE3 /* Typealiases.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF3E2787AB66AD83674144939849493 /* Typealiases.swift */; }; - D4E0124378E8E4926744114F48FC98ED /* CwlAddressInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8674B6197C2E13F68D41D0654B36821B /* CwlAddressInfo.swift */; }; - D57245EE5A241C268EDC75E3499CBDD1 /* NSAttributedString+Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01E100CA374DCF65946CFDB8926A9EBF /* NSAttributedString+Helpers.swift */; }; - D57619EE9B4FE8981662364501818C15 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - D6A812AD9B824CF91DC295FF1BA46CB1 /* ConstraintMakerPriortizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = E22263AF958C665F1EE236576C4C232F /* ConstraintMakerPriortizable.swift */; }; - D7BEC235843779D564CDA435A5141DEC /* Emphasis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8F35BD06F3781CCA225CF510FF5581F2 /* Emphasis.swift */; }; - D7C029EC2315B4E6C96D8384AF115EFD /* LineBreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9FA207270861799BC913C8A79F0D838 /* LineBreak.swift */; }; - D8180DCD5A5966A837F442D6980EAE65 /* SecureEnclaveAccessControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7DE7062F30F20B675260AD70F1D95D2 /* SecureEnclaveAccessControl.swift */; }; - DA4CA8DC7F893219BCB98947A1874E36 /* ConstraintView+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = D45C95C452A56172E43CD25DDF02FF7B /* ConstraintView+Extensions.swift */; }; - DAACDD0E122D9E930EE58EB804329571 /* Visitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24CF5F7105315FE78546471472EBD69F /* Visitor.swift */; }; - DAD2C2DCEFF5CCBB04795298912FE05A /* TestDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8CA669666062DAE8749FD8C50FD543BC /* TestDestination.swift */; }; - DADCDE2A3EA159926B791E6CC5D6AFF4 /* BaseDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA5579E44C5AB58BACC8A022DC29742F /* BaseDestination.swift */; }; - DBB53FE0194E94ED886E7C222EE80939 /* CwlSerializingContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73B20CD3EC638B3E5C37C776E94375EE /* CwlSerializingContext.swift */; }; - E05D40C5A5543032ED20D03703947F1E /* ObjcExceptionBridging.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C2A9E8FF35390B14DA87B2065DC9D3D /* ObjcExceptionBridging.framework */; }; - E218DF00B5B23FB13813FF6AD156DE81 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - E27DEEE60FB5E02878B771100ED25611 /* ReachabilitySwift-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 002949C44ABBCE669C5F89D657A750C7 /* ReachabilitySwift-dummy.m */; }; - E28FDE69420F7AFD26F064621B0CF1F8 /* RequestIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6026AC2EF06658724EBB4F6DF8AE00FC /* RequestIdentifier.swift */; }; - E2CD8F7032D3E289AA6CDE2E892E1E85 /* CwlFew.swift in Sources */ = {isa = PBXBuildFile; fileRef = A58C97BE9B09994464EABE964E0BC602 /* CwlFew.swift */; }; - E36810095159A5872D9352B642E72E52 /* PrePostFixLogFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB40853EBAF088D0F163D8E1C55DAC34 /* PrePostFixLogFormatter.swift */; }; - E379CD01D219EF768A8DA0274D7B029A /* UILayoutSupport+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CA1F79E3A68062478B415F562068291 /* UILayoutSupport+Extensions.swift */; }; - E40EF3F5A37A4A2A613D35F82F7AE0AB /* iterator.c in Sources */ = {isa = PBXBuildFile; fileRef = 598454F1CD1BB2F24E721099120F5F69 /* iterator.c */; }; - E4A6DE44D023DC61867793134BC61A0F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A1C32FD6CB008180190548810584C4C /* SystemConfiguration.framework */; }; - E506864A2C8124940052BC776660844E /* CwlResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = B05956D500DC15F479E7AD001AEA35E0 /* CwlResult.swift */; }; - E53EE383BFEF15143B90A062405C3DE5 /* ConstraintMakerFinalizable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83CD1C79F2D3491D68C20FC85454E536 /* ConstraintMakerFinalizable.swift */; }; - E848CCAAD23E49A14FA1C98902EB9FC9 /* DispatchQueue+XCGAdditions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A2413DC8230989818ACCB1BF02F1BDBC /* DispatchQueue+XCGAdditions.swift */; }; - E88674607C4CA8B0333A0890E100C3CB /* DownGroffRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 960FD13CACC3D1A0444CCE330FBC609F /* DownGroffRenderable.swift */; }; - E9DCBB3873D475D5FED0135F6FC8AB87 /* CwlScalarScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = FEF9148468F06D024CC8B407D990B4A4 /* CwlScalarScanner.swift */; }; - E9EF34B5421A2C2EA21EFB0FD2D46ADA /* CwlUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 0543E666F34FD1CCFD0B0B73DAE7533F /* CwlUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA7DCBB8F26CC3030B19E5B6EE734B65 /* SwiftyUserDefaults-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C44C9D97F16900961E84C43E68E57E28 /* SwiftyUserDefaults-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EABDCA9066E4A6A12BDEB484503FD00C /* CwlKeyValueObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD4FB1E7B5CC7411C45862060C66ECD7 /* CwlKeyValueObserver.swift */; }; - EAC4554A5D7EB1D416FDBF8B333CE8F7 /* ObjcExceptionBridging-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F503C85E0E7004CE5429680B4BC74D4A /* ObjcExceptionBridging-dummy.m */; }; - EB30B476A07E02D56B800F15AA22CE03 /* SnapKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E9BF3AC84C37D81BBBCF89CE2A82983 /* SnapKit-dummy.m */; }; - EB603B07122C57489616E5ED3F3831CB /* HelperFunctions.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD5230217C4C19D9BF5A86EC9B73F68D /* HelperFunctions.swift */; }; - EB6AAD23C34D1566DB0BBBE4475C549A /* html.c in Sources */ = {isa = PBXBuildFile; fileRef = 9FEB3AB3846318BD7E9ED53A8606C046 /* html.c */; }; - ED94B29E1519D1FCB0ED81FDEA123813 /* iterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E8E192E0418B1C1ECEA8732A4F35699E /* iterator.h */; settings = {ATTRIBUTES = (Project, ); }; }; - ED9989FF248A88938A1F95D1A33220E2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - EEB24213002E6F6887DDB6C74B15A832 /* ParameterEncoding.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10AB44E053D337762C1B7D1CE54240B3 /* ParameterEncoding.swift */; }; - EF33AB914D371B0BF0310472809AE4EC /* ConstraintView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 481FED89593E2C182819F8542437686A /* ConstraintView.swift */; }; - EF985D4807D5751D56700D9E5F928AE0 /* AFError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F987FD2EDE99C88208ACA7C0AAEFBFEC /* AFError.swift */; }; - F012255DFE7ECA64646A30D42F8F9E4F /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */; }; - F0F491054B751D638802FF21070AAE42 /* scanners.c in Sources */ = {isa = PBXBuildFile; fileRef = E191E6E6A456F554C947F3BDEE5FDE8A /* scanners.c */; }; - F1D2F6BE7834D427D31476EFE7234C58 /* CwlRandom.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44EA09731028B17AE674581D8477C3C4 /* CwlRandom.swift */; }; - F21C858819FA6DC62A0923392FDA2F15 /* Down-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 233666306FB8740B0C3067022C9C5662 /* Down-dummy.m */; }; - F33C32EF7F1428CA22EF57659F71CF99 /* ConstraintMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 045D69F8D9E3FD59F5E5F7FE2532701D /* ConstraintMaker.swift */; }; - F3877A297117F1BFB556F85FB16C61D1 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C883F77CA1368F0E1278C5954003EA2 /* Error.swift */; }; - F4D07FB344B05AFB74FD8DE6FED40F74 /* ThematicBreak.swift in Sources */ = {isa = PBXBuildFile; fileRef = F091DE4EF25082DBB27B785DE016979E /* ThematicBreak.swift */; }; - F532123E8A7F7AD8E4DCD8B9040507C1 /* BaseNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FB304F6EF01011E0D9CC367540DB0DD /* BaseNode.swift */; }; - F59E21DEDB1D9EF6C888B1E33165F414 /* ConsoleDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6ECEAE4591739FBAD3AFCCDCECF9842 /* ConsoleDestination.swift */; }; - F8640F22197760F8D190A479A50C01E1 /* CwlLifetime.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9776E29E896DFB6D1107BF6A2C8330BA /* CwlLifetime.swift */; }; - F8B7EEA0198E2FCD58D1EC3CFD5FCB63 /* Paragraph.swift in Sources */ = {isa = PBXBuildFile; fileRef = 905E8F275E4270B162710A3D559FC63A /* Paragraph.swift */; }; - FC690F6DCF4D064C0A90D64A16D402C1 /* CwlCustomExecutionContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8B3FD28D55D736E8CA76C9E6D6876DD /* CwlCustomExecutionContext.swift */; }; - FD85DB3EC0D275BA7F71F79D1BB5C890 /* DebugVisitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDE00E2FE15ED004F2965399DFEBE63C /* DebugVisitor.swift */; }; - FD8D5BB80B02846BA0314F566C619754 /* DevFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = DACC7E9BE7D2FDDD926FDFDF60859589 /* DevFilter.swift */; }; - FE53A56C4578B2A8864662F77935C17C /* inlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 34400FF5F4A425637940AA2243A84B68 /* inlines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FEA429B74932B4AF58A12A1ED8B8D601 /* Netable.h in Headers */ = {isa = PBXBuildFile; fileRef = 296ADC195058BD370A08FDF8407C53A3 /* Netable.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF5F5A8A55949D9495C13C4DED96ABA0 /* ConstraintInsetTarget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0D4FBC1215943B521831EB1ADFA076 /* ConstraintInsetTarget.swift */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 11BAE004D8C3364DCF314A7DF1DFEC43 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = D118A6A04828FD3CDA8640CD2B6796D2; - remoteInfo = SwiftyJSON; - }; - 159CD19E70CDD79B776F3EA851FD9B9F /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 746615E9A06AABA6F288B49A10B63E10; - remoteInfo = ObjcExceptionBridging; - }; - 170E4B7C215272E9BA157364C6E12CC1 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = EAAA1AD3A8A1B59AB91319EE40752C6D; - remoteInfo = Alamofire; - }; - 2B82BA1FD6851B6F9B1DD2E738A1A047 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 746615E9A06AABA6F288B49A10B63E10; - remoteInfo = ObjcExceptionBridging; - }; - 306FC06D7FE5C66060B66281D25A3E6A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = A049F3164EBC335A7982A4E1FB3A5EAA; - remoteInfo = SwiftyUserDefaults; - }; - 41CE38A4FB9FAA518F668EEF9B7F7B94 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 52B60EC2A583F24ACBB69C113F5488B9; - remoteInfo = SwiftLint; - }; - 65F200815CCB01C5F67BA19A7E902F51 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 19622742EBA51E823D6DAE3F8CDBFAD4; - remoteInfo = SnapKit; - }; - 6B2EB8B36EF065BA464766A9AD29E8C7 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 4B39B1698B2025E64AC8731236DBDAE1; - remoteInfo = Netable; - }; - 6F745A59FC049C404A464FDD900EBB79 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = E3D29E214E770F28213292B63B7A05DA; - remoteInfo = Valet; - }; - 88211ACE91B10D2FDE60FDC5384250BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 0B00B2C167CD783351BD1D00BD5AD1F8; - remoteInfo = ReachabilitySwift; - }; - B29C275230FB79CCA71335F78303B928 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 07AFE6B9C0D64C3222F1B3FAA995664C; - remoteInfo = XCGLogger; - }; - E25D4F92413B9AFB36C63D06B109F2BA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = BEC9ADA475B5D1902939C94E828E47A3; - remoteInfo = CwlUtils; - }; - F345E7B1F3BE06E655931AC27F7E5A38 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = B4575FF01775E963E58050542C9A4E7A; - remoteInfo = Down; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 0008DB4151A3318B45CFABC54419F778 /* Down-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Down-Info.plist"; sourceTree = "<group>"; }; - 002949C44ABBCE669C5F89D657A750C7 /* ReachabilitySwift-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ReachabilitySwift-dummy.m"; sourceTree = "<group>"; }; - 0046860E8C77E6250D4434B69CF2F646 /* ListItemPrefixGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListItemPrefixGenerator.swift; path = Source/AST/Visitors/ListItemPrefixGenerator.swift; sourceTree = "<group>"; }; - 007630DCE309A86B3C01C980CEDFA2E9 /* DownErrors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownErrors.swift; path = "Source/Enums & Options/DownErrors.swift"; sourceTree = "<group>"; }; - 01E100CA374DCF65946CFDB8926A9EBF /* NSAttributedString+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSAttributedString+Helpers.swift"; path = "Source/AST/Styling/Helpers/Extensions/NSAttributedString+Helpers.swift"; sourceTree = "<group>"; }; - 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 045D69F8D9E3FD59F5E5F7FE2532701D /* ConstraintMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMaker.swift; path = Source/ConstraintMaker.swift; sourceTree = "<group>"; }; - 046FD5E57F4B883549501BFD0B50BC97 /* HTTPMethod.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HTTPMethod.swift; path = Netable/Netable/HTTPMethod.swift; sourceTree = "<group>"; }; - 04DA0B4B7859765FB9CF6D29BD4347BF /* ConstraintDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDSL.swift; path = Source/ConstraintDSL.swift; sourceTree = "<group>"; }; - 0538A3EE27FE86934C66022F35080E65 /* Valet-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Valet-Info.plist"; sourceTree = "<group>"; }; - 0543E666F34FD1CCFD0B0B73DAE7533F /* CwlUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlUtils.h; path = Sources/CwlUtils/CwlUtils.h; sourceTree = "<group>"; }; - 05A2D11FF02427F1B6C2BFE8F2DB173B /* CwlUnanticipatedError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlUnanticipatedError.swift; path = Sources/CwlUtils/CwlUnanticipatedError.swift; sourceTree = "<group>"; }; - 05A72CC5B091046B010259D040347447 /* CwlUtils.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlUtils.release.xcconfig; sourceTree = "<group>"; }; - 07B852929F2881D285C102BEFAC433D6 /* ListItemParagraphStyler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListItemParagraphStyler.swift; path = Source/AST/Styling/Helpers/ListItemParagraphStyler.swift; sourceTree = "<group>"; }; - 0B062796F6710BFDFCA36378797FA6A5 /* Constraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Constraint.swift; path = Source/Constraint.swift; sourceTree = "<group>"; }; - 0C5A791D823EDA9C970F9989E42E311B /* ConstraintConstantTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConstantTarget.swift; path = Source/ConstraintConstantTarget.swift; sourceTree = "<group>"; }; - 0CA1F79E3A68062478B415F562068291 /* UILayoutSupport+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UILayoutSupport+Extensions.swift"; path = "Source/UILayoutSupport+Extensions.swift"; sourceTree = "<group>"; }; - 0CC5735224AF8F8C69E4B83D86C80972 /* SharedGroupIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SharedGroupIdentifier.swift; path = Sources/Valet/SharedGroupIdentifier.swift; sourceTree = "<group>"; }; - 0D4AC309B572BF5D65200BDF51900E1B /* references.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = references.h; path = Source/cmark/references.h; sourceTree = "<group>"; }; - 0F5D6F71F88B1E9596CEA4DA312B8413 /* DownView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownView.swift; path = Source/Views/DownView.swift; sourceTree = "<group>"; }; - 10AB44E053D337762C1B7D1CE54240B3 /* ParameterEncoding.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParameterEncoding.swift; path = Source/ParameterEncoding.swift; sourceTree = "<group>"; }; - 10AFED9690DE5F05F44EB12E1D472661 /* Timeline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Timeline.swift; path = Source/Timeline.swift; sourceTree = "<group>"; }; - 11E0700D600F467A27A0380AB9F00E62 /* ReachabilitySwift.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.release.xcconfig; sourceTree = "<group>"; }; - 121C719496F287194EE55831B5040185 /* SecItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecItem.swift; path = Sources/Valet/Internal/SecItem.swift; sourceTree = "<group>"; }; - 1289849BFD7121E178A3C765D115B2FA /* TagFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TagFilter.swift; path = Sources/XCGLogger/Filters/TagFilter.swift; sourceTree = "<group>"; }; - 12C66BC029C36AC1D2A223503293A305 /* NetworkReachabilityManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = NetworkReachabilityManager.swift; path = Source/NetworkReachabilityManager.swift; sourceTree = "<group>"; }; - 132F84B48C90959E8399EA4B7EEBF525 /* LogFormatterProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogFormatterProtocol.swift; path = Sources/XCGLogger/LogFormatters/LogFormatterProtocol.swift; sourceTree = "<group>"; }; - 133AE864BC883B7257B70F90E32DFEB0 /* Notifications.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Notifications.swift; path = Source/Notifications.swift; sourceTree = "<group>"; }; - 15925D1178399947FFA350B6D0A50E27 /* xml.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = xml.c; path = Source/cmark/xml.c; sourceTree = "<group>"; }; - 1816C379B3AA025CF1CA8AA3CD9475FF /* ConstraintLayoutGuide.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuide.swift; path = Source/ConstraintLayoutGuide.swift; sourceTree = "<group>"; }; - 186E40461E2FE48E915192953ACCEAB4 /* XCGLogger-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "XCGLogger-umbrella.h"; sourceTree = "<group>"; }; - 19505C3754CA22D260C9A9C806CE469F /* CwlUtils.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CwlUtils.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1A1C32FD6CB008180190548810584C4C /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/SystemConfiguration.framework; sourceTree = DEVELOPER_DIR; }; - 1A4DEDA557FECEA0ACFEC26265878877 /* ConstraintLayoutGuideDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutGuideDSL.swift; path = Source/ConstraintLayoutGuideDSL.swift; sourceTree = "<group>"; }; - 1A86CC926C8ED616B391E9B47816A666 /* DownCommonMarkRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownCommonMarkRenderable.swift; path = Source/Renderers/DownCommonMarkRenderable.swift; sourceTree = "<group>"; }; - 1A9247A47297D44D4E93FEA5875F5F3B /* blocks.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = blocks.c; path = Source/cmark/blocks.c; sourceTree = "<group>"; }; - 1AC58E3834D5DF74927CF05C9E637666 /* CwlFrameAddress.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CwlFrameAddress.h; path = Sources/CwlFrameAddress/include/CwlFrameAddress.h; sourceTree = "<group>"; }; - 1AC82D0F9C6F570239096376ADCC338D /* CodeBlockOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodeBlockOptions.swift; path = Source/AST/Styling/Options/CodeBlockOptions.swift; sourceTree = "<group>"; }; - 1BE20A7603B980909541FA6C3E0954FC /* commonmark.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = commonmark.c; path = Source/cmark/commonmark.c; sourceTree = "<group>"; }; - 1CAB16A12A28E8BE749202B03552307A /* ObjcExceptionBridging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjcExceptionBridging.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 1F7E958ED335F2F2638913E5275F3256 /* SoftBreak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SoftBreak.swift; path = Source/AST/Nodes/SoftBreak.swift; sourceTree = "<group>"; }; - 1F8407C1AB84E2E13048380916BA1573 /* Netable.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Netable.modulemap; sourceTree = "<group>"; }; - 1FB2F2B8E1C67EBC6C505D06EF0DEB3C /* XCGLogger-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "XCGLogger-prefix.pch"; sourceTree = "<group>"; }; - 1FFC4C45344256C2491CFF8FA90A3947 /* ConstraintLayoutGuide+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintLayoutGuide+Extensions.swift"; path = "Source/ConstraintLayoutGuide+Extensions.swift"; sourceTree = "<group>"; }; - 20693984F54A9883759E963D9B4F37CD /* Down.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Down.h; path = Source/Down.h; sourceTree = "<group>"; }; - 20DAB868673CC5CC8F0C00E80B60A8F8 /* DownStylerConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownStylerConfiguration.swift; path = Source/AST/Styling/Stylers/DownStylerConfiguration.swift; sourceTree = "<group>"; }; - 215AC509102DE153EE595ACC1C363351 /* FileDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileDestination.swift; path = Sources/XCGLogger/Destinations/FileDestination.swift; sourceTree = "<group>"; }; - 2172B5336BB539626104D9C01841FE60 /* ThematicBreakAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThematicBreakAttribute.swift; path = "Source/AST/Styling/Custom Attributes/ThematicBreakAttribute.swift"; sourceTree = "<group>"; }; - 2177DBCF4E795DA115B7682C5DD3C445 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; }; - 21964FBCF19F00B1F591F246EAE17B96 /* DownAttributedStringRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownAttributedStringRenderable.swift; path = Source/Renderers/DownAttributedStringRenderable.swift; sourceTree = "<group>"; }; - 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 21C1192ECF7251808FCE7A8582897537 /* ConstraintViewDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintViewDSL.swift; path = Source/ConstraintViewDSL.swift; sourceTree = "<group>"; }; - 2218986D56C85CB3DE114397B4C8F37B /* Node.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Node.swift; path = Source/AST/Nodes/Node.swift; sourceTree = "<group>"; }; - 233666306FB8740B0C3067022C9C5662 /* Down-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Down-dummy.m"; sourceTree = "<group>"; }; - 238B330EEBDF38E736F0023F5E3BBB12 /* Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Alamofire.swift; path = Source/Alamofire.swift; sourceTree = "<group>"; }; - 23B65FDF5AFED74E62E95550BF2DA6B9 /* List.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = List.swift; path = Source/AST/Nodes/List.swift; sourceTree = "<group>"; }; - 24CF5F7105315FE78546471472EBD69F /* Visitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Visitor.swift; path = Source/AST/Visitors/Visitor.swift; sourceTree = "<group>"; }; - 25690F4C04AA595ACF0A1138DA0DF9CB /* BaseQueuedDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseQueuedDestination.swift; path = Sources/XCGLogger/Destinations/BaseQueuedDestination.swift; sourceTree = "<group>"; }; - 26CF637DA27AAECE2D60B6B282B1A3BA /* DefaultsObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsObserver.swift; path = Sources/DefaultsObserver.swift; sourceTree = "<group>"; }; - 277BB898DD4B25045C1B59AA9615CB55 /* ObjcExceptionBridging-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ObjcExceptionBridging-Info.plist"; sourceTree = "<group>"; }; - 284363FA6D2D090C6AA9D6EA418FD7DA /* SwiftyJSON.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.debug.xcconfig; sourceTree = "<group>"; }; - 28DFB7DB5690FD745C23CCC4082D9C66 /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Netable/Netable/Request.swift; sourceTree = "<group>"; }; - 292BF412B79FF2CF2D477AAABAF4B2CB /* SwiftyUserDefaults.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyUserDefaults.modulemap; sourceTree = "<group>"; }; - 296ADC195058BD370A08FDF8407C53A3 /* Netable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Netable.h; path = Netable/Netable/Netable.h; sourceTree = "<group>"; }; - 2BB5F01AE6D0F412759FF440A2FF6387 /* DownView.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = DownView.bundle; path = Resources/DownView.bundle; sourceTree = "<group>"; }; - 2C2A9E8FF35390B14DA87B2065DC9D3D /* ObjcExceptionBridging.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ObjcExceptionBridging.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2C517B93F174037AE9147CA335342D50 /* SwiftyJSON.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyJSON.release.xcconfig; sourceTree = "<group>"; }; - 2C883F77CA1368F0E1278C5954003EA2 /* Error.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Error.swift; path = Netable/Netable/Error.swift; sourceTree = "<group>"; }; - 2E6B5EA7A8DB975CF0C8BB6F4F7CC31D /* cmark_export.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cmark_export.h; path = Source/cmark/cmark_export.h; sourceTree = "<group>"; }; - 2F1F2F156CC0EF892B17FC37C88E6FE2 /* DefaultsKeys.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsKeys.swift; path = Sources/DefaultsKeys.swift; sourceTree = "<group>"; }; - 302A905D3C42E5148462079A86819BFF /* Defaults.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Defaults.swift; path = Sources/Defaults.swift; sourceTree = "<group>"; }; - 30436483136E8759C9D17244AFC3A339 /* Alamofire-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-prefix.pch"; sourceTree = "<group>"; }; - 319060E13A7883C6ED840C02693874D8 /* Text.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Text.swift; path = Source/AST/Nodes/Text.swift; sourceTree = "<group>"; }; - 32DDD719AC029B64B2C929ED7C8FC08E /* NSMutableAttributedString+Attributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSMutableAttributedString+Attributes.swift"; path = "Source/AST/Styling/Helpers/Extensions/NSMutableAttributedString+Attributes.swift"; sourceTree = "<group>"; }; - 33D240F1482114839857057D5903D9D3 /* CwlUtils-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlUtils-prefix.pch"; sourceTree = "<group>"; }; - 34400FF5F4A425637940AA2243A84B68 /* inlines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = inlines.h; path = Source/cmark/inlines.h; sourceTree = "<group>"; }; - 349201D73DAA51E775F6E4C21B4B07DA /* HtmlInline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HtmlInline.swift; path = Source/AST/Nodes/HtmlInline.swift; sourceTree = "<group>"; }; - 34A581D8CDBA4E311F0D407F90C67878 /* ConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintItem.swift; path = Source/ConstraintItem.swift; sourceTree = "<group>"; }; - 3625C1E94EA43B13572A085AAADF1E99 /* DestinationProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DestinationProtocol.swift; path = Sources/XCGLogger/Destinations/DestinationProtocol.swift; sourceTree = "<group>"; }; - 374B221DA2F85351E855CC12F36E72C8 /* ConstraintPriority.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriority.swift; path = Source/ConstraintPriority.swift; sourceTree = "<group>"; }; - 374CC110DF352B6327E0708D1B9ED78C /* SnapKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-prefix.pch"; sourceTree = "<group>"; }; - 3A3BF02D02AB334493280CFB9E22542F /* houdini_html_u.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = houdini_html_u.c; path = Source/cmark/houdini_html_u.c; sourceTree = "<group>"; }; - 3A67066413838BD06E05CD86613D3054 /* URLRequest+EncodeURL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+EncodeURL.swift"; path = "Netable/Netable/URLRequest+EncodeURL.swift"; sourceTree = "<group>"; }; - 3BA6262A9DBD6E322E48062FA76DCEE4 /* XCGLogger-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "XCGLogger-dummy.m"; sourceTree = "<group>"; }; - 3BEBDA16C6B8F76D430091054300FA5E /* Alamofire.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.debug.xcconfig; sourceTree = "<group>"; }; - 3C3492C7019CEE9234D102F4FE38BB2A /* FilterProtocol.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FilterProtocol.swift; path = Sources/XCGLogger/Filters/FilterProtocol.swift; sourceTree = "<group>"; }; - 3CF6D33536A7E041A81625573DA0DED4 /* URLRequest+EncodeParameters.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+EncodeParameters.swift"; path = "Netable/Netable/URLRequest+EncodeParameters.swift"; sourceTree = "<group>"; }; - 3D3E46F970D04898E9718B3A7AED0FAF /* Base64LogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Base64LogFormatter.swift; path = Sources/XCGLogger/LogFormatters/Base64LogFormatter.swift; sourceTree = "<group>"; }; - 3DADBD42B644CF60DC4806C82994987D /* cmark_version.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cmark_version.h; path = Source/cmark/cmark_version.h; sourceTree = "<group>"; }; - 3FEA5F6CCF86397E36BA19DF0C3E8AC5 /* Netable.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Netable.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 40E80E6B38647701DCED0F13ACD0CADF /* Valet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Valet.swift; path = Sources/Valet/Valet.swift; sourceTree = "<group>"; }; - 41F7B92275566009F9A7A5C65373BC5E /* ConstraintRelatableTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelatableTarget.swift; path = Source/ConstraintRelatableTarget.swift; sourceTree = "<group>"; }; - 4252D96EFAFD762609665B730A0B5EF3 /* XCGLogger.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = XCGLogger.modulemap; sourceTree = "<group>"; }; - 42CA7C75C68A30C71715C7533A650183 /* Down.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Down.swift; path = Source/Down.swift; sourceTree = "<group>"; }; - 42F1E2222E73241DF913AB0CB2355622 /* ConstraintMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerExtendable.swift; path = Source/ConstraintMakerExtendable.swift; sourceTree = "<group>"; }; - 43090A59CB768538D6445FFC4569A2EB /* buffer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = buffer.h; path = Source/cmark/buffer.h; sourceTree = "<group>"; }; - 4323F0A51A309AD987E55963F71A81E4 /* DownOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownOptions.swift; path = "Source/Enums & Options/DownOptions.swift"; sourceTree = "<group>"; }; - 437B523EA1EAF19248CC460B1242C746 /* DownHTMLRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownHTMLRenderable.swift; path = Source/Renderers/DownHTMLRenderable.swift; sourceTree = "<group>"; }; - 43D3C2770C47E2AB9F3372E1EF585607 /* Pods-Quests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Quests.debug.xcconfig"; sourceTree = "<group>"; }; - 4466AFC0FE228CBF0498DBA664C738EF /* CwlDeque.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDeque.swift; path = Sources/CwlUtils/CwlDeque.swift; sourceTree = "<group>"; }; - 44EA09731028B17AE674581D8477C3C4 /* CwlRandom.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlRandom.swift; path = Sources/CwlUtils/CwlRandom.swift; sourceTree = "<group>"; }; - 46D136B44F02DE1122F3A27CE012FCFA /* QuoteStripeOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuoteStripeOptions.swift; path = Source/AST/Styling/Options/QuoteStripeOptions.swift; sourceTree = "<group>"; }; - 475EF0E2E5166D8E04FF9CF4598A57A3 /* Down.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Down.debug.xcconfig; sourceTree = "<group>"; }; - 481FED89593E2C182819F8542437686A /* ConstraintView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintView.swift; path = Source/ConstraintView.swift; sourceTree = "<group>"; }; - 4A88148FE1D7DC7EC2C0B4275A89B9E3 /* ObjcExceptionBridging.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ObjcExceptionBridging.modulemap; sourceTree = "<group>"; }; - 4B59AC46CE7D01E5E28733DDE5AC4385 /* Document.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Document.swift; path = Source/AST/Nodes/Document.swift; sourceTree = "<group>"; }; - 4B9806F9D9219F8DB4DFF8BD73C5037A /* Image.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Image.swift; path = Source/AST/Nodes/Image.swift; sourceTree = "<group>"; }; - 4C90E8F3F21B7688E1FB09920322D768 /* Down.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Down.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 4D4F824C874FC0A4482BFD3A14D473B3 /* CloudAccessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CloudAccessibility.swift; path = Sources/Valet/CloudAccessibility.swift; sourceTree = "<group>"; }; - 4DD43F5A6F9F4AA4E198BA454F4B9FE1 /* Pods-Quests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Quests-Info.plist"; sourceTree = "<group>"; }; - 4F3E4C8CB68C05C761DBEB855142F24E /* CGRect+Helpers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGRect+Helpers.swift"; path = "Source/AST/Styling/Helpers/Extensions/CGRect+Helpers.swift"; sourceTree = "<group>"; }; - 504E0843DC8892A271BF34186360679E /* CwlFrameAddress.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = CwlFrameAddress.c; path = Sources/CwlFrameAddress/CwlFrameAddress.c; sourceTree = "<group>"; }; - 52540E2B96A66127E702E30DEA1554E9 /* CwlWrappers.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlWrappers.swift; path = Sources/CwlUtils/CwlWrappers.swift; sourceTree = "<group>"; }; - 52DB3CB5FA25A6ECC0AE2E02220FFD8C /* DefaultsBridges.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsBridges.swift; path = Sources/DefaultsBridges.swift; sourceTree = "<group>"; }; - 52E6D41B0506678C3718E22F65ACE80C /* LayoutConstraintItem.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraintItem.swift; path = Source/LayoutConstraintItem.swift; sourceTree = "<group>"; }; - 52F714FC99B15E1DEF873C471B5E2A3A /* Valet-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Valet-umbrella.h"; sourceTree = "<group>"; }; - 5352ACF3B3E7379270F4FAF819792C90 /* ConstraintDescription.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDescription.swift; path = Source/ConstraintDescription.swift; sourceTree = "<group>"; }; - 562BCE8DA84EEA1AA190ACC3D26ABEBE /* CodeBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CodeBlock.swift; path = Source/AST/Nodes/CodeBlock.swift; sourceTree = "<group>"; }; - 5646F84DBE18EFA6E57EFD8402A3BB2E /* ObjcExceptionBridging.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjcExceptionBridging.release.xcconfig; sourceTree = "<group>"; }; - 56BCD87146375A2FF4E2C4283DE6A39D /* KeychainError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = KeychainError.swift; path = Sources/Valet/KeychainError.swift; sourceTree = "<group>"; }; - 56FA7C2FE71176D04D7DF20A65803B68 /* CwlUtils.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = CwlUtils.modulemap; sourceTree = "<group>"; }; - 571FC3B0277F04AF40239568EFC057D9 /* ConstraintAttributes.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintAttributes.swift; path = Source/ConstraintAttributes.swift; sourceTree = "<group>"; }; - 575C61A285FBA9A5816AAD9EED5545A9 /* parser.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = parser.h; path = Source/cmark/parser.h; sourceTree = "<group>"; }; - 57EF65AB927CD026BE9E26C3B7678190 /* houdini_html_e.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = houdini_html_e.c; path = Source/cmark/houdini_html_e.c; sourceTree = "<group>"; }; - 582BCBAE32F6249D74F24C46F3301D33 /* CwlStackFrame.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlStackFrame.swift; path = Sources/CwlUtils/CwlStackFrame.swift; sourceTree = "<group>"; }; - 58660C1056956A1103CEC42BDE6002A7 /* SwiftLint.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.release.xcconfig; sourceTree = "<group>"; }; - 598454F1CD1BB2F24E721099120F5F69 /* iterator.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = iterator.c; path = Source/cmark/iterator.c; sourceTree = "<group>"; }; - 5BC4A4FF6B59ED4DC80B82CB0C234E75 /* Debugging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Debugging.swift; path = Source/Debugging.swift; sourceTree = "<group>"; }; - 5BD51F0B55ECCD878F746238F6F1E420 /* Alamofire-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Alamofire-dummy.m"; sourceTree = "<group>"; }; - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 5EFE400347E43DDF7C0E7D41ED3619B8 /* Defaults+StringToBool.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+StringToBool.swift"; path = "Sources/Defaults+StringToBool.swift"; sourceTree = "<group>"; }; - 600815CEA5267574FB028E4077BB9420 /* SwiftyJSON.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SwiftyJSON.modulemap; sourceTree = "<group>"; }; - 6026AC2EF06658724EBB4F6DF8AE00FC /* RequestIdentifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RequestIdentifier.swift; path = Netable/Netable/RequestIdentifier.swift; sourceTree = "<group>"; }; - 60437014A525019EC80FCB948DED9311 /* Styler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Styler.swift; path = Source/AST/Styling/Stylers/Styler.swift; sourceTree = "<group>"; }; - 607D62F11A96A8B260650FBCB93CCB67 /* FontCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FontCollection.swift; path = "Source/AST/Styling/Attribute Collections/FontCollection.swift"; sourceTree = "<group>"; }; - 615DF487334FA5F26E2286B0444830B1 /* XcodeColorsLogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XcodeColorsLogFormatter.swift; path = Sources/XCGLogger/LogFormatters/XcodeColorsLogFormatter.swift; sourceTree = "<group>"; }; - 623DCFB34EEC1C4CF0B58DB5CF23F300 /* CwlSysctl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlSysctl.swift; path = Sources/CwlUtils/CwlSysctl.swift; sourceTree = "<group>"; }; - 62C1A6DE6F727EFFDDC3CDC53F4F7F87 /* URL+XCGAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URL+XCGAdditions.swift"; path = "Sources/XCGLogger/Extensions/URL+XCGAdditions.swift"; sourceTree = "<group>"; }; - 653DAED1E2A1DF3B5895CE87725E147C /* Pods-Quests.debuginternal.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Quests.debuginternal.xcconfig"; sourceTree = "<group>"; }; - 654BA7CE925A4B04EEE52FF78910109E /* DownStyler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownStyler.swift; path = Source/AST/Styling/Stylers/DownStyler.swift; sourceTree = "<group>"; }; - 657095BDC3709F78C26D91E9D611FC3C /* ANSIColorLogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ANSIColorLogFormatter.swift; path = Sources/XCGLogger/LogFormatters/ANSIColorLogFormatter.swift; sourceTree = "<group>"; }; - 65D0131FECF28DA92D67B547AEB8702D /* SwiftyUserDefaults-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyUserDefaults-prefix.pch"; sourceTree = "<group>"; }; - 65D2A0D819B7AB225B07FD3B4399F46B /* .swift-version */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = ".swift-version"; sourceTree = "<group>"; }; - 66C8E8A33F8CB49E6170F410444D3779 /* Defaults+Subscripts.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+Subscripts.swift"; path = "Sources/Defaults+Subscripts.swift"; sourceTree = "<group>"; }; - 66F7C71DF4E03941E1D313B6C99D1E95 /* SwiftLint.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftLint.debug.xcconfig; sourceTree = "<group>"; }; - 67147485D634A6108537FC74E1175258 /* CGPoint+Translate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "CGPoint+Translate.swift"; path = "Source/AST/Styling/Helpers/Extensions/CGPoint+Translate.swift"; sourceTree = "<group>"; }; - 68D7754A6883A74528E6B5E7D4EA404C /* Heading.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Heading.swift; path = Source/AST/Nodes/Heading.swift; sourceTree = "<group>"; }; - 6A0305697366CA91FFF1FD4A20D63B02 /* SwiftyUserDefaults-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyUserDefaults-dummy.m"; sourceTree = "<group>"; }; - 6C97D22B880620C9355D5A75303A45E4 /* SwiftyUserDefaults-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyUserDefaults-Info.plist"; sourceTree = "<group>"; }; - 6FB304F6EF01011E0D9CC367540DB0DD /* BaseNode.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseNode.swift; path = Source/AST/Nodes/BaseNode.swift; sourceTree = "<group>"; }; - 6FBEA927D8BB8FD71C656732BFFBCF82 /* utf8.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = utf8.h; path = Source/cmark/utf8.h; sourceTree = "<group>"; }; - 6FD690BFF43FC7A22F3FE9718ACC731A /* node.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = node.c; path = Source/cmark/node.c; sourceTree = "<group>"; }; - 7009F72EA49BB6886B1A448A514FED38 /* references.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = references.c; path = Source/cmark/references.c; sourceTree = "<group>"; }; - 70C8CCE17C228EDE38212144FDA68672 /* DelayedOperations.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DelayedOperations.swift; path = Netable/Netable/DelayedOperations.swift; sourceTree = "<group>"; }; - 7162BD4638407733290E4195E52B1CB0 /* ObjcExceptionBridging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ObjcExceptionBridging.h; path = Sources/ObjcExceptionBridging/include/ObjcExceptionBridging.h; sourceTree = "<group>"; }; - 73A807A3F2F3BE739662AC6372AF85E3 /* AutoRotatingFileDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AutoRotatingFileDestination.swift; path = Sources/XCGLogger/Destinations/AutoRotatingFileDestination.swift; sourceTree = "<group>"; }; - 73B20CD3EC638B3E5C37C776E94375EE /* CwlSerializingContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlSerializingContext.swift; path = Sources/CwlUtils/CwlSerializingContext.swift; sourceTree = "<group>"; }; - 73B24FD1EFB89FECBE6BB9559409A07D /* houdini_href_e.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = houdini_href_e.c; path = Source/cmark/houdini_href_e.c; sourceTree = "<group>"; }; - 759866940DB08E719C29234364E4CF6D /* RetryConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = RetryConfiguration.swift; path = Netable/Netable/RetryConfiguration.swift; sourceTree = "<group>"; }; - 76480365DE31961A4E5E2F19B30C3B83 /* render.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = render.c; path = Source/cmark/render.c; sourceTree = "<group>"; }; - 77EA823E366709D6F72C2C00C89671B6 /* CwlUtils-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CwlUtils-umbrella.h"; sourceTree = "<group>"; }; - 785833AD4A54C2BAAA470C1EF052743C /* URLRequest+Multipart.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "URLRequest+Multipart.swift"; path = "Netable/Netable/URLRequest+Multipart.swift"; sourceTree = "<group>"; }; - 79937B31EBA742AB8A2A4271ABB83B4A /* Pods-Quests.releaseinternal.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Quests.releaseinternal.xcconfig"; sourceTree = "<group>"; }; - 79BD059EB91906D9ECC927581D5B8D95 /* ConstraintDirectionalInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsetTarget.swift; path = Source/ConstraintDirectionalInsetTarget.swift; sourceTree = "<group>"; }; - 7C0D4FBC1215943B521831EB1ADFA076 /* ConstraintInsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsetTarget.swift; path = Source/ConstraintInsetTarget.swift; sourceTree = "<group>"; }; - 7C49518C9662BD7FF49B56634CFDEC6F /* latex.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = latex.c; path = Source/cmark/latex.c; sourceTree = "<group>"; }; - 7CC3D803BAF2B9EC9B31227268930E4C /* ParagraphStyleCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ParagraphStyleCollection.swift; path = "Source/AST/Styling/Attribute Collections/ParagraphStyleCollection.swift"; sourceTree = "<group>"; }; - 7CC5AA098C5B8E2690592B5AAC8C8860 /* cmark_ctype.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cmark_ctype.h; path = Source/cmark/cmark_ctype.h; sourceTree = "<group>"; }; - 7D535DC2DDCF312C3AE940CA980518AF /* man.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = man.c; path = Source/cmark/man.c; sourceTree = "<group>"; }; - 8039C515478BDF83C488F6890E3AAA43 /* node.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = node.h; path = Source/cmark/node.h; sourceTree = "<group>"; }; - 81757FB6843CCF3E2E8620E059D96795 /* ReachabilitySwift.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ReachabilitySwift.debug.xcconfig; sourceTree = "<group>"; }; - 8219D76EF85A7E294A866D2C296FB02A /* ConstraintOffsetTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintOffsetTarget.swift; path = Source/ConstraintOffsetTarget.swift; sourceTree = "<group>"; }; - 830E5F588A3D15E2971C9EDBA54FB31C /* BlockBackgroundColorAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockBackgroundColorAttribute.swift; path = "Source/AST/Styling/Custom Attributes/BlockBackgroundColorAttribute.swift"; sourceTree = "<group>"; }; - 83CD1C79F2D3491D68C20FC85454E536 /* ConstraintMakerFinalizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerFinalizable.swift; path = Source/ConstraintMakerFinalizable.swift; sourceTree = "<group>"; }; - 84A3A59717680DBB9B7FF0AD7F8CE313 /* Code.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Code.swift; path = Source/AST/Nodes/Code.swift; sourceTree = "<group>"; }; - 85950F857DAA1CF1776B29E1B7A3FABA /* CwlExecutionType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlExecutionType.swift; path = Sources/CwlUtils/CwlExecutionType.swift; sourceTree = "<group>"; }; - 860F7079A4EDCC8671D5B8FEE1A12740 /* SinglePromptSecureEnclaveValet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SinglePromptSecureEnclaveValet.swift; path = Sources/Valet/SinglePromptSecureEnclaveValet.swift; sourceTree = "<group>"; }; - 86237AC72A38FA030DE94BE7A5847F08 /* XCGLogger.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = XCGLogger.swift; path = Sources/XCGLogger/XCGLogger.swift; sourceTree = "<group>"; }; - 8674B6197C2E13F68D41D0654B36821B /* CwlAddressInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlAddressInfo.swift; path = Sources/CwlUtils/CwlAddressInfo.swift; sourceTree = "<group>"; }; - 86CA4E18580FA8A6D3A7779CA3CC2269 /* Response.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Response.swift; path = Source/Response.swift; sourceTree = "<group>"; }; - 875082FB2395F154D808DE9CD0471394 /* Netable-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Netable-umbrella.h"; sourceTree = "<group>"; }; - 87DA4EC98A3FE56C9439E8A29B3E1FEC /* SwiftyJSON-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SwiftyJSON-dummy.m"; sourceTree = "<group>"; }; - 87DE2A9CB91C9F68A0E64A1DA95D214F /* NSAttributedString+HTML.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "NSAttributedString+HTML.swift"; path = "Source/Extensions/NSAttributedString+HTML.swift"; sourceTree = "<group>"; }; - 887599C323AED7F80DE24CE15D25DE87 /* CwlUtils-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CwlUtils-dummy.m"; sourceTree = "<group>"; }; - 889A498116FE76E35F226E44F9B9178E /* Valet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Valet.debug.xcconfig; sourceTree = "<group>"; }; - 88A6652ADB1FCECCCEC4185CB1B48271 /* Netable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Netable.swift; path = Netable/Netable/Netable.swift; sourceTree = "<group>"; }; - 8997BC92BBEFC740F15DEE27867E2F72 /* buffer.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = buffer.c; path = Source/cmark/buffer.c; sourceTree = "<group>"; }; - 8A1C453AC2DC5DDF5275222D42CCC55B /* ServerTrustPolicy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ServerTrustPolicy.swift; path = Source/ServerTrustPolicy.swift; sourceTree = "<group>"; }; - 8A32D5F3A0DE08F28E56A5DD3FA2364D /* Pods_Quests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Quests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 8A3AB6BAFA6730C7021A51AC4C55C958 /* SwiftyUserDefaults.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyUserDefaults.debug.xcconfig; sourceTree = "<group>"; }; - 8B550E9D20F01101C17B0682FA50162E /* SwiftyUserDefaults.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SwiftyUserDefaults.release.xcconfig; sourceTree = "<group>"; }; - 8CA669666062DAE8749FD8C50FD543BC /* TestDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TestDestination.swift; path = Sources/XCGLogger/Destinations/TestDestination.swift; sourceTree = "<group>"; }; - 8D4049821160F8FEB828B45215E93819 /* XCGLogger-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "XCGLogger-Info.plist"; sourceTree = "<group>"; }; - 8E9BF3AC84C37D81BBBCF89CE2A82983 /* SnapKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "SnapKit-dummy.m"; sourceTree = "<group>"; }; - 8F1F538159E2AB295476257164E29E15 /* Alamofire.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Alamofire.release.xcconfig; sourceTree = "<group>"; }; - 8F35BD06F3781CCA225CF510FF5581F2 /* Emphasis.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Emphasis.swift; path = Source/AST/Nodes/Emphasis.swift; sourceTree = "<group>"; }; - 900CFF4FBCD9F891D1426572E8A9B002 /* Valet-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Valet-prefix.pch"; sourceTree = "<group>"; }; - 905E8F275E4270B162710A3D559FC63A /* Paragraph.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Paragraph.swift; path = Source/AST/Nodes/Paragraph.swift; sourceTree = "<group>"; }; - 90F1EE952647A49B24394781B2EE749F /* CwlDispatch.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDispatch.swift; path = Sources/CwlUtils/CwlDispatch.swift; sourceTree = "<group>"; }; - 90FFACAD9C1B239BFD7D226DFF95D9BF /* Netable-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Netable-dummy.m"; sourceTree = "<group>"; }; - 91A07F1DFC3D3EA178AC2A0EA4804770 /* ConstraintRelation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintRelation.swift; path = Source/ConstraintRelation.swift; sourceTree = "<group>"; }; - 9222E289FA0973A7B68852726F37B546 /* String+ToHTML.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "String+ToHTML.swift"; path = "Source/Extensions/String+ToHTML.swift"; sourceTree = "<group>"; }; - 960FD13CACC3D1A0444CCE330FBC609F /* DownGroffRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownGroffRenderable.swift; path = Source/Renderers/DownGroffRenderable.swift; sourceTree = "<group>"; }; - 9776E29E896DFB6D1107BF6A2C8330BA /* CwlLifetime.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlLifetime.swift; path = Sources/CwlUtils/CwlLifetime.swift; sourceTree = "<group>"; }; - 979486118B3E90C08386079D57962701 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 990B82C56E795F245324493A40368941 /* inlines.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = inlines.c; path = Source/cmark/inlines.c; sourceTree = "<group>"; }; - 996388655B515B211FD7E6C1CC5D5648 /* Pods-Quests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Quests.modulemap"; sourceTree = "<group>"; }; - 9B5C174A31193D29CF7A6C9EE32EC1B3 /* ReachabilitySwift.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = ReachabilitySwift.modulemap; sourceTree = "<group>"; }; - 9C01129E1A49211507FBD3147141CC4C /* XCGLogger.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = XCGLogger.release.xcconfig; sourceTree = "<group>"; }; - 9C3BBFE7510841838DD77B8B6BC67C14 /* ColorCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ColorCollection.swift; path = "Source/AST/Styling/Attribute Collections/ColorCollection.swift"; sourceTree = "<group>"; }; - 9C8E7D75513A8C2700A630D50090F8C1 /* Pods-Quests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Quests-acknowledgements.markdown"; sourceTree = "<group>"; }; - 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; }; - 9DD7442645DB8444B769DF9E0FBC8D1D /* DownRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownRenderable.swift; path = Source/Renderers/DownRenderable.swift; sourceTree = "<group>"; }; - 9FEB3AB3846318BD7E9ED53A8606C046 /* html.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = html.c; path = Source/cmark/html.c; sourceTree = "<group>"; }; - A0BFCF7534C452C415E20577EB6470CE /* CwlCollection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCollection.swift; path = Sources/CwlUtils/CwlCollection.swift; sourceTree = "<group>"; }; - A124759FC36633C4BCFF442DDC0DD139 /* CwlCaseNameCodable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCaseNameCodable.swift; path = Sources/CwlUtils/CwlCaseNameCodable.swift; sourceTree = "<group>"; }; - A15656353C0E201B5FB291A23D065F4C /* MigratableKeyValuePair.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MigratableKeyValuePair.swift; path = Sources/Valet/MigratableKeyValuePair.swift; sourceTree = "<group>"; }; - A1C12795C8377029B232DD291E6D4CF1 /* FileNameFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FileNameFilter.swift; path = Sources/XCGLogger/Filters/FileNameFilter.swift; sourceTree = "<group>"; }; - A2413DC8230989818ACCB1BF02F1BDBC /* DispatchQueue+XCGAdditions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+XCGAdditions.swift"; path = "Sources/XCGLogger/Extensions/DispatchQueue+XCGAdditions.swift"; sourceTree = "<group>"; }; - A2EC3E3F869BBE597FB4368BAA34D150 /* Valet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Valet.release.xcconfig; sourceTree = "<group>"; }; - A43460F03BF97E0607AEF210DEAB2DA7 /* MigrationError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MigrationError.swift; path = Sources/Valet/MigrationError.swift; sourceTree = "<group>"; }; - A456C4E27C61403A834AB234F21E5FED /* SwiftyJSON-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SwiftyJSON-Info.plist"; sourceTree = "<group>"; }; - A4AC514372EE01110CAF88F3F3B9A96B /* SecureEnclave.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureEnclave.swift; path = Sources/Valet/SecureEnclave.swift; sourceTree = "<group>"; }; - A58C97BE9B09994464EABE964E0BC602 /* CwlFew.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlFew.swift; path = Sources/CwlUtils/CwlFew.swift; sourceTree = "<group>"; }; - A65649E2763C3A6AFCE97D40030AFFD3 /* Down-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Down-prefix.pch"; sourceTree = "<group>"; }; - A6F6399F71247BFCE8003FA71DCF18DE /* ReachabilitySwift-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "ReachabilitySwift-Info.plist"; sourceTree = "<group>"; }; - A720109E0B4B2F62512A016399A47420 /* SnapKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = SnapKit.modulemap; sourceTree = "<group>"; }; - A7DE7062F30F20B675260AD70F1D95D2 /* SecureEnclaveAccessControl.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureEnclaveAccessControl.swift; path = Sources/Valet/SecureEnclaveAccessControl.swift; sourceTree = "<group>"; }; - A883D0984AAB83018D974AC31E0C663A /* CwlOnDelete.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlOnDelete.swift; path = Sources/CwlUtils/CwlOnDelete.swift; sourceTree = "<group>"; }; - A92BFA6528AF5E515A1D559DBBAD54D8 /* CustomBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomBlock.swift; path = Source/AST/Nodes/CustomBlock.swift; sourceTree = "<group>"; }; - AA0D73245FF9B9A283B642C6A9C16F75 /* Pods-Quests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Quests-acknowledgements.plist"; sourceTree = "<group>"; }; - AA18A98AF687D59BD204D682BDB59A6F /* CwlExec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlExec.swift; path = Sources/CwlUtils/CwlExec.swift; sourceTree = "<group>"; }; - AAD608246B69F940724E408CB1F97F32 /* SwiftyJSON.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SwiftyJSON.swift; path = Source/SwiftyJSON/SwiftyJSON.swift; sourceTree = "<group>"; }; - AB00DA18DF38C0B4EE67AC0F7F6B5A48 /* Valet-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Valet-dummy.m"; sourceTree = "<group>"; }; - AB2EBF0555A00DF7A988268095CF7292 /* Alamofire-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Alamofire-Info.plist"; sourceTree = "<group>"; }; - ADFB607451E937893442321C79C96583 /* DownASTRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownASTRenderable.swift; path = Source/Renderers/DownASTRenderable.swift; sourceTree = "<group>"; }; - AE0F235AC4FEB441C5FAECF778BC65AF /* ConstraintDirectionalInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintDirectionalInsets.swift; path = Source/ConstraintDirectionalInsets.swift; sourceTree = "<group>"; }; - AE199618C02D9D4150C92BD18E2A7F6A /* Link.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Link.swift; path = Source/AST/Nodes/Link.swift; sourceTree = "<group>"; }; - AF407EE74FCFE7869CCAD42CCD281A24 /* ObjcExceptionBridging-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ObjcExceptionBridging-umbrella.h"; sourceTree = "<group>"; }; - B05956D500DC15F479E7AD001AEA35E0 /* CwlResult.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlResult.swift; path = Sources/CwlUtils/CwlResult.swift; sourceTree = "<group>"; }; - B0D45EACEDD6D5FB2481F21F240A457C /* BlockQuote.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BlockQuote.swift; path = Source/AST/Nodes/BlockQuote.swift; sourceTree = "<group>"; }; - B2DF875D9CF32F80CF666130FE1FDBA8 /* cmark_ctype.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cmark_ctype.c; path = Source/cmark/cmark_ctype.c; sourceTree = "<group>"; }; - B3081E0CFC54E0C89C7B6D481B03DC95 /* Valet.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Valet.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B5B518AE1825D02ACA9D6530164CF32E /* Netable-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Netable-Info.plist"; sourceTree = "<group>"; }; - B6A57513319E8E7DD6A9E0D75DB562B4 /* ObjectiveCMarker.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ObjectiveCMarker.m; path = Sources/ObjcExceptionBridging/ObjectiveCMarker.m; sourceTree = "<group>"; }; - B6ECEAE4591739FBAD3AFCCDCECF9842 /* ConsoleDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConsoleDestination.swift; path = Sources/XCGLogger/Destinations/ConsoleDestination.swift; sourceTree = "<group>"; }; - B7715718A7E1E513F9BC2E99B977FCA9 /* SwiftyUserDefaults.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyUserDefaults.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B8DE1E9E14A3E68C3EBB674D51E4473B /* DefaultsSerializable+BuiltIns.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DefaultsSerializable+BuiltIns.swift"; path = "Sources/DefaultsSerializable+BuiltIns.swift"; sourceTree = "<group>"; }; - B9DD087477CBEEC587B0EF1E147E6BE8 /* LogDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogDestination.swift; path = Netable/Netable/LogDestination.swift; sourceTree = "<group>"; }; - BBE51BAC15FAD226B70F0F31A12CF61D /* scanners.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = scanners.h; path = Source/cmark/scanners.h; sourceTree = "<group>"; }; - BCA48BBB6B665E85FFD26E5FD53E9B32 /* SwiftyJSON-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-prefix.pch"; sourceTree = "<group>"; }; - BD4D34F6DABE66D0B4F15DC53FEDD9A5 /* CwlUtils.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CwlUtils.debug.xcconfig; sourceTree = "<group>"; }; - BD4FB1E7B5CC7411C45862060C66ECD7 /* CwlKeyValueObserver.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlKeyValueObserver.swift; path = Sources/CwlUtils/CwlKeyValueObserver.swift; sourceTree = "<group>"; }; - BE3CC0DC911B0A12181D13DEF997D637 /* AttributedStringVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AttributedStringVisitor.swift; path = Source/AST/Visitors/AttributedStringVisitor.swift; sourceTree = "<group>"; }; - C32228FF7C37F248307B5DA36A3C1137 /* QuoteStripeAttribute.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuoteStripeAttribute.swift; path = "Source/AST/Styling/Custom Attributes/QuoteStripeAttribute.swift"; sourceTree = "<group>"; }; - C44C9D97F16900961E84C43E68E57E28 /* SwiftyUserDefaults-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyUserDefaults-umbrella.h"; sourceTree = "<group>"; }; - C488A1E48EFFDCF13F9FB3587D3F32D6 /* Alamofire-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Alamofire-umbrella.h"; sourceTree = "<group>"; }; - C50302015ADBB77548037508DC75364C /* houdini.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = houdini.h; path = Source/cmark/houdini.h; sourceTree = "<group>"; }; - C6989D5F6AFA1D7893A4A24BFF4F8DBF /* Configuration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Configuration.swift; path = Sources/Valet/Internal/Configuration.swift; sourceTree = "<group>"; }; - C6E74128C1B4F2BC12357E12DF531AAF /* render.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = render.h; path = Source/cmark/render.h; sourceTree = "<group>"; }; - C701833139DFA72F6B580C2639624321 /* DownLayoutManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownLayoutManager.swift; path = "Source/AST/Styling/Layout Managers/DownLayoutManager.swift"; sourceTree = "<group>"; }; - C7778C64992EFE8E9A40402D6EB1674C /* DownDebugTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownDebugTextView.swift; path = "Source/AST/Styling/Text Views/DownDebugTextView.swift"; sourceTree = "<group>"; }; - C9FA207270861799BC913C8A79F0D838 /* LineBreak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LineBreak.swift; path = Source/AST/Nodes/LineBreak.swift; sourceTree = "<group>"; }; - CA820A177ED255B9DD6CAE664A8FFBFA /* DefaultsSerializable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DefaultsSerializable.swift; path = Sources/DefaultsSerializable.swift; sourceTree = "<group>"; }; - CAC6515151F58137037D599D3CB46214 /* Pods-Quests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Quests-dummy.m"; sourceTree = "<group>"; }; - CADFAE862A0274C1B2A562C20D3399E5 /* ResponseSerialization.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ResponseSerialization.swift; path = Source/ResponseSerialization.swift; sourceTree = "<group>"; }; - CB40853EBAF088D0F163D8E1C55DAC34 /* PrePostFixLogFormatter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = PrePostFixLogFormatter.swift; path = Sources/XCGLogger/LogFormatters/PrePostFixLogFormatter.swift; sourceTree = "<group>"; }; - CBAD449DB7E4C0031C492D13EC3D882F /* CustomInline.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CustomInline.swift; path = Source/AST/Nodes/CustomInline.swift; sourceTree = "<group>"; }; - CBC68A0E81D6DDC8B3DE414389CDB178 /* DownLaTeXRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownLaTeXRenderable.swift; path = Source/Renderers/DownLaTeXRenderable.swift; sourceTree = "<group>"; }; - CBDA58A528C8BEAE43C3D7B994A73226 /* ReachabilitySwift-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-umbrella.h"; sourceTree = "<group>"; }; - CBF087C7A261AF95E766DE04FD10DA5F /* AppleSystemLogDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AppleSystemLogDestination.swift; path = Sources/XCGLogger/Destinations/AppleSystemLogDestination.swift; sourceTree = "<group>"; }; - CD9FFD66767CFB7666EE0A8DDA8E14FF /* XCGLogger.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = XCGLogger.debug.xcconfig; sourceTree = "<group>"; }; - CDE00E2FE15ED004F2965399DFEBE63C /* DebugVisitor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DebugVisitor.swift; path = Source/AST/Visitors/DebugVisitor.swift; sourceTree = "<group>"; }; - CE7869F3B1F1CFB2D98916E6CAF60D44 /* SessionDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionDelegate.swift; path = Source/SessionDelegate.swift; sourceTree = "<group>"; }; - CFE72A7CB20F59F67980B52462518FA2 /* Identifier.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Identifier.swift; path = Sources/Valet/Identifier.swift; sourceTree = "<group>"; }; - D05B44706629BB6A3B0BE0CA85992C95 /* ConstraintMultiplierTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMultiplierTarget.swift; path = Source/ConstraintMultiplierTarget.swift; sourceTree = "<group>"; }; - D0CEB81076DC90B0261723F9E433F275 /* Down.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Down.modulemap; sourceTree = "<group>"; }; - D1801CD9F4FE34A863FD85DD4FED4321 /* Alamofire.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Alamofire.modulemap; sourceTree = "<group>"; }; - D36D43CCD8C284C922AFEABB279DEB65 /* cmark.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cmark.c; path = Source/cmark/cmark.c; sourceTree = "<group>"; }; - D45C95C452A56172E43CD25DDF02FF7B /* ConstraintView+Extensions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "ConstraintView+Extensions.swift"; path = "Source/ConstraintView+Extensions.swift"; sourceTree = "<group>"; }; - D4A25156F540013A1E3CD86AD609BC18 /* SnapKit.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.release.xcconfig; sourceTree = "<group>"; }; - D56C1BDA14B990E5E4C41D406B14FD5D /* Pods-Quests-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Quests-frameworks.sh"; sourceTree = "<group>"; }; - D595B3FAC6B807405EBF1786CAFDDE15 /* ObjcExceptionBridging.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = ObjcExceptionBridging.debug.xcconfig; sourceTree = "<group>"; }; - D5D4776B46399FAF0CD598A7CCE69388 /* LogDetails.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LogDetails.swift; path = Sources/XCGLogger/Misc/LogDetails.swift; sourceTree = "<group>"; }; - D5FBF54EA51BB0314734BCC54440D450 /* Item.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Item.swift; path = Source/AST/Nodes/Item.swift; sourceTree = "<group>"; }; - D641ECE4C2827934598BAE548054E367 /* DownXMLRenderable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownXMLRenderable.swift; path = Source/Renderers/DownXMLRenderable.swift; sourceTree = "<group>"; }; - D65963AD7D72E4A7788BDD54EFA81EE8 /* Reachability.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Reachability.swift; path = Sources/Reachability.swift; sourceTree = "<group>"; }; - D80262AB0252C7E0ACC2CD04CADFC9B2 /* LayoutConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LayoutConstraint.swift; path = Source/LayoutConstraint.swift; sourceTree = "<group>"; }; - D878461D1533DDDCE36BED42C2C79AB4 /* config.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = config.h; path = Source/cmark/config.h; sourceTree = "<group>"; }; - D91F685862A523B8DA6191ACDC09657E /* TaskDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskDelegate.swift; path = Source/TaskDelegate.swift; sourceTree = "<group>"; }; - D98092C190BC0448681382C392EA303C /* HtmlBlock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HtmlBlock.swift; path = Source/AST/Nodes/HtmlBlock.swift; sourceTree = "<group>"; }; - DA1E2C35BA5EE60D91A5175C146E42D3 /* DownTextView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownTextView.swift; path = "Source/AST/Styling/Text Views/DownTextView.swift"; sourceTree = "<group>"; }; - DA5579E44C5AB58BACC8A022DC29742F /* BaseDestination.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = BaseDestination.swift; path = Sources/XCGLogger/Destinations/BaseDestination.swift; sourceTree = "<group>"; }; - DA7516D785DE8BC238850F6BDFC89DF6 /* Netable.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Netable.release.xcconfig; sourceTree = "<group>"; }; - DACC7E9BE7D2FDDD926FDFDF60859589 /* DevFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DevFilter.swift; path = Sources/XCGLogger/Filters/DevFilter.swift; sourceTree = "<group>"; }; - DBA96A2EBAEAB029D331DFD8594A75D9 /* CwlDebugContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDebugContext.swift; path = Sources/CwlUtils/CwlDebugContext.swift; sourceTree = "<group>"; }; - DD06BF6006C785A0AF87B391C6ACE4E4 /* SessionManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SessionManager.swift; path = Source/SessionManager.swift; sourceTree = "<group>"; }; - DD5230217C4C19D9BF5A86EC9B73F68D /* HelperFunctions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = HelperFunctions.swift; path = Sources/XCGLogger/Misc/HelperFunctions.swift; sourceTree = "<group>"; }; - DD8DE0650AF15E7679FEEE0A5E744E4D /* SnapKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "SnapKit-Info.plist"; sourceTree = "<group>"; }; - DDD40DC10A8629512DFF149F8C5CF78C /* SnapKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SnapKit-umbrella.h"; sourceTree = "<group>"; }; - DDE9BEF6AFB820D8F902223664EDA857 /* DispatchQueue+Alamofire.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "DispatchQueue+Alamofire.swift"; path = "Source/DispatchQueue+Alamofire.swift"; sourceTree = "<group>"; }; - DE151E44E5FF561B11C59C29D20952D3 /* chunk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = chunk.h; path = Source/cmark/chunk.h; sourceTree = "<group>"; }; - DF00C1A26BA37A98339609B1E37CDD45 /* Valet.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = Valet.modulemap; sourceTree = "<group>"; }; - DF1EA3DD4404D51B63139E296AA90408 /* ConstraintLayoutSupport.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupport.swift; path = Source/ConstraintLayoutSupport.swift; sourceTree = "<group>"; }; - E191E6E6A456F554C947F3BDEE5FDE8A /* scanners.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = scanners.c; path = Source/cmark/scanners.c; sourceTree = "<group>"; }; - E22263AF958C665F1EE236576C4C232F /* ConstraintMakerPriortizable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerPriortizable.swift; path = Source/ConstraintMakerPriortizable.swift; sourceTree = "<group>"; }; - E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftyJSON.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E23D18647DE004A1D2CEE1310E6AB441 /* ConstraintLayoutSupportDSL.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintLayoutSupportDSL.swift; path = Source/ConstraintLayoutSupportDSL.swift; sourceTree = "<group>"; }; - E28A84239AADBBEF9ADCCE85B030FFAE /* Pods-Quests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Quests.release.xcconfig"; sourceTree = "<group>"; }; - E3E4DC044AF61276F1406624156814F9 /* CwlMutex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlMutex.swift; path = Sources/CwlUtils/CwlMutex.swift; sourceTree = "<group>"; }; - E410B7E18199EF01E49FF1E94526D923 /* ObjcExceptionBridging-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ObjcExceptionBridging-prefix.pch"; sourceTree = "<group>"; }; - E4D965747054282F02FDB5B0EF92A807 /* Service.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Service.swift; path = Sources/Valet/Internal/Service.swift; sourceTree = "<group>"; }; - E4DAA1416AAC20248D7050A9DDEBCCFD /* CwlUtils-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "CwlUtils-Info.plist"; sourceTree = "<group>"; }; - E5D8A1C850EB1AA7D7DA7EE91C341BB7 /* Strong.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Strong.swift; path = Source/AST/Nodes/Strong.swift; sourceTree = "<group>"; }; - E80EF97C2ADD2E6601FF743936AADC4C /* Down.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Down.release.xcconfig; sourceTree = "<group>"; }; - E8781707031CBBB5C8D285EC274E7350 /* ConstraintPriorityTarget.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintPriorityTarget.swift; path = Source/ConstraintPriorityTarget.swift; sourceTree = "<group>"; }; - E87AC200EC3397E1998EB1A20921518E /* ChildSequence.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ChildSequence.swift; path = Source/AST/Nodes/ChildSequence.swift; sourceTree = "<group>"; }; - E8B3FD28D55D736E8CA76C9E6D6876DD /* CwlCustomExecutionContext.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlCustomExecutionContext.swift; path = Sources/CwlUtils/CwlCustomExecutionContext.swift; sourceTree = "<group>"; }; - E8E192E0418B1C1ECEA8732A4F35699E /* iterator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = iterator.h; path = Source/cmark/iterator.h; sourceTree = "<group>"; }; - E8F945DF129C6082E40D84AE4A0E2015 /* UIFont+Traits.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "UIFont+Traits.swift"; path = "Source/AST/Styling/Helpers/Extensions/UIFont+Traits.swift"; sourceTree = "<group>"; }; - E9E2A751EC1AD49A7F055D90FFD122EB /* Netable.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Netable.debug.xcconfig; sourceTree = "<group>"; }; - EA000F0ADAA23342F235DD04A6A81819 /* Pods-Quests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Quests-umbrella.h"; sourceTree = "<group>"; }; - EA31BF8BEF00AFAE4266444BC2B8BAF4 /* Keychain.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Keychain.swift; path = Sources/Valet/Internal/Keychain.swift; sourceTree = "<group>"; }; - EB4E7490C68F6991248C5E70224F256D /* ConstraintMakerEditable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerEditable.swift; path = Source/ConstraintMakerEditable.swift; sourceTree = "<group>"; }; - ED1794A9E55649F8950EBB3A1ADF09AF /* UserInfoFilter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = UserInfoFilter.swift; path = Sources/XCGLogger/Filters/UserInfoFilter.swift; sourceTree = "<group>"; }; - ED3950E91EA235710B1EEF6A4B1570B8 /* ReachabilitySwift-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ReachabilitySwift-prefix.pch"; sourceTree = "<group>"; }; - ED710913E2098DB117BA6A6697F599F3 /* MultipartFormData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = MultipartFormData.swift; path = Source/MultipartFormData.swift; sourceTree = "<group>"; }; - EDC8FDA771B206A24DEF46DD0698B00E /* Result.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Result.swift; path = Source/Result.swift; sourceTree = "<group>"; }; - EE34E6F21CCB4D824E742E664A663185 /* Netable-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Netable-prefix.pch"; sourceTree = "<group>"; }; - EE4F1A15A683A497E8CC80C813234625 /* Defaults+Observing.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Defaults+Observing.swift"; path = "Sources/Defaults+Observing.swift"; sourceTree = "<group>"; }; - EF2D8F80A7A1555A093DF571EC8D5263 /* ThematicBreakOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThematicBreakOptions.swift; path = Source/AST/Styling/Options/ThematicBreakOptions.swift; sourceTree = "<group>"; }; - EF7E92DA0FFD491B641CF414C80A9710 /* ConstraintInsets.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintInsets.swift; path = Source/ConstraintInsets.swift; sourceTree = "<group>"; }; - EF831C009D2B4741083AF169E52E7052 /* SecureEnclaveValet.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureEnclaveValet.swift; path = Sources/Valet/SecureEnclaveValet.swift; sourceTree = "<group>"; }; - F091DE4EF25082DBB27B785DE016979E /* ThematicBreak.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ThematicBreak.swift; path = Source/AST/Nodes/ThematicBreak.swift; sourceTree = "<group>"; }; - F0B5D38B19C16842E1235C9E0217A000 /* Accessibility.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Accessibility.swift; path = Sources/Valet/Accessibility.swift; sourceTree = "<group>"; }; - F18349D54D2C16B5455A6E0CB34A6B80 /* Valet.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Valet.h; path = Sources/Valet/Valet.h; sourceTree = "<group>"; }; - F1B81A594455334D161994299EE56FA3 /* utf8.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = utf8.c; path = Source/cmark/utf8.c; sourceTree = "<group>"; }; - F32506B5FDF53E6BFEA0A76C0FDB119A /* Request.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Request.swift; path = Source/Request.swift; sourceTree = "<group>"; }; - F503C85E0E7004CE5429680B4BC74D4A /* ObjcExceptionBridging-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ObjcExceptionBridging-dummy.m"; sourceTree = "<group>"; }; - F5524297D7B687C35F48CC61A34C82C2 /* CwlDeferredWork.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlDeferredWork.swift; path = Sources/CwlUtils/CwlDeferredWork.swift; sourceTree = "<group>"; }; - F640D7BB5441BC054BD994A785A82BE9 /* ConstraintConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintConfig.swift; path = Source/ConstraintConfig.swift; sourceTree = "<group>"; }; - F704F6C8B1E43AE024AE3616D65E37CD /* ConstraintMakerRelatable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ConstraintMakerRelatable.swift; path = Source/ConstraintMakerRelatable.swift; sourceTree = "<group>"; }; - F7517D9011A8D080FCA3F2AFCC4470A3 /* SwiftyJSON-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "SwiftyJSON-umbrella.h"; sourceTree = "<group>"; }; - F78C8BBD4232A4F11C629502B760955C /* OptionalType.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = OptionalType.swift; path = Sources/OptionalType.swift; sourceTree = "<group>"; }; - F825C62B1E64CE1004FEB9B29271CB66 /* Down-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Down-umbrella.h"; sourceTree = "<group>"; }; - F987FD2EDE99C88208ACA7C0AAEFBFEC /* AFError.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AFError.swift; path = Source/AFError.swift; sourceTree = "<group>"; }; - FBE102B34566CF9B07DBCAF8A317C8E3 /* Validation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Validation.swift; path = Source/Validation.swift; sourceTree = "<group>"; }; - FC21E11599264BC8297EB97354A9423F /* XCGLogger.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCGLogger.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FDB29C1071C75A54D994234731B55817 /* ListItemOptions.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ListItemOptions.swift; path = Source/AST/Styling/Options/ListItemOptions.swift; sourceTree = "<group>"; }; - FDC69D8EC61218A7FD0E608849C2E419 /* cmark.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cmark.h; path = Source/cmark/cmark.h; sourceTree = "<group>"; }; - FEB68179B64754FED5C63E03D9F647D6 /* DownDebugLayoutManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DownDebugLayoutManager.swift; path = "Source/AST/Styling/Layout Managers/DownDebugLayoutManager.swift"; sourceTree = "<group>"; }; - FEF3E2787AB66AD83674144939849493 /* Typealiases.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Typealiases.swift; path = Source/Typealiases.swift; sourceTree = "<group>"; }; - FEF9148468F06D024CC8B407D990B4A4 /* CwlScalarScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = CwlScalarScanner.swift; path = Sources/CwlUtils/CwlScalarScanner.swift; sourceTree = "<group>"; }; - FF97E56190F4FFB5F34E0947B8477B63 /* SnapKit.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = SnapKit.debug.xcconfig; sourceTree = "<group>"; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 20B7E4C28C26E94A9A6A3324B09C6DA0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 79D050A1BF690095FBC17BB949AF6E07 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 25F0B0C1DDBCBFDB7B85788DE6A9AB30 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - F012255DFE7ECA64646A30D42F8F9E4F /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 583953B3BCC8F922FE3B14ED4E288630 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A7E064A15ACF074AB12204FFD66EF075 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5BD9B711A5F4419FB9E1816656809A4C /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 294FB14D160808CABB9F3391681BEFC9 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6A35F17FDC58886B2AAD2D9D55EB4A6D /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - AC1327A09DC503346A2FD856E6490B21 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 74282013CEAE04F339FA02C44D92FDC6 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2BCC237C30B9ACE04E8836B4690AED5B /* Cocoa.framework in Frameworks */, - E05D40C5A5543032ED20D03703947F1E /* ObjcExceptionBridging.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A0BE23A2589E64EE1D205D0D4D575C36 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D57619EE9B4FE8981662364501818C15 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AA8615FBBE4AEF2411618D807B982CB4 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - E218DF00B5B23FB13813FF6AD156DE81 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - AED26A112C79706BE7385261A89A9937 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - A7C4E03FE811EF82062D0001E14F96B3 /* Cocoa.framework in Frameworks */, - A5953EEA3BA3BEB952D40183022D1C56 /* Security.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BDBD313A0715DAE4849893F5E1CF20BB /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - B56D1DD5D3C79213EEDDC517F348EC4B /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C362FE20B316E43DB0A5B94D5D731F76 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7208E714E3181A336149083C2519305F /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E61B769D3DB83B13F9D220322C28DF34 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ED9989FF248A88938A1F95D1A33220E2 /* Cocoa.framework in Frameworks */, - E4A6DE44D023DC61867793134BC61A0F /* SystemConfiguration.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 060F333F3763C9BE623280FE4C40CCEC /* SwiftyUserDefaults */ = { - isa = PBXGroup; - children = ( - 302A905D3C42E5148462079A86819BFF /* Defaults.swift */, - EE4F1A15A683A497E8CC80C813234625 /* Defaults+Observing.swift */, - 5EFE400347E43DDF7C0E7D41ED3619B8 /* Defaults+StringToBool.swift */, - 66C8E8A33F8CB49E6170F410444D3779 /* Defaults+Subscripts.swift */, - 52DB3CB5FA25A6ECC0AE2E02220FFD8C /* DefaultsBridges.swift */, - 2F1F2F156CC0EF892B17FC37C88E6FE2 /* DefaultsKeys.swift */, - 26CF637DA27AAECE2D60B6B282B1A3BA /* DefaultsObserver.swift */, - CA820A177ED255B9DD6CAE664A8FFBFA /* DefaultsSerializable.swift */, - B8DE1E9E14A3E68C3EBB674D51E4473B /* DefaultsSerializable+BuiltIns.swift */, - F78C8BBD4232A4F11C629502B760955C /* OptionalType.swift */, - 10F972839B99091A85FF970BC45C8356 /* Support Files */, - ); - path = SwiftyUserDefaults; - sourceTree = "<group>"; - }; - 08EA6BCB56C6C3F80F31EDD39837B199 /* ObjcExceptionBridging */ = { - isa = PBXGroup; - children = ( - 7162BD4638407733290E4195E52B1CB0 /* ObjcExceptionBridging.h */, - B6A57513319E8E7DD6A9E0D75DB562B4 /* ObjectiveCMarker.m */, - ); - name = ObjcExceptionBridging; - sourceTree = "<group>"; - }; - 0D02F77A523922A60E739A5BFD9F8489 /* CwlUtils */ = { - isa = PBXGroup; - children = ( - 8674B6197C2E13F68D41D0654B36821B /* CwlAddressInfo.swift */, - A124759FC36633C4BCFF442DDC0DD139 /* CwlCaseNameCodable.swift */, - A0BFCF7534C452C415E20577EB6470CE /* CwlCollection.swift */, - E8B3FD28D55D736E8CA76C9E6D6876DD /* CwlCustomExecutionContext.swift */, - DBA96A2EBAEAB029D331DFD8594A75D9 /* CwlDebugContext.swift */, - F5524297D7B687C35F48CC61A34C82C2 /* CwlDeferredWork.swift */, - 4466AFC0FE228CBF0498DBA664C738EF /* CwlDeque.swift */, - 90F1EE952647A49B24394781B2EE749F /* CwlDispatch.swift */, - AA18A98AF687D59BD204D682BDB59A6F /* CwlExec.swift */, - 85950F857DAA1CF1776B29E1B7A3FABA /* CwlExecutionType.swift */, - A58C97BE9B09994464EABE964E0BC602 /* CwlFew.swift */, - 504E0843DC8892A271BF34186360679E /* CwlFrameAddress.c */, - 1AC58E3834D5DF74927CF05C9E637666 /* CwlFrameAddress.h */, - BD4FB1E7B5CC7411C45862060C66ECD7 /* CwlKeyValueObserver.swift */, - 9776E29E896DFB6D1107BF6A2C8330BA /* CwlLifetime.swift */, - E3E4DC044AF61276F1406624156814F9 /* CwlMutex.swift */, - A883D0984AAB83018D974AC31E0C663A /* CwlOnDelete.swift */, - 44EA09731028B17AE674581D8477C3C4 /* CwlRandom.swift */, - B05956D500DC15F479E7AD001AEA35E0 /* CwlResult.swift */, - FEF9148468F06D024CC8B407D990B4A4 /* CwlScalarScanner.swift */, - 73B20CD3EC638B3E5C37C776E94375EE /* CwlSerializingContext.swift */, - 582BCBAE32F6249D74F24C46F3301D33 /* CwlStackFrame.swift */, - 623DCFB34EEC1C4CF0B58DB5CF23F300 /* CwlSysctl.swift */, - 05A2D11FF02427F1B6C2BFE8F2DB173B /* CwlUnanticipatedError.swift */, - 0543E666F34FD1CCFD0B0B73DAE7533F /* CwlUtils.h */, - 52540E2B96A66127E702E30DEA1554E9 /* CwlWrappers.swift */, - D2C7333F561FD6198A6D01776FE53DEB /* Support Files */, - ); - path = CwlUtils; - sourceTree = "<group>"; - }; - 10F972839B99091A85FF970BC45C8356 /* Support Files */ = { - isa = PBXGroup; - children = ( - 292BF412B79FF2CF2D477AAABAF4B2CB /* SwiftyUserDefaults.modulemap */, - 6A0305697366CA91FFF1FD4A20D63B02 /* SwiftyUserDefaults-dummy.m */, - 6C97D22B880620C9355D5A75303A45E4 /* SwiftyUserDefaults-Info.plist */, - 65D0131FECF28DA92D67B547AEB8702D /* SwiftyUserDefaults-prefix.pch */, - C44C9D97F16900961E84C43E68E57E28 /* SwiftyUserDefaults-umbrella.h */, - 8A3AB6BAFA6730C7021A51AC4C55C958 /* SwiftyUserDefaults.debug.xcconfig */, - 8B550E9D20F01101C17B0682FA50162E /* SwiftyUserDefaults.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftyUserDefaults"; - sourceTree = "<group>"; - }; - 15FAE76852D76D33DE5C7639B08EF335 /* SnapKit */ = { - isa = PBXGroup; - children = ( - 0B062796F6710BFDFCA36378797FA6A5 /* Constraint.swift */, - 571FC3B0277F04AF40239568EFC057D9 /* ConstraintAttributes.swift */, - F640D7BB5441BC054BD994A785A82BE9 /* ConstraintConfig.swift */, - 0C5A791D823EDA9C970F9989E42E311B /* ConstraintConstantTarget.swift */, - 5352ACF3B3E7379270F4FAF819792C90 /* ConstraintDescription.swift */, - AE0F235AC4FEB441C5FAECF778BC65AF /* ConstraintDirectionalInsets.swift */, - 79BD059EB91906D9ECC927581D5B8D95 /* ConstraintDirectionalInsetTarget.swift */, - 04DA0B4B7859765FB9CF6D29BD4347BF /* ConstraintDSL.swift */, - EF7E92DA0FFD491B641CF414C80A9710 /* ConstraintInsets.swift */, - 7C0D4FBC1215943B521831EB1ADFA076 /* ConstraintInsetTarget.swift */, - 34A581D8CDBA4E311F0D407F90C67878 /* ConstraintItem.swift */, - 1816C379B3AA025CF1CA8AA3CD9475FF /* ConstraintLayoutGuide.swift */, - 1FFC4C45344256C2491CFF8FA90A3947 /* ConstraintLayoutGuide+Extensions.swift */, - 1A4DEDA557FECEA0ACFEC26265878877 /* ConstraintLayoutGuideDSL.swift */, - DF1EA3DD4404D51B63139E296AA90408 /* ConstraintLayoutSupport.swift */, - E23D18647DE004A1D2CEE1310E6AB441 /* ConstraintLayoutSupportDSL.swift */, - 045D69F8D9E3FD59F5E5F7FE2532701D /* ConstraintMaker.swift */, - EB4E7490C68F6991248C5E70224F256D /* ConstraintMakerEditable.swift */, - 42F1E2222E73241DF913AB0CB2355622 /* ConstraintMakerExtendable.swift */, - 83CD1C79F2D3491D68C20FC85454E536 /* ConstraintMakerFinalizable.swift */, - E22263AF958C665F1EE236576C4C232F /* ConstraintMakerPriortizable.swift */, - F704F6C8B1E43AE024AE3616D65E37CD /* ConstraintMakerRelatable.swift */, - D05B44706629BB6A3B0BE0CA85992C95 /* ConstraintMultiplierTarget.swift */, - 8219D76EF85A7E294A866D2C296FB02A /* ConstraintOffsetTarget.swift */, - 374B221DA2F85351E855CC12F36E72C8 /* ConstraintPriority.swift */, - E8781707031CBBB5C8D285EC274E7350 /* ConstraintPriorityTarget.swift */, - 41F7B92275566009F9A7A5C65373BC5E /* ConstraintRelatableTarget.swift */, - 91A07F1DFC3D3EA178AC2A0EA4804770 /* ConstraintRelation.swift */, - 481FED89593E2C182819F8542437686A /* ConstraintView.swift */, - D45C95C452A56172E43CD25DDF02FF7B /* ConstraintView+Extensions.swift */, - 21C1192ECF7251808FCE7A8582897537 /* ConstraintViewDSL.swift */, - 5BC4A4FF6B59ED4DC80B82CB0C234E75 /* Debugging.swift */, - D80262AB0252C7E0ACC2CD04CADFC9B2 /* LayoutConstraint.swift */, - 52E6D41B0506678C3718E22F65ACE80C /* LayoutConstraintItem.swift */, - FEF3E2787AB66AD83674144939849493 /* Typealiases.swift */, - 0CA1F79E3A68062478B415F562068291 /* UILayoutSupport+Extensions.swift */, - D39B3BFBC2DE842AE6CD365752A0D947 /* Support Files */, - ); - path = SnapKit; - sourceTree = "<group>"; - }; - 17382D60EAAF774CBA58E17C581284D0 /* Netable */ = { - isa = PBXGroup; - children = ( - 70C8CCE17C228EDE38212144FDA68672 /* DelayedOperations.swift */, - 2C883F77CA1368F0E1278C5954003EA2 /* Error.swift */, - 046FD5E57F4B883549501BFD0B50BC97 /* HTTPMethod.swift */, - B9DD087477CBEEC587B0EF1E147E6BE8 /* LogDestination.swift */, - 296ADC195058BD370A08FDF8407C53A3 /* Netable.h */, - 88A6652ADB1FCECCCEC4185CB1B48271 /* Netable.swift */, - 28DFB7DB5690FD745C23CCC4082D9C66 /* Request.swift */, - 6026AC2EF06658724EBB4F6DF8AE00FC /* RequestIdentifier.swift */, - 759866940DB08E719C29234364E4CF6D /* RetryConfiguration.swift */, - 3CF6D33536A7E041A81625573DA0DED4 /* URLRequest+EncodeParameters.swift */, - 3A67066413838BD06E05CD86613D3054 /* URLRequest+EncodeURL.swift */, - 785833AD4A54C2BAAA470C1EF052743C /* URLRequest+Multipart.swift */, - C87729EF71E574DB2B57445C47D048A4 /* Support Files */, - ); - path = Netable; - sourceTree = "<group>"; - }; - 1ADE773468D807E72F673DA2A76EBD05 /* SwiftyJSON */ = { - isa = PBXGroup; - children = ( - AAD608246B69F940724E408CB1F97F32 /* SwiftyJSON.swift */, - E611507E831687E8A978699E2F7890B2 /* Support Files */, - ); - path = SwiftyJSON; - sourceTree = "<group>"; - }; - 256D697392D5BB2B70B074FAB1CD15BF /* Valet */ = { - isa = PBXGroup; - children = ( - F0B5D38B19C16842E1235C9E0217A000 /* Accessibility.swift */, - 4D4F824C874FC0A4482BFD3A14D473B3 /* CloudAccessibility.swift */, - C6989D5F6AFA1D7893A4A24BFF4F8DBF /* Configuration.swift */, - CFE72A7CB20F59F67980B52462518FA2 /* Identifier.swift */, - EA31BF8BEF00AFAE4266444BC2B8BAF4 /* Keychain.swift */, - 56BCD87146375A2FF4E2C4283DE6A39D /* KeychainError.swift */, - A15656353C0E201B5FB291A23D065F4C /* MigratableKeyValuePair.swift */, - A43460F03BF97E0607AEF210DEAB2DA7 /* MigrationError.swift */, - 121C719496F287194EE55831B5040185 /* SecItem.swift */, - A4AC514372EE01110CAF88F3F3B9A96B /* SecureEnclave.swift */, - A7DE7062F30F20B675260AD70F1D95D2 /* SecureEnclaveAccessControl.swift */, - EF831C009D2B4741083AF169E52E7052 /* SecureEnclaveValet.swift */, - E4D965747054282F02FDB5B0EF92A807 /* Service.swift */, - 0CC5735224AF8F8C69E4B83D86C80972 /* SharedGroupIdentifier.swift */, - 860F7079A4EDCC8671D5B8FEE1A12740 /* SinglePromptSecureEnclaveValet.swift */, - F18349D54D2C16B5455A6E0CB34A6B80 /* Valet.h */, - 40E80E6B38647701DCED0F13ACD0CADF /* Valet.swift */, - DD730568826D2222AA0D2F831C6CE181 /* Support Files */, - ); - path = Valet; - sourceTree = "<group>"; - }; - 2D83EDA7F9E024AAD3D5DFCDCF971B30 /* Resources */ = { - isa = PBXGroup; - children = ( - 65D2A0D819B7AB225B07FD3B4399F46B /* .swift-version */, - ); - name = Resources; - sourceTree = "<group>"; - }; - 31DEF4B64A2CDCEF35A9F70924820BD8 /* Support Files */ = { - isa = PBXGroup; - children = ( - 4A88148FE1D7DC7EC2C0B4275A89B9E3 /* ObjcExceptionBridging.modulemap */, - F503C85E0E7004CE5429680B4BC74D4A /* ObjcExceptionBridging-dummy.m */, - 277BB898DD4B25045C1B59AA9615CB55 /* ObjcExceptionBridging-Info.plist */, - E410B7E18199EF01E49FF1E94526D923 /* ObjcExceptionBridging-prefix.pch */, - AF407EE74FCFE7869CCAD42CCD281A24 /* ObjcExceptionBridging-umbrella.h */, - D595B3FAC6B807405EBF1786CAFDDE15 /* ObjcExceptionBridging.debug.xcconfig */, - 5646F84DBE18EFA6E57EFD8402A3BB2E /* ObjcExceptionBridging.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ObjcExceptionBridging"; - sourceTree = "<group>"; - }; - 35191563DAF08DD51DA6CB0913C93BD0 /* Support Files */ = { - isa = PBXGroup; - children = ( - 66F7C71DF4E03941E1D313B6C99D1E95 /* SwiftLint.debug.xcconfig */, - 58660C1056956A1103CEC42BDE6002A7 /* SwiftLint.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftLint"; - sourceTree = "<group>"; - }; - 4C14647103F575F03F8851782A3CCFA6 /* Alamofire */ = { - isa = PBXGroup; - children = ( - F987FD2EDE99C88208ACA7C0AAEFBFEC /* AFError.swift */, - 238B330EEBDF38E736F0023F5E3BBB12 /* Alamofire.swift */, - DDE9BEF6AFB820D8F902223664EDA857 /* DispatchQueue+Alamofire.swift */, - ED710913E2098DB117BA6A6697F599F3 /* MultipartFormData.swift */, - 12C66BC029C36AC1D2A223503293A305 /* NetworkReachabilityManager.swift */, - 133AE864BC883B7257B70F90E32DFEB0 /* Notifications.swift */, - 10AB44E053D337762C1B7D1CE54240B3 /* ParameterEncoding.swift */, - F32506B5FDF53E6BFEA0A76C0FDB119A /* Request.swift */, - 86CA4E18580FA8A6D3A7779CA3CC2269 /* Response.swift */, - CADFAE862A0274C1B2A562C20D3399E5 /* ResponseSerialization.swift */, - EDC8FDA771B206A24DEF46DD0698B00E /* Result.swift */, - 8A1C453AC2DC5DDF5275222D42CCC55B /* ServerTrustPolicy.swift */, - CE7869F3B1F1CFB2D98916E6CAF60D44 /* SessionDelegate.swift */, - DD06BF6006C785A0AF87B391C6ACE4E4 /* SessionManager.swift */, - D91F685862A523B8DA6191ACDC09657E /* TaskDelegate.swift */, - 10AFED9690DE5F05F44EB12E1D472661 /* Timeline.swift */, - FBE102B34566CF9B07DBCAF8A317C8E3 /* Validation.swift */, - A8202B10742EB4EA678CCB8099C872D0 /* Support Files */, - ); - path = Alamofire; - sourceTree = "<group>"; - }; - 54FA4D4E1C4CF502E8B222FA43445E4C /* Products */ = { - isa = PBXGroup; - children = ( - 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */, - 19505C3754CA22D260C9A9C806CE469F /* CwlUtils.framework */, - 4C90E8F3F21B7688E1FB09920322D768 /* Down.framework */, - 3FEA5F6CCF86397E36BA19DF0C3E8AC5 /* Netable.framework */, - 1CAB16A12A28E8BE749202B03552307A /* ObjcExceptionBridging.framework */, - 8A32D5F3A0DE08F28E56A5DD3FA2364D /* Pods_Quests.framework */, - 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */, - 979486118B3E90C08386079D57962701 /* SnapKit.framework */, - E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON.framework */, - B7715718A7E1E513F9BC2E99B977FCA9 /* SwiftyUserDefaults.framework */, - B3081E0CFC54E0C89C7B6D481B03DC95 /* Valet.framework */, - FC21E11599264BC8297EB97354A9423F /* XCGLogger.framework */, - ); - name = Products; - sourceTree = "<group>"; - }; - 5D4A39A0651F9949C9CCA299B9EC748F /* Down */ = { - isa = PBXGroup; - children = ( - BE3CC0DC911B0A12181D13DEF997D637 /* AttributedStringVisitor.swift */, - 6FB304F6EF01011E0D9CC367540DB0DD /* BaseNode.swift */, - 830E5F588A3D15E2971C9EDBA54FB31C /* BlockBackgroundColorAttribute.swift */, - B0D45EACEDD6D5FB2481F21F240A457C /* BlockQuote.swift */, - 1A9247A47297D44D4E93FEA5875F5F3B /* blocks.c */, - 8997BC92BBEFC740F15DEE27867E2F72 /* buffer.c */, - 43090A59CB768538D6445FFC4569A2EB /* buffer.h */, - 67147485D634A6108537FC74E1175258 /* CGPoint+Translate.swift */, - 4F3E4C8CB68C05C761DBEB855142F24E /* CGRect+Helpers.swift */, - E87AC200EC3397E1998EB1A20921518E /* ChildSequence.swift */, - DE151E44E5FF561B11C59C29D20952D3 /* chunk.h */, - D36D43CCD8C284C922AFEABB279DEB65 /* cmark.c */, - FDC69D8EC61218A7FD0E608849C2E419 /* cmark.h */, - B2DF875D9CF32F80CF666130FE1FDBA8 /* cmark_ctype.c */, - 7CC5AA098C5B8E2690592B5AAC8C8860 /* cmark_ctype.h */, - 2E6B5EA7A8DB975CF0C8BB6F4F7CC31D /* cmark_export.h */, - 3DADBD42B644CF60DC4806C82994987D /* cmark_version.h */, - 84A3A59717680DBB9B7FF0AD7F8CE313 /* Code.swift */, - 562BCE8DA84EEA1AA190ACC3D26ABEBE /* CodeBlock.swift */, - 1AC82D0F9C6F570239096376ADCC338D /* CodeBlockOptions.swift */, - 9C3BBFE7510841838DD77B8B6BC67C14 /* ColorCollection.swift */, - 1BE20A7603B980909541FA6C3E0954FC /* commonmark.c */, - D878461D1533DDDCE36BED42C2C79AB4 /* config.h */, - A92BFA6528AF5E515A1D559DBBAD54D8 /* CustomBlock.swift */, - CBAD449DB7E4C0031C492D13EC3D882F /* CustomInline.swift */, - CDE00E2FE15ED004F2965399DFEBE63C /* DebugVisitor.swift */, - 4B59AC46CE7D01E5E28733DDE5AC4385 /* Document.swift */, - 20693984F54A9883759E963D9B4F37CD /* Down.h */, - 42CA7C75C68A30C71715C7533A650183 /* Down.swift */, - ADFB607451E937893442321C79C96583 /* DownASTRenderable.swift */, - 21964FBCF19F00B1F591F246EAE17B96 /* DownAttributedStringRenderable.swift */, - 1A86CC926C8ED616B391E9B47816A666 /* DownCommonMarkRenderable.swift */, - FEB68179B64754FED5C63E03D9F647D6 /* DownDebugLayoutManager.swift */, - C7778C64992EFE8E9A40402D6EB1674C /* DownDebugTextView.swift */, - 007630DCE309A86B3C01C980CEDFA2E9 /* DownErrors.swift */, - 960FD13CACC3D1A0444CCE330FBC609F /* DownGroffRenderable.swift */, - 437B523EA1EAF19248CC460B1242C746 /* DownHTMLRenderable.swift */, - CBC68A0E81D6DDC8B3DE414389CDB178 /* DownLaTeXRenderable.swift */, - C701833139DFA72F6B580C2639624321 /* DownLayoutManager.swift */, - 4323F0A51A309AD987E55963F71A81E4 /* DownOptions.swift */, - 9DD7442645DB8444B769DF9E0FBC8D1D /* DownRenderable.swift */, - 654BA7CE925A4B04EEE52FF78910109E /* DownStyler.swift */, - 20DAB868673CC5CC8F0C00E80B60A8F8 /* DownStylerConfiguration.swift */, - DA1E2C35BA5EE60D91A5175C146E42D3 /* DownTextView.swift */, - 0F5D6F71F88B1E9596CEA4DA312B8413 /* DownView.swift */, - D641ECE4C2827934598BAE548054E367 /* DownXMLRenderable.swift */, - 8F35BD06F3781CCA225CF510FF5581F2 /* Emphasis.swift */, - 607D62F11A96A8B260650FBCB93CCB67 /* FontCollection.swift */, - 68D7754A6883A74528E6B5E7D4EA404C /* Heading.swift */, - C50302015ADBB77548037508DC75364C /* houdini.h */, - 73B24FD1EFB89FECBE6BB9559409A07D /* houdini_href_e.c */, - 57EF65AB927CD026BE9E26C3B7678190 /* houdini_html_e.c */, - 3A3BF02D02AB334493280CFB9E22542F /* houdini_html_u.c */, - 9FEB3AB3846318BD7E9ED53A8606C046 /* html.c */, - D98092C190BC0448681382C392EA303C /* HtmlBlock.swift */, - 349201D73DAA51E775F6E4C21B4B07DA /* HtmlInline.swift */, - 4B9806F9D9219F8DB4DFF8BD73C5037A /* Image.swift */, - 990B82C56E795F245324493A40368941 /* inlines.c */, - 34400FF5F4A425637940AA2243A84B68 /* inlines.h */, - D5FBF54EA51BB0314734BCC54440D450 /* Item.swift */, - 598454F1CD1BB2F24E721099120F5F69 /* iterator.c */, - E8E192E0418B1C1ECEA8732A4F35699E /* iterator.h */, - 7C49518C9662BD7FF49B56634CFDEC6F /* latex.c */, - C9FA207270861799BC913C8A79F0D838 /* LineBreak.swift */, - AE199618C02D9D4150C92BD18E2A7F6A /* Link.swift */, - 23B65FDF5AFED74E62E95550BF2DA6B9 /* List.swift */, - FDB29C1071C75A54D994234731B55817 /* ListItemOptions.swift */, - 07B852929F2881D285C102BEFAC433D6 /* ListItemParagraphStyler.swift */, - 0046860E8C77E6250D4434B69CF2F646 /* ListItemPrefixGenerator.swift */, - 7D535DC2DDCF312C3AE940CA980518AF /* man.c */, - 6FD690BFF43FC7A22F3FE9718ACC731A /* node.c */, - 8039C515478BDF83C488F6890E3AAA43 /* node.h */, - 2218986D56C85CB3DE114397B4C8F37B /* Node.swift */, - 01E100CA374DCF65946CFDB8926A9EBF /* NSAttributedString+Helpers.swift */, - 87DE2A9CB91C9F68A0E64A1DA95D214F /* NSAttributedString+HTML.swift */, - 32DDD719AC029B64B2C929ED7C8FC08E /* NSMutableAttributedString+Attributes.swift */, - 905E8F275E4270B162710A3D559FC63A /* Paragraph.swift */, - 7CC3D803BAF2B9EC9B31227268930E4C /* ParagraphStyleCollection.swift */, - 575C61A285FBA9A5816AAD9EED5545A9 /* parser.h */, - C32228FF7C37F248307B5DA36A3C1137 /* QuoteStripeAttribute.swift */, - 46D136B44F02DE1122F3A27CE012FCFA /* QuoteStripeOptions.swift */, - 7009F72EA49BB6886B1A448A514FED38 /* references.c */, - 0D4AC309B572BF5D65200BDF51900E1B /* references.h */, - 76480365DE31961A4E5E2F19B30C3B83 /* render.c */, - C6E74128C1B4F2BC12357E12DF531AAF /* render.h */, - E191E6E6A456F554C947F3BDEE5FDE8A /* scanners.c */, - BBE51BAC15FAD226B70F0F31A12CF61D /* scanners.h */, - 1F7E958ED335F2F2638913E5275F3256 /* SoftBreak.swift */, - 9222E289FA0973A7B68852726F37B546 /* String+ToHTML.swift */, - E5D8A1C850EB1AA7D7DA7EE91C341BB7 /* Strong.swift */, - 60437014A525019EC80FCB948DED9311 /* Styler.swift */, - 319060E13A7883C6ED840C02693874D8 /* Text.swift */, - F091DE4EF25082DBB27B785DE016979E /* ThematicBreak.swift */, - 2172B5336BB539626104D9C01841FE60 /* ThematicBreakAttribute.swift */, - EF2D8F80A7A1555A093DF571EC8D5263 /* ThematicBreakOptions.swift */, - E8F945DF129C6082E40D84AE4A0E2015 /* UIFont+Traits.swift */, - F1B81A594455334D161994299EE56FA3 /* utf8.c */, - 6FBEA927D8BB8FD71C656732BFFBCF82 /* utf8.h */, - 24CF5F7105315FE78546471472EBD69F /* Visitor.swift */, - 15925D1178399947FFA350B6D0A50E27 /* xml.c */, - D83C13595189133975450CA8C26603AF /* Resources */, - 73DEF7375630F4762BC93A954CC02BE6 /* Support Files */, - ); - path = Down; - sourceTree = "<group>"; - }; - 6D746C096C0C09ED2E5A2089BEF42A48 /* ObjcExceptionBridging */ = { - isa = PBXGroup; - children = ( - 08EA6BCB56C6C3F80F31EDD39837B199 /* ObjcExceptionBridging */, - 31DEF4B64A2CDCEF35A9F70924820BD8 /* Support Files */, - ); - path = ObjcExceptionBridging; - sourceTree = "<group>"; - }; - 6F066B2B2542E4B7C83A28846A774A2B /* Pods-Quests */ = { - isa = PBXGroup; - children = ( - 996388655B515B211FD7E6C1CC5D5648 /* Pods-Quests.modulemap */, - 9C8E7D75513A8C2700A630D50090F8C1 /* Pods-Quests-acknowledgements.markdown */, - AA0D73245FF9B9A283B642C6A9C16F75 /* Pods-Quests-acknowledgements.plist */, - CAC6515151F58137037D599D3CB46214 /* Pods-Quests-dummy.m */, - D56C1BDA14B990E5E4C41D406B14FD5D /* Pods-Quests-frameworks.sh */, - 4DD43F5A6F9F4AA4E198BA454F4B9FE1 /* Pods-Quests-Info.plist */, - EA000F0ADAA23342F235DD04A6A81819 /* Pods-Quests-umbrella.h */, - 43D3C2770C47E2AB9F3372E1EF585607 /* Pods-Quests.debug.xcconfig */, - 653DAED1E2A1DF3B5895CE87725E147C /* Pods-Quests.debuginternal.xcconfig */, - E28A84239AADBBEF9ADCCE85B030FFAE /* Pods-Quests.release.xcconfig */, - 79937B31EBA742AB8A2A4271ABB83B4A /* Pods-Quests.releaseinternal.xcconfig */, - ); - name = "Pods-Quests"; - path = "Target Support Files/Pods-Quests"; - sourceTree = "<group>"; - }; - 73DEF7375630F4762BC93A954CC02BE6 /* Support Files */ = { - isa = PBXGroup; - children = ( - D0CEB81076DC90B0261723F9E433F275 /* Down.modulemap */, - 233666306FB8740B0C3067022C9C5662 /* Down-dummy.m */, - 0008DB4151A3318B45CFABC54419F778 /* Down-Info.plist */, - A65649E2763C3A6AFCE97D40030AFFD3 /* Down-prefix.pch */, - F825C62B1E64CE1004FEB9B29271CB66 /* Down-umbrella.h */, - 475EF0E2E5166D8E04FF9CF4598A57A3 /* Down.debug.xcconfig */, - E80EF97C2ADD2E6601FF743936AADC4C /* Down.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Down"; - sourceTree = "<group>"; - }; - 7B4DFF0AE1D54A6C7DB11997C7493F25 /* SwiftLint */ = { - isa = PBXGroup; - children = ( - 35191563DAF08DD51DA6CB0913C93BD0 /* Support Files */, - ); - path = SwiftLint; - sourceTree = "<group>"; - }; - 82379CF3F3C93FA6AC5FA776FB8247A7 /* ReachabilitySwift */ = { - isa = PBXGroup; - children = ( - D65963AD7D72E4A7788BDD54EFA81EE8 /* Reachability.swift */, - 842544EAF557E1260A46AD1BCE6E6146 /* Support Files */, - ); - path = ReachabilitySwift; - sourceTree = "<group>"; - }; - 8359B48A3C39E0D5B2B9A919CC2EFFAB /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 6F066B2B2542E4B7C83A28846A774A2B /* Pods-Quests */, - ); - name = "Targets Support Files"; - sourceTree = "<group>"; - }; - 842544EAF557E1260A46AD1BCE6E6146 /* Support Files */ = { - isa = PBXGroup; - children = ( - 9B5C174A31193D29CF7A6C9EE32EC1B3 /* ReachabilitySwift.modulemap */, - 002949C44ABBCE669C5F89D657A750C7 /* ReachabilitySwift-dummy.m */, - A6F6399F71247BFCE8003FA71DCF18DE /* ReachabilitySwift-Info.plist */, - ED3950E91EA235710B1EEF6A4B1570B8 /* ReachabilitySwift-prefix.pch */, - CBDA58A528C8BEAE43C3D7B994A73226 /* ReachabilitySwift-umbrella.h */, - 81757FB6843CCF3E2E8620E059D96795 /* ReachabilitySwift.debug.xcconfig */, - 11E0700D600F467A27A0380AB9F00E62 /* ReachabilitySwift.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/ReachabilitySwift"; - sourceTree = "<group>"; - }; - 84B9872899A987D0436AC7D3E6E974EA /* XCGLogger */ = { - isa = PBXGroup; - children = ( - BC94AF0234332A190EB63BFF752F5096 /* Core */, - DD5953F2C74B9961E0A1C2730445AE1A /* Support Files */, - ); - path = XCGLogger; - sourceTree = "<group>"; - }; - 99CD28972B923EB012D70AE674E896E0 /* Pods */ = { - isa = PBXGroup; - children = ( - 4C14647103F575F03F8851782A3CCFA6 /* Alamofire */, - 0D02F77A523922A60E739A5BFD9F8489 /* CwlUtils */, - 5D4A39A0651F9949C9CCA299B9EC748F /* Down */, - 17382D60EAAF774CBA58E17C581284D0 /* Netable */, - 6D746C096C0C09ED2E5A2089BEF42A48 /* ObjcExceptionBridging */, - 82379CF3F3C93FA6AC5FA776FB8247A7 /* ReachabilitySwift */, - 15FAE76852D76D33DE5C7639B08EF335 /* SnapKit */, - 7B4DFF0AE1D54A6C7DB11997C7493F25 /* SwiftLint */, - 1ADE773468D807E72F673DA2A76EBD05 /* SwiftyJSON */, - 060F333F3763C9BE623280FE4C40CCEC /* SwiftyUserDefaults */, - 256D697392D5BB2B70B074FAB1CD15BF /* Valet */, - 84B9872899A987D0436AC7D3E6E974EA /* XCGLogger */, - ); - name = Pods; - sourceTree = "<group>"; - }; - 9FBCC7709296F8E0AF2BA319203FC6E1 /* OS X */ = { - isa = PBXGroup; - children = ( - 0446B1574BE5C8195D550956D79390BF /* Cocoa.framework */, - 2177DBCF4E795DA115B7682C5DD3C445 /* Security.framework */, - 1A1C32FD6CB008180190548810584C4C /* SystemConfiguration.framework */, - ); - name = "OS X"; - sourceTree = "<group>"; - }; - A8202B10742EB4EA678CCB8099C872D0 /* Support Files */ = { - isa = PBXGroup; - children = ( - D1801CD9F4FE34A863FD85DD4FED4321 /* Alamofire.modulemap */, - 5BD51F0B55ECCD878F746238F6F1E420 /* Alamofire-dummy.m */, - AB2EBF0555A00DF7A988268095CF7292 /* Alamofire-Info.plist */, - 30436483136E8759C9D17244AFC3A339 /* Alamofire-prefix.pch */, - C488A1E48EFFDCF13F9FB3587D3F32D6 /* Alamofire-umbrella.h */, - 3BEBDA16C6B8F76D430091054300FA5E /* Alamofire.debug.xcconfig */, - 8F1F538159E2AB295476257164E29E15 /* Alamofire.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Alamofire"; - sourceTree = "<group>"; - }; - BC94AF0234332A190EB63BFF752F5096 /* Core */ = { - isa = PBXGroup; - children = ( - 657095BDC3709F78C26D91E9D611FC3C /* ANSIColorLogFormatter.swift */, - CBF087C7A261AF95E766DE04FD10DA5F /* AppleSystemLogDestination.swift */, - 73A807A3F2F3BE739662AC6372AF85E3 /* AutoRotatingFileDestination.swift */, - 3D3E46F970D04898E9718B3A7AED0FAF /* Base64LogFormatter.swift */, - DA5579E44C5AB58BACC8A022DC29742F /* BaseDestination.swift */, - 25690F4C04AA595ACF0A1138DA0DF9CB /* BaseQueuedDestination.swift */, - B6ECEAE4591739FBAD3AFCCDCECF9842 /* ConsoleDestination.swift */, - 3625C1E94EA43B13572A085AAADF1E99 /* DestinationProtocol.swift */, - DACC7E9BE7D2FDDD926FDFDF60859589 /* DevFilter.swift */, - A2413DC8230989818ACCB1BF02F1BDBC /* DispatchQueue+XCGAdditions.swift */, - 215AC509102DE153EE595ACC1C363351 /* FileDestination.swift */, - A1C12795C8377029B232DD291E6D4CF1 /* FileNameFilter.swift */, - 3C3492C7019CEE9234D102F4FE38BB2A /* FilterProtocol.swift */, - DD5230217C4C19D9BF5A86EC9B73F68D /* HelperFunctions.swift */, - D5D4776B46399FAF0CD598A7CCE69388 /* LogDetails.swift */, - 132F84B48C90959E8399EA4B7EEBF525 /* LogFormatterProtocol.swift */, - CB40853EBAF088D0F163D8E1C55DAC34 /* PrePostFixLogFormatter.swift */, - 1289849BFD7121E178A3C765D115B2FA /* TagFilter.swift */, - 8CA669666062DAE8749FD8C50FD543BC /* TestDestination.swift */, - 62C1A6DE6F727EFFDDC3CDC53F4F7F87 /* URL+XCGAdditions.swift */, - ED1794A9E55649F8950EBB3A1ADF09AF /* UserInfoFilter.swift */, - 86237AC72A38FA030DE94BE7A5847F08 /* XCGLogger.swift */, - 615DF487334FA5F26E2286B0444830B1 /* XcodeColorsLogFormatter.swift */, - 2D83EDA7F9E024AAD3D5DFCDCF971B30 /* Resources */, - ); - name = Core; - sourceTree = "<group>"; - }; - C87729EF71E574DB2B57445C47D048A4 /* Support Files */ = { - isa = PBXGroup; - children = ( - 1F8407C1AB84E2E13048380916BA1573 /* Netable.modulemap */, - 90FFACAD9C1B239BFD7D226DFF95D9BF /* Netable-dummy.m */, - B5B518AE1825D02ACA9D6530164CF32E /* Netable-Info.plist */, - EE34E6F21CCB4D824E742E664A663185 /* Netable-prefix.pch */, - 875082FB2395F154D808DE9CD0471394 /* Netable-umbrella.h */, - E9E2A751EC1AD49A7F055D90FFD122EB /* Netable.debug.xcconfig */, - DA7516D785DE8BC238850F6BDFC89DF6 /* Netable.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Netable"; - sourceTree = "<group>"; - }; - CF1408CF629C7361332E53B88F7BD30C = { - isa = PBXGroup; - children = ( - 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, - F34AAEE870498F2E75F9697C6CE9869B /* Frameworks */, - 99CD28972B923EB012D70AE674E896E0 /* Pods */, - 54FA4D4E1C4CF502E8B222FA43445E4C /* Products */, - 8359B48A3C39E0D5B2B9A919CC2EFFAB /* Targets Support Files */, - ); - sourceTree = "<group>"; - }; - D2C7333F561FD6198A6D01776FE53DEB /* Support Files */ = { - isa = PBXGroup; - children = ( - 56FA7C2FE71176D04D7DF20A65803B68 /* CwlUtils.modulemap */, - 887599C323AED7F80DE24CE15D25DE87 /* CwlUtils-dummy.m */, - E4DAA1416AAC20248D7050A9DDEBCCFD /* CwlUtils-Info.plist */, - 33D240F1482114839857057D5903D9D3 /* CwlUtils-prefix.pch */, - 77EA823E366709D6F72C2C00C89671B6 /* CwlUtils-umbrella.h */, - BD4D34F6DABE66D0B4F15DC53FEDD9A5 /* CwlUtils.debug.xcconfig */, - 05A72CC5B091046B010259D040347447 /* CwlUtils.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/CwlUtils"; - sourceTree = "<group>"; - }; - D39B3BFBC2DE842AE6CD365752A0D947 /* Support Files */ = { - isa = PBXGroup; - children = ( - A720109E0B4B2F62512A016399A47420 /* SnapKit.modulemap */, - 8E9BF3AC84C37D81BBBCF89CE2A82983 /* SnapKit-dummy.m */, - DD8DE0650AF15E7679FEEE0A5E744E4D /* SnapKit-Info.plist */, - 374CC110DF352B6327E0708D1B9ED78C /* SnapKit-prefix.pch */, - DDD40DC10A8629512DFF149F8C5CF78C /* SnapKit-umbrella.h */, - FF97E56190F4FFB5F34E0947B8477B63 /* SnapKit.debug.xcconfig */, - D4A25156F540013A1E3CD86AD609BC18 /* SnapKit.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SnapKit"; - sourceTree = "<group>"; - }; - D83C13595189133975450CA8C26603AF /* Resources */ = { - isa = PBXGroup; - children = ( - 2BB5F01AE6D0F412759FF440A2FF6387 /* DownView.bundle */, - ); - name = Resources; - sourceTree = "<group>"; - }; - DD5953F2C74B9961E0A1C2730445AE1A /* Support Files */ = { - isa = PBXGroup; - children = ( - 4252D96EFAFD762609665B730A0B5EF3 /* XCGLogger.modulemap */, - 3BA6262A9DBD6E322E48062FA76DCEE4 /* XCGLogger-dummy.m */, - 8D4049821160F8FEB828B45215E93819 /* XCGLogger-Info.plist */, - 1FB2F2B8E1C67EBC6C505D06EF0DEB3C /* XCGLogger-prefix.pch */, - 186E40461E2FE48E915192953ACCEAB4 /* XCGLogger-umbrella.h */, - CD9FFD66767CFB7666EE0A8DDA8E14FF /* XCGLogger.debug.xcconfig */, - 9C01129E1A49211507FBD3147141CC4C /* XCGLogger.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/XCGLogger"; - sourceTree = "<group>"; - }; - DD730568826D2222AA0D2F831C6CE181 /* Support Files */ = { - isa = PBXGroup; - children = ( - DF00C1A26BA37A98339609B1E37CDD45 /* Valet.modulemap */, - AB00DA18DF38C0B4EE67AC0F7F6B5A48 /* Valet-dummy.m */, - 0538A3EE27FE86934C66022F35080E65 /* Valet-Info.plist */, - 900CFF4FBCD9F891D1426572E8A9B002 /* Valet-prefix.pch */, - 52F714FC99B15E1DEF873C471B5E2A3A /* Valet-umbrella.h */, - 889A498116FE76E35F226E44F9B9178E /* Valet.debug.xcconfig */, - A2EC3E3F869BBE597FB4368BAA34D150 /* Valet.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/Valet"; - sourceTree = "<group>"; - }; - E611507E831687E8A978699E2F7890B2 /* Support Files */ = { - isa = PBXGroup; - children = ( - 600815CEA5267574FB028E4077BB9420 /* SwiftyJSON.modulemap */, - 87DA4EC98A3FE56C9439E8A29B3E1FEC /* SwiftyJSON-dummy.m */, - A456C4E27C61403A834AB234F21E5FED /* SwiftyJSON-Info.plist */, - BCA48BBB6B665E85FFD26E5FD53E9B32 /* SwiftyJSON-prefix.pch */, - F7517D9011A8D080FCA3F2AFCC4470A3 /* SwiftyJSON-umbrella.h */, - 284363FA6D2D090C6AA9D6EA418FD7DA /* SwiftyJSON.debug.xcconfig */, - 2C517B93F174037AE9147CA335342D50 /* SwiftyJSON.release.xcconfig */, - ); - name = "Support Files"; - path = "../Target Support Files/SwiftyJSON"; - sourceTree = "<group>"; - }; - F34AAEE870498F2E75F9697C6CE9869B /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2C2A9E8FF35390B14DA87B2065DC9D3D /* ObjcExceptionBridging.framework */, - 9FBCC7709296F8E0AF2BA319203FC6E1 /* OS X */, - ); - name = Frameworks; - sourceTree = "<group>"; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0444FC47D0261747B49283424DD4682B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3295095412ACA107BB19591891AE4B68 /* Valet-umbrella.h in Headers */, - 05E578D376F026BEEE5BECD6EA921CCA /* Valet.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 15793A7758B82ACDCAACB02B5FF1612E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 840339F416121CE3A07A792187807CA4 /* XCGLogger-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1E5CDA21869A482B9BBEFD3F5625841A /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D0E87E993C9077B2BA11272207DC7F8D /* SnapKit-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1FB51757A2A259F31C655FDCB1D87047 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CB9D0156940B0CEB82DBA6824442776E /* Alamofire-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2CF359043B2F18F4D65A5BD00C304EA4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 91DC5DA302BCBB2E95A76B92DFF5CBE2 /* ReachabilitySwift-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 36117DA0C5010B5196719CDE8A1E8B0E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B74DEB79CE1083D1F1D44F3B11B27219 /* Netable-umbrella.h in Headers */, - FEA429B74932B4AF58A12A1ED8B8D601 /* Netable.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4DF052555E1C634A57A83E7B832E85A2 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4BC837DB8C9521C058314048DD166685 /* CwlFrameAddress.h in Headers */, - 03B9411FDA1CFF14355924E3908220A2 /* CwlUtils-umbrella.h in Headers */, - E9EF34B5421A2C2EA21EFB0FD2D46ADA /* CwlUtils.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6E9AB6D904AFE8C9CECD866AA99C6EB4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ACFA0FC19CBB3B71FF3E157023ED25AE /* SwiftyJSON-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 862AEC27FB974E824B5D557247763A13 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 543AE25225F0E554257BA2BEAE4267C5 /* ObjcExceptionBridging-umbrella.h in Headers */, - 7CFB2DD4F95C1180A7CE1C27157F515F /* ObjcExceptionBridging.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9F5A215D595DD5A2BC58228C73F0634B /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8AB91523F7516DFEE68A381835A97544 /* Pods-Quests-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B6F5EAD0E93AD5F5A9BAD4B0006C1B71 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 0E794448B651E93AD4CE37021FF77FCF /* buffer.h in Headers */, - 4C3828DF6F9CB5DA56FE87EEC3A4D23F /* chunk.h in Headers */, - ACFFA50F04910B874D155DBA3934390C /* cmark.h in Headers */, - BFA347D9E86EF3A86E1035066078EA63 /* cmark_ctype.h in Headers */, - 9374D18CCAFDAF1A57F664A14002B5B4 /* cmark_export.h in Headers */, - 5929C9D7CC208C63A6C6AD3D707DCB8C /* cmark_version.h in Headers */, - 624B8D6A83501662EE1F4C5A80956CDE /* config.h in Headers */, - 650BC30A686FF441CCFCBB2A04306E3D /* Down-umbrella.h in Headers */, - 119204FB97A7455734F4DB8F7DF043B5 /* Down.h in Headers */, - A1E54F9CFF19A8EC30F786B3DC7043B3 /* houdini.h in Headers */, - FE53A56C4578B2A8864662F77935C17C /* inlines.h in Headers */, - ED94B29E1519D1FCB0ED81FDEA123813 /* iterator.h in Headers */, - 2EC73DB34331582083E99A2B84EF321A /* node.h in Headers */, - B5A8D4F1FCA93019E828F443CFB03F19 /* parser.h in Headers */, - D2BC1CD805051E5FFFF1C10F6696BD14 /* references.h in Headers */, - 8D959FF79724C7EC49C2B036B07D2239 /* render.h in Headers */, - 727013BDC6702DE3C61B008D141E1B25 /* scanners.h in Headers */, - 9D21477F0FD13BCF0ECE5E3B2393AC2A /* utf8.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D583DA2CD404BD20C8AEDC9766DC9700 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - EA7DCBB8F26CC3030B19E5B6EE734B65 /* SwiftyUserDefaults-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 07AFE6B9C0D64C3222F1B3FAA995664C /* XCGLogger */ = { - isa = PBXNativeTarget; - buildConfigurationList = 0118296CFC0B83172F914CB3481304AE /* Build configuration list for PBXNativeTarget "XCGLogger" */; - buildPhases = ( - 15793A7758B82ACDCAACB02B5FF1612E /* Headers */, - 4F51C954AAA7C80A0DE499425127AF61 /* Sources */, - 74282013CEAE04F339FA02C44D92FDC6 /* Frameworks */, - 20B26D8A73DB43AD4CA29451399F9387 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - FBAEC4C3D0CB8513A4D14911FE83366D /* PBXTargetDependency */, - ); - name = XCGLogger; - productName = XCGLogger; - productReference = FC21E11599264BC8297EB97354A9423F /* XCGLogger.framework */; - productType = "com.apple.product-type.framework"; - }; - 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3A099D0AED8C9FAB4D7BBF1DC79CEA3C /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */; - buildPhases = ( - 2CF359043B2F18F4D65A5BD00C304EA4 /* Headers */, - 4AB92A18993A96D8DC6CDB5DFDA5ADC8 /* Sources */, - E61B769D3DB83B13F9D220322C28DF34 /* Frameworks */, - C3B6A7AE2DEB09EAA2E3FB1A5A4928D2 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ReachabilitySwift; - productName = ReachabilitySwift; - productReference = 21B03CA622E690725A6626C088E1D09F /* Reachability.framework */; - productType = "com.apple.product-type.framework"; - }; - 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */ = { - isa = PBXNativeTarget; - buildConfigurationList = CA9CFF49699CFDD1C3FC726C297D3D7C /* Build configuration list for PBXNativeTarget "SnapKit" */; - buildPhases = ( - 1E5CDA21869A482B9BBEFD3F5625841A /* Headers */, - D1B5C5CF3457FE3A6155F443152F1334 /* Sources */, - 583953B3BCC8F922FE3B14ED4E288630 /* Frameworks */, - A8228D12F07CAAFAB8A48D0471DF853B /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SnapKit; - productName = SnapKit; - productReference = 979486118B3E90C08386079D57962701 /* SnapKit.framework */; - productType = "com.apple.product-type.framework"; - }; - 4B39B1698B2025E64AC8731236DBDAE1 /* Netable */ = { - isa = PBXNativeTarget; - buildConfigurationList = 08C470B90442DB7BEBF0411DB4FE5976 /* Build configuration list for PBXNativeTarget "Netable" */; - buildPhases = ( - 36117DA0C5010B5196719CDE8A1E8B0E /* Headers */, - B34856AFADA273FEAB7FF297C0854E43 /* Sources */, - AA8615FBBE4AEF2411618D807B982CB4 /* Frameworks */, - 0B353F17FA77BBC90A991475AC324E5D /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Netable; - productName = Netable; - productReference = 3FEA5F6CCF86397E36BA19DF0C3E8AC5 /* Netable.framework */; - productType = "com.apple.product-type.framework"; - }; - 746615E9A06AABA6F288B49A10B63E10 /* ObjcExceptionBridging */ = { - isa = PBXNativeTarget; - buildConfigurationList = 718361EB5111D2543DB931030147A545 /* Build configuration list for PBXNativeTarget "ObjcExceptionBridging" */; - buildPhases = ( - 862AEC27FB974E824B5D557247763A13 /* Headers */, - 0D0C1DAA663E408582B036825721C976 /* Sources */, - 5BD9B711A5F4419FB9E1816656809A4C /* Frameworks */, - 789F80D30EDA8B32A6216CDD21B0D502 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = ObjcExceptionBridging; - productName = ObjcExceptionBridging; - productReference = 1CAB16A12A28E8BE749202B03552307A /* ObjcExceptionBridging.framework */; - productType = "com.apple.product-type.framework"; - }; - A049F3164EBC335A7982A4E1FB3A5EAA /* SwiftyUserDefaults */ = { - isa = PBXNativeTarget; - buildConfigurationList = E0172877CF77BB94F34740F72B327570 /* Build configuration list for PBXNativeTarget "SwiftyUserDefaults" */; - buildPhases = ( - D583DA2CD404BD20C8AEDC9766DC9700 /* Headers */, - 4C966FDED6941F9B1D4D8700F4370799 /* Sources */, - C362FE20B316E43DB0A5B94D5D731F76 /* Frameworks */, - BFC642E8D1A776A6A0D583C2F1377844 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftyUserDefaults; - productName = SwiftyUserDefaults; - productReference = B7715718A7E1E513F9BC2E99B977FCA9 /* SwiftyUserDefaults.framework */; - productType = "com.apple.product-type.framework"; - }; - B4575FF01775E963E58050542C9A4E7A /* Down */ = { - isa = PBXNativeTarget; - buildConfigurationList = 70FCFD5EEE672DB322D7110477D07566 /* Build configuration list for PBXNativeTarget "Down" */; - buildPhases = ( - B6F5EAD0E93AD5F5A9BAD4B0006C1B71 /* Headers */, - 3D7B44AF46A45BE427939DAEC082AB04 /* Sources */, - A0BE23A2589E64EE1D205D0D4D575C36 /* Frameworks */, - 793D00ABEC9B8AD725E06886F21C3D22 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Down; - productName = Down; - productReference = 4C90E8F3F21B7688E1FB09920322D768 /* Down.framework */; - productType = "com.apple.product-type.framework"; - }; - BEC9ADA475B5D1902939C94E828E47A3 /* CwlUtils */ = { - isa = PBXNativeTarget; - buildConfigurationList = 24A92DA3A5F06A3794D9AE2043A7BDD1 /* Build configuration list for PBXNativeTarget "CwlUtils" */; - buildPhases = ( - 4DF052555E1C634A57A83E7B832E85A2 /* Headers */, - 55B190175D02B48F7E108977CDDB190D /* Sources */, - 20B7E4C28C26E94A9A6A3324B09C6DA0 /* Frameworks */, - 4E33C45EED5BC88F2CEBA05CB7A94E48 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = CwlUtils; - productName = CwlUtils; - productReference = 19505C3754CA22D260C9A9C806CE469F /* CwlUtils.framework */; - productType = "com.apple.product-type.framework"; - }; - D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */ = { - isa = PBXNativeTarget; - buildConfigurationList = 883E0B7E1EA852A4969EE4E01A1962C1 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */; - buildPhases = ( - 6E9AB6D904AFE8C9CECD866AA99C6EB4 /* Headers */, - EF3469D4D250DFE100F76AB9865454C8 /* Sources */, - BDBD313A0715DAE4849893F5E1CF20BB /* Frameworks */, - FEC924DA038AA9D072CB8DC4984BAB38 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = SwiftyJSON; - productName = SwiftyJSON; - productReference = E23C076BA70925415F490FEDB215DA92 /* SwiftyJSON.framework */; - productType = "com.apple.product-type.framework"; - }; - D9B310D1BE736A04F8A13E0A22E4677E /* Pods-Quests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 020879FA6B1994408301926C222F0FF4 /* Build configuration list for PBXNativeTarget "Pods-Quests" */; - buildPhases = ( - 9F5A215D595DD5A2BC58228C73F0634B /* Headers */, - E0C804ADE0081491868420F57A1705AE /* Sources */, - 25F0B0C1DDBCBFDB7B85788DE6A9AB30 /* Frameworks */, - 65F0C76A60893A6FBBE38F9391BA2EC5 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 5AECF020B3B59263EB02DE01DF3812FF /* PBXTargetDependency */, - EE8B2750CB2A11D92B4388D98F7B7CA3 /* PBXTargetDependency */, - 965D16205DA3D202FBC23CF32A096D9B /* PBXTargetDependency */, - 7C24863D63F2656A1419723AD9E3EE14 /* PBXTargetDependency */, - A5EAC156BF8DA1B770998B7D7B8F0933 /* PBXTargetDependency */, - 7CCD746ECFBDCA4A03597EBE7A7D8A0F /* PBXTargetDependency */, - 3EEAC9024A6D321B4F71AB5F6CE48ABB /* PBXTargetDependency */, - 6D0657A5CC340798C01D12DD7D8008AC /* PBXTargetDependency */, - 36A46D21AD4E94A2351CEC400F404796 /* PBXTargetDependency */, - 49DF8FF4FAB6C2D7E97E7AF5120202F6 /* PBXTargetDependency */, - CA33C40A5184D5478BB1D5F2DF95878B /* PBXTargetDependency */, - 2BA1FAC3169A5274B76526DD905574DB /* PBXTargetDependency */, - ); - name = "Pods-Quests"; - productName = "Pods-Quests"; - productReference = 8A32D5F3A0DE08F28E56A5DD3FA2364D /* Pods_Quests.framework */; - productType = "com.apple.product-type.framework"; - }; - E3D29E214E770F28213292B63B7A05DA /* Valet */ = { - isa = PBXNativeTarget; - buildConfigurationList = 3139FF1D6B5C2E00948CB0C91F01025F /* Build configuration list for PBXNativeTarget "Valet" */; - buildPhases = ( - 0444FC47D0261747B49283424DD4682B /* Headers */, - DF0AC27380090DEED12B8B83952E3650 /* Sources */, - AED26A112C79706BE7385261A89A9937 /* Frameworks */, - 3070667A5815234BC759B33D18870387 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Valet; - productName = Valet; - productReference = B3081E0CFC54E0C89C7B6D481B03DC95 /* Valet.framework */; - productType = "com.apple.product-type.framework"; - }; - EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */ = { - isa = PBXNativeTarget; - buildConfigurationList = 4D9E86B75BF848264595ABE7456A4292 /* Build configuration list for PBXNativeTarget "Alamofire" */; - buildPhases = ( - 1FB51757A2A259F31C655FDCB1D87047 /* Headers */, - EF3173C6697133E5D2F33643712FE570 /* Sources */, - 6A35F17FDC58886B2AAD2D9D55EB4A6D /* Frameworks */, - 19145D477D7CF6DB5ED1EE57BB451191 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = Alamofire; - productName = Alamofire; - productReference = 5D797E9A5C5782CE845840781FA1CC81 /* Alamofire.framework */; - productType = "com.apple.product-type.framework"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - BFDFE7DC352907FC980B868725387E98 /* Project object */ = { - isa = PBXProject; - attributes = { - LastSwiftUpdateCheck = 1100; - LastUpgradeCheck = 1100; - }; - buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; - compatibilityVersion = "Xcode 11.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = 54FA4D4E1C4CF502E8B222FA43445E4C /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */, - BEC9ADA475B5D1902939C94E828E47A3 /* CwlUtils */, - B4575FF01775E963E58050542C9A4E7A /* Down */, - 4B39B1698B2025E64AC8731236DBDAE1 /* Netable */, - 746615E9A06AABA6F288B49A10B63E10 /* ObjcExceptionBridging */, - D9B310D1BE736A04F8A13E0A22E4677E /* Pods-Quests */, - 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */, - 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */, - 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */, - D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */, - A049F3164EBC335A7982A4E1FB3A5EAA /* SwiftyUserDefaults */, - E3D29E214E770F28213292B63B7A05DA /* Valet */, - 07AFE6B9C0D64C3222F1B3FAA995664C /* XCGLogger */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 0B353F17FA77BBC90A991475AC324E5D /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 19145D477D7CF6DB5ED1EE57BB451191 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 20B26D8A73DB43AD4CA29451399F9387 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 39D7DC625309DDEB9260F9C8141DE05D /* .swift-version in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3070667A5815234BC759B33D18870387 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4E33C45EED5BC88F2CEBA05CB7A94E48 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 65F0C76A60893A6FBBE38F9391BA2EC5 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 789F80D30EDA8B32A6216CDD21B0D502 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 793D00ABEC9B8AD725E06886F21C3D22 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 76FBAB1D0B963D13F2E1A87BC11A9A48 /* DownView.bundle in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A8228D12F07CAAFAB8A48D0471DF853B /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BFC642E8D1A776A6A0D583C2F1377844 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C3B6A7AE2DEB09EAA2E3FB1A5A4928D2 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FEC924DA038AA9D072CB8DC4984BAB38 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 0D0C1DAA663E408582B036825721C976 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EAC4554A5D7EB1D416FDBF8B333CE8F7 /* ObjcExceptionBridging-dummy.m in Sources */, - 238176E241F0AE9E0DD5714A661C27A8 /* ObjectiveCMarker.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3D7B44AF46A45BE427939DAEC082AB04 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9DCB43C2933A74CB4D1315673914DD7C /* AttributedStringVisitor.swift in Sources */, - F532123E8A7F7AD8E4DCD8B9040507C1 /* BaseNode.swift in Sources */, - 5A636CF138E3DD68F7AF625E0EE24573 /* BlockBackgroundColorAttribute.swift in Sources */, - AF8FB9CEC9A140ED0FF7441A60A3707C /* BlockQuote.swift in Sources */, - AF77FEBA76B123281049FB0034BAE4A3 /* blocks.c in Sources */, - 8B188203470FE6E24AA4E2AF82991A12 /* buffer.c in Sources */, - B7ADDC15BF71272B0FD52FA361DB3213 /* CGPoint+Translate.swift in Sources */, - 7E125C61800DB02A48617493BEC61663 /* CGRect+Helpers.swift in Sources */, - 3C375FACA5AEBF27F5EA8EB9BBD9642E /* ChildSequence.swift in Sources */, - 3C857ECD05C719340DC1913D3991BD3F /* cmark.c in Sources */, - 7AFC25390B3D1AD4889E945A73889D5A /* cmark_ctype.c in Sources */, - 15ED4D723BD527AB4D890DAB79EA02D8 /* Code.swift in Sources */, - 8DB24500054A26BE964C0134591E5CD1 /* CodeBlock.swift in Sources */, - 0D43092DE7884ACF49346B1FDF4698CA /* CodeBlockOptions.swift in Sources */, - 802529140F9CC4B60B66C2E74CD88213 /* ColorCollection.swift in Sources */, - B7B03FD5C15F7B703C0CF647C379DF8D /* commonmark.c in Sources */, - 8DF5F0EF9321F222A9DBFFC8E3F13F6B /* CustomBlock.swift in Sources */, - A9216D3144412182532D297BB125BB62 /* CustomInline.swift in Sources */, - FD85DB3EC0D275BA7F71F79D1BB5C890 /* DebugVisitor.swift in Sources */, - BC4DC169451980A56E5A18E7CAB8AB9C /* Document.swift in Sources */, - F21C858819FA6DC62A0923392FDA2F15 /* Down-dummy.m in Sources */, - 8C49239703F6A3BC0F96503D4AE7C341 /* Down.swift in Sources */, - 64C8EBF9FB4FFDF6CDAB1627A2CC69D3 /* DownASTRenderable.swift in Sources */, - 3DF41C4CDAE85D807E5D1A9C62BF5B68 /* DownAttributedStringRenderable.swift in Sources */, - D3D78BDF54D7BA4AA747FAA9B00AA444 /* DownCommonMarkRenderable.swift in Sources */, - 358DF57B7379B4B3DA0FECCA0F568C49 /* DownDebugLayoutManager.swift in Sources */, - A999407A7193AB97F00AB9CEC18B63BB /* DownDebugTextView.swift in Sources */, - 24FA0B53000DF7AE85690E410D13F74C /* DownErrors.swift in Sources */, - E88674607C4CA8B0333A0890E100C3CB /* DownGroffRenderable.swift in Sources */, - CB3202096CBF126A20FFE9B5F43C42B6 /* DownHTMLRenderable.swift in Sources */, - 92AE44D09A10BE17BBE665CB52D2D8CC /* DownLaTeXRenderable.swift in Sources */, - 1B169A9E64E8A66A61C92D042EBDB19F /* DownLayoutManager.swift in Sources */, - 0120A3BB087EDF464B2C27C20D81179F /* DownOptions.swift in Sources */, - C9E4A348C347435C5FA0054AD2610017 /* DownRenderable.swift in Sources */, - 5993B3186A8CD3CCAD8DE4F46A16E5E8 /* DownStyler.swift in Sources */, - B8D3287CABDF8356A90473BD1C61CB0D /* DownStylerConfiguration.swift in Sources */, - CAE4B6ECADB357252DDC3CE22A6F7A9C /* DownTextView.swift in Sources */, - 2E7DF0D1465F23EBB961D6E95E3814C1 /* DownView.swift in Sources */, - 68DF690E4CD4C4B486570630556C7EC4 /* DownXMLRenderable.swift in Sources */, - D7BEC235843779D564CDA435A5141DEC /* Emphasis.swift in Sources */, - 332F795B1E9D5C3410511BE80088062C /* FontCollection.swift in Sources */, - 49DFC1774823235425AE09205027E3E6 /* Heading.swift in Sources */, - B9F32C60D18D2EDD48CDFF6262505584 /* houdini_href_e.c in Sources */, - 49C2A371CBEE120754F4F28B7C6634A6 /* houdini_html_e.c in Sources */, - 9AB5DE24F51943247366CF8EA2932CC7 /* houdini_html_u.c in Sources */, - EB6AAD23C34D1566DB0BBBE4475C549A /* html.c in Sources */, - 1F5992998470932328D3DB7C88BFDBC7 /* HtmlBlock.swift in Sources */, - 90E378BCEF930C65D0CF7F17B09B41D1 /* HtmlInline.swift in Sources */, - 8EB49CAC4DB6CEBB88C1775664C62344 /* Image.swift in Sources */, - B20CEBF0CE230358955BA758F422C9A9 /* inlines.c in Sources */, - 33433F6DDA32CC719477034F3636262C /* Item.swift in Sources */, - E40EF3F5A37A4A2A613D35F82F7AE0AB /* iterator.c in Sources */, - 24925FE0BB1706C731D8E3AAA7897E98 /* latex.c in Sources */, - D7C029EC2315B4E6C96D8384AF115EFD /* LineBreak.swift in Sources */, - 621E0346E05C7947C3661539E051DFC1 /* Link.swift in Sources */, - 04729A98EDB5FEDCD496F06098C318A6 /* List.swift in Sources */, - CDBD7E8F9F271D952640DA95DC7604E6 /* ListItemOptions.swift in Sources */, - 2006772478C98A592E24A5CDF07C8195 /* ListItemParagraphStyler.swift in Sources */, - 18BFF4ECC04F68AFD3F8B32D9E776606 /* ListItemPrefixGenerator.swift in Sources */, - BA907F50B9C2BAA5B201CFCFD90C8D09 /* man.c in Sources */, - C1E5E03EECD78A90C23B0BBCBEE61429 /* node.c in Sources */, - 5380F9EB23C4B85B5E7647EAEF6D3ABC /* Node.swift in Sources */, - D57245EE5A241C268EDC75E3499CBDD1 /* NSAttributedString+Helpers.swift in Sources */, - 28A2E0163F37EB4FB673BCF0C99A49EE /* NSAttributedString+HTML.swift in Sources */, - 55481BFDE7FAE62DD080CA3544D9E6B4 /* NSMutableAttributedString+Attributes.swift in Sources */, - F8B7EEA0198E2FCD58D1EC3CFD5FCB63 /* Paragraph.swift in Sources */, - 95FCC097C699246A312D67CE81E4358D /* ParagraphStyleCollection.swift in Sources */, - 5EFF0224F9505D50144F2627746C0868 /* QuoteStripeAttribute.swift in Sources */, - 2C68363732D710E2EB6859780FE6AF00 /* QuoteStripeOptions.swift in Sources */, - 0CE9F5031B1B34D1084E2F383C253ACA /* references.c in Sources */, - 50145919747081A75CC0D9950C19848A /* render.c in Sources */, - F0F491054B751D638802FF21070AAE42 /* scanners.c in Sources */, - D3C7CE270812C8636A8E6C3E457B084C /* SoftBreak.swift in Sources */, - 812835A396E9BDAADE7F6C2557FCD07B /* String+ToHTML.swift in Sources */, - CDC9978B1CC0D719050E24F32D71D341 /* Strong.swift in Sources */, - 0B98341DCD3B9399CD90B144DE80E7F9 /* Styler.swift in Sources */, - 8C6C44945A9C30E96A1EEE529E0D361B /* Text.swift in Sources */, - F4D07FB344B05AFB74FD8DE6FED40F74 /* ThematicBreak.swift in Sources */, - 567F85CE8C428A8455283134A52D2248 /* ThematicBreakAttribute.swift in Sources */, - 7E1582CE441A7E85FE0846B6D2B0015A /* ThematicBreakOptions.swift in Sources */, - 9631EF398D70C6850AE121E0A6509AC2 /* UIFont+Traits.swift in Sources */, - 56DB266A71084AC4135FDA4C9A2726D1 /* utf8.c in Sources */, - DAACDD0E122D9E930EE58EB804329571 /* Visitor.swift in Sources */, - 0466BEC4AED4943C62BCCC9E796B6C09 /* xml.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4AB92A18993A96D8DC6CDB5DFDA5ADC8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 59E7C55C00180629503238B7937D86FC /* Reachability.swift in Sources */, - E27DEEE60FB5E02878B771100ED25611 /* ReachabilitySwift-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4C966FDED6941F9B1D4D8700F4370799 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B4FC6F762135A3A6F1DDE1EEC10286C9 /* Defaults+Observing.swift in Sources */, - 5DE371D72609DEF65369FD84AF16A99A /* Defaults+StringToBool.swift in Sources */, - 9207AF544AD013B051AA787F664822D0 /* Defaults+Subscripts.swift in Sources */, - 1574FF8438628E51A2A8984767134455 /* Defaults.swift in Sources */, - 3BB4570C2207BACF8951DDBD4FC7A231 /* DefaultsBridges.swift in Sources */, - 33273F03E69E0CC3A7E1F6B56B7F5CC3 /* DefaultsKeys.swift in Sources */, - 933AD73A0DCF5F2389B27B1F961F8E4A /* DefaultsObserver.swift in Sources */, - 08DFE967333D036185ED2A778D98772E /* DefaultsSerializable+BuiltIns.swift in Sources */, - 8DDF97AC23E153DC8076D2EA59823EF3 /* DefaultsSerializable.swift in Sources */, - 6DCAF434D0450314AA558F60329CB930 /* OptionalType.swift in Sources */, - 3F9A5B3ECC5CE4D0A3CFF71330FEA2D9 /* SwiftyUserDefaults-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4F51C954AAA7C80A0DE499425127AF61 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 6E4793C9F6E7F27BA5FDE0A0FA0FA710 /* ANSIColorLogFormatter.swift in Sources */, - 2DACF398D90283086926539E0ABD8B12 /* AppleSystemLogDestination.swift in Sources */, - 0D93A4677603033F2F34AF9B512299BF /* AutoRotatingFileDestination.swift in Sources */, - 0DE97F88E157B408F829C9E8112D2156 /* Base64LogFormatter.swift in Sources */, - DADCDE2A3EA159926B791E6CC5D6AFF4 /* BaseDestination.swift in Sources */, - B65FCE33CECA8FA22740D2C3326169FA /* BaseQueuedDestination.swift in Sources */, - F59E21DEDB1D9EF6C888B1E33165F414 /* ConsoleDestination.swift in Sources */, - 3753F374F901A95B79F6748C904EED8C /* DestinationProtocol.swift in Sources */, - FD8D5BB80B02846BA0314F566C619754 /* DevFilter.swift in Sources */, - E848CCAAD23E49A14FA1C98902EB9FC9 /* DispatchQueue+XCGAdditions.swift in Sources */, - 9A15E1DCC5ECEB76BCEB83345DDF4D21 /* FileDestination.swift in Sources */, - 177E9F5FD1014BA41FC0E32F9B388BB0 /* FileNameFilter.swift in Sources */, - 39D72BEAEA5A9CADC97BA4765C321CF8 /* FilterProtocol.swift in Sources */, - EB603B07122C57489616E5ED3F3831CB /* HelperFunctions.swift in Sources */, - 930A94B59B7D6DAAA4321E006CF5F5DD /* LogDetails.swift in Sources */, - A1E753C6B6AF255B04A7B523DA10F9BD /* LogFormatterProtocol.swift in Sources */, - E36810095159A5872D9352B642E72E52 /* PrePostFixLogFormatter.swift in Sources */, - 37B6B2C11709F425E8FD56C6F999DD4B /* TagFilter.swift in Sources */, - DAD2C2DCEFF5CCBB04795298912FE05A /* TestDestination.swift in Sources */, - C62A62772401A62877F04DA2A7B304B6 /* URL+XCGAdditions.swift in Sources */, - 77FD8BAD77A8805BD4CC3E8A6D9BEB98 /* UserInfoFilter.swift in Sources */, - 51F16576E2D663A9763E28C8A9E275AB /* XCGLogger-dummy.m in Sources */, - 339756CC10D02BC67C42F2AF4AE56E6A /* XCGLogger.swift in Sources */, - 994001F3881D966A4C32A9EF112EA393 /* XcodeColorsLogFormatter.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 55B190175D02B48F7E108977CDDB190D /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D4E0124378E8E4926744114F48FC98ED /* CwlAddressInfo.swift in Sources */, - 559A7D544E30F94CF908313101AF058B /* CwlCaseNameCodable.swift in Sources */, - 7CEFE12E3A97F9E3BD7DDEAB461F7787 /* CwlCollection.swift in Sources */, - FC690F6DCF4D064C0A90D64A16D402C1 /* CwlCustomExecutionContext.swift in Sources */, - 7EBFE733C9C5C3B2AC91B003FCBC09CC /* CwlDebugContext.swift in Sources */, - 17CD22B31486A244DD91A488F2D48E08 /* CwlDeferredWork.swift in Sources */, - D2683DEBA2B21CF6C0FDBBA87D374D89 /* CwlDeque.swift in Sources */, - B06783B9D3FEA91846A7220EE69AC469 /* CwlDispatch.swift in Sources */, - 6BC4A8269EE279A148573440F89B75E6 /* CwlExec.swift in Sources */, - 8C3169C1891EEC89180EAA4C1044B7DF /* CwlExecutionType.swift in Sources */, - E2CD8F7032D3E289AA6CDE2E892E1E85 /* CwlFew.swift in Sources */, - 70293943A4A2026CCED7D9156FD9E6C2 /* CwlFrameAddress.c in Sources */, - EABDCA9066E4A6A12BDEB484503FD00C /* CwlKeyValueObserver.swift in Sources */, - F8640F22197760F8D190A479A50C01E1 /* CwlLifetime.swift in Sources */, - 8D282B9B7516638E2CCC0CDCBEF3902A /* CwlMutex.swift in Sources */, - D3F0988655C295B361BDAA3DD2FF4031 /* CwlOnDelete.swift in Sources */, - F1D2F6BE7834D427D31476EFE7234C58 /* CwlRandom.swift in Sources */, - E506864A2C8124940052BC776660844E /* CwlResult.swift in Sources */, - E9DCBB3873D475D5FED0135F6FC8AB87 /* CwlScalarScanner.swift in Sources */, - DBB53FE0194E94ED886E7C222EE80939 /* CwlSerializingContext.swift in Sources */, - 33C8F33D54E9AEFAAF7713FDFF11B275 /* CwlStackFrame.swift in Sources */, - 5711A868B2F3A49D0B7BDA36AB4DD34F /* CwlSysctl.swift in Sources */, - A30BCE89ED81E21EBE2319FB0F5868C2 /* CwlUnanticipatedError.swift in Sources */, - 1CCBA31F458FA56BE4B20A8426EA8855 /* CwlUtils-dummy.m in Sources */, - D0316DC48C044E9CF709A5F9CF9DA04F /* CwlWrappers.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B34856AFADA273FEAB7FF297C0854E43 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5BF1EEBBB118EC6178CC361C200C9306 /* DelayedOperations.swift in Sources */, - F3877A297117F1BFB556F85FB16C61D1 /* Error.swift in Sources */, - AFC6FAFEA35B2510B7EAD85EEF5CC5D2 /* HTTPMethod.swift in Sources */, - 63F9E6EC00932E2450ED8D2602C27894 /* LogDestination.swift in Sources */, - B3793020900550BC8089CBD1EEC35160 /* Netable-dummy.m in Sources */, - A169FF34482994C8910E4DEC14F6EEEB /* Netable.swift in Sources */, - 8A1A6EC1CDE3787669EBAA2060FEAF8E /* Request.swift in Sources */, - E28FDE69420F7AFD26F064621B0CF1F8 /* RequestIdentifier.swift in Sources */, - 0FD155BFA61B2A8EA6A309EE39CD274B /* RetryConfiguration.swift in Sources */, - A2245EB7A2CFF1CA094BD7A2E150DF65 /* URLRequest+EncodeParameters.swift in Sources */, - 0A3E4DAC9E454676C8264617B3F33E00 /* URLRequest+EncodeURL.swift in Sources */, - 4E17B77A5570EBE54CC50F8E14AA74EB /* URLRequest+Multipart.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D1B5C5CF3457FE3A6155F443152F1334 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 732E43B4945BE0E3942B26788A1D8626 /* Constraint.swift in Sources */, - 8A2D8C4CA4EB5C7CC20F0E0AC85A450F /* ConstraintAttributes.swift in Sources */, - 58448BB05AAEE135491D3C8F7D4A6F8F /* ConstraintConfig.swift in Sources */, - 51A0404301CA0CB0EC678CF20FBC3749 /* ConstraintConstantTarget.swift in Sources */, - 4980EEFC18BE6564D2A34691B2D2513F /* ConstraintDescription.swift in Sources */, - 8C93AB834293BF246ED86C25A12553C2 /* ConstraintDirectionalInsets.swift in Sources */, - 3CAF584D4CD117F7753C301F03CC5CF4 /* ConstraintDirectionalInsetTarget.swift in Sources */, - 4902B03990C4B33DA15F4CC19BCBF1E8 /* ConstraintDSL.swift in Sources */, - B4FDA63711E11D0B14734EA605D7FBDE /* ConstraintInsets.swift in Sources */, - FF5F5A8A55949D9495C13C4DED96ABA0 /* ConstraintInsetTarget.swift in Sources */, - 8F71F7630FC1E0F55C6BDB9EC5ADA7A1 /* ConstraintItem.swift in Sources */, - 39A9E79A051DC7E670FCEAD7F8FEF6D0 /* ConstraintLayoutGuide+Extensions.swift in Sources */, - 5B561D99511B21095074C974432B7BC1 /* ConstraintLayoutGuide.swift in Sources */, - 246408C0019F974D7C8E9A61BC95AC7D /* ConstraintLayoutGuideDSL.swift in Sources */, - 18F1630374A421394E42DB344683643E /* ConstraintLayoutSupport.swift in Sources */, - 7548C473173A587673047F0FE3BA7E04 /* ConstraintLayoutSupportDSL.swift in Sources */, - F33C32EF7F1428CA22EF57659F71CF99 /* ConstraintMaker.swift in Sources */, - 65946B5D469B29D060A0B2A9E8768F78 /* ConstraintMakerEditable.swift in Sources */, - 652C5E2F9CBC8303B84D2272B520A8AB /* ConstraintMakerExtendable.swift in Sources */, - E53EE383BFEF15143B90A062405C3DE5 /* ConstraintMakerFinalizable.swift in Sources */, - D6A812AD9B824CF91DC295FF1BA46CB1 /* ConstraintMakerPriortizable.swift in Sources */, - 8EF8B6963529FBD1FCEB0C7664F1F31C /* ConstraintMakerRelatable.swift in Sources */, - 0281915C27AC17F0A289857A658E19CE /* ConstraintMultiplierTarget.swift in Sources */, - 3839EE8A38D5FDB34820379016386879 /* ConstraintOffsetTarget.swift in Sources */, - 38ABE5A86F1BA347C507922DB82B5774 /* ConstraintPriority.swift in Sources */, - A3734DF78BD614C261F0DD48B6166CFD /* ConstraintPriorityTarget.swift in Sources */, - D0B3CC9D69EE070969D373B2AA018820 /* ConstraintRelatableTarget.swift in Sources */, - 0A8F61DA97A974643008DC69196C5330 /* ConstraintRelation.swift in Sources */, - DA4CA8DC7F893219BCB98947A1874E36 /* ConstraintView+Extensions.swift in Sources */, - EF33AB914D371B0BF0310472809AE4EC /* ConstraintView.swift in Sources */, - 8E3E2575377EBCF92F7272492AC48535 /* ConstraintViewDSL.swift in Sources */, - 0A3EF0F6971C5646520F83C3C2CC5BE1 /* Debugging.swift in Sources */, - 43A9FB1FEF5DB6A7CE4AD57C73BFE0F0 /* LayoutConstraint.swift in Sources */, - 96210C9045C6B42415264A573A424C14 /* LayoutConstraintItem.swift in Sources */, - EB30B476A07E02D56B800F15AA22CE03 /* SnapKit-dummy.m in Sources */, - D4B4B5E4C20BA6780F312222B4AC0CE3 /* Typealiases.swift in Sources */, - E379CD01D219EF768A8DA0274D7B029A /* UILayoutSupport+Extensions.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - DF0AC27380090DEED12B8B83952E3650 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 0CBF7FDD39D8339DEFBB47133BED9D78 /* Accessibility.swift in Sources */, - 33C34A4213BD8431011E20DFD947E6C8 /* CloudAccessibility.swift in Sources */, - B9F169FCCCB4E561A26661D04C11356F /* Configuration.swift in Sources */, - 58898C5667DB996E90913FB534507BF6 /* Identifier.swift in Sources */, - 4DB45BA6EEEB8D996816E42BB6FB7FD2 /* Keychain.swift in Sources */, - 6E2925AA24F1EC6287A1143BB29E43B7 /* KeychainError.swift in Sources */, - 90CD1FEA9FF90AC9C40A11B6ACE63945 /* MigratableKeyValuePair.swift in Sources */, - 08E70B0319231D533CE3668533410907 /* MigrationError.swift in Sources */, - 8114672436C787DF9C365BE9D7CDDE9F /* SecItem.swift in Sources */, - 0D55B09D93F68DF5BE427E43308BCA44 /* SecureEnclave.swift in Sources */, - D8180DCD5A5966A837F442D6980EAE65 /* SecureEnclaveAccessControl.swift in Sources */, - 104350ED09FC48D6D86B7B73B8B03D42 /* SecureEnclaveValet.swift in Sources */, - 00286AEEBF1B593B3613984A02FEA956 /* Service.swift in Sources */, - 5ACB65EED23E9EE9424D9EDEAEFCB0EE /* SharedGroupIdentifier.swift in Sources */, - 101B2CFD52EF7216870C5079690DA0A8 /* SinglePromptSecureEnclaveValet.swift in Sources */, - 3836C7747B144E4D5695EA418B30E4CA /* Valet-dummy.m in Sources */, - D0348D986CE44B2425398B7E1CDC35CD /* Valet.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - E0C804ADE0081491868420F57A1705AE /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 203135489B23E91F8704E827AD875194 /* Pods-Quests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EF3173C6697133E5D2F33643712FE570 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EF985D4807D5751D56700D9E5F928AE0 /* AFError.swift in Sources */, - 3020716F2430874CD2906855980801B5 /* Alamofire-dummy.m in Sources */, - 0EE78CC7C4211E448DC38F9C1884A990 /* Alamofire.swift in Sources */, - 2B2667D50A8C3B799C270D13EB1B11FB /* DispatchQueue+Alamofire.swift in Sources */, - 0191799F818C45E5F4EC602FA34BE24A /* MultipartFormData.swift in Sources */, - 8EBD27764ECB325E5FFFC32172911358 /* NetworkReachabilityManager.swift in Sources */, - 744FA60F91EC1E4D33284D01445D382C /* Notifications.swift in Sources */, - EEB24213002E6F6887DDB6C74B15A832 /* ParameterEncoding.swift in Sources */, - 5FF54384C260732FAFE16E11A0D2146B /* Request.swift in Sources */, - B6D0AF71EB6079503B97F22B25DFDB3C /* Response.swift in Sources */, - 8DBDB753F04CDF4CB9A3B90D8F3EAFAC /* ResponseSerialization.swift in Sources */, - BF922B938AF6C17B9B13A76C42DA0082 /* Result.swift in Sources */, - 608FD3B3707767B3246354E9DB1601D9 /* ServerTrustPolicy.swift in Sources */, - 980F92960E0039793BF3CA6BF1B291CF /* SessionDelegate.swift in Sources */, - C7DD09A8F376578A729E16C499375052 /* SessionManager.swift in Sources */, - 6D4E93991D8022436C43EB92D98CCF39 /* TaskDelegate.swift in Sources */, - 40D05816F768CC138AB90B6C1DAF5959 /* Timeline.swift in Sources */, - 06381102F51B39BF59AC2259F54A4530 /* Validation.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EF3469D4D250DFE100F76AB9865454C8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 9BFE74E8A6BEFC89A4F778F7F778ADFD /* SwiftyJSON-dummy.m in Sources */, - 915CA969C8AE559B7E037BA999428BBA /* SwiftyJSON.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 2BA1FAC3169A5274B76526DD905574DB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = XCGLogger; - target = 07AFE6B9C0D64C3222F1B3FAA995664C /* XCGLogger */; - targetProxy = B29C275230FB79CCA71335F78303B928 /* PBXContainerItemProxy */; - }; - 36A46D21AD4E94A2351CEC400F404796 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftyJSON; - target = D118A6A04828FD3CDA8640CD2B6796D2 /* SwiftyJSON */; - targetProxy = 11BAE004D8C3364DCF314A7DF1DFEC43 /* PBXContainerItemProxy */; - }; - 3EEAC9024A6D321B4F71AB5F6CE48ABB /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SnapKit; - target = 19622742EBA51E823D6DAE3F8CDBFAD4 /* SnapKit */; - targetProxy = 65F200815CCB01C5F67BA19A7E902F51 /* PBXContainerItemProxy */; - }; - 49DF8FF4FAB6C2D7E97E7AF5120202F6 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftyUserDefaults; - target = A049F3164EBC335A7982A4E1FB3A5EAA /* SwiftyUserDefaults */; - targetProxy = 306FC06D7FE5C66060B66281D25A3E6A /* PBXContainerItemProxy */; - }; - 5AECF020B3B59263EB02DE01DF3812FF /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Alamofire; - target = EAAA1AD3A8A1B59AB91319EE40752C6D /* Alamofire */; - targetProxy = 170E4B7C215272E9BA157364C6E12CC1 /* PBXContainerItemProxy */; - }; - 6D0657A5CC340798C01D12DD7D8008AC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = SwiftLint; - target = 52B60EC2A583F24ACBB69C113F5488B9 /* SwiftLint */; - targetProxy = 41CE38A4FB9FAA518F668EEF9B7F7B94 /* PBXContainerItemProxy */; - }; - 7C24863D63F2656A1419723AD9E3EE14 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Netable; - target = 4B39B1698B2025E64AC8731236DBDAE1 /* Netable */; - targetProxy = 6B2EB8B36EF065BA464766A9AD29E8C7 /* PBXContainerItemProxy */; - }; - 7CCD746ECFBDCA4A03597EBE7A7D8A0F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ReachabilitySwift; - target = 0B00B2C167CD783351BD1D00BD5AD1F8 /* ReachabilitySwift */; - targetProxy = 88211ACE91B10D2FDE60FDC5384250BA /* PBXContainerItemProxy */; - }; - 965D16205DA3D202FBC23CF32A096D9B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Down; - target = B4575FF01775E963E58050542C9A4E7A /* Down */; - targetProxy = F345E7B1F3BE06E655931AC27F7E5A38 /* PBXContainerItemProxy */; - }; - A5EAC156BF8DA1B770998B7D7B8F0933 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ObjcExceptionBridging; - target = 746615E9A06AABA6F288B49A10B63E10 /* ObjcExceptionBridging */; - targetProxy = 2B82BA1FD6851B6F9B1DD2E738A1A047 /* PBXContainerItemProxy */; - }; - CA33C40A5184D5478BB1D5F2DF95878B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Valet; - target = E3D29E214E770F28213292B63B7A05DA /* Valet */; - targetProxy = 6F745A59FC049C404A464FDD900EBB79 /* PBXContainerItemProxy */; - }; - EE8B2750CB2A11D92B4388D98F7B7CA3 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = CwlUtils; - target = BEC9ADA475B5D1902939C94E828E47A3 /* CwlUtils */; - targetProxy = E25D4F92413B9AFB36C63D06B109F2BA /* PBXContainerItemProxy */; - }; - FBAEC4C3D0CB8513A4D14911FE83366D /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = ObjcExceptionBridging; - target = 746615E9A06AABA6F288B49A10B63E10 /* ObjcExceptionBridging */; - targetProxy = 159CD19E70CDD79B776F3EA851FD9B9F /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 005EC085DDA910B04EB89581E7E08FFF /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9C01129E1A49211507FBD3147141CC4C /* XCGLogger.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/XCGLogger/XCGLogger-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/XCGLogger/XCGLogger-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/XCGLogger/XCGLogger.modulemap"; - PRODUCT_MODULE_NAME = XCGLogger; - PRODUCT_NAME = XCGLogger; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - 03255CB66B9B53D1BD56934798126577 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 05A72CC5B091046B010259D040347447 /* CwlUtils.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/CwlUtils/CwlUtils-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CwlUtils/CwlUtils-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/CwlUtils/CwlUtils.modulemap"; - PRODUCT_MODULE_NAME = CwlUtils; - PRODUCT_NAME = CwlUtils; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - 0467B5518FC37853BEA19B9CDE3DBF67 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 284363FA6D2D090C6AA9D6EA418FD7DA /* SwiftyJSON.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 0922B622DD5ADD7CDAADBF58AA09B586 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 05A72CC5B091046B010259D040347447 /* CwlUtils.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/CwlUtils/CwlUtils-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CwlUtils/CwlUtils-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/CwlUtils/CwlUtils.modulemap"; - PRODUCT_MODULE_NAME = CwlUtils; - PRODUCT_NAME = CwlUtils; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 0AC3D1DF0078B01967125F2575FDC8B5 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 58660C1056956A1103CEC42BDE6002A7 /* SwiftLint.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.10; - SDKROOT = macosx; - }; - name = ReleaseInternal; - }; - 0FA72A3ED336C854D765B1FDF5469229 /* ReleaseInternal */ = { - 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_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_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_INTERNAL=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; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = ReleaseInternal; - }; - 10BD12F4487A01DC87807B3999DFF98D /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8F1F538159E2AB295476257164E29E15 /* Alamofire.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - 116BA90C996AD3BB373189D313D022C0 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FF97E56190F4FFB5F34E0947B8477B63 /* SnapKit.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - 194AD7A8AE9ECE4265DC6A3EA772E976 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D4A25156F540013A1E3CD86AD609BC18 /* SnapKit.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 1E3CF50EAEF0F35526E5F91464CDB948 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D4A25156F540013A1E3CD86AD609BC18 /* SnapKit.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - 1F1DF28D839AA256397201489EE9F1E4 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 475EF0E2E5166D8E04FF9CF4598A57A3 /* Down.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Down/Down-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Down/Down-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Down/Down.modulemap"; - PRODUCT_MODULE_NAME = Down; - PRODUCT_NAME = Down; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 227AAC9D9457A09DE26CB06292C06487 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2C517B93F174037AE9147CA335342D50 /* SwiftyJSON.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - 2B4255BECD98183CB84E34CF96D1D31F /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3BEBDA16C6B8F76D430091054300FA5E /* Alamofire.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - 2E42F519D7712373D14DF88F7C150515 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 58660C1056956A1103CEC42BDE6002A7 /* SwiftLint.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.10; - SDKROOT = macosx; - }; - name = Release; - }; - 32E860EDF275807A0B23B48662EFB575 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E9E2A751EC1AD49A7F055D90FFD122EB /* Netable.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Netable/Netable-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Netable/Netable-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Netable/Netable.modulemap"; - PRODUCT_MODULE_NAME = Netable; - PRODUCT_NAME = Netable; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - 3343827920823BC3F4FE8450007900A7 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3BEBDA16C6B8F76D430091054300FA5E /* Alamofire.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 375C0167BB8832680234C0118C270B15 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E80EF97C2ADD2E6601FF743936AADC4C /* Down.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Down/Down-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Down/Down-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Down/Down.modulemap"; - PRODUCT_MODULE_NAME = Down; - PRODUCT_NAME = Down; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 3881844A0ED177B498737DA87E7B4C88 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E9E2A751EC1AD49A7F055D90FFD122EB /* Netable.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Netable/Netable-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Netable/Netable-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Netable/Netable.modulemap"; - PRODUCT_MODULE_NAME = Netable; - PRODUCT_NAME = Netable; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 3B40D701C9C321BF022440CD3C6CBF6E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FF97E56190F4FFB5F34E0947B8477B63 /* SnapKit.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SnapKit/SnapKit-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SnapKit/SnapKit-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SnapKit/SnapKit.modulemap"; - PRODUCT_MODULE_NAME = SnapKit; - PRODUCT_NAME = SnapKit; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 3EE66A85FD612891508FDE82A7059EAC /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BD4D34F6DABE66D0B4F15DC53FEDD9A5 /* CwlUtils.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/CwlUtils/CwlUtils-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CwlUtils/CwlUtils-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/CwlUtils/CwlUtils.modulemap"; - PRODUCT_MODULE_NAME = CwlUtils; - PRODUCT_NAME = CwlUtils; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 430C0A1F2A9CB52955BEC7CE69B7B629 /* 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_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_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; - MACOSX_DEPLOYMENT_TARGET = 10.14; - 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; - }; - 597E092427DF423992C59C814880FE96 /* 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_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_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; - MACOSX_DEPLOYMENT_TARGET = 10.14; - MTL_ENABLE_DEBUG_INFO = NO; - MTL_FAST_MATH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; - SWIFT_VERSION = 5.0; - SYMROOT = "${SRCROOT}/../build"; - }; - name = Release; - }; - 5C184F28D832BD050CC833F9B0A94E45 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B550E9D20F01101C17B0682FA50162E /* SwiftyUserDefaults.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap"; - PRODUCT_MODULE_NAME = SwiftyUserDefaults; - PRODUCT_NAME = SwiftyUserDefaults; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 60B7267C45628FD7535EFD1E393D3037 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = BD4D34F6DABE66D0B4F15DC53FEDD9A5 /* CwlUtils.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/CwlUtils/CwlUtils-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/CwlUtils/CwlUtils-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/CwlUtils/CwlUtils.modulemap"; - PRODUCT_MODULE_NAME = CwlUtils; - PRODUCT_NAME = CwlUtils; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - 6718CD0D92909D2CFB7EAD56400F1259 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD9FFD66767CFB7666EE0A8DDA8E14FF /* XCGLogger.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/XCGLogger/XCGLogger-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/XCGLogger/XCGLogger-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/XCGLogger/XCGLogger.modulemap"; - PRODUCT_MODULE_NAME = XCGLogger; - PRODUCT_NAME = XCGLogger; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - 69E6A87F7EB69C2F220BFA4BE84058ED /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 43D3C2770C47E2AB9F3372E1EF585607 /* Pods-Quests.debug.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-Quests/Pods-Quests-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 = 10.14; - MODULEMAP_FILE = "Target Support Files/Pods-Quests/Pods-Quests.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; - }; - 6CCE548BB00F9E7321B60F8487A4143E /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 11E0700D600F467A27A0380AB9F00E62 /* ReachabilitySwift.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - 725E9EFC07B5D4E19E8D0B27968B1450 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 889A498116FE76E35F226E44F9B9178E /* Valet.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Valet/Valet-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Valet/Valet-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Valet/Valet.modulemap"; - PRODUCT_MODULE_NAME = Valet; - PRODUCT_NAME = Valet; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 72B65F5D780224852EFB0E54CEF979BA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8F1F538159E2AB295476257164E29E15 /* Alamofire.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Alamofire/Alamofire-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Alamofire/Alamofire-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Alamofire/Alamofire.modulemap"; - PRODUCT_MODULE_NAME = Alamofire; - PRODUCT_NAME = Alamofire; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 7FACF1727031F76F42F80270706308D2 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 79937B31EBA742AB8A2A4271ABB83B4A /* Pods-Quests.releaseinternal.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-Quests/Pods-Quests-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 = 10.14; - MODULEMAP_FILE = "Target Support Files/Pods-Quests/Pods-Quests.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 = ReleaseInternal; - }; - 7FDD7335DDDB1881F89006D617CF6A11 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DA7516D785DE8BC238850F6BDFC89DF6 /* Netable.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Netable/Netable-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Netable/Netable-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Netable/Netable.modulemap"; - PRODUCT_MODULE_NAME = Netable; - PRODUCT_NAME = Netable; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8D47064D55F9C7B235F09652D4A1F00D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5646F84DBE18EFA6E57EFD8402A3BB2E /* ObjcExceptionBridging.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap"; - PRODUCT_MODULE_NAME = ObjcExceptionBridging; - PRODUCT_NAME = ObjcExceptionBridging; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 8F24311987B2FDF27D19AE94E3574C01 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9C01129E1A49211507FBD3147141CC4C /* XCGLogger.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/XCGLogger/XCGLogger-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/XCGLogger/XCGLogger-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/XCGLogger/XCGLogger.modulemap"; - PRODUCT_MODULE_NAME = XCGLogger; - PRODUCT_NAME = XCGLogger; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 9284C5C61C9A48D8F0F3A5ACD0AD76B9 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 66F7C71DF4E03941E1D313B6C99D1E95 /* SwiftLint.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.10; - SDKROOT = macosx; - }; - name = Debug; - }; - 9439C2FA51787E39B73530EF0905AF35 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 66F7C71DF4E03941E1D313B6C99D1E95 /* SwiftLint.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = "-"; - COMBINE_HIDPI_IMAGES = YES; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.10; - SDKROOT = macosx; - }; - name = DebugInternal; - }; - 952D11FB3758015C7B0EE1F224B0D5FB /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 11E0700D600F467A27A0380AB9F00E62 /* ReachabilitySwift.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 9EEAF87F4965632F0E37EE6E1E4C6A6B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E28A84239AADBBEF9ADCCE85B030FFAE /* Pods-Quests.release.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-Quests/Pods-Quests-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 = 10.14; - MODULEMAP_FILE = "Target Support Files/Pods-Quests/Pods-Quests.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; - }; - ABCAE93BB8FE33D7FAAB02CAB8A5AA1A /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 475EF0E2E5166D8E04FF9CF4598A57A3 /* Down.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Down/Down-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Down/Down-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Down/Down.modulemap"; - PRODUCT_MODULE_NAME = Down; - PRODUCT_NAME = Down; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - B64DE137B965F44A5FC5009B031B841D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = CD9FFD66767CFB7666EE0A8DDA8E14FF /* XCGLogger.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/XCGLogger/XCGLogger-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/XCGLogger/XCGLogger-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/XCGLogger/XCGLogger.modulemap"; - PRODUCT_MODULE_NAME = XCGLogger; - PRODUCT_NAME = XCGLogger; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - BC97071201B1AF6D6443F22001BCB1C6 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 284363FA6D2D090C6AA9D6EA418FD7DA /* SwiftyJSON.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - BEFF33727F3FC57CEEC639EB19E267E2 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A2EC3E3F869BBE597FB4368BAA34D150 /* Valet.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Valet/Valet-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Valet/Valet-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Valet/Valet.modulemap"; - PRODUCT_MODULE_NAME = Valet; - PRODUCT_NAME = Valet; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - C9EB65EB930071BB5842D4C4324E45ED /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 889A498116FE76E35F226E44F9B9178E /* Valet.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Valet/Valet-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Valet/Valet-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Valet/Valet.modulemap"; - PRODUCT_MODULE_NAME = Valet; - PRODUCT_NAME = Valet; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - CC315FC7B1FE02EC9629B166FCE07D34 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D595B3FAC6B807405EBF1786CAFDDE15 /* ObjcExceptionBridging.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap"; - PRODUCT_MODULE_NAME = ObjcExceptionBridging; - PRODUCT_NAME = ObjcExceptionBridging; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - CF71973D4DB84B19F8C51710A9D92DC3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A2EC3E3F869BBE597FB4368BAA34D150 /* Valet.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Valet/Valet-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Valet/Valet-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Valet/Valet.modulemap"; - PRODUCT_MODULE_NAME = Valet; - PRODUCT_NAME = Valet; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - D68679B670A234360E02EC89BF44C9F7 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 653DAED1E2A1DF3B5895CE87725E147C /* Pods-Quests.debuginternal.xcconfig */; - buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-Quests/Pods-Quests-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 = 10.14; - MODULEMAP_FILE = "Target Support Files/Pods-Quests/Pods-Quests.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 = DebugInternal; - }; - DD45EEBCB6E5DE7C028602E12CD4344B /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 81757FB6843CCF3E2E8620E059D96795 /* ReachabilitySwift.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - DEC30CD0AC24DE4DAD293EB3684AAF90 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 2C517B93F174037AE9147CA335342D50 /* SwiftyJSON.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyJSON/SwiftyJSON.modulemap"; - PRODUCT_MODULE_NAME = SwiftyJSON; - PRODUCT_NAME = SwiftyJSON; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - E1180BD78ABE36DAD7A05B76A77F7AAF /* DebugInternal */ = { - 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_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_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_INTERNAL=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; - MACOSX_DEPLOYMENT_TARGET = 10.14; - 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 = DebugInternal; - }; - E198257182FC0C888FF18B31D8AC3CA8 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8B550E9D20F01101C17B0682FA50162E /* SwiftyUserDefaults.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap"; - PRODUCT_MODULE_NAME = SwiftyUserDefaults; - PRODUCT_NAME = SwiftyUserDefaults; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - F09AFEB46EB3F59B9C4FF7C1705A6265 /* DebugInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8A3AB6BAFA6730C7021A51AC4C55C958 /* SwiftyUserDefaults.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap"; - PRODUCT_MODULE_NAME = SwiftyUserDefaults; - PRODUCT_NAME = SwiftyUserDefaults; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = DebugInternal; - }; - F141FEB506CCB5FFB811D95A450E8B59 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = DA7516D785DE8BC238850F6BDFC89DF6 /* Netable.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Netable/Netable-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Netable/Netable-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Netable/Netable.modulemap"; - PRODUCT_MODULE_NAME = Netable; - PRODUCT_NAME = Netable; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - F4B3B04CB603C439ED87BAEB88380997 /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5646F84DBE18EFA6E57EFD8402A3BB2E /* ObjcExceptionBridging.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap"; - PRODUCT_MODULE_NAME = ObjcExceptionBridging; - PRODUCT_NAME = ObjcExceptionBridging; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - F50E4BCBD5837E2AB5628B66ADFD3452 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 81757FB6843CCF3E2E8620E059D96795 /* ReachabilitySwift.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap"; - PRODUCT_MODULE_NAME = Reachability; - PRODUCT_NAME = Reachability; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - F6E74D63A90262B9333AE7FBCFA72C6D /* ReleaseInternal */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = E80EF97C2ADD2E6601FF743936AADC4C /* Down.release.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Down/Down-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Down/Down-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/Down/Down.modulemap"; - PRODUCT_MODULE_NAME = Down; - PRODUCT_NAME = Down; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 5.1; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = ReleaseInternal; - }; - FC071254207C7BEF1908C0E7C0A59108 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 8A3AB6BAFA6730C7021A51AC4C55C958 /* SwiftyUserDefaults.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap"; - PRODUCT_MODULE_NAME = SwiftyUserDefaults; - PRODUCT_NAME = SwiftyUserDefaults; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.2; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - FD63F807CAAAAB062103EAB681DD7CE1 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D595B3FAC6B807405EBF1786CAFDDE15 /* ObjcExceptionBridging.debug.xcconfig */; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_WEAK = NO; - CODE_SIGN_IDENTITY = ""; - "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"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/../Frameworks", - "@loader_path/Frameworks", - ); - MACOSX_DEPLOYMENT_TARGET = 10.14; - MODULEMAP_FILE = "Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap"; - PRODUCT_MODULE_NAME = ObjcExceptionBridging; - PRODUCT_NAME = ObjcExceptionBridging; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 0118296CFC0B83172F914CB3481304AE /* Build configuration list for PBXNativeTarget "XCGLogger" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - B64DE137B965F44A5FC5009B031B841D /* Debug */, - 6718CD0D92909D2CFB7EAD56400F1259 /* DebugInternal */, - 8F24311987B2FDF27D19AE94E3574C01 /* Release */, - 005EC085DDA910B04EB89581E7E08FFF /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 020879FA6B1994408301926C222F0FF4 /* Build configuration list for PBXNativeTarget "Pods-Quests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 69E6A87F7EB69C2F220BFA4BE84058ED /* Debug */, - D68679B670A234360E02EC89BF44C9F7 /* DebugInternal */, - 9EEAF87F4965632F0E37EE6E1E4C6A6B /* Release */, - 7FACF1727031F76F42F80270706308D2 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 08C470B90442DB7BEBF0411DB4FE5976 /* Build configuration list for PBXNativeTarget "Netable" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3881844A0ED177B498737DA87E7B4C88 /* Debug */, - 32E860EDF275807A0B23B48662EFB575 /* DebugInternal */, - 7FDD7335DDDB1881F89006D617CF6A11 /* Release */, - F141FEB506CCB5FFB811D95A450E8B59 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 24A92DA3A5F06A3794D9AE2043A7BDD1 /* Build configuration list for PBXNativeTarget "CwlUtils" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3EE66A85FD612891508FDE82A7059EAC /* Debug */, - 60B7267C45628FD7535EFD1E393D3037 /* DebugInternal */, - 0922B622DD5ADD7CDAADBF58AA09B586 /* Release */, - 03255CB66B9B53D1BD56934798126577 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3139FF1D6B5C2E00948CB0C91F01025F /* Build configuration list for PBXNativeTarget "Valet" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 725E9EFC07B5D4E19E8D0B27968B1450 /* Debug */, - C9EB65EB930071BB5842D4C4324E45ED /* DebugInternal */, - CF71973D4DB84B19F8C51710A9D92DC3 /* Release */, - BEFF33727F3FC57CEEC639EB19E267E2 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 3A099D0AED8C9FAB4D7BBF1DC79CEA3C /* Build configuration list for PBXNativeTarget "ReachabilitySwift" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F50E4BCBD5837E2AB5628B66ADFD3452 /* Debug */, - DD45EEBCB6E5DE7C028602E12CD4344B /* DebugInternal */, - 952D11FB3758015C7B0EE1F224B0D5FB /* Release */, - 6CCE548BB00F9E7321B60F8487A4143E /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 430C0A1F2A9CB52955BEC7CE69B7B629 /* Debug */, - E1180BD78ABE36DAD7A05B76A77F7AAF /* DebugInternal */, - 597E092427DF423992C59C814880FE96 /* Release */, - 0FA72A3ED336C854D765B1FDF5469229 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 4D9E86B75BF848264595ABE7456A4292 /* Build configuration list for PBXNativeTarget "Alamofire" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3343827920823BC3F4FE8450007900A7 /* Debug */, - 2B4255BECD98183CB84E34CF96D1D31F /* DebugInternal */, - 72B65F5D780224852EFB0E54CEF979BA /* Release */, - 10BD12F4487A01DC87807B3999DFF98D /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 70FCFD5EEE672DB322D7110477D07566 /* Build configuration list for PBXNativeTarget "Down" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1F1DF28D839AA256397201489EE9F1E4 /* Debug */, - ABCAE93BB8FE33D7FAAB02CAB8A5AA1A /* DebugInternal */, - 375C0167BB8832680234C0118C270B15 /* Release */, - F6E74D63A90262B9333AE7FBCFA72C6D /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 718361EB5111D2543DB931030147A545 /* Build configuration list for PBXNativeTarget "ObjcExceptionBridging" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FD63F807CAAAAB062103EAB681DD7CE1 /* Debug */, - CC315FC7B1FE02EC9629B166FCE07D34 /* DebugInternal */, - 8D47064D55F9C7B235F09652D4A1F00D /* Release */, - F4B3B04CB603C439ED87BAEB88380997 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 883E0B7E1EA852A4969EE4E01A1962C1 /* Build configuration list for PBXNativeTarget "SwiftyJSON" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 0467B5518FC37853BEA19B9CDE3DBF67 /* Debug */, - BC97071201B1AF6D6443F22001BCB1C6 /* DebugInternal */, - DEC30CD0AC24DE4DAD293EB3684AAF90 /* Release */, - 227AAC9D9457A09DE26CB06292C06487 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - C07DA746BF6BF0030CB4F28FC1A5B161 /* Build configuration list for PBXAggregateTarget "SwiftLint" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 9284C5C61C9A48D8F0F3A5ACD0AD76B9 /* Debug */, - 9439C2FA51787E39B73530EF0905AF35 /* DebugInternal */, - 2E42F519D7712373D14DF88F7C150515 /* Release */, - 0AC3D1DF0078B01967125F2575FDC8B5 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - CA9CFF49699CFDD1C3FC726C297D3D7C /* Build configuration list for PBXNativeTarget "SnapKit" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 3B40D701C9C321BF022440CD3C6CBF6E /* Debug */, - 116BA90C996AD3BB373189D313D022C0 /* DebugInternal */, - 194AD7A8AE9ECE4265DC6A3EA772E976 /* Release */, - 1E3CF50EAEF0F35526E5F91464CDB948 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - E0172877CF77BB94F34740F72B327570 /* Build configuration list for PBXNativeTarget "SwiftyUserDefaults" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FC071254207C7BEF1908C0E7C0A59108 /* Debug */, - F09AFEB46EB3F59B9C4FF7C1705A6265 /* DebugInternal */, - 5C184F28D832BD050CC833F9B0A94E45 /* Release */, - E198257182FC0C888FF18B31D8AC3CA8 /* ReleaseInternal */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; -} diff --git a/Pods/ReachabilitySwift/LICENSE b/Pods/ReachabilitySwift/LICENSE deleted file mode 100644 index 21caeda..0000000 --- a/Pods/ReachabilitySwift/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2016 Ashley Mills - -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/Pods/ReachabilitySwift/README.md b/Pods/ReachabilitySwift/README.md deleted file mode 100644 index 578743c..0000000 --- a/Pods/ReachabilitySwift/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# Reachability.swift - -Reachability.swift is a replacement for Apple's Reachability sample, re-written in Swift with closures. - -It is compatible with **iOS** (8.0 - 12.0), **OSX** (10.9 - 10.14) and **tvOS** (9.0 - 12.0) - -Inspired by https://github.com/tonymillion/Reachability - -## Supporting **Reachability.swift** -Keeping **Reachability.swift** up-to-date is a time consuming task. Making updates, reviewing pull requests, responding to issues and answering emails all take time. - -If you're an iOS developer who's looking for a quick and easy way to create App Store screenshots, please try out my app [Screenshot Producer](https://itunes.apple.com/app/apple-store/id1252374855?pt=215893&ct=reachability&mt=8)… - - Devices | Layout | Copy | Localize | Export       -:------:|:------:|:------:|:------:|:------: -![](http://is2.mzstatic.com/image/thumb/Purple118/v4/64/af/55/64af55bc-2ef0-691c-f5f3-4963685f7f63/source/552x414bb.jpg) | ![](http://is4.mzstatic.com/image/thumb/Purple128/v4/fb/4c/bd/fb4cbd2f-dd04-22ba-4fdf-5ac652693fb8/source/552x414bb.jpg) | ![](http://is1.mzstatic.com/image/thumb/Purple118/v4/5a/4f/cf/5a4fcfdf-ca04-0307-9f2e-83178e8ad90d/source/552x414bb.jpg) | ![](http://is4.mzstatic.com/image/thumb/Purple128/v4/17/ea/56/17ea562e-e045-96e7-fcac-cfaaf4f499fd/source/552x414bb.jpg) | ![](http://is4.mzstatic.com/image/thumb/Purple118/v4/59/9e/dd/599edd50-f05c-f413-8e88-e614731fd828/source/552x414bb.jpg) - -And don't forget to **★** the repo. This increases its visibility and encourages others to contribute. - -Thanks -Ash - - -## Got a problem? - -Please read https://github.com/ashleymills/Reachability.swift/blob/master/CONTRIBUTING.md before raising an issue. - -## Installation -### Manual -Just drop the **Reachability.swift** file into your project. That's it! - -### CocoaPods -[CocoaPods][] is a dependency manager for Cocoa projects. To install Reachability.swift with CocoaPods: - - 1. Make sure CocoaPods is [installed][CocoaPods Installation]. - - 2. Update your Podfile to include the following: - - ``` ruby - use_frameworks! - pod 'ReachabilitySwift' - ``` - - 3. Run `pod install`. - -[CocoaPods]: https://cocoapods.org -[CocoaPods Installation]: https://guides.cocoapods.org/using/getting-started.html#getting-started - - 4. In your code import Reachability like so: - `import Reachability` - -### Carthage -[Carthage][] is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. -To install Reachability.swift with Carthage: - -1. Install Carthage via [Homebrew][] - ```bash - $ brew update - $ brew install carthage - ``` - -2. Add `github "ashleymills/Reachability.swift"` to your Cartfile. - -3. Run `carthage update`. - -4. Drag `Reachability.framework` from the `Carthage/Build/iOS/` directory to the `Linked Frameworks and Libraries` section of your Xcode project’s `General` settings. - -5. Add `$(SRCROOT)/Carthage/Build/iOS/Reachability.framework` to `Input Files` of Run Script Phase for Carthage. - -6. In your code import Reachability like so: -`import Reachability` - - -[Carthage]: https://github.com/Carthage/Carthage -[Homebrew]: http://brew.sh -[Photo Flipper]: https://itunes.apple.com/app/apple-store/id749627884?pt=215893&ct=GitHubReachability&mt=8 - -## Example - closures - -NOTE: All closures are run on the **main queue**. - -```swift -//declare this property where it won't go out of scope relative to your listener -let reachability = Reachability()! - -reachability.whenReachable = { reachability in - if reachability.connection == .wifi { - print("Reachable via WiFi") - } else { - print("Reachable via Cellular") - } -} -reachability.whenUnreachable = { _ in - print("Not reachable") -} - -do { - try reachability.startNotifier() -} catch { - print("Unable to start notifier") -} -``` - -and for stopping notifications - -```swift -reachability.stopNotifier() -``` - -## Example - notifications - -NOTE: All notifications are delivered on the **main queue**. - -```swift -//declare this property where it won't go out of scope relative to your listener -let reachability = Reachability()! - -//declare this inside of viewWillAppear - - NotificationCenter.default.addObserver(self, selector: #selector(reachabilityChanged(note:)), name: .reachabilityChanged, object: reachability) - do{ - try reachability.startNotifier() - }catch{ - print("could not start reachability notifier") - } -``` - -and - -```swift -@objc func reachabilityChanged(note: Notification) { - - let reachability = note.object as! Reachability - - switch reachability.connection { - case .wifi: - print("Reachable via WiFi") - case .cellular: - print("Reachable via Cellular") - case .unavailable: - print("Network not reachable") - } -} -``` - -and for stopping notifications - -```swift -reachability.stopNotifier() -NotificationCenter.default.removeObserver(self, name: .reachabilityChanged, object: reachability) -``` - -## Want to help? - -Got a bug fix, or a new feature? Create a pull request and go for it! - -## Let me know! - -If you use **Reachability.swift**, please let me know about your app and I'll put a link [here…](https://github.com/ashleymills/Reachability.swift/wiki/Apps-using-Reachability.swift) and tell your friends! - -Cheers, -Ash diff --git a/Pods/ReachabilitySwift/Sources/Reachability.swift b/Pods/ReachabilitySwift/Sources/Reachability.swift deleted file mode 100644 index 6c8ffa2..0000000 --- a/Pods/ReachabilitySwift/Sources/Reachability.swift +++ /dev/null @@ -1,406 +0,0 @@ -/* -Copyright (c) 2014, Ashley Mills -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ - -import SystemConfiguration -import Foundation - -public enum ReachabilityError: Error { - case failedToCreateWithAddress(sockaddr, Int32) - case failedToCreateWithHostname(String, Int32) - case unableToSetCallback(Int32) - case unableToSetDispatchQueue(Int32) - case unableToGetFlags(Int32) -} - -@available(*, unavailable, renamed: "Notification.Name.reachabilityChanged") -public let ReachabilityChangedNotification = NSNotification.Name("ReachabilityChangedNotification") - -public extension Notification.Name { - static let reachabilityChanged = Notification.Name("reachabilityChanged") -} - -public class Reachability { - - public typealias NetworkReachable = (Reachability) -> () - public typealias NetworkUnreachable = (Reachability) -> () - - @available(*, unavailable, renamed: "Connection") - public enum NetworkStatus: CustomStringConvertible { - case notReachable, reachableViaWiFi, reachableViaWWAN - public var description: String { - switch self { - case .reachableViaWWAN: return "Cellular" - case .reachableViaWiFi: return "WiFi" - case .notReachable: return "No Connection" - } - } - } - - public enum Connection: CustomStringConvertible { - @available(*, deprecated, renamed: "unavailable") - case none - case unavailable, wifi, cellular - public var description: String { - switch self { - case .cellular: return "Cellular" - case .wifi: return "WiFi" - case .unavailable: return "No Connection" - case .none: return "unavailable" - } - } - } - - public var whenReachable: NetworkReachable? - public var whenUnreachable: NetworkUnreachable? - - @available(*, deprecated, renamed: "allowsCellularConnection") - public let reachableOnWWAN: Bool = true - - /// Set to `false` to force Reachability.connection to .none when on cellular connection (default value `true`) - public var allowsCellularConnection: Bool - - // The notification center on which "reachability changed" events are being posted - public var notificationCenter: NotificationCenter = NotificationCenter.default - - @available(*, deprecated, renamed: "connection.description") - public var currentReachabilityString: String { - return "\(connection)" - } - - @available(*, unavailable, renamed: "connection") - public var currentReachabilityStatus: Connection { - return connection - } - - public var connection: Connection { - if flags == nil { - try? setReachabilityFlags() - } - - switch flags?.connection { - case .unavailable?, nil: return .unavailable - case .none?: return .unavailable - case .cellular?: return allowsCellularConnection ? .cellular : .unavailable - case .wifi?: return .wifi - } - } - - fileprivate var isRunningOnDevice: Bool = { - #if targetEnvironment(simulator) - return false - #else - return true - #endif - }() - - fileprivate(set) var notifierRunning = false - fileprivate let reachabilityRef: SCNetworkReachability - fileprivate let reachabilitySerialQueue: DispatchQueue - fileprivate let notificationQueue: DispatchQueue? - fileprivate(set) var flags: SCNetworkReachabilityFlags? { - didSet { - guard flags != oldValue else { return } - notifyReachabilityChanged() - } - } - - required public init(reachabilityRef: SCNetworkReachability, - queueQoS: DispatchQoS = .default, - targetQueue: DispatchQueue? = nil, - notificationQueue: DispatchQueue? = .main) { - self.allowsCellularConnection = true - self.reachabilityRef = reachabilityRef - self.reachabilitySerialQueue = DispatchQueue(label: "uk.co.ashleymills.reachability", qos: queueQoS, target: targetQueue) - self.notificationQueue = notificationQueue - } - - public convenience init(hostname: String, - queueQoS: DispatchQoS = .default, - targetQueue: DispatchQueue? = nil, - notificationQueue: DispatchQueue? = .main) throws { - guard let ref = SCNetworkReachabilityCreateWithName(nil, hostname) else { - throw ReachabilityError.failedToCreateWithHostname(hostname, SCError()) - } - self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue, notificationQueue: notificationQueue) - } - - public convenience init(queueQoS: DispatchQoS = .default, - targetQueue: DispatchQueue? = nil, - notificationQueue: DispatchQueue? = .main) throws { - var zeroAddress = sockaddr() - zeroAddress.sa_len = UInt8(MemoryLayout<sockaddr>.size) - zeroAddress.sa_family = sa_family_t(AF_INET) - - guard let ref = SCNetworkReachabilityCreateWithAddress(nil, &zeroAddress) else { - throw ReachabilityError.failedToCreateWithAddress(zeroAddress, SCError()) - } - - self.init(reachabilityRef: ref, queueQoS: queueQoS, targetQueue: targetQueue, notificationQueue: notificationQueue) - } - - deinit { - stopNotifier() - } -} - -public extension Reachability { - - // MARK: - *** Notifier methods *** - func startNotifier() throws { - guard !notifierRunning else { return } - - let callback: SCNetworkReachabilityCallBack = { (reachability, flags, info) in - guard let info = info else { return } - - // `weakifiedReachability` is guaranteed to exist by virtue of our - // retain/release callbacks which we provided to the `SCNetworkReachabilityContext`. - let weakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info).takeUnretainedValue() - - // The weak `reachability` _may_ no longer exist if the `Reachability` - // object has since been deallocated but a callback was already in flight. - weakifiedReachability.reachability?.flags = flags - } - - let weakifiedReachability = ReachabilityWeakifier(reachability: self) - let opaqueWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.passUnretained(weakifiedReachability).toOpaque() - - var context = SCNetworkReachabilityContext( - version: 0, - info: UnsafeMutableRawPointer(opaqueWeakifiedReachability), - retain: { (info: UnsafeRawPointer) -> UnsafeRawPointer in - let unmanagedWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info) - _ = unmanagedWeakifiedReachability.retain() - return UnsafeRawPointer(unmanagedWeakifiedReachability.toOpaque()) - }, - release: { (info: UnsafeRawPointer) -> Void in - let unmanagedWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info) - unmanagedWeakifiedReachability.release() - }, - copyDescription: { (info: UnsafeRawPointer) -> Unmanaged<CFString> in - let unmanagedWeakifiedReachability = Unmanaged<ReachabilityWeakifier>.fromOpaque(info) - let weakifiedReachability = unmanagedWeakifiedReachability.takeUnretainedValue() - let description = weakifiedReachability.reachability?.description ?? "nil" - return Unmanaged.passRetained(description as CFString) - } - ) - - if !SCNetworkReachabilitySetCallback(reachabilityRef, callback, &context) { - stopNotifier() - throw ReachabilityError.unableToSetCallback(SCError()) - } - - if !SCNetworkReachabilitySetDispatchQueue(reachabilityRef, reachabilitySerialQueue) { - stopNotifier() - throw ReachabilityError.unableToSetDispatchQueue(SCError()) - } - - // Perform an initial check - try setReachabilityFlags() - - notifierRunning = true - } - - func stopNotifier() { - defer { notifierRunning = false } - - SCNetworkReachabilitySetCallback(reachabilityRef, nil, nil) - SCNetworkReachabilitySetDispatchQueue(reachabilityRef, nil) - } - - // MARK: - *** Connection test methods *** - @available(*, deprecated, message: "Please use `connection != .none`") - var isReachable: Bool { - return connection != .unavailable - } - - @available(*, deprecated, message: "Please use `connection == .cellular`") - var isReachableViaWWAN: Bool { - // Check we're not on the simulator, we're REACHABLE and check we're on WWAN - return connection == .cellular - } - - @available(*, deprecated, message: "Please use `connection == .wifi`") - var isReachableViaWiFi: Bool { - return connection == .wifi - } - - var description: String { - return flags?.description ?? "unavailable flags" - } -} - -fileprivate extension Reachability { - - func setReachabilityFlags() throws { - try reachabilitySerialQueue.sync { [unowned self] in - var flags = SCNetworkReachabilityFlags() - if !SCNetworkReachabilityGetFlags(self.reachabilityRef, &flags) { - self.stopNotifier() - throw ReachabilityError.unableToGetFlags(SCError()) - } - - self.flags = flags - } - } - - - func notifyReachabilityChanged() { - let notify = { [weak self] in - guard let self = self else { return } - self.connection != .unavailable ? self.whenReachable?(self) : self.whenUnreachable?(self) - self.notificationCenter.post(name: .reachabilityChanged, object: self) - } - - // notify on the configured `notificationQueue`, or the caller's (i.e. `reachabilitySerialQueue`) - notificationQueue?.async(execute: notify) ?? notify() - } -} - -extension SCNetworkReachabilityFlags { - - typealias Connection = Reachability.Connection - - var connection: Connection { - guard isReachableFlagSet else { return .unavailable } - - // If we're reachable, but not on an iOS device (i.e. simulator), we must be on WiFi - #if targetEnvironment(simulator) - return .wifi - #else - var connection = Connection.unavailable - - if !isConnectionRequiredFlagSet { - connection = .wifi - } - - if isConnectionOnTrafficOrDemandFlagSet { - if !isInterventionRequiredFlagSet { - connection = .wifi - } - } - - if isOnWWANFlagSet { - connection = .cellular - } - - return connection - #endif - } - - var isOnWWANFlagSet: Bool { - #if os(iOS) - return contains(.isWWAN) - #else - return false - #endif - } - var isReachableFlagSet: Bool { - return contains(.reachable) - } - var isConnectionRequiredFlagSet: Bool { - return contains(.connectionRequired) - } - var isInterventionRequiredFlagSet: Bool { - return contains(.interventionRequired) - } - var isConnectionOnTrafficFlagSet: Bool { - return contains(.connectionOnTraffic) - } - var isConnectionOnDemandFlagSet: Bool { - return contains(.connectionOnDemand) - } - var isConnectionOnTrafficOrDemandFlagSet: Bool { - return !intersection([.connectionOnTraffic, .connectionOnDemand]).isEmpty - } - var isTransientConnectionFlagSet: Bool { - return contains(.transientConnection) - } - var isLocalAddressFlagSet: Bool { - return contains(.isLocalAddress) - } - var isDirectFlagSet: Bool { - return contains(.isDirect) - } - var isConnectionRequiredAndTransientFlagSet: Bool { - return intersection([.connectionRequired, .transientConnection]) == [.connectionRequired, .transientConnection] - } - - var description: String { - let W = isOnWWANFlagSet ? "W" : "-" - let R = isReachableFlagSet ? "R" : "-" - let c = isConnectionRequiredFlagSet ? "c" : "-" - let t = isTransientConnectionFlagSet ? "t" : "-" - let i = isInterventionRequiredFlagSet ? "i" : "-" - let C = isConnectionOnTrafficFlagSet ? "C" : "-" - let D = isConnectionOnDemandFlagSet ? "D" : "-" - let l = isLocalAddressFlagSet ? "l" : "-" - let d = isDirectFlagSet ? "d" : "-" - - return "\(W)\(R) \(c)\(t)\(i)\(C)\(D)\(l)\(d)" - } -} - -/** - `ReachabilityWeakifier` weakly wraps the `Reachability` class - in order to break retain cycles when interacting with CoreFoundation. - - CoreFoundation callbacks expect a pair of retain/release whenever an - opaque `info` parameter is provided. These callbacks exist to guard - against memory management race conditions when invoking the callbacks. - - #### Race Condition - - If we passed `SCNetworkReachabilitySetCallback` a direct reference to our - `Reachability` class without also providing corresponding retain/release - callbacks, then a race condition can lead to crashes when: - - `Reachability` is deallocated on thread X - - A `SCNetworkReachability` callback(s) is already in flight on thread Y - - #### Retain Cycle - - If we pass `Reachability` to CoreFoundtion while also providing retain/ - release callbacks, we would create a retain cycle once CoreFoundation - retains our `Reachability` class. This fixes the crashes and his how - CoreFoundation expects the API to be used, but doesn't play nicely with - Swift/ARC. This cycle would only be broken after manually calling - `stopNotifier()` — `deinit` would never be called. - - #### ReachabilityWeakifier - - By providing both retain/release callbacks and wrapping `Reachability` in - a weak wrapper, we: - - interact correctly with CoreFoundation, thereby avoiding a crash. - See "Memory Management Programming Guide for Core Foundation". - - don't alter the public API of `Reachability.swift` in any way - - still allow for automatic stopping of the notifier on `deinit`. - */ -private class ReachabilityWeakifier { - weak var reachability: Reachability? - init(reachability: Reachability) { - self.reachability = reachability - } -} diff --git a/Pods/SnapKit/LICENSE b/Pods/SnapKit/LICENSE deleted file mode 100644 index a18ccfb..0000000 --- a/Pods/SnapKit/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Pods/SnapKit/README.md b/Pods/SnapKit/README.md deleted file mode 100644 index 0945ce6..0000000 --- a/Pods/SnapKit/README.md +++ /dev/null @@ -1,136 +0,0 @@ -<img src="http://snapkit.io/images/banner.jpg" alt="" /> - -SnapKit is a DSL to make Auto Layout easy on both iOS and OS X. - -[![Build Status](https://travis-ci.org/SnapKit/SnapKit.svg)](https://travis-ci.org/SnapKit/SnapKit) -[![Platform](https://img.shields.io/cocoapods/p/SnapKit.svg?style=flat)](https://github.com/SnapKit/SnapKit) -[![Cocoapods Compatible](https://img.shields.io/cocoapods/v/SnapKit.svg)](https://cocoapods.org/pods/SnapKit) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -#### ⚠️ **To use with Swift 4.x please ensure you are using >= 4.0.0** ⚠️ -#### ⚠️ **To use with Swift 5.x please ensure you are using >= 5.0.0** ⚠️ - -## Contents - -- [Requirements](#requirements) -- [Migration Guides](#migration-guides) -- [Communication](#communication) -- [Installation](#installation) -- [Usage](#usage) -- [Credits](#credits) -- [License](#license) - -## Requirements - -- iOS 10.0+ / Mac OS X 10.12+ / tvOS 10.0+ -- Xcode 10.0+ -- Swift 4.0+ - -## Communication - -- If you **need help**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). (Tag 'snapkit') -- If you'd like to **ask a general question**, use [Stack Overflow](http://stackoverflow.com/questions/tagged/snapkit). -- If you **found a bug**, open an issue. -- If you **have a feature request**, open an issue. -- If you **want to contribute**, submit a pull request. - - -## Installation - -### CocoaPods - -[CocoaPods](http://cocoapods.org) is a dependency manager for Cocoa projects. You can install it with the following command: - -```bash -$ gem install cocoapods -``` - -> CocoaPods 1.1.0+ is required to build SnapKit 4.0.0+. - -To integrate SnapKit into your Xcode project using CocoaPods, specify it in your `Podfile`: - -```ruby -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '10.0' -use_frameworks! - -target '<Your Target Name>' do - pod 'SnapKit', '~> 5.0.0' -end -``` - -Then, run the following command: - -```bash -$ pod install -``` - -### Carthage - -[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. - -You can install Carthage with [Homebrew](http://brew.sh/) using the following command: - -```bash -$ brew update -$ brew install carthage -``` - -To integrate SnapKit into your Xcode project using Carthage, specify it in your `Cartfile`: - -```ogdl -github "SnapKit/SnapKit" ~> 5.0.0 -``` - -Run `carthage update` to build the framework and drag the built `SnapKit.framework` into your Xcode project. - -### Manually - -If you prefer not to use either of the aforementioned dependency managers, you can integrate SnapKit into your project manually. - ---- - -## Usage - -### Quick Start - -```swift -import SnapKit - -class MyViewController: UIViewController { - - lazy var box = UIView() - - override func viewDidLoad() { - super.viewDidLoad() - - self.view.addSubview(box) - box.snp.makeConstraints { (make) -> Void in - make.width.height.equalTo(50) - make.center.equalTo(self.view) - } - } - -} -``` - -### Playground -You can try SnapKit in Playground. - -**Note:** - -> To try SnapKit in playground, open `SnapKit.xcworkspace` and build SnapKit.framework for any simulator first. - -### Resources - -- [Documentation](http://snapkit.io/docs/) -- [F.A.Q.](http://snapkit.io/faq/) - -## Credits - -- Robert Payne ([@robertjpayne](https://twitter.com/robertjpayne)) -- Many other contributors - -## License - -SnapKit is released under the MIT license. See LICENSE for details. diff --git a/Pods/SnapKit/Source/Constraint.swift b/Pods/SnapKit/Source/Constraint.swift deleted file mode 100644 index 390629e..0000000 --- a/Pods/SnapKit/Source/Constraint.swift +++ /dev/null @@ -1,341 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public final class Constraint { - - internal let sourceLocation: (String, UInt) - internal let label: String? - - private let from: ConstraintItem - private let to: ConstraintItem - private let relation: ConstraintRelation - private let multiplier: ConstraintMultiplierTarget - private var constant: ConstraintConstantTarget { - didSet { - self.updateConstantAndPriorityIfNeeded() - } - } - private var priority: ConstraintPriorityTarget { - didSet { - self.updateConstantAndPriorityIfNeeded() - } - } - public var layoutConstraints: [LayoutConstraint] - - public var isActive: Bool { - set { - if newValue { - activate() - } - else { - deactivate() - } - } - - get { - for layoutConstraint in self.layoutConstraints { - if layoutConstraint.isActive { - return true - } - } - return false - } - } - - // MARK: Initialization - - internal init(from: ConstraintItem, - to: ConstraintItem, - relation: ConstraintRelation, - sourceLocation: (String, UInt), - label: String?, - multiplier: ConstraintMultiplierTarget, - constant: ConstraintConstantTarget, - priority: ConstraintPriorityTarget) { - self.from = from - self.to = to - self.relation = relation - self.sourceLocation = sourceLocation - self.label = label - self.multiplier = multiplier - self.constant = constant - self.priority = priority - self.layoutConstraints = [] - - // get attributes - let layoutFromAttributes = self.from.attributes.layoutAttributes - let layoutToAttributes = self.to.attributes.layoutAttributes - - // get layout from - let layoutFrom = self.from.layoutConstraintItem! - - // get relation - let layoutRelation = self.relation.layoutRelation - - for layoutFromAttribute in layoutFromAttributes { - // get layout to attribute - let layoutToAttribute: LayoutAttribute - #if os(iOS) || os(tvOS) - if layoutToAttributes.count > 0 { - if self.from.attributes == .edges && self.to.attributes == .margins { - switch layoutFromAttribute { - case .left: - layoutToAttribute = .leftMargin - case .right: - layoutToAttribute = .rightMargin - case .top: - layoutToAttribute = .topMargin - case .bottom: - layoutToAttribute = .bottomMargin - default: - fatalError() - } - } else if self.from.attributes == .margins && self.to.attributes == .edges { - switch layoutFromAttribute { - case .leftMargin: - layoutToAttribute = .left - case .rightMargin: - layoutToAttribute = .right - case .topMargin: - layoutToAttribute = .top - case .bottomMargin: - layoutToAttribute = .bottom - default: - fatalError() - } - } else if self.from.attributes == .directionalEdges && self.to.attributes == .directionalMargins { - switch layoutFromAttribute { - case .leading: - layoutToAttribute = .leadingMargin - case .trailing: - layoutToAttribute = .trailingMargin - case .top: - layoutToAttribute = .topMargin - case .bottom: - layoutToAttribute = .bottomMargin - default: - fatalError() - } - } else if self.from.attributes == .directionalMargins && self.to.attributes == .directionalEdges { - switch layoutFromAttribute { - case .leadingMargin: - layoutToAttribute = .leading - case .trailingMargin: - layoutToAttribute = .trailing - case .topMargin: - layoutToAttribute = .top - case .bottomMargin: - layoutToAttribute = .bottom - default: - fatalError() - } - } else if self.from.attributes == self.to.attributes { - layoutToAttribute = layoutFromAttribute - } else { - layoutToAttribute = layoutToAttributes[0] - } - } else { - if self.to.target == nil && (layoutFromAttribute == .centerX || layoutFromAttribute == .centerY) { - layoutToAttribute = layoutFromAttribute == .centerX ? .left : .top - } else { - layoutToAttribute = layoutFromAttribute - } - } - #else - if self.from.attributes == self.to.attributes { - layoutToAttribute = layoutFromAttribute - } else if layoutToAttributes.count > 0 { - layoutToAttribute = layoutToAttributes[0] - } else { - layoutToAttribute = layoutFromAttribute - } - #endif - - // get layout constant - let layoutConstant: CGFloat = self.constant.constraintConstantTargetValueFor(layoutAttribute: layoutToAttribute) - - // get layout to - var layoutTo: AnyObject? = self.to.target - - // use superview if possible - if layoutTo == nil && layoutToAttribute != .width && layoutToAttribute != .height { - layoutTo = layoutFrom.superview - } - - // create layout constraint - let layoutConstraint = LayoutConstraint( - item: layoutFrom, - attribute: layoutFromAttribute, - relatedBy: layoutRelation, - toItem: layoutTo, - attribute: layoutToAttribute, - multiplier: self.multiplier.constraintMultiplierTargetValue, - constant: layoutConstant - ) - - // set label - layoutConstraint.label = self.label - - // set priority - layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) - - // set constraint - layoutConstraint.constraint = self - - // append - self.layoutConstraints.append(layoutConstraint) - } - } - - // MARK: Public - - @available(*, deprecated, message:"Use activate().") - public func install() { - self.activate() - } - - @available(*, deprecated, message:"Use deactivate().") - public func uninstall() { - self.deactivate() - } - - public func activate() { - self.activateIfNeeded() - } - - public func deactivate() { - self.deactivateIfNeeded() - } - - @discardableResult - public func update(offset: ConstraintOffsetTarget) -> Constraint { - self.constant = offset.constraintOffsetTargetValue - return self - } - - @discardableResult - public func update(inset: ConstraintInsetTarget) -> Constraint { - self.constant = inset.constraintInsetTargetValue - return self - } - - #if os(iOS) || os(tvOS) - @discardableResult - @available(iOS 11.0, tvOS 11.0, *) - public func update(inset: ConstraintDirectionalInsetTarget) -> Constraint { - self.constant = inset.constraintDirectionalInsetTargetValue - return self - } - #endif - - @discardableResult - public func update(priority: ConstraintPriorityTarget) -> Constraint { - self.priority = priority.constraintPriorityTargetValue - return self - } - - @discardableResult - public func update(priority: ConstraintPriority) -> Constraint { - self.priority = priority.value - return self - } - - @available(*, deprecated, message:"Use update(offset: ConstraintOffsetTarget) instead.") - public func updateOffset(amount: ConstraintOffsetTarget) -> Void { self.update(offset: amount) } - - @available(*, deprecated, message:"Use update(inset: ConstraintInsetTarget) instead.") - public func updateInsets(amount: ConstraintInsetTarget) -> Void { self.update(inset: amount) } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriority(amount: ConstraintPriorityTarget) -> Void { self.update(priority: amount) } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityRequired() -> Void {} - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityHigh() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityMedium() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - @available(*, deprecated, message:"Use update(priority: ConstraintPriorityTarget) instead.") - public func updatePriorityLow() -> Void { fatalError("Must be implemented by Concrete subclass.") } - - // MARK: Internal - - internal func updateConstantAndPriorityIfNeeded() { - for layoutConstraint in self.layoutConstraints { - let attribute = (layoutConstraint.secondAttribute == .notAnAttribute) ? layoutConstraint.firstAttribute : layoutConstraint.secondAttribute - layoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: attribute) - - let requiredPriority = ConstraintPriority.required.value - if (layoutConstraint.priority.rawValue < requiredPriority), (self.priority.constraintPriorityTargetValue != requiredPriority) { - layoutConstraint.priority = LayoutPriority(rawValue: self.priority.constraintPriorityTargetValue) - } - } - } - - internal func activateIfNeeded(updatingExisting: Bool = false) { - guard let item = self.from.layoutConstraintItem else { - print("WARNING: SnapKit failed to get from item from constraint. Activate will be a no-op.") - return - } - let layoutConstraints = self.layoutConstraints - - if updatingExisting { - var existingLayoutConstraints: [LayoutConstraint] = [] - for constraint in item.constraints { - existingLayoutConstraints += constraint.layoutConstraints - } - - for layoutConstraint in layoutConstraints { - let existingLayoutConstraint = existingLayoutConstraints.first { $0 == layoutConstraint } - guard let updateLayoutConstraint = existingLayoutConstraint else { - fatalError("Updated constraint could not find existing matching constraint to update: \(layoutConstraint)") - } - - let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute - updateLayoutConstraint.constant = self.constant.constraintConstantTargetValueFor(layoutAttribute: updateLayoutAttribute) - } - } else { - NSLayoutConstraint.activate(layoutConstraints) - item.add(constraints: [self]) - } - } - - internal func deactivateIfNeeded() { - guard let item = self.from.layoutConstraintItem else { - print("WARNING: SnapKit failed to get from item from constraint. Deactivate will be a no-op.") - return - } - let layoutConstraints = self.layoutConstraints - NSLayoutConstraint.deactivate(layoutConstraints) - item.remove(constraints: [self]) - } -} diff --git a/Pods/SnapKit/Source/ConstraintAttributes.swift b/Pods/SnapKit/Source/ConstraintAttributes.swift deleted file mode 100644 index 2f0fbe9..0000000 --- a/Pods/SnapKit/Source/ConstraintAttributes.swift +++ /dev/null @@ -1,199 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -internal struct ConstraintAttributes : OptionSet, ExpressibleByIntegerLiteral { - - typealias IntegerLiteralType = UInt - - internal init(rawValue: UInt) { - self.rawValue = rawValue - } - internal init(_ rawValue: UInt) { - self.init(rawValue: rawValue) - } - internal init(nilLiteral: ()) { - self.rawValue = 0 - } - internal init(integerLiteral rawValue: IntegerLiteralType) { - self.init(rawValue: rawValue) - } - - internal private(set) var rawValue: UInt - internal static var allZeros: ConstraintAttributes { return 0 } - internal static func convertFromNilLiteral() -> ConstraintAttributes { return 0 } - internal var boolValue: Bool { return self.rawValue != 0 } - - internal func toRaw() -> UInt { return self.rawValue } - internal static func fromRaw(_ raw: UInt) -> ConstraintAttributes? { return self.init(raw) } - internal static func fromMask(_ raw: UInt) -> ConstraintAttributes { return self.init(raw) } - - // normal - - internal static var none: ConstraintAttributes { return 0 } - internal static var left: ConstraintAttributes { return 1 } - internal static var top: ConstraintAttributes { return 2 } - internal static var right: ConstraintAttributes { return 4 } - internal static var bottom: ConstraintAttributes { return 8 } - internal static var leading: ConstraintAttributes { return 16 } - internal static var trailing: ConstraintAttributes { return 32 } - internal static var width: ConstraintAttributes { return 64 } - internal static var height: ConstraintAttributes { return 128 } - internal static var centerX: ConstraintAttributes { return 256 } - internal static var centerY: ConstraintAttributes { return 512 } - internal static var lastBaseline: ConstraintAttributes { return 1024 } - - @available(iOS 8.0, OSX 10.11, *) - internal static var firstBaseline: ConstraintAttributes { return 2048 } - - @available(iOS 8.0, *) - internal static var leftMargin: ConstraintAttributes { return 4096 } - - @available(iOS 8.0, *) - internal static var rightMargin: ConstraintAttributes { return 8192 } - - @available(iOS 8.0, *) - internal static var topMargin: ConstraintAttributes { return 16384 } - - @available(iOS 8.0, *) - internal static var bottomMargin: ConstraintAttributes { return 32768 } - - @available(iOS 8.0, *) - internal static var leadingMargin: ConstraintAttributes { return 65536 } - - @available(iOS 8.0, *) - internal static var trailingMargin: ConstraintAttributes { return 131072 } - - @available(iOS 8.0, *) - internal static var centerXWithinMargins: ConstraintAttributes { return 262144 } - - @available(iOS 8.0, *) - internal static var centerYWithinMargins: ConstraintAttributes { return 524288 } - - // aggregates - - internal static var edges: ConstraintAttributes { return 15 } - internal static var directionalEdges: ConstraintAttributes { return 58 } - internal static var size: ConstraintAttributes { return 192 } - internal static var center: ConstraintAttributes { return 768 } - - @available(iOS 8.0, *) - internal static var margins: ConstraintAttributes { return 61440 } - - @available(iOS 8.0, *) - internal static var directionalMargins: ConstraintAttributes { return 245760 } - - @available(iOS 8.0, *) - internal static var centerWithinMargins: ConstraintAttributes { return 786432 } - - internal var layoutAttributes:[LayoutAttribute] { - var attrs = [LayoutAttribute]() - if (self.contains(ConstraintAttributes.left)) { - attrs.append(.left) - } - if (self.contains(ConstraintAttributes.top)) { - attrs.append(.top) - } - if (self.contains(ConstraintAttributes.right)) { - attrs.append(.right) - } - if (self.contains(ConstraintAttributes.bottom)) { - attrs.append(.bottom) - } - if (self.contains(ConstraintAttributes.leading)) { - attrs.append(.leading) - } - if (self.contains(ConstraintAttributes.trailing)) { - attrs.append(.trailing) - } - if (self.contains(ConstraintAttributes.width)) { - attrs.append(.width) - } - if (self.contains(ConstraintAttributes.height)) { - attrs.append(.height) - } - if (self.contains(ConstraintAttributes.centerX)) { - attrs.append(.centerX) - } - if (self.contains(ConstraintAttributes.centerY)) { - attrs.append(.centerY) - } - if (self.contains(ConstraintAttributes.lastBaseline)) { - attrs.append(.lastBaseline) - } - - #if os(iOS) || os(tvOS) - if (self.contains(ConstraintAttributes.firstBaseline)) { - attrs.append(.firstBaseline) - } - if (self.contains(ConstraintAttributes.leftMargin)) { - attrs.append(.leftMargin) - } - if (self.contains(ConstraintAttributes.rightMargin)) { - attrs.append(.rightMargin) - } - if (self.contains(ConstraintAttributes.topMargin)) { - attrs.append(.topMargin) - } - if (self.contains(ConstraintAttributes.bottomMargin)) { - attrs.append(.bottomMargin) - } - if (self.contains(ConstraintAttributes.leadingMargin)) { - attrs.append(.leadingMargin) - } - if (self.contains(ConstraintAttributes.trailingMargin)) { - attrs.append(.trailingMargin) - } - if (self.contains(ConstraintAttributes.centerXWithinMargins)) { - attrs.append(.centerXWithinMargins) - } - if (self.contains(ConstraintAttributes.centerYWithinMargins)) { - attrs.append(.centerYWithinMargins) - } - #endif - - return attrs - } -} - -internal func + (left: ConstraintAttributes, right: ConstraintAttributes) -> ConstraintAttributes { - return left.union(right) -} - -internal func +=(left: inout ConstraintAttributes, right: ConstraintAttributes) { - left.formUnion(right) -} - -internal func -=(left: inout ConstraintAttributes, right: ConstraintAttributes) { - left.subtract(right) -} - -internal func ==(left: ConstraintAttributes, right: ConstraintAttributes) -> Bool { - return left.rawValue == right.rawValue -} diff --git a/Pods/SnapKit/Source/ConstraintConfig.swift b/Pods/SnapKit/Source/ConstraintConfig.swift deleted file mode 100644 index 2746b7d..0000000 --- a/Pods/SnapKit/Source/ConstraintConfig.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit - public typealias ConstraintInterfaceLayoutDirection = UIUserInterfaceLayoutDirection -#else - import AppKit - public typealias ConstraintInterfaceLayoutDirection = NSUserInterfaceLayoutDirection -#endif - - -public struct ConstraintConfig { - - public static var interfaceLayoutDirection: ConstraintInterfaceLayoutDirection = .leftToRight - -} diff --git a/Pods/SnapKit/Source/ConstraintConstantTarget.swift b/Pods/SnapKit/Source/ConstraintConstantTarget.swift deleted file mode 100644 index 7f54907..0000000 --- a/Pods/SnapKit/Source/ConstraintConstantTarget.swift +++ /dev/null @@ -1,213 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintConstantTarget { -} - -extension CGPoint: ConstraintConstantTarget { -} - -extension CGSize: ConstraintConstantTarget { -} - -extension ConstraintInsets: ConstraintConstantTarget { -} - -#if os(iOS) || os(tvOS) -@available(iOS 11.0, tvOS 11.0, *) -extension ConstraintDirectionalInsets: ConstraintConstantTarget { -} -#endif - -extension ConstraintConstantTarget { - - internal func constraintConstantTargetValueFor(layoutAttribute: LayoutAttribute) -> CGFloat { - if let value = self as? CGFloat { - return value - } - - if let value = self as? Float { - return CGFloat(value) - } - - if let value = self as? Double { - return CGFloat(value) - } - - if let value = self as? Int { - return CGFloat(value) - } - - if let value = self as? UInt { - return CGFloat(value) - } - - if let value = self as? CGSize { - if layoutAttribute == .width { - return value.width - } else if layoutAttribute == .height { - return value.height - } else { - return 0.0 - } - } - - if let value = self as? CGPoint { - #if os(iOS) || os(tvOS) - switch layoutAttribute { - case .left, .right, .leading, .trailing, .centerX, .leftMargin, .rightMargin, .leadingMargin, .trailingMargin, .centerXWithinMargins: - return value.x - case .top, .bottom, .centerY, .topMargin, .bottomMargin, .centerYWithinMargins, .lastBaseline, .firstBaseline: - return value.y - case .width, .height, .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #else - switch layoutAttribute { - case .left, .right, .leading, .trailing, .centerX: - return value.x - case .top, .bottom, .centerY, .lastBaseline, .firstBaseline: - return value.y - case .width, .height, .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #endif - } - - if let value = self as? ConstraintInsets { - #if os(iOS) || os(tvOS) - switch layoutAttribute { - case .left, .leftMargin: - return value.left - case .top, .topMargin, .firstBaseline: - return value.top - case .right, .rightMargin: - return -value.right - case .bottom, .bottomMargin, .lastBaseline: - return -value.bottom - case .leading, .leadingMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right - case .trailing, .trailingMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left - case .centerX, .centerXWithinMargins: - return (value.left - value.right) / 2 - case .centerY, .centerYWithinMargins: - return (value.top - value.bottom) / 2 - case .width: - return -(value.left + value.right) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #else - switch layoutAttribute { - case .left: - return value.left - case .top, .firstBaseline: - return value.top - case .right: - return -value.right - case .bottom, .lastBaseline: - return -value.bottom - case .leading: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.left : value.right - case .trailing: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.right : -value.left - case .centerX: - return (value.left - value.right) / 2 - case .centerY: - return (value.top - value.bottom) / 2 - case .width: - return -(value.left + value.right) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #endif - } - #endif - } - - #if os(iOS) || os(tvOS) - if #available(iOS 11.0, tvOS 11.0, *), let value = self as? ConstraintDirectionalInsets { - switch layoutAttribute { - case .left, .leftMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? value.leading : value.trailing - case .top, .topMargin, .firstBaseline: - return value.top - case .right, .rightMargin: - return (ConstraintConfig.interfaceLayoutDirection == .leftToRight) ? -value.trailing : -value.leading - case .bottom, .bottomMargin, .lastBaseline: - return -value.bottom - case .leading, .leadingMargin: - return value.leading - case .trailing, .trailingMargin: - return -value.trailing - case .centerX, .centerXWithinMargins: - return (value.leading - value.trailing) / 2 - case .centerY, .centerYWithinMargins: - return (value.top - value.bottom) / 2 - case .width: - return -(value.leading + value.trailing) - case .height: - return -(value.top + value.bottom) - case .notAnAttribute: - return 0.0 - #if swift(>=5.0) - @unknown default: - return 0.0 - #else - default: - return 0.0 - #endif - } - } - #endif - - return 0.0 - } - -} diff --git a/Pods/SnapKit/Source/ConstraintDSL.swift b/Pods/SnapKit/Source/ConstraintDSL.swift deleted file mode 100644 index ecc5173..0000000 --- a/Pods/SnapKit/Source/ConstraintDSL.swift +++ /dev/null @@ -1,194 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintDSL { - - var target: AnyObject? { get } - - func setLabel(_ value: String?) - func label() -> String? - -} -extension ConstraintDSL { - - public func setLabel(_ value: String?) { - objc_setAssociatedObject(self.target as Any, &labelKey, value, .OBJC_ASSOCIATION_COPY_NONATOMIC) - } - public func label() -> String? { - return objc_getAssociatedObject(self.target as Any, &labelKey) as? String - } - -} -private var labelKey: UInt8 = 0 - - -public protocol ConstraintBasicAttributesDSL : ConstraintDSL { -} -extension ConstraintBasicAttributesDSL { - - // MARK: Basics - - public var left: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.left) - } - - public var top: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) - } - - public var right: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.right) - } - - public var bottom: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) - } - - public var leading: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leading) - } - - public var trailing: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailing) - } - - public var width: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.width) - } - - public var height: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) - } - - public var centerX: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerX) - } - - public var centerY: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerY) - } - - public var edges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.edges) - } - - public var directionalEdges: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalEdges) - } - - public var size: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.size) - } - - public var center: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.center) - } - -} - -public protocol ConstraintAttributesDSL : ConstraintBasicAttributesDSL { -} -extension ConstraintAttributesDSL { - - // MARK: Baselines - - @available(*, deprecated, message:"Use .lastBaseline instead") - public var baseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var lastBaseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.firstBaseline) - } - - // MARK: Margins - - @available(iOS 8.0, *) - public var leftMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leftMargin) - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.topMargin) - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.rightMargin) - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottomMargin) - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.leadingMargin) - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.trailingMargin) - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerXWithinMargins) - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerYWithinMargins) - } - - @available(iOS 8.0, *) - public var margins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.margins) - } - - @available(iOS 8.0, *) - public var directionalMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.directionalMargins) - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.centerWithinMargins) - } - -} diff --git a/Pods/SnapKit/Source/ConstraintDescription.swift b/Pods/SnapKit/Source/ConstraintDescription.swift deleted file mode 100644 index 3521f9f..0000000 --- a/Pods/SnapKit/Source/ConstraintDescription.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintDescription { - - internal let item: LayoutConstraintItem - internal var attributes: ConstraintAttributes - internal var relation: ConstraintRelation? = nil - internal var sourceLocation: (String, UInt)? = nil - internal var label: String? = nil - internal var related: ConstraintItem? = nil - internal var multiplier: ConstraintMultiplierTarget = 1.0 - internal var constant: ConstraintConstantTarget = 0.0 - internal var priority: ConstraintPriorityTarget = 1000.0 - internal lazy var constraint: Constraint? = { - guard let relation = self.relation, - let related = self.related, - let sourceLocation = self.sourceLocation else { - return nil - } - let from = ConstraintItem(target: self.item, attributes: self.attributes) - - return Constraint( - from: from, - to: related, - relation: relation, - sourceLocation: sourceLocation, - label: self.label, - multiplier: self.multiplier, - constant: self.constant, - priority: self.priority - ) - }() - - // MARK: Initialization - - internal init(item: LayoutConstraintItem, attributes: ConstraintAttributes) { - self.item = item - self.attributes = attributes - } - -} diff --git a/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift b/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift deleted file mode 100644 index 955aec3..0000000 --- a/Pods/SnapKit/Source/ConstraintDirectionalInsetTarget.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) -import UIKit -#else -import AppKit -#endif - -#if os(iOS) || os(tvOS) -public protocol ConstraintDirectionalInsetTarget: ConstraintConstantTarget { -} - -@available(iOS 11.0, tvOS 11.0, *) -extension ConstraintDirectionalInsets: ConstraintDirectionalInsetTarget { -} - -extension ConstraintDirectionalInsetTarget { - - @available(iOS 11.0, tvOS 11.0, *) - internal var constraintDirectionalInsetTargetValue: ConstraintDirectionalInsets { - if let amount = self as? ConstraintDirectionalInsets { - return amount - } else { - return ConstraintDirectionalInsets(top: 0, leading: 0, bottom: 0, trailing: 0) - } - } -} -#endif diff --git a/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift b/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift deleted file mode 100644 index ada8ed5..0000000 --- a/Pods/SnapKit/Source/ConstraintDirectionalInsets.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - @available(iOS 11.0, tvOS 11.0, *) - public typealias ConstraintDirectionalInsets = NSDirectionalEdgeInsets -#endif diff --git a/Pods/SnapKit/Source/ConstraintInsetTarget.swift b/Pods/SnapKit/Source/ConstraintInsetTarget.swift deleted file mode 100644 index ba8a0f3..0000000 --- a/Pods/SnapKit/Source/ConstraintInsetTarget.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintInsetTarget: ConstraintConstantTarget { -} - -extension Int: ConstraintInsetTarget { -} - -extension UInt: ConstraintInsetTarget { -} - -extension Float: ConstraintInsetTarget { -} - -extension Double: ConstraintInsetTarget { -} - -extension CGFloat: ConstraintInsetTarget { -} - -extension ConstraintInsets: ConstraintInsetTarget { -} - -extension ConstraintInsetTarget { - - internal var constraintInsetTargetValue: ConstraintInsets { - if let amount = self as? ConstraintInsets { - return amount - } else if let amount = self as? Float { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? Double { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? CGFloat { - return ConstraintInsets(top: amount, left: amount, bottom: amount, right: amount) - } else if let amount = self as? Int { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else if let amount = self as? UInt { - return ConstraintInsets(top: CGFloat(amount), left: CGFloat(amount), bottom: CGFloat(amount), right: CGFloat(amount)) - } else { - return ConstraintInsets(top: 0, left: 0, bottom: 0, right: 0) - } - } - -} diff --git a/Pods/SnapKit/Source/ConstraintInsets.swift b/Pods/SnapKit/Source/ConstraintInsets.swift deleted file mode 100644 index 738ca05..0000000 --- a/Pods/SnapKit/Source/ConstraintInsets.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - public typealias ConstraintInsets = UIEdgeInsets -#else - public typealias ConstraintInsets = NSEdgeInsets -#endif diff --git a/Pods/SnapKit/Source/ConstraintItem.swift b/Pods/SnapKit/Source/ConstraintItem.swift deleted file mode 100644 index a342c1d..0000000 --- a/Pods/SnapKit/Source/ConstraintItem.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public final class ConstraintItem { - - internal weak var target: AnyObject? - internal let attributes: ConstraintAttributes - - internal init(target: AnyObject?, attributes: ConstraintAttributes) { - self.target = target - self.attributes = attributes - } - - internal var layoutConstraintItem: LayoutConstraintItem? { - return self.target as? LayoutConstraintItem - } - -} - -public func ==(lhs: ConstraintItem, rhs: ConstraintItem) -> Bool { - // pointer equality - guard lhs !== rhs else { - return true - } - - // must both have valid targets and identical attributes - guard let target1 = lhs.target, - let target2 = rhs.target, - target1 === target2 && lhs.attributes == rhs.attributes else { - return false - } - - return true -} diff --git a/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift b/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift deleted file mode 100644 index d429e0c..0000000 --- a/Pods/SnapKit/Source/ConstraintLayoutGuide+Extensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#endif - - -@available(iOS 9.0, OSX 10.11, *) -public extension ConstraintLayoutGuide { - - var snp: ConstraintLayoutGuideDSL { - return ConstraintLayoutGuideDSL(guide: self) - } - -} diff --git a/Pods/SnapKit/Source/ConstraintLayoutGuide.swift b/Pods/SnapKit/Source/ConstraintLayoutGuide.swift deleted file mode 100644 index e3e50c8..0000000 --- a/Pods/SnapKit/Source/ConstraintLayoutGuide.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - @available(iOS 9.0, *) - public typealias ConstraintLayoutGuide = UILayoutGuide -#else - @available(OSX 10.11, *) - public typealias ConstraintLayoutGuide = NSLayoutGuide -#endif diff --git a/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift b/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift deleted file mode 100644 index 0007819..0000000 --- a/Pods/SnapKit/Source/ConstraintLayoutGuideDSL.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -@available(iOS 9.0, OSX 10.11, *) -public struct ConstraintLayoutGuideDSL: ConstraintAttributesDSL { - - @discardableResult - public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(item: self.guide, closure: closure) - } - - public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.makeConstraints(item: self.guide, closure: closure) - } - - public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.remakeConstraints(item: self.guide, closure: closure) - } - - public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.updateConstraints(item: self.guide, closure: closure) - } - - public func removeConstraints() { - ConstraintMaker.removeConstraints(item: self.guide) - } - - public var target: AnyObject? { - return self.guide - } - - internal let guide: ConstraintLayoutGuide - - internal init(guide: ConstraintLayoutGuide) { - self.guide = guide - - } - -} diff --git a/Pods/SnapKit/Source/ConstraintLayoutSupport.swift b/Pods/SnapKit/Source/ConstraintLayoutSupport.swift deleted file mode 100644 index e92e9fb..0000000 --- a/Pods/SnapKit/Source/ConstraintLayoutSupport.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - @available(iOS 8.0, *) - public typealias ConstraintLayoutSupport = UILayoutSupport -#else - public class ConstraintLayoutSupport {} -#endif diff --git a/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift b/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift deleted file mode 100644 index 5d6ae89..0000000 --- a/Pods/SnapKit/Source/ConstraintLayoutSupportDSL.swift +++ /dev/null @@ -1,56 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -@available(iOS 8.0, *) -public struct ConstraintLayoutSupportDSL: ConstraintDSL { - - public var target: AnyObject? { - return self.support - } - - internal let support: ConstraintLayoutSupport - - internal init(support: ConstraintLayoutSupport) { - self.support = support - - } - - public var top: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.top) - } - - public var bottom: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.bottom) - } - - public var height: ConstraintItem { - return ConstraintItem(target: self.target, attributes: ConstraintAttributes.height) - } -} diff --git a/Pods/SnapKit/Source/ConstraintMaker.swift b/Pods/SnapKit/Source/ConstraintMaker.swift deleted file mode 100644 index 38f4d31..0000000 --- a/Pods/SnapKit/Source/ConstraintMaker.swift +++ /dev/null @@ -1,212 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public class ConstraintMaker { - - public var left: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.left) - } - - public var top: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.top) - } - - public var bottom: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.bottom) - } - - public var right: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.right) - } - - public var leading: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leading) - } - - public var trailing: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.trailing) - } - - public var width: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.width) - } - - public var height: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.height) - } - - public var centerX: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerX) - } - - public var centerY: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerY) - } - - @available(*, deprecated, message:"Use lastBaseline instead") - public var baseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.lastBaseline) - } - - public var lastBaseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.lastBaseline) - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.firstBaseline) - } - - @available(iOS 8.0, *) - public var leftMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leftMargin) - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.rightMargin) - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.topMargin) - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.bottomMargin) - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.leadingMargin) - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.trailingMargin) - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerXWithinMargins) - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerYWithinMargins) - } - - public var edges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.edges) - } - public var directionalEdges: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.directionalEdges) - } - public var size: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.size) - } - public var center: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.center) - } - - @available(iOS 8.0, *) - public var margins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.margins) - } - - @available(iOS 8.0, *) - public var directionalMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.directionalMargins) - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintMakerExtendable { - return self.makeExtendableWithAttributes(.centerWithinMargins) - } - - private let item: LayoutConstraintItem - private var descriptions = [ConstraintDescription]() - - internal init(item: LayoutConstraintItem) { - self.item = item - self.item.prepare() - } - - internal func makeExtendableWithAttributes(_ attributes: ConstraintAttributes) -> ConstraintMakerExtendable { - let description = ConstraintDescription(item: self.item, attributes: attributes) - self.descriptions.append(description) - return ConstraintMakerExtendable(description) - } - - internal static func prepareConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - let maker = ConstraintMaker(item: item) - closure(maker) - var constraints: [Constraint] = [] - for description in maker.descriptions { - guard let constraint = description.constraint else { - continue - } - constraints.append(constraint) - } - return constraints - } - - internal static func makeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - let constraints = prepareConstraints(item: item, closure: closure) - for constraint in constraints { - constraint.activateIfNeeded(updatingExisting: false) - } - } - - internal static func remakeConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - self.removeConstraints(item: item) - self.makeConstraints(item: item, closure: closure) - } - - internal static func updateConstraints(item: LayoutConstraintItem, closure: (_ make: ConstraintMaker) -> Void) { - guard item.constraints.count > 0 else { - self.makeConstraints(item: item, closure: closure) - return - } - - let constraints = prepareConstraints(item: item, closure: closure) - for constraint in constraints { - constraint.activateIfNeeded(updatingExisting: true) - } - } - - internal static func removeConstraints(item: LayoutConstraintItem) { - let constraints = item.constraints - for constraint in constraints { - constraint.deactivateIfNeeded() - } - } - -} diff --git a/Pods/SnapKit/Source/ConstraintMakerEditable.swift b/Pods/SnapKit/Source/ConstraintMakerEditable.swift deleted file mode 100644 index f768a17..0000000 --- a/Pods/SnapKit/Source/ConstraintMakerEditable.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerEditable: ConstraintMakerPriortizable { - - @discardableResult - public func multipliedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { - self.description.multiplier = amount - return self - } - - @discardableResult - public func dividedBy(_ amount: ConstraintMultiplierTarget) -> ConstraintMakerEditable { - return self.multipliedBy(1.0 / amount.constraintMultiplierTargetValue) - } - - @discardableResult - public func offset(_ amount: ConstraintOffsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintOffsetTargetValue - return self - } - - @discardableResult - public func inset(_ amount: ConstraintInsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintInsetTargetValue - return self - } - - #if os(iOS) || os(tvOS) - @discardableResult - @available(iOS 11.0, tvOS 11.0, *) - public func inset(_ amount: ConstraintDirectionalInsetTarget) -> ConstraintMakerEditable { - self.description.constant = amount.constraintDirectionalInsetTargetValue - return self - } - #endif -} diff --git a/Pods/SnapKit/Source/ConstraintMakerExtendable.swift b/Pods/SnapKit/Source/ConstraintMakerExtendable.swift deleted file mode 100644 index ce47169..0000000 --- a/Pods/SnapKit/Source/ConstraintMakerExtendable.swift +++ /dev/null @@ -1,179 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerExtendable: ConstraintMakerRelatable { - - public var left: ConstraintMakerExtendable { - self.description.attributes += .left - return self - } - - public var top: ConstraintMakerExtendable { - self.description.attributes += .top - return self - } - - public var bottom: ConstraintMakerExtendable { - self.description.attributes += .bottom - return self - } - - public var right: ConstraintMakerExtendable { - self.description.attributes += .right - return self - } - - public var leading: ConstraintMakerExtendable { - self.description.attributes += .leading - return self - } - - public var trailing: ConstraintMakerExtendable { - self.description.attributes += .trailing - return self - } - - public var width: ConstraintMakerExtendable { - self.description.attributes += .width - return self - } - - public var height: ConstraintMakerExtendable { - self.description.attributes += .height - return self - } - - public var centerX: ConstraintMakerExtendable { - self.description.attributes += .centerX - return self - } - - public var centerY: ConstraintMakerExtendable { - self.description.attributes += .centerY - return self - } - - @available(*, deprecated, message:"Use lastBaseline instead") - public var baseline: ConstraintMakerExtendable { - self.description.attributes += .lastBaseline - return self - } - - public var lastBaseline: ConstraintMakerExtendable { - self.description.attributes += .lastBaseline - return self - } - - @available(iOS 8.0, OSX 10.11, *) - public var firstBaseline: ConstraintMakerExtendable { - self.description.attributes += .firstBaseline - return self - } - - @available(iOS 8.0, *) - public var leftMargin: ConstraintMakerExtendable { - self.description.attributes += .leftMargin - return self - } - - @available(iOS 8.0, *) - public var rightMargin: ConstraintMakerExtendable { - self.description.attributes += .rightMargin - return self - } - - @available(iOS 8.0, *) - public var topMargin: ConstraintMakerExtendable { - self.description.attributes += .topMargin - return self - } - - @available(iOS 8.0, *) - public var bottomMargin: ConstraintMakerExtendable { - self.description.attributes += .bottomMargin - return self - } - - @available(iOS 8.0, *) - public var leadingMargin: ConstraintMakerExtendable { - self.description.attributes += .leadingMargin - return self - } - - @available(iOS 8.0, *) - public var trailingMargin: ConstraintMakerExtendable { - self.description.attributes += .trailingMargin - return self - } - - @available(iOS 8.0, *) - public var centerXWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerXWithinMargins - return self - } - - @available(iOS 8.0, *) - public var centerYWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerYWithinMargins - return self - } - - public var edges: ConstraintMakerExtendable { - self.description.attributes += .edges - return self - } - public var directionalEdges: ConstraintMakerExtendable { - self.description.attributes += .directionalEdges - return self - } - public var size: ConstraintMakerExtendable { - self.description.attributes += .size - return self - } - - @available(iOS 8.0, *) - public var margins: ConstraintMakerExtendable { - self.description.attributes += .margins - return self - } - - @available(iOS 8.0, *) - public var directionalMargins: ConstraintMakerExtendable { - self.description.attributes += .directionalMargins - return self - } - - @available(iOS 8.0, *) - public var centerWithinMargins: ConstraintMakerExtendable { - self.description.attributes += .centerWithinMargins - return self - } - -} diff --git a/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift b/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift deleted file mode 100644 index 4e1379e..0000000 --- a/Pods/SnapKit/Source/ConstraintMakerFinalizable.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerFinalizable { - - internal let description: ConstraintDescription - - internal init(_ description: ConstraintDescription) { - self.description = description - } - - @discardableResult - public func labeled(_ label: String) -> ConstraintMakerFinalizable { - self.description.label = label - return self - } - - public var constraint: Constraint { - return self.description.constraint! - } - -} diff --git a/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift b/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift deleted file mode 100644 index e0d452d..0000000 --- a/Pods/SnapKit/Source/ConstraintMakerPriortizable.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerPriortizable: ConstraintMakerFinalizable { - - @discardableResult - public func priority(_ amount: ConstraintPriority) -> ConstraintMakerFinalizable { - self.description.priority = amount.value - return self - } - - @discardableResult - public func priority(_ amount: ConstraintPriorityTarget) -> ConstraintMakerFinalizable { - self.description.priority = amount - return self - } - - @available(*, deprecated, message:"Use priority(.required) instead.") - @discardableResult - public func priorityRequired() -> ConstraintMakerFinalizable { - return self.priority(.required) - } - - @available(*, deprecated, message:"Use priority(.high) instead.") - @discardableResult - public func priorityHigh() -> ConstraintMakerFinalizable { - return self.priority(.high) - } - - @available(*, deprecated, message:"Use priority(.medium) instead.") - @discardableResult - public func priorityMedium() -> ConstraintMakerFinalizable { - return self.priority(.medium) - } - - @available(*, deprecated, message:"Use priority(.low) instead.") - @discardableResult - public func priorityLow() -> ConstraintMakerFinalizable { - return self.priority(.low) - } -} diff --git a/Pods/SnapKit/Source/ConstraintMakerRelatable.swift b/Pods/SnapKit/Source/ConstraintMakerRelatable.swift deleted file mode 100644 index 7889532..0000000 --- a/Pods/SnapKit/Source/ConstraintMakerRelatable.swift +++ /dev/null @@ -1,115 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class ConstraintMakerRelatable { - - internal let description: ConstraintDescription - - internal init(_ description: ConstraintDescription) { - self.description = description - } - - internal func relatedTo(_ other: ConstraintRelatableTarget, relation: ConstraintRelation, file: String, line: UInt) -> ConstraintMakerEditable { - let related: ConstraintItem - let constant: ConstraintConstantTarget - - if let other = other as? ConstraintItem { - guard other.attributes == ConstraintAttributes.none || - other.attributes.layoutAttributes.count <= 1 || - other.attributes.layoutAttributes == self.description.attributes.layoutAttributes || - other.attributes == .edges && self.description.attributes == .margins || - other.attributes == .margins && self.description.attributes == .edges || - other.attributes == .directionalEdges && self.description.attributes == .directionalMargins || - other.attributes == .directionalMargins && self.description.attributes == .directionalEdges else { - fatalError("Cannot constraint to multiple non identical attributes. (\(file), \(line))"); - } - - related = other - constant = 0.0 - } else if let other = other as? ConstraintView { - related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) - constant = 0.0 - } else if let other = other as? ConstraintConstantTarget { - related = ConstraintItem(target: nil, attributes: ConstraintAttributes.none) - constant = other - } else if #available(iOS 9.0, OSX 10.11, *), let other = other as? ConstraintLayoutGuide { - related = ConstraintItem(target: other, attributes: ConstraintAttributes.none) - constant = 0.0 - } else { - fatalError("Invalid constraint. (\(file), \(line))") - } - - let editable = ConstraintMakerEditable(self.description) - editable.description.sourceLocation = (file, line) - editable.description.relation = relation - editable.description.related = related - editable.description.constant = constant - return editable - } - - @discardableResult - public func equalTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .equal, file: file, line: line) - } - - @discardableResult - public func equalToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `equalToSuperview`.") - } - return self.relatedTo(other, relation: .equal, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func lessThanOrEqualToSuperview(_ file: String = #file, _ line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `lessThanOrEqualToSuperview`.") - } - return self.relatedTo(other, relation: .lessThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualTo(_ other: ConstraintRelatableTarget, _ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) - } - - @discardableResult - public func greaterThanOrEqualToSuperview(_ file: String = #file, line: UInt = #line) -> ConstraintMakerEditable { - guard let other = self.description.item.superview else { - fatalError("Expected superview but found nil when attempting make constraint `greaterThanOrEqualToSuperview`.") - } - return self.relatedTo(other, relation: .greaterThanOrEqual, file: file, line: line) - } -} diff --git a/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift b/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift deleted file mode 100644 index 6fecd33..0000000 --- a/Pods/SnapKit/Source/ConstraintMultiplierTarget.swift +++ /dev/null @@ -1,75 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintMultiplierTarget { - - var constraintMultiplierTargetValue: CGFloat { get } - -} - -extension Int: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension UInt: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension Float: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension Double: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return CGFloat(self) - } - -} - -extension CGFloat: ConstraintMultiplierTarget { - - public var constraintMultiplierTargetValue: CGFloat { - return self - } - -} diff --git a/Pods/SnapKit/Source/ConstraintOffsetTarget.swift b/Pods/SnapKit/Source/ConstraintOffsetTarget.swift deleted file mode 100644 index bd9e0a1..0000000 --- a/Pods/SnapKit/Source/ConstraintOffsetTarget.swift +++ /dev/null @@ -1,69 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintOffsetTarget: ConstraintConstantTarget { -} - -extension Int: ConstraintOffsetTarget { -} - -extension UInt: ConstraintOffsetTarget { -} - -extension Float: ConstraintOffsetTarget { -} - -extension Double: ConstraintOffsetTarget { -} - -extension CGFloat: ConstraintOffsetTarget { -} - -extension ConstraintOffsetTarget { - - internal var constraintOffsetTargetValue: CGFloat { - let offset: CGFloat - if let amount = self as? Float { - offset = CGFloat(amount) - } else if let amount = self as? Double { - offset = CGFloat(amount) - } else if let amount = self as? CGFloat { - offset = CGFloat(amount) - } else if let amount = self as? Int { - offset = CGFloat(amount) - } else if let amount = self as? UInt { - offset = CGFloat(amount) - } else { - offset = 0.0 - } - return offset - } - -} diff --git a/Pods/SnapKit/Source/ConstraintPriority.swift b/Pods/SnapKit/Source/ConstraintPriority.swift deleted file mode 100644 index f9dab16..0000000 --- a/Pods/SnapKit/Source/ConstraintPriority.swift +++ /dev/null @@ -1,77 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public struct ConstraintPriority : ExpressibleByFloatLiteral, Equatable, Strideable { - public typealias FloatLiteralType = Float - - public let value: Float - - public init(floatLiteral value: Float) { - self.value = value - } - - public init(_ value: Float) { - self.value = value - } - - public static var required: ConstraintPriority { - return 1000.0 - } - - public static var high: ConstraintPriority { - return 750.0 - } - - public static var medium: ConstraintPriority { - #if os(OSX) - return 501.0 - #else - return 500.0 - #endif - - } - - public static var low: ConstraintPriority { - return 250.0 - } - - public static func ==(lhs: ConstraintPriority, rhs: ConstraintPriority) -> Bool { - return lhs.value == rhs.value - } - - // MARK: Strideable - - public func advanced(by n: FloatLiteralType) -> ConstraintPriority { - return ConstraintPriority(floatLiteral: value + n) - } - - public func distance(to other: ConstraintPriority) -> FloatLiteralType { - return other.value - value - } -} diff --git a/Pods/SnapKit/Source/ConstraintPriorityTarget.swift b/Pods/SnapKit/Source/ConstraintPriorityTarget.swift deleted file mode 100644 index 064f750..0000000 --- a/Pods/SnapKit/Source/ConstraintPriorityTarget.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintPriorityTarget { - - var constraintPriorityTargetValue: Float { get } - -} - -extension Int: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension UInt: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension Float: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return self - } - -} - -extension Double: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -extension CGFloat: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return Float(self) - } - -} - -#if os(iOS) || os(tvOS) -extension UILayoutPriority: ConstraintPriorityTarget { - - public var constraintPriorityTargetValue: Float { - return self.rawValue - } - -} -#endif diff --git a/Pods/SnapKit/Source/ConstraintRelatableTarget.swift b/Pods/SnapKit/Source/ConstraintRelatableTarget.swift deleted file mode 100644 index d517a61..0000000 --- a/Pods/SnapKit/Source/ConstraintRelatableTarget.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol ConstraintRelatableTarget { -} - -extension Int: ConstraintRelatableTarget { -} - -extension UInt: ConstraintRelatableTarget { -} - -extension Float: ConstraintRelatableTarget { -} - -extension Double: ConstraintRelatableTarget { -} - -extension CGFloat: ConstraintRelatableTarget { -} - -extension CGSize: ConstraintRelatableTarget { -} - -extension CGPoint: ConstraintRelatableTarget { -} - -extension ConstraintInsets: ConstraintRelatableTarget { -} - -#if os(iOS) || os(tvOS) -@available(iOS 11.0, tvOS 11.0, *) -extension ConstraintDirectionalInsets: ConstraintRelatableTarget { -} -#endif - -extension ConstraintItem: ConstraintRelatableTarget { -} - -extension ConstraintView: ConstraintRelatableTarget { -} - -@available(iOS 9.0, OSX 10.11, *) -extension ConstraintLayoutGuide: ConstraintRelatableTarget { -} diff --git a/Pods/SnapKit/Source/ConstraintRelation.swift b/Pods/SnapKit/Source/ConstraintRelation.swift deleted file mode 100644 index 446aaf7..0000000 --- a/Pods/SnapKit/Source/ConstraintRelation.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -internal enum ConstraintRelation : Int { - case equal = 1 - case lessThanOrEqual - case greaterThanOrEqual - - internal var layoutRelation: LayoutRelation { - get { - switch(self) { - case .equal: - return .equal - case .lessThanOrEqual: - return .lessThanOrEqual - case .greaterThanOrEqual: - return .greaterThanOrEqual - } - } - } -} diff --git a/Pods/SnapKit/Source/ConstraintView+Extensions.swift b/Pods/SnapKit/Source/ConstraintView+Extensions.swift deleted file mode 100644 index a4898dc..0000000 --- a/Pods/SnapKit/Source/ConstraintView+Extensions.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public extension ConstraintView { - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_left: ConstraintItem { return self.snp.left } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_top: ConstraintItem { return self.snp.top } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_right: ConstraintItem { return self.snp.right } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_bottom: ConstraintItem { return self.snp.bottom } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_leading: ConstraintItem { return self.snp.leading } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_trailing: ConstraintItem { return self.snp.trailing } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_width: ConstraintItem { return self.snp.width } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_height: ConstraintItem { return self.snp.height } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_centerX: ConstraintItem { return self.snp.centerX } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_centerY: ConstraintItem { return self.snp.centerY } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_baseline: ConstraintItem { return self.snp.baseline } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, OSX 10.11, *) - var snp_lastBaseline: ConstraintItem { return self.snp.lastBaseline } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, OSX 10.11, *) - var snp_firstBaseline: ConstraintItem { return self.snp.firstBaseline } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_leftMargin: ConstraintItem { return self.snp.leftMargin } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_topMargin: ConstraintItem { return self.snp.topMargin } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_rightMargin: ConstraintItem { return self.snp.rightMargin } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_bottomMargin: ConstraintItem { return self.snp.bottomMargin } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_leadingMargin: ConstraintItem { return self.snp.leadingMargin } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_trailingMargin: ConstraintItem { return self.snp.trailingMargin } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_centerXWithinMargins: ConstraintItem { return self.snp.centerXWithinMargins } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_centerYWithinMargins: ConstraintItem { return self.snp.centerYWithinMargins } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_edges: ConstraintItem { return self.snp.edges } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_size: ConstraintItem { return self.snp.size } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - var snp_center: ConstraintItem { return self.snp.center } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_margins: ConstraintItem { return self.snp.margins } - - @available(iOS, deprecated, message:"Use newer snp.* syntax.") - @available(iOS 8.0, *) - var snp_centerWithinMargins: ConstraintItem { return self.snp.centerWithinMargins } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - func snp_prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return self.snp.prepareConstraints(closure) - } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - func snp_makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.makeConstraints(closure) - } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - func snp_remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.remakeConstraints(closure) - } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - func snp_updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - self.snp.updateConstraints(closure) - } - - @available(*, deprecated, message:"Use newer snp.* syntax.") - func snp_removeConstraints() { - self.snp.removeConstraints() - } - - var snp: ConstraintViewDSL { - return ConstraintViewDSL(view: self) - } - -} diff --git a/Pods/SnapKit/Source/ConstraintView.swift b/Pods/SnapKit/Source/ConstraintView.swift deleted file mode 100644 index 6ff8a76..0000000 --- a/Pods/SnapKit/Source/ConstraintView.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -#if os(iOS) || os(tvOS) - public typealias ConstraintView = UIView -#else - public typealias ConstraintView = NSView -#endif diff --git a/Pods/SnapKit/Source/ConstraintViewDSL.swift b/Pods/SnapKit/Source/ConstraintViewDSL.swift deleted file mode 100644 index a0187f9..0000000 --- a/Pods/SnapKit/Source/ConstraintViewDSL.swift +++ /dev/null @@ -1,101 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public struct ConstraintViewDSL: ConstraintAttributesDSL { - - @discardableResult - public func prepareConstraints(_ closure: (_ make: ConstraintMaker) -> Void) -> [Constraint] { - return ConstraintMaker.prepareConstraints(item: self.view, closure: closure) - } - - public func makeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.makeConstraints(item: self.view, closure: closure) - } - - public func remakeConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.remakeConstraints(item: self.view, closure: closure) - } - - public func updateConstraints(_ closure: (_ make: ConstraintMaker) -> Void) { - ConstraintMaker.updateConstraints(item: self.view, closure: closure) - } - - public func removeConstraints() { - ConstraintMaker.removeConstraints(item: self.view) - } - - public var contentHuggingHorizontalPriority: Float { - get { - return self.view.contentHuggingPriority(for: .horizontal).rawValue - } - nonmutating set { - self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .horizontal) - } - } - - public var contentHuggingVerticalPriority: Float { - get { - return self.view.contentHuggingPriority(for: .vertical).rawValue - } - nonmutating set { - self.view.setContentHuggingPriority(LayoutPriority(rawValue: newValue), for: .vertical) - } - } - - public var contentCompressionResistanceHorizontalPriority: Float { - get { - return self.view.contentCompressionResistancePriority(for: .horizontal).rawValue - } - nonmutating set { - self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .horizontal) - } - } - - public var contentCompressionResistanceVerticalPriority: Float { - get { - return self.view.contentCompressionResistancePriority(for: .vertical).rawValue - } - nonmutating set { - self.view.setContentCompressionResistancePriority(LayoutPriority(rawValue: newValue), for: .vertical) - } - } - - public var target: AnyObject? { - return self.view - } - - internal let view: ConstraintView - - internal init(view: ConstraintView) { - self.view = view - - } - -} diff --git a/Pods/SnapKit/Source/Debugging.swift b/Pods/SnapKit/Source/Debugging.swift deleted file mode 100644 index a78579a..0000000 --- a/Pods/SnapKit/Source/Debugging.swift +++ /dev/null @@ -1,169 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - -public extension LayoutConstraint { - - override var description: String { - var description = "<" - - description += descriptionForObject(self) - - if let firstItem = conditionalOptional(from: self.firstItem) { - description += " \(descriptionForObject(firstItem))" - } - - if self.firstAttribute != .notAnAttribute { - description += ".\(descriptionForAttribute(self.firstAttribute))" - } - - description += " \(descriptionForRelation(self.relation))" - - if let secondItem = self.secondItem { - description += " \(descriptionForObject(secondItem))" - } - - if self.secondAttribute != .notAnAttribute { - description += ".\(descriptionForAttribute(self.secondAttribute))" - } - - if self.multiplier != 1.0 { - description += " * \(self.multiplier)" - } - - if self.secondAttribute == .notAnAttribute { - description += " \(self.constant)" - } else { - if self.constant > 0.0 { - description += " + \(self.constant)" - } else if self.constant < 0.0 { - description += " - \(abs(self.constant))" - } - } - - if self.priority.rawValue != 1000.0 { - description += " ^\(self.priority)" - } - - description += ">" - - return description - } - -} - -private func descriptionForRelation(_ relation: LayoutRelation) -> String { - switch relation { - case .equal: return "==" - case .greaterThanOrEqual: return ">=" - case .lessThanOrEqual: return "<=" - #if swift(>=5.0) - @unknown default: return "unknown" - #endif - } -} - -private func descriptionForAttribute(_ attribute: LayoutAttribute) -> String { - #if os(iOS) || os(tvOS) - switch attribute { - case .notAnAttribute: return "notAnAttribute" - case .top: return "top" - case .left: return "left" - case .bottom: return "bottom" - case .right: return "right" - case .leading: return "leading" - case .trailing: return "trailing" - case .width: return "width" - case .height: return "height" - case .centerX: return "centerX" - case .centerY: return "centerY" - case .lastBaseline: return "lastBaseline" - case .firstBaseline: return "firstBaseline" - case .topMargin: return "topMargin" - case .leftMargin: return "leftMargin" - case .bottomMargin: return "bottomMargin" - case .rightMargin: return "rightMargin" - case .leadingMargin: return "leadingMargin" - case .trailingMargin: return "trailingMargin" - case .centerXWithinMargins: return "centerXWithinMargins" - case .centerYWithinMargins: return "centerYWithinMargins" - #if swift(>=5.0) - @unknown default: return "unknown" - #endif - } - #else - switch attribute { - case .notAnAttribute: return "notAnAttribute" - case .top: return "top" - case .left: return "left" - case .bottom: return "bottom" - case .right: return "right" - case .leading: return "leading" - case .trailing: return "trailing" - case .width: return "width" - case .height: return "height" - case .centerX: return "centerX" - case .centerY: return "centerY" - case .lastBaseline: return "lastBaseline" - case .firstBaseline: return "firstBaseline" - #if swift(>=5.0) - @unknown default: return "unknown" - #endif - } - #endif -} - -private func conditionalOptional<T>(from object: Optional<T>) -> Optional<T> { - return object -} - -private func conditionalOptional<T>(from object: T) -> Optional<T> { - return Optional.some(object) -} - -private func descriptionForObject(_ object: AnyObject) -> String { - let pointerDescription = String(format: "%p", UInt(bitPattern: ObjectIdentifier(object))) - var desc = "" - - desc += type(of: object).description() - - if let object = object as? ConstraintView { - desc += ":\(object.snp.label() ?? pointerDescription)" - } else if let object = object as? LayoutConstraint { - desc += ":\(object.label ?? pointerDescription)" - } else { - desc += ":\(pointerDescription)" - } - - if let object = object as? LayoutConstraint, let file = object.constraint?.sourceLocation.0, let line = object.constraint?.sourceLocation.1 { - desc += "@\((file as NSString).lastPathComponent)#\(line)" - } - - desc += "" - return desc -} diff --git a/Pods/SnapKit/Source/LayoutConstraint.swift b/Pods/SnapKit/Source/LayoutConstraint.swift deleted file mode 100644 index 5425ea8..0000000 --- a/Pods/SnapKit/Source/LayoutConstraint.swift +++ /dev/null @@ -1,61 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public class LayoutConstraint : NSLayoutConstraint { - - public var label: String? { - get { - return self.identifier - } - set { - self.identifier = newValue - } - } - - internal weak var constraint: Constraint? = nil - -} - -internal func ==(lhs: LayoutConstraint, rhs: LayoutConstraint) -> Bool { - // If firstItem or secondItem on either constraint has a dangling pointer - // this comparison can cause a crash. The solution for this is to ensure - // your layout code hold strong references to things like Views, LayoutGuides - // and LayoutAnchors as SnapKit will not keep strong references to any of these. - guard lhs.firstAttribute == rhs.firstAttribute && - lhs.secondAttribute == rhs.secondAttribute && - lhs.relation == rhs.relation && - lhs.priority == rhs.priority && - lhs.multiplier == rhs.multiplier && - lhs.secondItem === rhs.secondItem && - lhs.firstItem === rhs.firstItem else { - return false - } - return true -} diff --git a/Pods/SnapKit/Source/LayoutConstraintItem.swift b/Pods/SnapKit/Source/LayoutConstraintItem.swift deleted file mode 100644 index a59de6b..0000000 --- a/Pods/SnapKit/Source/LayoutConstraintItem.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#else - import AppKit -#endif - - -public protocol LayoutConstraintItem: class { -} - -@available(iOS 9.0, OSX 10.11, *) -extension ConstraintLayoutGuide : LayoutConstraintItem { -} - -extension ConstraintView : LayoutConstraintItem { -} - - -extension LayoutConstraintItem { - - internal func prepare() { - if let view = self as? ConstraintView { - view.translatesAutoresizingMaskIntoConstraints = false - } - } - - internal var superview: ConstraintView? { - if let view = self as? ConstraintView { - return view.superview - } - - if #available(iOS 9.0, OSX 10.11, *), let guide = self as? ConstraintLayoutGuide { - return guide.owningView - } - - return nil - } - internal var constraints: [Constraint] { - return self.constraintsSet.allObjects as! [Constraint] - } - - internal func add(constraints: [Constraint]) { - let constraintsSet = self.constraintsSet - for constraint in constraints { - constraintsSet.add(constraint) - } - } - - internal func remove(constraints: [Constraint]) { - let constraintsSet = self.constraintsSet - for constraint in constraints { - constraintsSet.remove(constraint) - } - } - - private var constraintsSet: NSMutableSet { - let constraintsSet: NSMutableSet - - if let existing = objc_getAssociatedObject(self, &constraintsKey) as? NSMutableSet { - constraintsSet = existing - } else { - constraintsSet = NSMutableSet() - objc_setAssociatedObject(self, &constraintsKey, constraintsSet, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - return constraintsSet - - } - -} -private var constraintsKey: UInt8 = 0 diff --git a/Pods/SnapKit/Source/Typealiases.swift b/Pods/SnapKit/Source/Typealiases.swift deleted file mode 100644 index ded96cc..0000000 --- a/Pods/SnapKit/Source/Typealiases.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation - -#if os(iOS) || os(tvOS) - import UIKit -#if swift(>=4.2) - typealias LayoutRelation = NSLayoutConstraint.Relation - typealias LayoutAttribute = NSLayoutConstraint.Attribute -#else - typealias LayoutRelation = NSLayoutRelation - typealias LayoutAttribute = NSLayoutAttribute -#endif - typealias LayoutPriority = UILayoutPriority -#else - import AppKit - typealias LayoutRelation = NSLayoutConstraint.Relation - typealias LayoutAttribute = NSLayoutConstraint.Attribute - typealias LayoutPriority = NSLayoutConstraint.Priority -#endif - diff --git a/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift b/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift deleted file mode 100644 index 8e7644c..0000000 --- a/Pods/SnapKit/Source/UILayoutSupport+Extensions.swift +++ /dev/null @@ -1,36 +0,0 @@ -// -// SnapKit -// -// Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -#if os(iOS) || os(tvOS) - import UIKit -#endif - - -@available(iOS 8.0, *) -public extension ConstraintLayoutSupport { - - var snp: ConstraintLayoutSupportDSL { - return ConstraintLayoutSupportDSL(support: self) - } - -} diff --git a/Pods/SwiftLint/LICENSE b/Pods/SwiftLint/LICENSE deleted file mode 100644 index 0420376..0000000 --- a/Pods/SwiftLint/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2020 Realm Inc. - -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/Pods/SwiftLint/swiftlint b/Pods/SwiftLint/swiftlint deleted file mode 100755 index bdd1c34..0000000 Binary files a/Pods/SwiftLint/swiftlint and /dev/null differ diff --git a/Pods/SwiftyJSON/LICENSE b/Pods/SwiftyJSON/LICENSE deleted file mode 100644 index 68e3fd7..0000000 --- a/Pods/SwiftyJSON/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Ruoyu Fu - -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/Pods/SwiftyJSON/README.md b/Pods/SwiftyJSON/README.md deleted file mode 100644 index 7a10e29..0000000 --- a/Pods/SwiftyJSON/README.md +++ /dev/null @@ -1,562 +0,0 @@ -# SwiftyJSON - -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) ![CocoaPods](https://img.shields.io/cocoapods/v/SwiftyJSON.svg) ![Platform](https://img.shields.io/badge/platforms-iOS%208.0%20%7C%20macOS%2010.10%20%7C%20tvOS%209.0%20%7C%20watchOS%203.0-F28D00.svg) [![Reviewed by Hound](https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg)](https://houndci.com) - -SwiftyJSON makes it easy to deal with JSON data in Swift. - -Platform | Build Status ----------| --------------| -*OS | [![Travis CI](https://travis-ci.org/SwiftyJSON/SwiftyJSON.svg?branch=master)](https://travis-ci.org/SwiftyJSON/SwiftyJSON) | -[Linux](https://github.com/IBM-Swift/SwiftyJSON) | [![Build Status](https://travis-ci.org/IBM-Swift/SwiftyJSON.svg?branch=master)](https://travis-ci.org/IBM-Swift/SwiftyJSON) | - - -1. [Why is the typical JSON handling in Swift NOT good](#why-is-the-typical-json-handling-in-swift-not-good) -2. [Requirements](#requirements) -3. [Integration](#integration) -4. [Usage](#usage) - - [Initialization](#initialization) - - [Subscript](#subscript) - - [Loop](#loop) - - [Error](#error) - - [Optional getter](#optional-getter) - - [Non-optional getter](#non-optional-getter) - - [Setter](#setter) - - [Raw object](#raw-object) - - [Literal convertibles](#literal-convertibles) - - [Merging](#merging) -5. [Work with Alamofire](#work-with-alamofire) -6. [Work with Moya](#work-with-moya) -7. [SwiftyJSON Model Generator](#swiftyjson-model-generator) - -> [中文介绍](http://tangplin.github.io/swiftyjson/) - - -## Why is the typical JSON handling in Swift NOT good? - -Swift is very strict about types. But although explicit typing is good for saving us from mistakes, it becomes painful when dealing with JSON and other areas that are, by nature, implicit about types. - -Take the Twitter API for example. Say we want to retrieve a user's "name" value of some tweet in Swift (according to [Twitter's API](https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline)). - -The code would look like this: - -```swift -if let statusesArray = try? JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]], - let user = statusesArray[0]["user"] as? [String: Any], - let username = user["name"] as? String { - // Finally we got the username -} -``` - -It's not good. - -Even if we use optional chaining, it would be messy: - -```swift -if let JSONObject = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as? [[String: Any]], - let username = (JSONObject[0]["user"] as? [String: Any])?["name"] as? String { - // There's our username -} -``` - -An unreadable mess--for something that should really be simple! - -With SwiftyJSON all you have to do is: - -```swift -let json = JSON(data: dataFromNetworking) -if let userName = json[0]["user"]["name"].string { - //Now you got your value -} -``` - -And don't worry about the Optional Wrapping thing. It's done for you automatically. - -```swift -let json = JSON(data: dataFromNetworking) -let result = json[999999]["wrong_key"]["wrong_name"] -if let userName = result.string { - //Calm down, take it easy, the ".string" property still produces the correct Optional String type with safety -} else { - //Print the error - print(result.error) -} -``` - -## Requirements - -- iOS 8.0+ | macOS 10.10+ | tvOS 9.0+ | watchOS 2.0+ -- Xcode 8 - -## Integration - -#### CocoaPods (iOS 8+, OS X 10.9+) - -You can use [CocoaPods](http://cocoapods.org/) to install `SwiftyJSON` by adding it to your `Podfile`: - -```ruby -platform :ios, '8.0' -use_frameworks! - -target 'MyApp' do - pod 'SwiftyJSON', '~> 4.0' -end -``` - -#### Carthage (iOS 8+, OS X 10.9+) - -You can use [Carthage](https://github.com/Carthage/Carthage) to install `SwiftyJSON` by adding it to your `Cartfile`: - -``` -github "SwiftyJSON/SwiftyJSON" ~> 4.0 -``` - -If you use Carthage to build your dependencies, make sure you have added `SwiftyJSON.framework` to the "Linked Frameworks and Libraries" section of your target, and have included them in your Carthage framework copying build phase. - -#### Swift Package Manager - -You can use [The Swift Package Manager](https://swift.org/package-manager) to install `SwiftyJSON` by adding the proper description to your `Package.swift` file: - -```swift -// swift-tools-version:4.0 -import PackageDescription - -let package = Package( - name: "YOUR_PROJECT_NAME", - dependencies: [ - .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "4.0.0"), - ] -) -``` -Then run `swift build` whenever you get prepared. - -#### Manually (iOS 7+, OS X 10.9+) - -To use this library in your project manually you may: - -1. for Projects, just drag SwiftyJSON.swift to the project tree -2. for Workspaces, include the whole SwiftyJSON.xcodeproj - -## Usage - -#### Initialization - -```swift -import SwiftyJSON -``` - -```swift -let json = JSON(data: dataFromNetworking) -``` -Or - -```swift -let json = JSON(jsonObject) -``` -Or - -```swift -if let dataFromString = jsonString.data(using: .utf8, allowLossyConversion: false) { - let json = JSON(data: dataFromString) -} -``` - -#### Subscript - -```swift -// Getting a double from a JSON Array -let name = json[0].double -``` - -```swift -// Getting an array of string from a JSON Array -let arrayNames = json["users"].arrayValue.map {$0["name"].stringValue} -``` - -```swift -// Getting a string from a JSON Dictionary -let name = json["name"].stringValue -``` - -```swift -// Getting a string using a path to the element -let path: [JSONSubscriptType] = [1,"list",2,"name"] -let name = json[path].string -// Just the same -let name = json[1]["list"][2]["name"].string -// Alternatively -let name = json[1,"list",2,"name"].string -``` - -```swift -// With a hard way -let name = json[].string -``` - -```swift -// With a custom way -let keys:[JSONSubscriptType] = [1,"list",2,"name"] -let name = json[keys].string -``` - -#### Loop - -```swift -// If json is .Dictionary -for (key,subJson):(String, JSON) in json { - // Do something you want -} -``` - -*The first element is always a String, even if the JSON is an Array* - -```swift -// If json is .Array -// The `index` is 0..<json.count's string value -for (index,subJson):(String, JSON) in json { - // Do something you want -} -``` - -#### Error - -##### SwiftyJSON 4.x - -SwiftyJSON 4.x introduces an enum type called `SwiftyJSONError`, which includes `unsupportedType`, `indexOutOfBounds`, `elementTooDeep`, `wrongType`, `notExist` and `invalidJSON`, at the same time, `ErrorDomain` are being replaced by `SwiftyJSONError.errorDomain`. -Note: Those old error types are deprecated in SwiftyJSON 4.x and will be removed in the future release. - -##### SwiftyJSON 3.x - -Use a subscript to get/set a value in an Array or Dictionary - -If the JSON is: -* an array, the app may crash with "index out-of-bounds." -* a dictionary, it will be assigned to `nil` without a reason. -* not an array or a dictionary, the app may crash with an "unrecognised selector" exception. - -This will never happen in SwiftyJSON. - -```swift -let json = JSON(["name", "age"]) -if let name = json[999].string { - // Do something you want -} else { - print(json[999].error!) // "Array[999] is out of bounds" -} -``` - -```swift -let json = JSON(["name":"Jack", "age": 25]) -if let name = json["address"].string { - // Do something you want -} else { - print(json["address"].error!) // "Dictionary["address"] does not exist" -} -``` - -```swift -let json = JSON(12345) -if let age = json[0].string { - // Do something you want -} else { - print(json[0]) // "Array[0] failure, It is not an array" - print(json[0].error!) // "Array[0] failure, It is not an array" -} - -if let name = json["name"].string { - // Do something you want -} else { - print(json["name"]) // "Dictionary[\"name"] failure, It is not an dictionary" - print(json["name"].error!) // "Dictionary[\"name"] failure, It is not an dictionary" -} -``` - -#### Optional getter - -```swift -// NSNumber -if let id = json["user"]["favourites_count"].number { - // Do something you want -} else { - // Print the error - print(json["user"]["favourites_count"].error!) -} -``` - -```swift -// String -if let id = json["user"]["name"].string { - // Do something you want -} else { - // Print the error - print(json["user"]["name"].error!) -} -``` - -```swift -// Bool -if let id = json["user"]["is_translator"].bool { - // Do something you want -} else { - // Print the error - print(json["user"]["is_translator"].error!) -} -``` - -```swift -// Int -if let id = json["user"]["id"].int { - // Do something you want -} else { - // Print the error - print(json["user"]["id"].error!) -} -... -``` - -#### Non-optional getter - -Non-optional getter is named `xxxValue` - -```swift -// If not a Number or nil, return 0 -let id: Int = json["id"].intValue -``` - -```swift -// If not a String or nil, return "" -let name: String = json["name"].stringValue -``` - -```swift -// If not an Array or nil, return [] -let list: Array<JSON> = json["list"].arrayValue -``` - -```swift -// If not a Dictionary or nil, return [:] -let user: Dictionary<String, JSON> = json["user"].dictionaryValue -``` - -#### Setter - -```swift -json["name"] = JSON("new-name") -json[0] = JSON(1) -``` - -```swift -json["id"].int = 1234567890 -json["coordinate"].double = 8766.766 -json["name"].string = "Jack" -json.arrayObject = [1,2,3,4] -json.dictionaryObject = ["name":"Jack", "age":25] -``` - -#### Raw object - -```swift -let rawObject: Any = json.object -``` - -```swift -let rawValue: Any = json.rawValue -``` - -```swift -//convert the JSON to raw NSData -do { - let rawData = try json.rawData() - //Do something you want -} catch { - print("Error \(error)") -} -``` - -```swift -//convert the JSON to a raw String -if let rawString = json.rawString() { - //Do something you want -} else { - print("json.rawString is nil") -} -``` - -#### Existence - -```swift -// shows you whether value specified in JSON or not -if json["name"].exists() -``` - -#### Literal convertibles - -For more info about literal convertibles: [Swift Literal Convertibles](http://nshipster.com/swift-literal-convertible/) - -```swift -// StringLiteralConvertible -let json: JSON = "I'm a json" -``` - -```swift -/ /IntegerLiteralConvertible -let json: JSON = 12345 -``` - -```swift -// BooleanLiteralConvertible -let json: JSON = true -``` - -```swift -// FloatLiteralConvertible -let json: JSON = 2.8765 -``` - -```swift -// DictionaryLiteralConvertible -let json: JSON = ["I":"am", "a":"json"] -``` - -```swift -// ArrayLiteralConvertible -let json: JSON = ["I", "am", "a", "json"] -``` - -```swift -// With subscript in array -var json: JSON = [1,2,3] -json[0] = 100 -json[1] = 200 -json[2] = 300 -json[999] = 300 // Don't worry, nothing will happen -``` - -```swift -// With subscript in dictionary -var json: JSON = ["name": "Jack", "age": 25] -json["name"] = "Mike" -json["age"] = "25" // It's OK to set String -json["address"] = "L.A." // Add the "address": "L.A." in json -``` - -```swift -// Array & Dictionary -var json: JSON = ["name": "Jack", "age": 25, "list": ["a", "b", "c", ["what": "this"]]] -json["list"][3]["what"] = "that" -json["list",3,"what"] = "that" -let path: [JSONSubscriptType] = ["list",3,"what"] -json[path] = "that" -``` - -```swift -// With other JSON objects -let user: JSON = ["username" : "Steve", "password": "supersecurepassword"] -let auth: JSON = [ - "user": user.object, // use user.object instead of just user - "apikey": "supersecretapitoken" -] -``` - -#### Merging - -It is possible to merge one JSON into another JSON. Merging a JSON into another JSON adds all non existing values to the original JSON which are only present in the `other` JSON. - -If both JSONs contain a value for the same key, _mostly_ this value gets overwritten in the original JSON, but there are two cases where it provides some special treatment: - -- In case of both values being a `JSON.Type.array` the values form the array found in the `other` JSON getting appended to the original JSON's array value. -- In case of both values being a `JSON.Type.dictionary` both JSON-values are getting merged the same way the encapsulating JSON is merged. - -In case, where two fields in a JSON have a different types, the value will get always overwritten. - -There are two different fashions for merging: `merge` modifies the original JSON, whereas `merged` works non-destructively on a copy. - -```swift -let original: JSON = [ - "first_name": "John", - "age": 20, - "skills": ["Coding", "Reading"], - "address": [ - "street": "Front St", - "zip": "12345", - ] -] - -let update: JSON = [ - "last_name": "Doe", - "age": 21, - "skills": ["Writing"], - "address": [ - "zip": "12342", - "city": "New York City" - ] -] - -let updated = original.merge(with: update) -// [ -// "first_name": "John", -// "last_name": "Doe", -// "age": 21, -// "skills": ["Coding", "Reading", "Writing"], -// "address": [ -// "street": "Front St", -// "zip": "12342", -// "city": "New York City" -// ] -// ] -``` - -## String representation -There are two options available: -- use the default Swift one -- use a custom one that will handle optionals well and represent `nil` as `"null"`: -```swift -let dict = ["1":2, "2":"two", "3": nil] as [String: Any?] -let json = JSON(dict) -let representation = json.rawString(options: [.castNilToNSNull: true]) -// representation is "{\"1\":2,\"2\":\"two\",\"3\":null}", which represents {"1":2,"2":"two","3":null} -``` - -## Work with [Alamofire](https://github.com/Alamofire/Alamofire) - -SwiftyJSON nicely wraps the result of the Alamofire JSON response handler: - -```swift -Alamofire.request(url, method: .get).validate().responseJSON { response in - switch response.result { - case .success(let value): - let json = JSON(value) - print("JSON: \(json)") - case .failure(let error): - print(error) - } -} -``` - -We also provide an extension of Alamofire for serializing NSData to SwiftyJSON's JSON. - -See: [Alamofire-SwiftyJSON](https://github.com/SwiftyJSON/Alamofire-SwiftyJSON) - - -## Work with [Moya](https://github.com/Moya/Moya) - -SwiftyJSON parse data to JSON: - -```swift -let provider = MoyaProvider<Backend>() -provider.request(.showProducts) { result in - switch result { - case let .success(moyaResponse): - let data = moyaResponse.data - let json = JSON(data: data) // convert network data to json - print(json) - case let .failure(error): - print("error: \(error)") - } -} - -``` - -## SwiftyJSON Model Generator -Tools to generate SwiftyJSON Models -* [JSON Cafe](http://www.jsoncafe.com/) -* [JSON Export](https://github.com/Ahmed-Ali/JSONExport) diff --git a/Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift b/Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift deleted file mode 100644 index f7a3f08..0000000 --- a/Pods/SwiftyJSON/Source/SwiftyJSON/SwiftyJSON.swift +++ /dev/null @@ -1,1401 +0,0 @@ -// SwiftyJSON.swift -// -// Copyright (c) 2014 - 2017 Ruoyu Fu, Pinglin Tang -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. - -import Foundation - -// MARK: - Error -// swiftlint:disable line_length -public enum SwiftyJSONError: Int, Swift.Error { - case unsupportedType = 999 - case indexOutOfBounds = 900 - case elementTooDeep = 902 - case wrongType = 901 - case notExist = 500 - case invalidJSON = 490 -} - -extension SwiftyJSONError: CustomNSError { - - /// return the error domain of SwiftyJSONError - public static var errorDomain: String { return "com.swiftyjson.SwiftyJSON" } - - /// return the error code of SwiftyJSONError - public var errorCode: Int { return self.rawValue } - - /// return the userInfo of SwiftyJSONError - public var errorUserInfo: [String: Any] { - switch self { - case .unsupportedType: - return [NSLocalizedDescriptionKey: "It is an unsupported type."] - case .indexOutOfBounds: - return [NSLocalizedDescriptionKey: "Array Index is out of bounds."] - case .wrongType: - return [NSLocalizedDescriptionKey: "Couldn't merge, because the JSONs differ in type on top level."] - case .notExist: - return [NSLocalizedDescriptionKey: "Dictionary key does not exist."] - case .invalidJSON: - return [NSLocalizedDescriptionKey: "JSON is invalid."] - case .elementTooDeep: - return [NSLocalizedDescriptionKey: "Element too deep. Increase maxObjectDepth and make sure there is no reference loop."] - } - } -} - -// MARK: - JSON Type - -/** -JSON's type definitions. - -See http://www.json.org -*/ -public enum Type: Int { - case number - case string - case bool - case array - case dictionary - case null - case unknown -} - -// MARK: - JSON Base - -public struct JSON { - - /** - Creates a JSON using the data. - - - parameter data: The NSData used to convert to json.Top level object in data is an NSArray or NSDictionary - - parameter opt: The JSON serialization reading options. `[]` by default. - - - returns: The created JSON - */ - public init(data: Data, options opt: JSONSerialization.ReadingOptions = []) throws { - let object: Any = try JSONSerialization.jsonObject(with: data, options: opt) - self.init(jsonObject: object) - } - - /** - Creates a JSON object - - note: this does not parse a `String` into JSON, instead use `init(parseJSON: String)` - - - parameter object: the object - - - returns: the created JSON object - */ - public init(_ object: Any) { - switch object { - case let object as Data: - do { - try self.init(data: object) - } catch { - self.init(jsonObject: NSNull()) - } - default: - self.init(jsonObject: object) - } - } - - /** - Parses the JSON string into a JSON object - - - parameter json: the JSON string - - - returns: the created JSON object - */ - public init(parseJSON jsonString: String) { - if let data = jsonString.data(using: .utf8) { - self.init(data) - } else { - self.init(NSNull()) - } - } - - /** - Creates a JSON using the object. - - - parameter jsonObject: The object must have the following properties: All objects are NSString/String, NSNumber/Int/Float/Double/Bool, NSArray/Array, NSDictionary/Dictionary, or NSNull; All dictionary keys are NSStrings/String; NSNumbers are not NaN or infinity. - - - returns: The created JSON - */ - fileprivate init(jsonObject: Any) { - object = jsonObject - } - - /** - Merges another JSON into this JSON, whereas primitive values which are not present in this JSON are getting added, - present values getting overwritten, array values getting appended and nested JSONs getting merged the same way. - - - parameter other: The JSON which gets merged into this JSON - - - throws `ErrorWrongType` if the other JSONs differs in type on the top level. - */ - public mutating func merge(with other: JSON) throws { - try self.merge(with: other, typecheck: true) - } - - /** - Merges another JSON into this JSON and returns a new JSON, whereas primitive values which are not present in this JSON are getting added, - present values getting overwritten, array values getting appended and nested JSONS getting merged the same way. - - - parameter other: The JSON which gets merged into this JSON - - - throws `ErrorWrongType` if the other JSONs differs in type on the top level. - - - returns: New merged JSON - */ - public func merged(with other: JSON) throws -> JSON { - var merged = self - try merged.merge(with: other, typecheck: true) - return merged - } - - /** - Private woker function which does the actual merging - Typecheck is set to true for the first recursion level to prevent total override of the source JSON - */ - fileprivate mutating func merge(with other: JSON, typecheck: Bool) throws { - if type == other.type { - switch type { - case .dictionary: - for (key, _) in other { - try self[key].merge(with: other[key], typecheck: false) - } - case .array: - self = JSON(arrayValue + other.arrayValue) - default: - self = other - } - } else { - if typecheck { - throw SwiftyJSONError.wrongType - } else { - self = other - } - } - } - - /// Private object - fileprivate var rawArray: [Any] = [] - fileprivate var rawDictionary: [String: Any] = [:] - fileprivate var rawString: String = "" - fileprivate var rawNumber: NSNumber = 0 - fileprivate var rawNull: NSNull = NSNull() - fileprivate var rawBool: Bool = false - - /// JSON type, fileprivate setter - public fileprivate(set) var type: Type = .null - - /// Error in JSON, fileprivate setter - public fileprivate(set) var error: SwiftyJSONError? - - /// Object in JSON - public var object: Any { - get { - switch type { - case .array: return rawArray - case .dictionary: return rawDictionary - case .string: return rawString - case .number: return rawNumber - case .bool: return rawBool - default: return rawNull - } - } - set { - error = nil - switch unwrap(newValue) { - case let number as NSNumber: - if number.isBool { - type = .bool - rawBool = number.boolValue - } else { - type = .number - rawNumber = number - } - case let string as String: - type = .string - rawString = string - case _ as NSNull: - type = .null - case nil: - type = .null - case let array as [Any]: - type = .array - rawArray = array - case let dictionary as [String: Any]: - type = .dictionary - rawDictionary = dictionary - default: - type = .unknown - error = SwiftyJSONError.unsupportedType - } - } - } - - /// The static null JSON - @available(*, unavailable, renamed:"null") - public static var nullJSON: JSON { return null } - public static var null: JSON { return JSON(NSNull()) } -} - -/// Private method to unwarp an object recursively -private func unwrap(_ object: Any) -> Any { - switch object { - case let json as JSON: - return unwrap(json.object) - case let array as [Any]: - return array.map(unwrap) - case let dictionary as [String: Any]: - var d = dictionary - dictionary.forEach { pair in - d[pair.key] = unwrap(pair.value) - } - return d - default: - return object - } -} - -public enum Index<T: Any>: Comparable { - case array(Int) - case dictionary(DictionaryIndex<String, T>) - case null - - static public func == (lhs: Index, rhs: Index) -> Bool { - switch (lhs, rhs) { - case (.array(let left), .array(let right)): return left == right - case (.dictionary(let left), .dictionary(let right)): return left == right - case (.null, .null): return true - default: return false - } - } - - static public func < (lhs: Index, rhs: Index) -> Bool { - switch (lhs, rhs) { - case (.array(let left), .array(let right)): return left < right - case (.dictionary(let left), .dictionary(let right)): return left < right - default: return false - } - } -} - -public typealias JSONIndex = Index<JSON> -public typealias JSONRawIndex = Index<Any> - -extension JSON: Swift.Collection { - - public typealias Index = JSONRawIndex - - public var startIndex: Index { - switch type { - case .array: return .array(rawArray.startIndex) - case .dictionary: return .dictionary(rawDictionary.startIndex) - default: return .null - } - } - - public var endIndex: Index { - switch type { - case .array: return .array(rawArray.endIndex) - case .dictionary: return .dictionary(rawDictionary.endIndex) - default: return .null - } - } - - public func index(after i: Index) -> Index { - switch i { - case .array(let idx): return .array(rawArray.index(after: idx)) - case .dictionary(let idx): return .dictionary(rawDictionary.index(after: idx)) - default: return .null - } - } - - public subscript (position: Index) -> (String, JSON) { - switch position { - case .array(let idx): return (String(idx), JSON(rawArray[idx])) - case .dictionary(let idx): return (rawDictionary[idx].key, JSON(rawDictionary[idx].value)) - default: return ("", JSON.null) - } - } -} - -// MARK: - Subscript - -/** - * To mark both String and Int can be used in subscript. - */ -public enum JSONKey { - case index(Int) - case key(String) -} - -public protocol JSONSubscriptType { - var jsonKey: JSONKey { get } -} - -extension Int: JSONSubscriptType { - public var jsonKey: JSONKey { - return JSONKey.index(self) - } -} - -extension String: JSONSubscriptType { - public var jsonKey: JSONKey { - return JSONKey.key(self) - } -} - -extension JSON { - - /// If `type` is `.array`, return json whose object is `array[index]`, otherwise return null json with error. - fileprivate subscript(index index: Int) -> JSON { - get { - if type != .array { - var r = JSON.null - r.error = self.error ?? SwiftyJSONError.wrongType - return r - } else if rawArray.indices.contains(index) { - return JSON(rawArray[index]) - } else { - var r = JSON.null - r.error = SwiftyJSONError.indexOutOfBounds - return r - } - } - set { - if type == .array && - rawArray.indices.contains(index) && - newValue.error == nil { - rawArray[index] = newValue.object - } - } - } - - /// If `type` is `.dictionary`, return json whose object is `dictionary[key]` , otherwise return null json with error. - fileprivate subscript(key key: String) -> JSON { - get { - var r = JSON.null - if type == .dictionary { - if let o = rawDictionary[key] { - r = JSON(o) - } else { - r.error = SwiftyJSONError.notExist - } - } else { - r.error = self.error ?? SwiftyJSONError.wrongType - } - return r - } - set { - if type == .dictionary && newValue.error == nil { - rawDictionary[key] = newValue.object - } - } - } - - /// If `sub` is `Int`, return `subscript(index:)`; If `sub` is `String`, return `subscript(key:)`. - fileprivate subscript(sub sub: JSONSubscriptType) -> JSON { - get { - switch sub.jsonKey { - case .index(let index): return self[index: index] - case .key(let key): return self[key: key] - } - } - set { - switch sub.jsonKey { - case .index(let index): self[index: index] = newValue - case .key(let key): self[key: key] = newValue - } - } - } - - /** - Find a json in the complex data structures by using array of Int and/or String as path. - - Example: - - ``` - let json = JSON[data] - let path = [9,"list","person","name"] - let name = json[path] - ``` - - The same as: let name = json[9]["list"]["person"]["name"] - - - parameter path: The target json's path. - - - returns: Return a json found by the path or a null json with error - */ - public subscript(path: [JSONSubscriptType]) -> JSON { - get { - return path.reduce(self) { $0[sub: $1] } - } - set { - switch path.count { - case 0: return - case 1: self[sub:path[0]].object = newValue.object - default: - var aPath = path - aPath.remove(at: 0) - var nextJSON = self[sub: path[0]] - nextJSON[aPath] = newValue - self[sub: path[0]] = nextJSON - } - } - } - - /** - Find a json in the complex data structures by using array of Int and/or String as path. - - - parameter path: The target json's path. Example: - - let name = json[9,"list","person","name"] - - The same as: let name = json[9]["list"]["person"]["name"] - - - returns: Return a json found by the path or a null json with error - */ - public subscript(path: JSONSubscriptType...) -> JSON { - get { - return self[path] - } - set { - self[path] = newValue - } - } -} - -// MARK: - LiteralConvertible - -extension JSON: Swift.ExpressibleByStringLiteral { - - public init(stringLiteral value: StringLiteralType) { - self.init(value) - } - - public init(extendedGraphemeClusterLiteral value: StringLiteralType) { - self.init(value) - } - - public init(unicodeScalarLiteral value: StringLiteralType) { - self.init(value) - } -} - -extension JSON: Swift.ExpressibleByIntegerLiteral { - - public init(integerLiteral value: IntegerLiteralType) { - self.init(value) - } -} - -extension JSON: Swift.ExpressibleByBooleanLiteral { - - public init(booleanLiteral value: BooleanLiteralType) { - self.init(value) - } -} - -extension JSON: Swift.ExpressibleByFloatLiteral { - - public init(floatLiteral value: FloatLiteralType) { - self.init(value) - } -} - -extension JSON: Swift.ExpressibleByDictionaryLiteral { - public init(dictionaryLiteral elements: (String, Any)...) { - let dictionary = elements.reduce(into: [String: Any](), { $0[$1.0] = $1.1}) - self.init(dictionary) - } -} - -extension JSON: Swift.ExpressibleByArrayLiteral { - - public init(arrayLiteral elements: Any...) { - self.init(elements) - } -} - -// MARK: - Raw - -extension JSON: Swift.RawRepresentable { - - public init?(rawValue: Any) { - if JSON(rawValue).type == .unknown { - return nil - } else { - self.init(rawValue) - } - } - - public var rawValue: Any { - return object - } - - public func rawData(options opt: JSONSerialization.WritingOptions = JSONSerialization.WritingOptions(rawValue: 0)) throws -> Data { - guard JSONSerialization.isValidJSONObject(object) else { - throw SwiftyJSONError.invalidJSON - } - - return try JSONSerialization.data(withJSONObject: object, options: opt) - } - - public func rawString(_ encoding: String.Encoding = .utf8, options opt: JSONSerialization.WritingOptions = .prettyPrinted) -> String? { - do { - return try _rawString(encoding, options: [.jsonSerialization: opt]) - } catch { - print("Could not serialize object to JSON because:", error.localizedDescription) - return nil - } - } - - public func rawString(_ options: [writingOptionsKeys: Any]) -> String? { - let encoding = options[.encoding] as? String.Encoding ?? String.Encoding.utf8 - let maxObjectDepth = options[.maxObjextDepth] as? Int ?? 10 - do { - return try _rawString(encoding, options: options, maxObjectDepth: maxObjectDepth) - } catch { - print("Could not serialize object to JSON because:", error.localizedDescription) - return nil - } - } - - fileprivate func _rawString(_ encoding: String.Encoding = .utf8, options: [writingOptionsKeys: Any], maxObjectDepth: Int = 10) throws -> String? { - guard maxObjectDepth > 0 else { throw SwiftyJSONError.invalidJSON } - switch type { - case .dictionary: - do { - if !(options[.castNilToNSNull] as? Bool ?? false) { - let jsonOption = options[.jsonSerialization] as? JSONSerialization.WritingOptions ?? JSONSerialization.WritingOptions.prettyPrinted - let data = try rawData(options: jsonOption) - return String(data: data, encoding: encoding) - } - - guard let dict = object as? [String: Any?] else { - return nil - } - let body = try dict.keys.map { key throws -> String in - guard let value = dict[key] else { - return "\"\(key)\": null" - } - guard let unwrappedValue = value else { - return "\"\(key)\": null" - } - - let nestedValue = JSON(unwrappedValue) - guard let nestedString = try nestedValue._rawString(encoding, options: options, maxObjectDepth: maxObjectDepth - 1) else { - throw SwiftyJSONError.elementTooDeep - } - if nestedValue.type == .string { - return "\"\(key)\": \"\(nestedString.replacingOccurrences(of: "\\", with: "\\\\").replacingOccurrences(of: "\"", with: "\\\""))\"" - } else { - return "\"\(key)\": \(nestedString)" - } - } - - return "{\(body.joined(separator: ","))}" - } catch _ { - return nil - } - case .array: - do { - if !(options[.castNilToNSNull] as? Bool ?? false) { - let jsonOption = options[.jsonSerialization] as? JSONSerialization.WritingOptions ?? JSONSerialization.WritingOptions.prettyPrinted - let data = try rawData(options: jsonOption) - return String(data: data, encoding: encoding) - } - - guard let array = object as? [Any?] else { - return nil - } - let body = try array.map { value throws -> String in - guard let unwrappedValue = value else { - return "null" - } - - let nestedValue = JSON(unwrappedValue) - guard let nestedString = try nestedValue._rawString(encoding, options: options, maxObjectDepth: maxObjectDepth - 1) else { - throw SwiftyJSONError.invalidJSON - } - if nestedValue.type == .string { - return "\"\(nestedString.replacingOccurrences(of: "\\", with: "\\\\").replacingOccurrences(of: "\"", with: "\\\""))\"" - } else { - return nestedString - } - } - - return "[\(body.joined(separator: ","))]" - } catch _ { - return nil - } - case .string: return rawString - case .number: return rawNumber.stringValue - case .bool: return rawBool.description - case .null: return "null" - default: return nil - } - } -} - -// MARK: - Printable, DebugPrintable - -extension JSON: Swift.CustomStringConvertible, Swift.CustomDebugStringConvertible { - - public var description: String { - return rawString(options: .prettyPrinted) ?? "unknown" - } - - public var debugDescription: String { - return description - } -} - -// MARK: - Array - -extension JSON { - - //Optional [JSON] - public var array: [JSON]? { - return type == .array ? rawArray.map { JSON($0) } : nil - } - - //Non-optional [JSON] - public var arrayValue: [JSON] { - return self.array ?? [] - } - - //Optional [Any] - public var arrayObject: [Any]? { - get { - switch type { - case .array: return rawArray - default: return nil - } - } - set { - self.object = newValue ?? NSNull() - } - } -} - -// MARK: - Dictionary - -extension JSON { - - //Optional [String : JSON] - public var dictionary: [String: JSON]? { - if type == .dictionary { - var d = [String: JSON](minimumCapacity: rawDictionary.count) - rawDictionary.forEach { pair in - d[pair.key] = JSON(pair.value) - } - return d - } else { - return nil - } - } - - //Non-optional [String : JSON] - public var dictionaryValue: [String: JSON] { - return dictionary ?? [:] - } - - //Optional [String : Any] - - public var dictionaryObject: [String: Any]? { - get { - switch type { - case .dictionary: return rawDictionary - default: return nil - } - } - set { - object = newValue ?? NSNull() - } - } -} - -// MARK: - Bool - -extension JSON { // : Swift.Bool - - //Optional bool - public var bool: Bool? { - get { - switch type { - case .bool: return rawBool - default: return nil - } - } - set { - object = newValue ?? NSNull() - } - } - - //Non-optional bool - public var boolValue: Bool { - get { - switch type { - case .bool: return rawBool - case .number: return rawNumber.boolValue - case .string: return ["true", "y", "t", "yes", "1"].contains { rawString.caseInsensitiveCompare($0) == .orderedSame } - default: return false - } - } - set { - object = newValue - } - } -} - -// MARK: - String - -extension JSON { - - //Optional string - public var string: String? { - get { - switch type { - case .string: return object as? String - default: return nil - } - } - set { - object = newValue ?? NSNull() - } - } - - //Non-optional string - public var stringValue: String { - get { - switch type { - case .string: return object as? String ?? "" - case .number: return rawNumber.stringValue - case .bool: return (object as? Bool).map { String($0) } ?? "" - default: return "" - } - } - set { - object = newValue - } - } -} - -// MARK: - Number - -extension JSON { - - //Optional number - public var number: NSNumber? { - get { - switch type { - case .number: return rawNumber - case .bool: return NSNumber(value: rawBool ? 1 : 0) - default: return nil - } - } - set { - object = newValue ?? NSNull() - } - } - - //Non-optional number - public var numberValue: NSNumber { - get { - switch type { - case .string: - let decimal = NSDecimalNumber(string: object as? String) - return decimal == .notANumber ? .zero : decimal - case .number: return object as? NSNumber ?? NSNumber(value: 0) - case .bool: return NSNumber(value: rawBool ? 1 : 0) - default: return NSNumber(value: 0.0) - } - } - set { - object = newValue - } - } -} - -// MARK: - Null - -extension JSON { - - public var null: NSNull? { - set { - object = NSNull() - } - get { - switch type { - case .null: return rawNull - default: return nil - } - } - } - public func exists() -> Bool { - if let errorValue = error, (400...1000).contains(errorValue.errorCode) { - return false - } - return true - } -} - -// MARK: - URL - -extension JSON { - - //Optional URL - public var url: URL? { - get { - switch type { - case .string: - // Check for existing percent escapes first to prevent double-escaping of % character - if rawString.range(of: "%[0-9A-Fa-f]{2}", options: .regularExpression, range: nil, locale: nil) != nil { - return Foundation.URL(string: rawString) - } else if let encodedString_ = rawString.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed) { - // We have to use `Foundation.URL` otherwise it conflicts with the variable name. - return Foundation.URL(string: encodedString_) - } else { - return nil - } - default: - return nil - } - } - set { - object = newValue?.absoluteString ?? NSNull() - } - } -} - -// MARK: - Int, Double, Float, Int8, Int16, Int32, Int64 - -extension JSON { - - public var double: Double? { - get { - return number?.doubleValue - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var doubleValue: Double { - get { - return numberValue.doubleValue - } - set { - object = NSNumber(value: newValue) - } - } - - public var float: Float? { - get { - return number?.floatValue - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var floatValue: Float { - get { - return numberValue.floatValue - } - set { - object = NSNumber(value: newValue) - } - } - - public var int: Int? { - get { - return number?.intValue - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var intValue: Int { - get { - return numberValue.intValue - } - set { - object = NSNumber(value: newValue) - } - } - - public var uInt: UInt? { - get { - return number?.uintValue - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var uIntValue: UInt { - get { - return numberValue.uintValue - } - set { - object = NSNumber(value: newValue) - } - } - - public var int8: Int8? { - get { - return number?.int8Value - } - set { - if let newValue = newValue { - object = NSNumber(value: Int(newValue)) - } else { - object = NSNull() - } - } - } - - public var int8Value: Int8 { - get { - return numberValue.int8Value - } - set { - object = NSNumber(value: Int(newValue)) - } - } - - public var uInt8: UInt8? { - get { - return number?.uint8Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var uInt8Value: UInt8 { - get { - return numberValue.uint8Value - } - set { - object = NSNumber(value: newValue) - } - } - - public var int16: Int16? { - get { - return number?.int16Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var int16Value: Int16 { - get { - return numberValue.int16Value - } - set { - object = NSNumber(value: newValue) - } - } - - public var uInt16: UInt16? { - get { - return number?.uint16Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var uInt16Value: UInt16 { - get { - return numberValue.uint16Value - } - set { - object = NSNumber(value: newValue) - } - } - - public var int32: Int32? { - get { - return number?.int32Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var int32Value: Int32 { - get { - return numberValue.int32Value - } - set { - object = NSNumber(value: newValue) - } - } - - public var uInt32: UInt32? { - get { - return number?.uint32Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var uInt32Value: UInt32 { - get { - return numberValue.uint32Value - } - set { - object = NSNumber(value: newValue) - } - } - - public var int64: Int64? { - get { - return number?.int64Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var int64Value: Int64 { - get { - return numberValue.int64Value - } - set { - object = NSNumber(value: newValue) - } - } - - public var uInt64: UInt64? { - get { - return number?.uint64Value - } - set { - if let newValue = newValue { - object = NSNumber(value: newValue) - } else { - object = NSNull() - } - } - } - - public var uInt64Value: UInt64 { - get { - return numberValue.uint64Value - } - set { - object = NSNumber(value: newValue) - } - } -} - -// MARK: - Comparable - -extension JSON: Swift.Comparable {} - -public func == (lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): return lhs.rawNumber == rhs.rawNumber - case (.string, .string): return lhs.rawString == rhs.rawString - case (.bool, .bool): return lhs.rawBool == rhs.rawBool - case (.array, .array): return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): return true - default: return false - } -} - -public func <= (lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): return lhs.rawNumber <= rhs.rawNumber - case (.string, .string): return lhs.rawString <= rhs.rawString - case (.bool, .bool): return lhs.rawBool == rhs.rawBool - case (.array, .array): return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): return true - default: return false - } -} - -public func >= (lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): return lhs.rawNumber >= rhs.rawNumber - case (.string, .string): return lhs.rawString >= rhs.rawString - case (.bool, .bool): return lhs.rawBool == rhs.rawBool - case (.array, .array): return lhs.rawArray as NSArray == rhs.rawArray as NSArray - case (.dictionary, .dictionary): return lhs.rawDictionary as NSDictionary == rhs.rawDictionary as NSDictionary - case (.null, .null): return true - default: return false - } -} - -public func > (lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): return lhs.rawNumber > rhs.rawNumber - case (.string, .string): return lhs.rawString > rhs.rawString - default: return false - } -} - -public func < (lhs: JSON, rhs: JSON) -> Bool { - - switch (lhs.type, rhs.type) { - case (.number, .number): return lhs.rawNumber < rhs.rawNumber - case (.string, .string): return lhs.rawString < rhs.rawString - default: return false - } -} - -private let trueNumber = NSNumber(value: true) -private let falseNumber = NSNumber(value: false) -private let trueObjCType = String(cString: trueNumber.objCType) -private let falseObjCType = String(cString: falseNumber.objCType) - -// MARK: - NSNumber: Comparable - -extension NSNumber { - fileprivate var isBool: Bool { - let objCType = String(cString: self.objCType) - if (self.compare(trueNumber) == .orderedSame && objCType == trueObjCType) || (self.compare(falseNumber) == .orderedSame && objCType == falseObjCType) { - return true - } else { - return false - } - } -} - -func == (lhs: NSNumber, rhs: NSNumber) -> Bool { - switch (lhs.isBool, rhs.isBool) { - case (false, true): return false - case (true, false): return false - default: return lhs.compare(rhs) == .orderedSame - } -} - -func != (lhs: NSNumber, rhs: NSNumber) -> Bool { - return !(lhs == rhs) -} - -func < (lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): return false - case (true, false): return false - default: return lhs.compare(rhs) == .orderedAscending - } -} - -func > (lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): return false - case (true, false): return false - default: return lhs.compare(rhs) == ComparisonResult.orderedDescending - } -} - -func <= (lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): return false - case (true, false): return false - default: return lhs.compare(rhs) != .orderedDescending - } -} - -func >= (lhs: NSNumber, rhs: NSNumber) -> Bool { - - switch (lhs.isBool, rhs.isBool) { - case (false, true): return false - case (true, false): return false - default: return lhs.compare(rhs) != .orderedAscending - } -} - -public enum writingOptionsKeys { - case jsonSerialization - case castNilToNSNull - case maxObjextDepth - case encoding -} - -// MARK: - JSON: Codable -extension JSON: Codable { - private static var codableTypes: [Codable.Type] { - return [ - Bool.self, - Int.self, - Int8.self, - Int16.self, - Int32.self, - Int64.self, - UInt.self, - UInt8.self, - UInt16.self, - UInt32.self, - UInt64.self, - Double.self, - String.self, - [JSON].self, - [String: JSON].self - ] - } - public init(from decoder: Decoder) throws { - var object: Any? - - if let container = try? decoder.singleValueContainer(), !container.decodeNil() { - for type in JSON.codableTypes { - if object != nil { - break - } - // try to decode value - switch type { - case let boolType as Bool.Type: - object = try? container.decode(boolType) - case let intType as Int.Type: - object = try? container.decode(intType) - case let int8Type as Int8.Type: - object = try? container.decode(int8Type) - case let int32Type as Int32.Type: - object = try? container.decode(int32Type) - case let int64Type as Int64.Type: - object = try? container.decode(int64Type) - case let uintType as UInt.Type: - object = try? container.decode(uintType) - case let uint8Type as UInt8.Type: - object = try? container.decode(uint8Type) - case let uint16Type as UInt16.Type: - object = try? container.decode(uint16Type) - case let uint32Type as UInt32.Type: - object = try? container.decode(uint32Type) - case let uint64Type as UInt64.Type: - object = try? container.decode(uint64Type) - case let doubleType as Double.Type: - object = try? container.decode(doubleType) - case let stringType as String.Type: - object = try? container.decode(stringType) - case let jsonValueArrayType as [JSON].Type: - object = try? container.decode(jsonValueArrayType) - case let jsonValueDictType as [String: JSON].Type: - object = try? container.decode(jsonValueDictType) - default: - break - } - } - } - self.init(object ?? NSNull()) - } - public func encode(to encoder: Encoder) throws { - var container = encoder.singleValueContainer() - if object is NSNull { - try container.encodeNil() - return - } - switch object { - case let intValue as Int: - try container.encode(intValue) - case let int8Value as Int8: - try container.encode(int8Value) - case let int32Value as Int32: - try container.encode(int32Value) - case let int64Value as Int64: - try container.encode(int64Value) - case let uintValue as UInt: - try container.encode(uintValue) - case let uint8Value as UInt8: - try container.encode(uint8Value) - case let uint16Value as UInt16: - try container.encode(uint16Value) - case let uint32Value as UInt32: - try container.encode(uint32Value) - case let uint64Value as UInt64: - try container.encode(uint64Value) - case let doubleValue as Double: - try container.encode(doubleValue) - case let boolValue as Bool: - try container.encode(boolValue) - case let stringValue as String: - try container.encode(stringValue) - case is [Any]: - let jsonValueArray = array ?? [] - try container.encode(jsonValueArray) - case is [String: Any]: - let jsonValueDictValue = dictionary ?? [:] - try container.encode(jsonValueDictValue) - default: - break - } - } -} diff --git a/Pods/SwiftyUserDefaults/LICENSE b/Pods/SwiftyUserDefaults/LICENSE deleted file mode 100644 index d5d418d..0000000 --- a/Pods/SwiftyUserDefaults/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz - -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/Pods/SwiftyUserDefaults/README.md b/Pods/SwiftyUserDefaults/README.md deleted file mode 100644 index 8683b96..0000000 --- a/Pods/SwiftyUserDefaults/README.md +++ /dev/null @@ -1,448 +0,0 @@ -# SwiftyUserDefaults - -![Platforms](https://img.shields.io/badge/platforms-ios%20%7C%20osx%20%7C%20watchos%20%7C%20tvos-lightgrey.svg) -[![CI Status](https://api.travis-ci.org/radex/SwiftyUserDefaults.svg?branch=master)](https://travis-ci.org/radex/SwiftyUserDefaults) -[![CocoaPods compatible](https://img.shields.io/badge/CocoaPods-compatible-4BC51D.svg?style=flat)](#cocoapods) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](#carthage) -[![SPM compatible](https://img.shields.io/badge/SPM-compatible-4BC51D.svg?style=flat)](#swift-package-manager) -![Swift version](https://img.shields.io/badge/swift-4.1-orange.svg) -![Swift version](https://img.shields.io/badge/swift-4.2-orange.svg) -![Swift version](https://img.shields.io/badge/swift-5.0-orange.svg) - -#### Modern Swift API for `NSUserDefaults` -###### SwiftyUserDefaults makes user defaults enjoyable to use by combining expressive Swifty API with the benefits of static typing. Define your keys in one place, use value types easily, and get extra safety and convenient compile-time checks for free. - -Read [documentation for stable version 3.0.1](https://github.com/radex/SwiftyUserDefaults/blob/14b629b035bf6355b46ece22c3851068a488a895/README.md)<br /> -Read [migration guide from version 3.x to 4.x](MigrationGuides/migration_3_to_4.md)<br /> -Read [migration guide from version 4.0.0-alpha.1 to 4.0.0-alpha.3](MigrationGuides/migration_4_alpha_1_to_4_alpha_2.md) - -# Version 4 - -<p align="center"> - <a href="#features">Features</a> • - <a href="#usage">Usage</a> • - <a href="#codable">Codable</a> • - <a href="#nscoding">NSCoding</a> • - <a href="#rawrepresentable">RawRepresentable</a> • - <a href="#extending-existing-types">Extending existing types</a> • - <a href="#custom-types">Custom types</a> • - <a href="#kvo">KVO</a> • - <a href="#launch-arguments">Launch arguments</a> • - <a href="#utils">Utils</a> • - <a href="#installation">Installation</a> -</p> - -## Features - -**There's only one step to start using SwiftyUserDefaults:** - -Define your keys! - -```swift -extension DefaultsKeys { - static let username = DefaultsKey<String?>("username") - static let launchCount = DefaultsKey<Int>("launchCount", defaultValue: 0) -} -``` - -And just use it ;-) - -```swift -// Get and set user defaults easily -let username = Defaults[.username] -Defaults[.hotkeyEnabled] = true - -// Modify value types in place -Defaults[.launchCount] += 1 -Defaults[.volume] -= 0.1 -Defaults[.strings] += "… can easily be extended!" - -// Use and modify typed arrays -Defaults[.libraries].append("SwiftyUserDefaults") -Defaults[.libraries][0] += " 2.0" - -// Easily work with custom serialized types -Defaults[.color] = NSColor.white -Defaults[.color]?.whiteComponent // => 1.0 -``` - -The convenient dot syntax is only available if you define your keys by extending magic `DefaultsKeys` class. You can also just pass the `DefaultsKey` value in square brackets. - -## Usage - -### Define your keys - -To get the most out of SwiftyUserDefaults, define your user defaults keys ahead of time: - -```swift -let colorKey = DefaultsKey<String>("color", defaultValue: "") -``` - -Just create a `DefaultsKey` object, put the type of the value you want to store in angle brackets, the key name in parentheses, and you're good to go. If you want to have a non-optional value, just provide a `defaultValue` in the key (look at the example above). - -You can now use the `Defaults` shortcut to access those values: - -```swift -Defaults[colorKey] = "red" -Defaults[colorKey] // => "red", typed as String -``` - -The compiler won't let you set a wrong value type, and fetching conveniently returns `String`. - -### Take shortcuts - -For extra convenience, define your keys by extending magic `DefaultsKeys` class and adding static properties: - -```swift -extension DefaultsKeys { - static let username = DefaultsKey<String?>("username") - static let launchCount = DefaultsKey<Int>("launchCount", defaultValue: 0) -} -``` - -And use the shortcut dot syntax: - -```swift -Defaults[.username] = "joe" -Defaults[.launchCount] += 1 -``` - -### Supported types - -SwiftyUserDefaults supports all of the standard `NSUserDefaults` types, like strings, numbers, booleans, arrays and dictionaries. - -Here's a full table of built-in single value defaults: - -| Single value | Array | -| ---------------- | -------------------- | -| `String` | `[String]` | -| `Int` | `[Int]` | -| `Double` | `[Double]` | -| `Bool` | `[Bool]` | -| `Data` | `[Data]` | -| `Date` | `[Date]` | -| `URL` | `[URL]` | -| `[String: Any]` | `[[String: Any]]` | - -But that's not all! - -## Codable - -Since version 4, `SwiftyUserDefaults` support `Codable`! Just conform to `DefaultsSerializable` in your type: -```swift -final class FrogCodable: Codable, DefaultsSerializable { - let name: String - } -``` - -No implementation needed! By doing this you will get an option to specify an optional `DefaultsKey`: -```swift -let frog = DefaultsKey<FrogCodable?>("frog") -``` - -Additionally, you've got an array support for free: -```swift -let froggies = DefaultsKey<[FrogCodable]?>("froggies") -``` - -## NSCoding - -`NSCoding` was supported before version 4, but in this version we take the support on another level. No need for custom subscripts anymore! -Support your custom `NSCoding` type the same way as with `Codable` support: -``` -final class FrogSerializable: NSObject, NSCoding, DefaultsSerializable { ... } -``` - -No implementation needed as well! By doing this you will get an option to specify an optional `DefaultsKey`: -```swift -let frog = DefaultsKey<FrogSerializable?>("frog") -``` - -Additionally, you've got an array support also for free: -```swift -let froggies = DefaultsKey<[FrogSerializable]?>("froggies") -``` - -## RawRepresentable - -And the last but not least, `RawRepresentable` support! Again, the same situation like with `NSCoding` and `Codable`: -```swift -enum BestFroggiesEnum: String, DefaultsSerializable { - case Andy - case Dandy -} -``` - -No implementation needed as well! By doing this you will get an option to specify an optional `DefaultsKey`: -```swift -let frog = DefaultsKey<BestFroggiesEnum?>("frog") -``` - -Additionally, you've got an array support also for free: -```swift -let froggies = DefaultsKey<[BestFroggiesEnum]?>("froggies") -``` - -## Extending existing types - -Let's say you want to extend a support `UIColor` or any other type that is `NSCoding`, `Codable` or `RawRepresentable`. -Extending it to be `SwiftyUserDefaults`-friendly should be as easy as: -```swift -extension UIColor: DefaultsSerializable {} -``` - -If it's not, we have two options:<br /> -a) It's a custom type that we don't know how to serialize, in this case at [Custom types](#custom-types)<br /> -b) It's a bug and it should be supported, in this case please file an issue (+ you can use [custom types](#custom-types) method as a workaround in the meantime)<br /> - -## Custom types - -If you want to add your own custom type that we don't support yet, we've got you covered. We use `DefaultsBridge`s of many kinds to specify how you get/set values and arrays of values. When you look at `DefaultsSerializable` protocol, it expects two properties in each type: `_defaults` and `_defaultsArray`, where both are of type `DefaultsBridge`. - -For instance, this is a bridge for single value data storing/retrieving using `NSKeyedArchiver`/`NSKeyedUnarchiver`: -```swift -public final class DefaultsKeyedArchiverBridge<T>: DefaultsBridge<T> { - - public override func get(key: String, userDefaults: UserDefaults) -> T? { - return userDefaults.data(forKey: key).flatMap(NSKeyedUnarchiver.unarchiveObject) as? T - } - - public override func save(key: String, value: T?, userDefaults: UserDefaults) { - userDefaults.set(NSKeyedArchiver.archivedData(withRootObject: value), forKey: key) - } -} -``` - -Bridge for default storing/retrieving array values: -```swift -public final class DefaultsArrayBridge<T: Collection>: DefaultsBridge<T> { - public override func save(key: String, value: T?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - public override func get(key: String, userDefaults: UserDefaults) -> T? { - return userDefaults.array(forKey: key) as? T - } -} -``` - -Now, to use these bridges in our type we simply declare it as follows: -```swift -struct FrogCustomSerializable: DefaultsSerializable { - - static var _defaults: DefaultsBridge<FrogCustomSerializable> { return DefaultsKeyedArchiverBridge() } - static var _defaultsArray: DefaultsBridge<[FrogCustomSerializable]> { return DefaultsKeyedArchiverBridge() } - - let name: String -} -``` - -Unfortunately, if you find yourself in a situation where you need a custom bridge, you'll probably need to write your own: -```swift -final class DefaultsFrogBridge: DefaultsBridge<FrogCustomSerializable> { - override func get(key: String, userDefaults: UserDefaults) -> FrogCustomSerializable? { - let name = userDefaults.string(forKey: key) - return name.map(FrogCustomSerializable.init) - } - - override func save(key: String, value: FrogCustomSerializable?, userDefaults: UserDefaults) { - userDefaults.set(value?.name, forKey: key) - } - - public override func isSerialized() -> Bool { - return true - } - - public override func deserialize(_ object: Any) -> FrogCustomSerializable? { - guard let name = object as? String else { return nil } - - return FrogCustomSerializable(name: name) - } -} - -final class DefaultsFrogArrayBridge: DefaultsBridge<[FrogCustomSerializable]> { - override func get(key: String, userDefaults: UserDefaults) -> [FrogCustomSerializable]? { - return userDefaults.array(forKey: key)? - .compactMap { $0 as? String } - .map(FrogCustomSerializable.init) - } - - override func save(key: String, value: [FrogCustomSerializable]?, userDefaults: UserDefaults) { - let values = value?.map { $0.name } - userDefaults.set(values, forKey: key) - } - - public override func isSerialized() -> Bool { - return true - } - - public override func deserialize(_ object: Any) -> [FrogCustomSerializable]? { - guard let names = object as? [String] else { return nil } - - return names.map(FrogCustomSerializable.init) - } -} - -struct FrogCustomSerializable: DefaultsSerializable, Equatable { - - static var _defaults: DefaultsBridge<FrogCustomSerializable> { return DefaultsFrogBridge() } - static var _defaultsArray: DefaultsBridge<[FrogCustomSerializable]> { return DefaultsFrogArrayBridge() } - - let name: String -} -``` - -To support existing types with different bridges, you can extend it similarly: -```swift -extension Data: DefaultsSerializable { - public static var _defaults: DefaultsBridge<Data> { return DefaultsDataBridge() } - public static var _defaultsArray: DefaultsBridge<[Data]> { return DefaultsArrayBridge() } -} -``` - -Also, take a look at our source code (or tests) to see more examples of bridges. If you find yourself confused with all these bridges, please [create an issue](https://github.com/radex/SwiftyUserDefaults/issues/new) and we will figure something out. - -## KVO - -KVO is supported for all the types that are `DefaultsSerializable`. However, if you have a custom type, it needs to have correctly defined bridges and serialization in them. - -To observe a value: -```swift -let nameKey = DefaultsKey<String>("name", defaultValue: "") -Defaults.observe(key: nameKey) { update in - // here you can access `oldValue`/`newValue` and few other properties -} -``` - -By default we are using `[.old, .new]` options for observing, but you can provide your own: -```swift -Defaults.observe(key: nameKey, options: [.initial, .old, .new]) { _ in } -``` - -## Launch arguments - -Do you like to customize your app/script/tests by UserDefaults? Now it's fully supported on our side, statically typed of course. - -_Note: for now we support only `Bool`, `Double`, `Int`, `String` values, but if you have any other requests for that feature, please open an issue or PR and we can talk about implementing it in new versions._ - -### You can pass your arguments in your schema: -<img src="https://i.imgur.com/SDpOBpK.png" alt="Pass launch arguments in Xcode Schema editor." /> - -### Or you can use launch arguments in XCUIApplication: -```swift -func testExample() { - let app = XCUIApplication() - app.launchArguments = ["-skipLogin", "true", "-loginTries", "3", "-lastGameTime", "61.3", "-nickname", "sunshinejr"] - app.launch() -} -``` -### Or pass them as command line arguments! -```bash -./script -skipLogin true -loginTries 3 -lastGameTime 61.3 -nickname sunshinejr -``` - -## Utils - -### Remove all keys - -To reset user defaults, use `removeAll` method. - -```swift -Defaults.removeAll() -``` - -### Shared user defaults - -If you're sharing your user defaults between different apps or an app and its extensions, you can use SwiftyUserDefaults by overriding the `Defaults` shortcut with your own. Just add in your app: - -```swift -var Defaults = UserDefaults(suiteName: "com.my.app")! -``` - -### Check key - -If you want to check if we've got a value for `DefaultsKey`: -```swift -let hasKey = Defaults.hasKey(.skipLogin) -``` - -## Installation - -### Requirements -**Swift** version **>= 4.1**<br /> -**iOS** version **>= 8.0**<br /> -**macOS** version **>= 10.11**<br /> -**tvOS** version **>= 9.0**<br /> -**watchOS** version **>= 2.0** - -### CocoaPods - -If you're using CocoaPods, just add this line to your Podfile: - -```ruby -pod 'SwiftyUserDefaults', '~> 4.0.0' -``` - -Install by running this command in your terminal: - -```sh -pod install -``` - -Then import the library in all files where you use it: - -```swift -import SwiftyUserDefaults -``` - -### Carthage - -Just add to your Cartfile: - -```ruby -github "radex/SwiftyUserDefaults" "4.0.0" -``` - -### Swift Package Manager - -Just add to your `Package.swift` under dependencies: -```swift -let package = Package( - name: "MyPackage", - products: [...], - dependencies: [ - .package(url: "https://github.com/radex/SwiftyUserDefaults.git", .upToNextMajor(from: "4.0.0"), - ], - targets: [...] -) -``` - -## More like this - -If you like SwiftyUserDefaults, check out [SwiftyTimer](https://github.com/radex/SwiftyTimer), which applies the same swifty approach to `NSTimer`. - -You might also be interested in my blog posts which explain the design process behind those libraries: -- [Swifty APIs: NSUserDefaults](http://radex.io/swift/nsuserdefaults/) -- [Statically-typed NSUserDefaults](http://radex.io/swift/nsuserdefaults/static) -- [Swifty APIs: NSTimer](http://radex.io/swift/nstimer/) -- [Swifty methods](http://radex.io/swift/methods/) - -## Contributing - -If you have comments, complaints or ideas for improvements, feel free to open an issue or a pull request. - -## Authors and license - -*Maintainer:* Łukasz Mróz -* [github.com/sunshinejr](http://github.com/sunshinejr) -* [twitter.com/thesunshinejr](http://twitter.com/thesunshinejr) -* [sunshinejr.com](https://sunshinejr.com) - -*Created by:* Radek Pietruszewski - -* [github.com/radex](http://github.com/radex) -* [twitter.com/radexp](http://twitter.com/radexp) -* [radex.io](http://radex.io) -* this.is@radex.io - -SwiftyUserDefaults is available under the MIT license. See the LICENSE file for more info. diff --git a/Pods/SwiftyUserDefaults/Sources/Defaults+Observing.swift b/Pods/SwiftyUserDefaults/Sources/Defaults+Observing.swift deleted file mode 100644 index fffb314..0000000 --- a/Pods/SwiftyUserDefaults/Sources/Defaults+Observing.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -#if !os(Linux) -public extension UserDefaults { - - func observe<T: DefaultsSerializable>(key: DefaultsKey<T>, options: NSKeyValueObservingOptions = [.old, .new], handler: @escaping (DefaultsObserver<T>.Update) -> Void) -> DefaultsDisposable { - return DefaultsObserver(key: key, userDefaults: self, options: options, handler: handler) - } -} -#endif diff --git a/Pods/SwiftyUserDefaults/Sources/Defaults+StringToBool.swift b/Pods/SwiftyUserDefaults/Sources/Defaults+StringToBool.swift deleted file mode 100644 index 69c1d7d..0000000 --- a/Pods/SwiftyUserDefaults/Sources/Defaults+StringToBool.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -// We don't want to use `NSString.boolValue` as it's converting every miss to `false`, instead of `nil` -internal extension String { - var bool: Bool? { - switch self.lowercased() { - case "true", "t", "yes", "y", "1": - return true - case "false", "f", "no", "n", "0": - return false - default: - return nil - } - } -} - diff --git a/Pods/SwiftyUserDefaults/Sources/Defaults+Subscripts.swift b/Pods/SwiftyUserDefaults/Sources/Defaults+Subscripts.swift deleted file mode 100644 index 402765d..0000000 --- a/Pods/SwiftyUserDefaults/Sources/Defaults+Subscripts.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -// DefaultsKey -public extension UserDefaults { - - subscript<T: DefaultsSerializable>(key: DefaultsKey<T?>) -> T.T? { - get { - if let value = T._defaults.get(key: key._key, userDefaults: self) { - return value - } else if let defaultValue = key.defaultValue as? T.T { - return defaultValue - } else { - return nil - } - } - set { - T._defaults.save(key: key._key, value: newValue, userDefaults: self) - } - } - - subscript<T: DefaultsSerializable>(key: DefaultsKey<T>) -> T.T where T.T == T { - get { - if let value = T._defaults.get(key: key._key, userDefaults: self) { - return value - } else if let defaultValue = key.defaultValue { - return defaultValue - } else { - fatalError("Shouldn't happen, please report!") - } - } - set { - T._defaults.save(key: key._key, value: newValue, userDefaults: self) - } - } -} diff --git a/Pods/SwiftyUserDefaults/Sources/Defaults.swift b/Pods/SwiftyUserDefaults/Sources/Defaults.swift deleted file mode 100644 index 672d821..0000000 --- a/Pods/SwiftyUserDefaults/Sources/Defaults.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -/// Global shortcut for `UserDefaults.standard` -/// -/// **Pro-Tip:** If you want to use shared user defaults, just -/// redefine this global shortcut in your app target, like so: -/// ~~~ -/// var Defaults = UserDefaults(suiteName: "com.my.app")! -/// ~~~ - -public let Defaults = UserDefaults.standard - -public extension UserDefaults { - - /// Returns `true` if `key` exists - func hasKey<T>(_ key: DefaultsKey<T>) -> Bool { - return object(forKey: key._key) != nil - } - - /// Removes value for `key` - func remove<T>(_ key: DefaultsKey<T>) { - removeObject(forKey: key._key) - } - - /// Removes all keys and values from user defaults - /// Use with caution! - /// - Note: This method only removes keys on the receiver `UserDefaults` object. - /// System-defined keys will still be present afterwards. - func removeAll() { - for (key, _) in dictionaryRepresentation() { - removeObject(forKey: key) - } - } -} - -internal extension UserDefaults { - - func number(forKey key: String) -> NSNumber? { - return object(forKey: key) as? NSNumber - } - - func decodable<T: Decodable>(forKey key: String) -> T? { - guard let decodableData = data(forKey: key) else { return nil } - - return try? JSONDecoder().decode(T.self, from: decodableData) - } - - /// Encodes passed `encodable` and saves the resulting data into the user defaults for the key `key`. - /// Any error encoding will result in an assertion failure. - func set<T: Encodable>(encodable: T, forKey key: String) { - do { - let data = try JSONEncoder().encode(encodable) - set(data, forKey: key) - } catch { - assertionFailure("Failure encoding encodable of type \(T.self): \(error.localizedDescription)") - } - } -} diff --git a/Pods/SwiftyUserDefaults/Sources/DefaultsBridges.swift b/Pods/SwiftyUserDefaults/Sources/DefaultsBridges.swift deleted file mode 100644 index e5a4589..0000000 --- a/Pods/SwiftyUserDefaults/Sources/DefaultsBridges.swift +++ /dev/null @@ -1,305 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -/// Class important for saving and getting values from UserDefaults. Be careful when you -/// subclass your own! -open class DefaultsBridge<T> { - - public init() {} - - /// This method provides a way of saving your data in UserDefaults. Usually needed - /// when you want to create your custom Bridge, so you'll have to override it. - open func save(key: String, value: T?, userDefaults: UserDefaults) { - fatalError("This Bridge wasn't subclassed! Please do so before using it in your type.") - } - - /// This method provides a way of saving your data in UserDefaults. Usually needed - /// when you want to create your custom Bridge, so you'll have to override it. - open func get(key: String, userDefaults: UserDefaults) -> T? { - fatalError("This Bridge wasn't subclassed! Please do so before using it in your type.") - } - - /// Override this function if your data is represented differently in UserDefaults - /// and you map it in save/get methods. - /// - /// For instance, if you store it as Data in UserDefaults, but your type is not Data in your - /// defaults key, then you need to `return true` here and provide `deserialize(_:)` method as well. - /// - /// Similar if you store your array of type as e.g. `[String]` but the type you use is actually `[SomeClassThatHasOnlyOneStringProperty]`. - /// - /// See `DefaultsRawRepresentableBridge` or `DefaultsCodableBridge` for examples. - open func isSerialized() -> Bool { - return false - } - - /// Override this function if you've returned `true` in `isSerialized()` method. - /// - /// See `isSerialized()` method description for more details. - open func deserialize(_ object: Any) -> T? { - fatalError("You set `isSerialized` to true, now you have to implement `deserialize` method.") - } -} - -open class DefaultsObjectBridge<T>: DefaultsBridge<T> { - open override func save(key: String, value: T?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> T? { - return userDefaults.object(forKey: key) as? T - } -} - -open class DefaultsArrayBridge<T: Collection>: DefaultsBridge<T> { - open override func save(key: String, value: T?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> T? { - return userDefaults.array(forKey: key) as? T - } -} - -open class DefaultsStringBridge: DefaultsBridge<String> { - open override func save(key: String, value: String?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> String? { - return userDefaults.string(forKey: key) - } -} - -open class DefaultsIntBridge: DefaultsBridge<Int> { - open override func save(key: String, value: Int?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> Int? { - if let int = userDefaults.number(forKey: key)?.intValue { - return int - } - - // Fallback for launch arguments - if let string = userDefaults.object(forKey: key) as? String, - let int = Int(string) { - return int - } - - return nil - } -} - -open class DefaultsDoubleBridge: DefaultsBridge<Double> { - open override func save(key: String, value: Double?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> Double? { - if let double = userDefaults.number(forKey: key)?.doubleValue { - return double - } - - // Fallback for launch arguments - if let string = userDefaults.object(forKey: key) as? String, - let double = Double(string) { - return double - } - - return nil - } -} - -open class DefaultsBoolBridge: DefaultsBridge<Bool> { - open override func save(key: String, value: Bool?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> Bool? { - // @warning we use number(forKey:) instead of bool(forKey:), because - // bool(forKey:) will always return value, even if it's not set - // - // Now, let's see if there is value in defaults that converts to Bool first: - if let bool = userDefaults.number(forKey: key)?.boolValue { - return bool - } - - // If not, fallback for values saved in a plist (e.g. for testing) - // For instance, few of the string("YES", "true", "NO", "false") convert to Bool from a property list - return (userDefaults.object(forKey: key) as? String)?.bool - } -} - -open class DefaultsDataBridge: DefaultsBridge<Data> { - open override func save(key: String, value: Data?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> Data? { - return userDefaults.data(forKey: key) - } -} - -open class DefaultsUrlBridge: DefaultsBridge<URL> { - open override func save(key: String, value: URL?, userDefaults: UserDefaults) { - userDefaults.set(value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> URL? { - return userDefaults.url(forKey: key) - } - - open override func isSerialized() -> Bool { - return true - } - - open override func deserialize(_ object: Any) -> URL? { - if let object = object as? URL { - return object - } - - if let object = object as? Data { - return NSKeyedUnarchiver.unarchiveObject(with: object) as? URL - } - - if let object = object as? NSString { - let path = object.expandingTildeInPath - return URL(fileURLWithPath: path) - } - - return nil - } -} - -open class DefaultsCodableBridge<T: Codable>: DefaultsBridge<T> { - - open override func save(key: String, value: T?, userDefaults: UserDefaults) { - guard let value = value else { - userDefaults.removeObject(forKey: key) - return - } - userDefaults.set(encodable: value, forKey: key) - } - - open override func get(key: String, userDefaults: UserDefaults) -> T? { - guard let data = userDefaults.data(forKey: key) else { - return nil - } - return deserialize(data) - } - - open override func isSerialized() -> Bool { - return true - } - - open override func deserialize(_ object: Any) -> T? { - guard let data = object as? Data else { return nil } - - return try? JSONDecoder().decode(T.self, from: data) - } -} - -open class DefaultsKeyedArchiverBridge<T>: DefaultsBridge<T> { - - open override func get(key: String, userDefaults: UserDefaults) -> T? { - guard let data = userDefaults.data(forKey: key) else { - return nil - } - return deserialize(data) - } - - open override func save(key: String, value: T?, userDefaults: UserDefaults) { - guard let value = value else { - userDefaults.removeObject(forKey: key) - return - } - - // Needed because Quick/Nimble have min target 10.10... - if #available(OSX 10.11, *) { - userDefaults.set(NSKeyedArchiver.archivedData(withRootObject: value), forKey: key) - } else { - fatalError("Shouldn't really happen. We do not support macOS 10.10, if it happened to you please report your use-case on GitHub issues.") - } - } - - open override func isSerialized() -> Bool { - return true - } - - open override func deserialize(_ object: Any) -> T? { - guard let data = object as? Data else { return nil } - - return NSKeyedUnarchiver.unarchiveObject(with: data) as? T - } -} - -open class DefaultsRawRepresentableBridge<T: RawRepresentable>: DefaultsBridge<T> { - - open override func get(key: String, userDefaults: UserDefaults) -> T? { - guard let object = userDefaults.object(forKey: key) else { return nil } - - return deserialize(object) - } - - open override func save(key: String, value: T?, userDefaults: UserDefaults) { - userDefaults.set(value?.rawValue, forKey: key) - } - - open override func isSerialized() -> Bool { - return true - } - - open override func deserialize(_ object: Any) -> T? { - guard let rawValue = object as? T.RawValue else { return nil } - - return T(rawValue: rawValue) - } -} - -open class DefaultsRawRepresentableArrayBridge<T: Collection>: DefaultsBridge<T> where T.Element: RawRepresentable { - - open override func get(key: String, userDefaults: UserDefaults) -> T? { - guard let object = userDefaults.array(forKey: key) else { return nil } - - return deserialize(object) - } - - open override func save(key: String, value: T?, userDefaults: UserDefaults) { - let raw = value?.map { $0.rawValue } - - userDefaults.set(raw, forKey: key) - } - - open override func isSerialized() -> Bool { - return true - } - - open override func deserialize(_ object: Any) -> T? { - guard let rawValue = object as? [T.Element.RawValue] else { return nil } - - return rawValue.compactMap { T.Element(rawValue: $0) } as? T - } -} diff --git a/Pods/SwiftyUserDefaults/Sources/DefaultsKeys.swift b/Pods/SwiftyUserDefaults/Sources/DefaultsKeys.swift deleted file mode 100644 index e12aba5..0000000 --- a/Pods/SwiftyUserDefaults/Sources/DefaultsKeys.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -// MARK: - Static keys - -/// Extend this class and add your user defaults keys as static constants -/// so you can use the shortcut dot notation (e.g. `Defaults[.yourKey]`) - -open class DefaultsKeys { - fileprivate init() {} -} - -/// Base class for static user defaults keys. Specialize with value type -/// and pass key name to the initializer to create a key. -open class DefaultsKey<ValueType: DefaultsSerializable>: DefaultsKeys { - - public let _key: String - public let defaultValue: ValueType.T? - - public init(_ key: String, defaultValue: ValueType.T) { - self._key = key - self.defaultValue = defaultValue - } - - // Couldn't figure out a way of how to pass a nil/none value from extension, thus this initializer. - // Used for creating an optional key (without defaultValue) - private init(key: String) { - self._key = key - self.defaultValue = nil - } - - @available(*, unavailable, message: "This key needs a `defaultValue` parameter. If this type does not have a default value, consider using an optional key.") - public init(_ key: String) { - fatalError() - } -} - -public extension DefaultsKey where ValueType: DefaultsSerializable, ValueType: OptionalType, ValueType.Wrapped: DefaultsSerializable { - - convenience init(_ key: String) { - self.init(key: key) - } -} diff --git a/Pods/SwiftyUserDefaults/Sources/DefaultsObserver.swift b/Pods/SwiftyUserDefaults/Sources/DefaultsObserver.swift deleted file mode 100644 index f83e97e..0000000 --- a/Pods/SwiftyUserDefaults/Sources/DefaultsObserver.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -public protocol DefaultsDisposable { - func dispose() -} - -#if !os(Linux) -public final class DefaultsObserver<T: DefaultsSerializable>: NSObject, DefaultsDisposable { - - public struct Update { - public let kind: NSKeyValueChange - public let indexes: IndexSet? - public let isPrior: Bool - public let newValue: T.T? - public let oldValue: T.T? - - init(dict: [NSKeyValueChangeKey: Any], key: DefaultsKey<T>) { - // swiftlint:disable:next force_cast - kind = NSKeyValueChange(rawValue: dict[.kindKey] as! UInt)! - indexes = dict[.indexesKey] as? IndexSet - isPrior = dict[.notificationIsPriorKey] as? Bool ?? false - oldValue = Update.deserialize(dict[.oldKey], for: key) ?? key.defaultValue - newValue = Update.deserialize(dict[.newKey], for: key) ?? key.defaultValue - } - - private static func deserialize(_ value: Any?, for key: DefaultsKey<T>) -> T.T? { - guard let value = value else { return nil } - - let bridge = T._defaults - if bridge.isSerialized() { - return bridge.deserialize(value) - } else { - return value as? T.T - } - } - } - - private let key: DefaultsKey<T> - private let userDefaults: UserDefaults - private let handler: ((Update) -> Void) - private var didRemoveObserver = false - - init(key: DefaultsKey<T>, userDefaults: UserDefaults, options: NSKeyValueObservingOptions, handler: @escaping ((Update) -> Void)) { - self.key = key - self.userDefaults = userDefaults - self.handler = handler - super.init() - - userDefaults.addObserver(self, forKeyPath: key._key, options: options, context: nil) - } - - deinit { - dispose() - } - - // swiftlint:disable:next block_based_kvo - public override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) { - guard let change = change, object != nil, keyPath == key._key else { - return - } - - let update = Update(dict: change, key: key) - handler(update) - } - - public func dispose() { - // We use this local property because when you use `removeObserver` when you are - // not actually observing anymore, you'll receive a runtime error. - if didRemoveObserver { return } - - didRemoveObserver = true - userDefaults.removeObserver(self, forKeyPath: key._key, context: nil) - } -} -#endif diff --git a/Pods/SwiftyUserDefaults/Sources/DefaultsSerializable+BuiltIns.swift b/Pods/SwiftyUserDefaults/Sources/DefaultsSerializable+BuiltIns.swift deleted file mode 100644 index babad4e..0000000 --- a/Pods/SwiftyUserDefaults/Sources/DefaultsSerializable+BuiltIns.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -extension Date: DefaultsSerializable { - public static var _defaults: DefaultsBridge<Date> { return DefaultsObjectBridge() } - public static var _defaultsArray: DefaultsBridge<[Date]> { return DefaultsArrayBridge() } -} - -extension String: DefaultsSerializable { - public static var _defaults: DefaultsBridge<String> { return DefaultsStringBridge() } - public static var _defaultsArray: DefaultsBridge<[String]> { return DefaultsArrayBridge() } -} - -extension Int: DefaultsSerializable { - public static var _defaults: DefaultsBridge<Int> { return DefaultsIntBridge() } - public static var _defaultsArray: DefaultsBridge<[Int]> { return DefaultsArrayBridge() } -} - -extension Double: DefaultsSerializable { - public static var _defaults: DefaultsBridge<Double> { return DefaultsDoubleBridge() } - public static var _defaultsArray: DefaultsBridge<[Double]> { return DefaultsArrayBridge() } -} - -extension Bool: DefaultsSerializable { - public static var _defaults: DefaultsBridge<Bool> { return DefaultsBoolBridge() } - public static var _defaultsArray: DefaultsBridge<[Bool]> { return DefaultsArrayBridge() } -} - -extension Data: DefaultsSerializable { - public static var _defaults: DefaultsBridge<Data> { return DefaultsDataBridge() } - public static var _defaultsArray: DefaultsBridge<[Data]> { return DefaultsArrayBridge() } -} - -extension URL: DefaultsSerializable { - public static var _defaults: DefaultsBridge<URL> { - #if os(Linux) - return DefaultsKeyedArchiverBridge() - #else - return DefaultsUrlBridge() - #endif - } - public static var _defaultsArray: DefaultsBridge<[URL]> { return DefaultsKeyedArchiverBridge() } -} - -extension DefaultsSerializable where Self: Encodable, Self: Decodable { - public static var _defaults: DefaultsBridge<Self> { return DefaultsCodableBridge() } - public static var _defaultsArray: DefaultsBridge<[Self]> { return DefaultsCodableBridge() } -} - -extension DefaultsSerializable where Self: RawRepresentable { - public static var _defaults: DefaultsBridge<Self> { return DefaultsRawRepresentableBridge() } - public static var _defaultsArray: DefaultsBridge<[Self]> { return DefaultsRawRepresentableArrayBridge() } -} - -extension DefaultsSerializable where Self: NSCoding { - public static var _defaults: DefaultsBridge<Self> { return DefaultsKeyedArchiverBridge() } - public static var _defaultsArray: DefaultsBridge<[Self]> { return DefaultsKeyedArchiverBridge() } -} - -extension Dictionary: DefaultsSerializable where Key == String { - - public typealias T = [Key: Value] - - public static var _defaults: DefaultsBridge<[Key: Value]> { return DefaultsObjectBridge() } - public static var _defaultsArray: DefaultsBridge<[[Key: Value]]> { return DefaultsArrayBridge() } -} - -extension Array: DefaultsSerializable where Element: DefaultsSerializable { - - public typealias T = [Element] - - public static var _defaults: DefaultsBridge<[Element]> { - // swiftlint:disable:next force_cast - return Element._defaultsArray as! DefaultsBridge<[Element]> - } - - public static var _defaultsArray: DefaultsBridge<[[Element]]> { - fatalError("Multidimensional arrays are not supported yet") - } -} - -extension Optional: DefaultsSerializable where Wrapped: DefaultsSerializable { - public typealias T = Wrapped - - // swiftlint:disable:next force_cast - public static var _defaults: DefaultsBridge<Wrapped> { return Wrapped._defaults as! DefaultsBridge<Wrapped> } - - // swiftlint:disable:next force_cast - public static var _defaultsArray: DefaultsBridge<[Wrapped]> { return Wrapped._defaultsArray as! DefaultsBridge<[Wrapped]> } -} diff --git a/Pods/SwiftyUserDefaults/Sources/DefaultsSerializable.swift b/Pods/SwiftyUserDefaults/Sources/DefaultsSerializable.swift deleted file mode 100644 index 97505da..0000000 --- a/Pods/SwiftyUserDefaults/Sources/DefaultsSerializable.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. -// - -import Foundation - -public protocol DefaultsSerializable { - // swiftlint:disable:next type_name - associatedtype T - - static var _defaults: DefaultsBridge<T> { get } - static var _defaultsArray: DefaultsBridge<[T]> { get } -} diff --git a/Pods/SwiftyUserDefaults/Sources/OptionalType.swift b/Pods/SwiftyUserDefaults/Sources/OptionalType.swift deleted file mode 100644 index 4823325..0000000 --- a/Pods/SwiftyUserDefaults/Sources/OptionalType.swift +++ /dev/null @@ -1,35 +0,0 @@ -// -// SwiftyUserDefaults -// -// Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz -// -// 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. -// - -public protocol OptionalType { - associatedtype Wrapped - var wrapped: Wrapped? { get } -} - -extension Optional: OptionalType { - - public var wrapped: Wrapped? { - return self - } -} diff --git a/Pods/Target Support Files/Alamofire/Alamofire-Info.plist b/Pods/Target Support Files/Alamofire/Alamofire-Info.plist deleted file mode 100644 index 0dbae30..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>4.9.1</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/Alamofire/Alamofire-dummy.m b/Pods/Target Support Files/Alamofire/Alamofire-dummy.m deleted file mode 100644 index a6c4594..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Alamofire : NSObject -@end -@implementation PodsDummy_Alamofire -@end diff --git a/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch b/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h b/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h deleted file mode 100644 index c83c1a5..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double AlamofireVersionNumber; -FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; - diff --git a/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig b/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig deleted file mode 100644 index 03f3c1c..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire -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}/Alamofire -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Alamofire/Alamofire.modulemap b/Pods/Target Support Files/Alamofire/Alamofire.modulemap deleted file mode 100644 index d1f125f..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Alamofire { - umbrella header "Alamofire-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig b/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig deleted file mode 100644 index 03f3c1c..0000000 --- a/Pods/Target Support Files/Alamofire/Alamofire.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Alamofire -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}/Alamofire -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils-Info.plist b/Pods/Target Support Files/CwlUtils/CwlUtils-Info.plist deleted file mode 100644 index c054f9c..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>2.2.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils-dummy.m b/Pods/Target Support Files/CwlUtils/CwlUtils-dummy.m deleted file mode 100644 index 07853fe..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_CwlUtils : NSObject -@end -@implementation PodsDummy_CwlUtils -@end diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils-prefix.pch b/Pods/Target Support Files/CwlUtils/CwlUtils-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils-umbrella.h b/Pods/Target Support Files/CwlUtils/CwlUtils-umbrella.h deleted file mode 100644 index 35b6519..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils-umbrella.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "CwlUtils.h" -#import "CwlFrameAddress.h" - -FOUNDATION_EXPORT double CwlUtilsVersionNumber; -FOUNDATION_EXPORT const unsigned char CwlUtilsVersionString[]; - diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils.debug.xcconfig b/Pods/Target Support Files/CwlUtils/CwlUtils.debug.xcconfig deleted file mode 100644 index 8eb7e81..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils -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}/CwlUtils -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils.modulemap b/Pods/Target Support Files/CwlUtils/CwlUtils.modulemap deleted file mode 100644 index d0a22b0..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module CwlUtils { - umbrella header "CwlUtils-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/CwlUtils/CwlUtils.release.xcconfig b/Pods/Target Support Files/CwlUtils/CwlUtils.release.xcconfig deleted file mode 100644 index 8eb7e81..0000000 --- a/Pods/Target Support Files/CwlUtils/CwlUtils.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils -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}/CwlUtils -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Down/Down-Info.plist b/Pods/Target Support Files/Down/Down-Info.plist deleted file mode 100644 index f2e6a84..0000000 --- a/Pods/Target Support Files/Down/Down-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>0.9.4</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/Down/Down-dummy.m b/Pods/Target Support Files/Down/Down-dummy.m deleted file mode 100644 index 7e4c783..0000000 --- a/Pods/Target Support Files/Down/Down-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Down : NSObject -@end -@implementation PodsDummy_Down -@end diff --git a/Pods/Target Support Files/Down/Down-prefix.pch b/Pods/Target Support Files/Down/Down-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/Down/Down-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/Down/Down-umbrella.h b/Pods/Target Support Files/Down/Down-umbrella.h deleted file mode 100644 index 2b8fc39..0000000 --- a/Pods/Target Support Files/Down/Down-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Down.h" - -FOUNDATION_EXPORT double DownVersionNumber; -FOUNDATION_EXPORT const unsigned char DownVersionString[]; - diff --git a/Pods/Target Support Files/Down/Down.debug.xcconfig b/Pods/Target Support Files/Down/Down.debug.xcconfig deleted file mode 100644 index 485dd22..0000000 --- a/Pods/Target Support Files/Down/Down.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Down -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}/Down -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SWIFT_INCLUDE_PATHS = $(inherited) $(SRCROOT)/Down/Source/cmark/** -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Down/Down.modulemap b/Pods/Target Support Files/Down/Down.modulemap deleted file mode 100644 index aa732b5..0000000 --- a/Pods/Target Support Files/Down/Down.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Down { - umbrella header "Down-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Down/Down.release.xcconfig b/Pods/Target Support Files/Down/Down.release.xcconfig deleted file mode 100644 index 485dd22..0000000 --- a/Pods/Target Support Files/Down/Down.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Down -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}/Down -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SWIFT_INCLUDE_PATHS = $(inherited) $(SRCROOT)/Down/Source/cmark/** -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Netable/Netable-Info.plist b/Pods/Target Support Files/Netable/Netable-Info.plist deleted file mode 100644 index 5c8750d..0000000 --- a/Pods/Target Support Files/Netable/Netable-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>0.10.2</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/Netable/Netable-dummy.m b/Pods/Target Support Files/Netable/Netable-dummy.m deleted file mode 100644 index 2ff1237..0000000 --- a/Pods/Target Support Files/Netable/Netable-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Netable : NSObject -@end -@implementation PodsDummy_Netable -@end diff --git a/Pods/Target Support Files/Netable/Netable-prefix.pch b/Pods/Target Support Files/Netable/Netable-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/Netable/Netable-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/Netable/Netable-umbrella.h b/Pods/Target Support Files/Netable/Netable-umbrella.h deleted file mode 100644 index a1d4cf2..0000000 --- a/Pods/Target Support Files/Netable/Netable-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Netable.h" - -FOUNDATION_EXPORT double NetableVersionNumber; -FOUNDATION_EXPORT const unsigned char NetableVersionString[]; - diff --git a/Pods/Target Support Files/Netable/Netable.debug.xcconfig b/Pods/Target Support Files/Netable/Netable.debug.xcconfig deleted file mode 100644 index d1b38e3..0000000 --- a/Pods/Target Support Files/Netable/Netable.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Netable -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}/Netable -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Netable/Netable.modulemap b/Pods/Target Support Files/Netable/Netable.modulemap deleted file mode 100644 index 5fceb83..0000000 --- a/Pods/Target Support Files/Netable/Netable.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Netable { - umbrella header "Netable-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Netable/Netable.release.xcconfig b/Pods/Target Support Files/Netable/Netable.release.xcconfig deleted file mode 100644 index d1b38e3..0000000 --- a/Pods/Target Support Files/Netable/Netable.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Netable -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}/Netable -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist deleted file mode 100644 index 3c175b6..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>1.0.1</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-dummy.m b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-dummy.m deleted file mode 100644 index 81536fb..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_ObjcExceptionBridging : NSObject -@end -@implementation PodsDummy_ObjcExceptionBridging -@end diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-umbrella.h b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-umbrella.h deleted file mode 100644 index 2402f0d..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "ObjcExceptionBridging.h" - -FOUNDATION_EXPORT double ObjcExceptionBridgingVersionNumber; -FOUNDATION_EXPORT const unsigned char ObjcExceptionBridgingVersionString[]; - diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.debug.xcconfig b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.debug.xcconfig deleted file mode 100644 index 7025659..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ObjcExceptionBridging -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap deleted file mode 100644 index e43fe8c..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module ObjcExceptionBridging { - umbrella header "ObjcExceptionBridging-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.release.xcconfig b/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.release.xcconfig deleted file mode 100644 index 7025659..0000000 --- a/Pods/Target Support Files/ObjcExceptionBridging/ObjcExceptionBridging.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/ObjcExceptionBridging -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-Info.plist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-Info.plist deleted file mode 100644 index 2243fe6..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>1.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-acknowledgements.markdown b/Pods/Target Support Files/Pods-Quests/Pods-Quests-acknowledgements.markdown deleted file mode 100644 index 73f3ea5..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-acknowledgements.markdown +++ /dev/null @@ -1,737 +0,0 @@ -# Acknowledgements -This application makes use of the following third party libraries: - -## Alamofire - -Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) - -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. - - -## CwlUtils - -ISC License - -Copyright © 2017 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Testing targets (not the release build of CwlUtils) include code under the following two licenses: - -/* - A C-program for MT19937-64 (2004/9/29 version). - Coded by Takuji Nishimura and Makoto Matsumoto. - - This is a 64-bit version of Mersenne Twister pseudorandom number - generator. - - Before using, initialize the state by using init_genrand64(seed) - or init_by_array64(init_key, key_length). - - Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - References: - T. Nishimura, ``Tables of 64-bit Mersenne Twisters'' - ACM Transactions on Modeling and - Computer Simulation 10. (2000) 348--357. - M. Matsumoto and T. Nishimura, - ``Mersenne Twister: a 623-dimensionally equidistributed - uniform pseudorandom number generator'' - ACM Transactions on Modeling and - Computer Simulation 8. (Jan. 1998) 3--30. - - Any feedback is very welcome. - http://www.math.hiroshima-u.ac.jp/~m-mat/MT/emt.html - email: m-mat @ math.sci.hiro - - - -/* Written in 2016 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. */ -shima-u.ac.jp (remove spaces) -*/ - - -## Down - -The MIT License (MIT) - -Copyright (c) 2016 Rob Phillips. - -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. - ------ - -cmark - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c, -html_unescape.gperf, html_unescape.h - -derive from https://github.com/vmg/houdini (with some modifications) - -Copyright (C) 2012 Vicent Martí - -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. - ------ - -buffer.h, buffer.c, chunk.h - -are derived from code (C) 2012 Github, Inc. - -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. - ------ - -utf8.c and utf8.c - -are derived from utf8proc -(<http://www.public-software-group.org/utf8proc>), -(C) 2009 Public Software Group e. V., Berlin, Germany. - -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. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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. - ------ - -The CommonMark spec (test/spec.txt) is - -Copyright (C) 2014-15 John MacFarlane - -Released under the Creative Commons CC-BY-SA 4.0 license: -<http://creativecommons.org/licenses/by-sa/4.0/>. - ------ - -The test software in test/ is - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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. - -## Netable - -MIT License - -Copyright (c) 2018 Steamclock Software - -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. - - -## ObjcExceptionBridging - -The MIT License (MIT) - -Copyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -## ReachabilitySwift - -Copyright (c) 2016 Ashley Mills - -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. - - -## SnapKit - -Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -## SwiftLint - -The MIT License (MIT) - -Copyright (c) 2020 Realm Inc. - -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. - - -## SwiftyJSON - -The MIT License (MIT) - -Copyright (c) 2017 Ruoyu Fu - -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. - - -## SwiftyUserDefaults - -The MIT License (MIT) - -Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz - -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. - - -## Valet - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. - -## XCGLogger - -The MIT License (MIT) - -Copyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -Generated by CocoaPods - https://cocoapods.org diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-acknowledgements.plist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-acknowledgements.plist deleted file mode 100644 index f300260..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-acknowledgements.plist +++ /dev/null @@ -1,835 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>PreferenceSpecifiers</key> - <array> - <dict> - <key>FooterText</key> - <string>This application makes use of the following third party libraries:</string> - <key>Title</key> - <string>Acknowledgements</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2014 Alamofire Software Foundation (http://alamofire.org/) - -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. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>Alamofire</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>ISC License - -Copyright © 2017 Matt Gallagher ( http://cocoawithlove.com ). All rights reserved. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Testing targets (not the release build of CwlUtils) include code under the following two licenses: - -/* - A C-program for MT19937-64 (2004/9/29 version). - Coded by Takuji Nishimura and Makoto Matsumoto. - - This is a 64-bit version of Mersenne Twister pseudorandom number - generator. - - Before using, initialize the state by using init_genrand64(seed) - or init_by_array64(init_key, key_length). - - Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - References: - T. Nishimura, ``Tables of 64-bit Mersenne Twisters'' - ACM Transactions on Modeling and - Computer Simulation 10. (2000) 348--357. - M. Matsumoto and T. Nishimura, - ``Mersenne Twister: a 623-dimensionally equidistributed - uniform pseudorandom number generator'' - ACM Transactions on Modeling and - Computer Simulation 8. (Jan. 1998) 3--30. - - Any feedback is very welcome. - http://www.math.hiroshima-u.ac.jp/~m-mat/MT/emt.html - email: m-mat @ math.sci.hiro - - - -/* Written in 2016 by David Blackman and Sebastiano Vigna (vigna@acm.org) - -To the extent possible under law, the author has dedicated all copyright -and related and neighboring rights to this software to the public domain -worldwide. This software is distributed without any warranty. - -See <http://creativecommons.org/publicdomain/zero/1.0/>. */ -shima-u.ac.jp (remove spaces) -*/ -</string> - <key>License</key> - <string>ISC</string> - <key>Title</key> - <string>CwlUtils</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>The MIT License (MIT) - -Copyright (c) 2016 Rob Phillips. - -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. - ------ - -cmark - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -houdini.h, houdini_href_e.c, houdini_html_e.c, houdini_html_u.c, -html_unescape.gperf, html_unescape.h - -derive from https://github.com/vmg/houdini (with some modifications) - -Copyright (C) 2012 Vicent Martí - -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. - ------ - -buffer.h, buffer.c, chunk.h - -are derived from code (C) 2012 Github, Inc. - -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. - ------ - -utf8.c and utf8.c - -are derived from utf8proc -(<http://www.public-software-group.org/utf8proc>), -(C) 2009 Public Software Group e. V., Berlin, Germany. - -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. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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. - ------ - -The CommonMark spec (test/spec.txt) is - -Copyright (C) 2014-15 John MacFarlane - -Released under the Creative Commons CC-BY-SA 4.0 license: -<http://creativecommons.org/licenses/by-sa/4.0/>. - ------ - -The test software in test/ is - -Copyright (c) 2014, John MacFarlane - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------ - -The normalization code in runtests.py was derived from the -markdowntest project, Copyright 2013 Karl Dubost: - -The MIT License (MIT) - -Copyright (c) 2013 Karl Dubost - -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.</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>Down</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>MIT License - -Copyright (c) 2018 Steamclock Software - -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. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>Netable</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>The MIT License (MIT) - -Copyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>ObjcExceptionBridging</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2016 Ashley Mills - -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. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>ReachabilitySwift</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Copyright (c) 2011-Present SnapKit Team - https://github.com/SnapKit - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>SnapKit</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>The MIT License (MIT) - -Copyright (c) 2020 Realm Inc. - -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. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>SwiftLint</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>The MIT License (MIT) - -Copyright (c) 2017 Ruoyu Fu - -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. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>SwiftyJSON</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>The MIT License (MIT) - -Copyright (c) 2015-present Radosław Pietruszewski, Łukasz Mróz - -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. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>SwiftyUserDefaults</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string> - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License.</string> - <key>License</key> - <string>Apache License, Version 2.0</string> - <key>Title</key> - <string>Valet</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>The MIT License (MIT) - -Copyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -</string> - <key>License</key> - <string>MIT</string> - <key>Title</key> - <string>XCGLogger</string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - <dict> - <key>FooterText</key> - <string>Generated by CocoaPods - https://cocoapods.org</string> - <key>Title</key> - <string></string> - <key>Type</key> - <string>PSGroupSpecifier</string> - </dict> - </array> - <key>StringsTable</key> - <string>Acknowledgements</string> - <key>Title</key> - <string>Acknowledgements</string> -</dict> -</plist> diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-dummy.m b/Pods/Target Support Files/Pods-Quests/Pods-Quests-dummy.m deleted file mode 100644 index 32fe1b4..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Pods_Quests : NSObject -@end -@implementation PodsDummy_Pods_Quests -@end diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Debug-input-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Debug-input-files.xcfilelist deleted file mode 100644 index e68157e..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Debug-input-files.xcfilelist +++ /dev/null @@ -1,12 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh -${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework -${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework -${BUILT_PRODUCTS_DIR}/Down/Down.framework -${BUILT_PRODUCTS_DIR}/Netable/Netable.framework -${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework -${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework -${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework -${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework -${BUILT_PRODUCTS_DIR}/Valet/Valet.framework -${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Debug-output-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Debug-output-files.xcfilelist deleted file mode 100644 index 533fa6b..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Debug-output-files.xcfilelist +++ /dev/null @@ -1,11 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CwlUtils.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Down.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Netable.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyUserDefaults.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Valet.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-DebugInternal-input-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-DebugInternal-input-files.xcfilelist deleted file mode 100644 index e68157e..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-DebugInternal-input-files.xcfilelist +++ /dev/null @@ -1,12 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh -${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework -${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework -${BUILT_PRODUCTS_DIR}/Down/Down.framework -${BUILT_PRODUCTS_DIR}/Netable/Netable.framework -${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework -${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework -${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework -${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework -${BUILT_PRODUCTS_DIR}/Valet/Valet.framework -${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-DebugInternal-output-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-DebugInternal-output-files.xcfilelist deleted file mode 100644 index 533fa6b..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-DebugInternal-output-files.xcfilelist +++ /dev/null @@ -1,11 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CwlUtils.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Down.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Netable.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyUserDefaults.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Valet.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Release-input-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Release-input-files.xcfilelist deleted file mode 100644 index e68157e..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Release-input-files.xcfilelist +++ /dev/null @@ -1,12 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh -${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework -${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework -${BUILT_PRODUCTS_DIR}/Down/Down.framework -${BUILT_PRODUCTS_DIR}/Netable/Netable.framework -${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework -${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework -${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework -${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework -${BUILT_PRODUCTS_DIR}/Valet/Valet.framework -${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Release-output-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Release-output-files.xcfilelist deleted file mode 100644 index 533fa6b..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-Release-output-files.xcfilelist +++ /dev/null @@ -1,11 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CwlUtils.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Down.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Netable.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyUserDefaults.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Valet.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-ReleaseInternal-input-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-ReleaseInternal-input-files.xcfilelist deleted file mode 100644 index e68157e..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-ReleaseInternal-input-files.xcfilelist +++ /dev/null @@ -1,12 +0,0 @@ -${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh -${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework -${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework -${BUILT_PRODUCTS_DIR}/Down/Down.framework -${BUILT_PRODUCTS_DIR}/Netable/Netable.framework -${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework -${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework -${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework -${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework -${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework -${BUILT_PRODUCTS_DIR}/Valet/Valet.framework -${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-ReleaseInternal-output-files.xcfilelist b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-ReleaseInternal-output-files.xcfilelist deleted file mode 100644 index 533fa6b..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks-ReleaseInternal-output-files.xcfilelist +++ /dev/null @@ -1,11 +0,0 @@ -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Alamofire.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CwlUtils.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Down.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Netable.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ObjcExceptionBridging.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SnapKit.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyJSON.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyUserDefaults.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Valet.framework -${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/XCGLogger.framework \ No newline at end of file diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh b/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh deleted file mode 100755 index 5e701f6..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh +++ /dev/null @@ -1,253 +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}" - -# Used as a return value for each invocation of `strip_invalid_archs` function. -STRIP_BINARY_RETVAL=0 - -# This protects against multiple targets copying the same framework dependency at the same time. The solution -# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html -RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") - -# Copies and strips a vendored framework -install_framework() -{ - if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then - local source="${BUILT_PRODUCTS_DIR}/$1" - elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then - local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" - elif [ -r "$1" ]; then - local source="$1" - fi - - local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" - - if [ -L "${source}" ]; then - echo "Symlinked..." - source="$(readlink -f "${source}")" - fi - - # 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 so "fat" simulator / device frameworks work on device - if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then - strip_invalid_archs "$binary" "$warn_missing_arch" - fi - - if [[ $STRIP_BINARY_RETVAL == 1 ]]; 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. - touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" - fi - fi -} - -# 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 -} - -# 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=0 - 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=1 -} - -install_artifact() { - artifact="$1" - base="$(basename "$artifact")" - case $base in - *.framework) - install_framework "$artifact" - ;; - *.dSYM) - # Suppress arch warnings since XCFrameworks will include many dSYM files - install_dsym "$artifact" "false" - ;; - *.bcsymbolmap) - install_bcsymbolmap "$artifact" - ;; - *) - echo "error: Unrecognized artifact "$artifact"" - ;; - esac -} - -copy_artifacts() { - file_list="$1" - while read artifact; do - install_artifact "$artifact" - done <$file_list -} - -ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" -if [ -r "${ARTIFACT_LIST_FILE}" ]; then - copy_artifacts "${ARTIFACT_LIST_FILE}" -fi - -if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" - install_framework "${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Down/Down.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Netable/Netable.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Valet/Valet.framework" - install_framework "${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework" -fi -if [[ "$CONFIGURATION" == "DebugInternal" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" - install_framework "${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Down/Down.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Netable/Netable.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Valet/Valet.framework" - install_framework "${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework" -fi -if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" - install_framework "${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Down/Down.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Netable/Netable.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Valet/Valet.framework" - install_framework "${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework" -fi -if [[ "$CONFIGURATION" == "ReleaseInternal" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Alamofire/Alamofire.framework" - install_framework "${BUILT_PRODUCTS_DIR}/CwlUtils/CwlUtils.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Down/Down.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Netable/Netable.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework" - install_framework "${BUILT_PRODUCTS_DIR}/ReachabilitySwift/Reachability.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SnapKit/SnapKit.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyJSON/SwiftyJSON.framework" - install_framework "${BUILT_PRODUCTS_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework" - install_framework "${BUILT_PRODUCTS_DIR}/Valet/Valet.framework" - install_framework "${BUILT_PRODUCTS_DIR}/XCGLogger/XCGLogger.framework" -fi -if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then - wait -fi diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests-umbrella.h b/Pods/Target Support Files/Pods-Quests/Pods-Quests-umbrella.h deleted file mode 100644 index 2ed6201..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double Pods_QuestsVersionNumber; -FOUNDATION_EXPORT const unsigned char Pods_QuestsVersionString[]; - diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests.debug.xcconfig b/Pods/Target Support Files/Pods-Quests/Pods-Quests.debug.xcconfig deleted file mode 100644 index f5d33f1..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils" "${PODS_CONFIGURATION_BUILD_DIR}/Down" "${PODS_CONFIGURATION_BUILD_DIR}/Netable" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/Valet" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils/CwlUtils.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Down/Down.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Netable/Netable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Valet/Valet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CwlUtils" -framework "Down" -framework "Netable" -framework "ObjcExceptionBridging" -framework "Reachability" -framework "Security" -framework "SnapKit" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "Valet" -framework "XCGLogger" -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 -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests.debuginternal.xcconfig b/Pods/Target Support Files/Pods-Quests/Pods-Quests.debuginternal.xcconfig deleted file mode 100644 index f5d33f1..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests.debuginternal.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils" "${PODS_CONFIGURATION_BUILD_DIR}/Down" "${PODS_CONFIGURATION_BUILD_DIR}/Netable" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/Valet" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils/CwlUtils.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Down/Down.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Netable/Netable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Valet/Valet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CwlUtils" -framework "Down" -framework "Netable" -framework "ObjcExceptionBridging" -framework "Reachability" -framework "Security" -framework "SnapKit" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "Valet" -framework "XCGLogger" -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 -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests.modulemap b/Pods/Target Support Files/Pods-Quests/Pods-Quests.modulemap deleted file mode 100644 index e1912b3..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Pods_Quests { - umbrella header "Pods-Quests-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests.release.xcconfig b/Pods/Target Support Files/Pods-Quests/Pods-Quests.release.xcconfig deleted file mode 100644 index f5d33f1..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils" "${PODS_CONFIGURATION_BUILD_DIR}/Down" "${PODS_CONFIGURATION_BUILD_DIR}/Netable" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/Valet" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils/CwlUtils.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Down/Down.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Netable/Netable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Valet/Valet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CwlUtils" -framework "Down" -framework "Netable" -framework "ObjcExceptionBridging" -framework "Reachability" -framework "Security" -framework "SnapKit" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "Valet" -framework "XCGLogger" -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 -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Pods-Quests/Pods-Quests.releaseinternal.xcconfig b/Pods/Target Support Files/Pods-Quests/Pods-Quests.releaseinternal.xcconfig deleted file mode 100644 index f5d33f1..0000000 --- a/Pods/Target Support Files/Pods-Quests/Pods-Quests.releaseinternal.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils" "${PODS_CONFIGURATION_BUILD_DIR}/Down" "${PODS_CONFIGURATION_BUILD_DIR}/Netable" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults" "${PODS_CONFIGURATION_BUILD_DIR}/Valet" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Alamofire/Alamofire.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/CwlUtils/CwlUtils.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Down/Down.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Netable/Netable.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging/ObjcExceptionBridging.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift/Reachability.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SnapKit/SnapKit.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON/SwiftyJSON.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults/SwiftyUserDefaults.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/Valet/Valet.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger/XCGLogger.framework/Headers" -LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_LDFLAGS = $(inherited) -framework "Alamofire" -framework "CwlUtils" -framework "Down" -framework "Netable" -framework "ObjcExceptionBridging" -framework "Reachability" -framework "Security" -framework "SnapKit" -framework "SwiftyJSON" -framework "SwiftyUserDefaults" -framework "SystemConfiguration" -framework "Valet" -framework "XCGLogger" -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 -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist deleted file mode 100644 index e2771ff..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>5.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m deleted file mode 100644 index 5b7a617..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_ReachabilitySwift : NSObject -@end -@implementation PodsDummy_ReachabilitySwift -@end diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h deleted file mode 100644 index 4013829..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double ReachabilityVersionNumber; -FOUNDATION_EXPORT const unsigned char ReachabilityVersionString[]; - diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig deleted file mode 100644 index 3441ec9..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "SystemConfiguration" -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}/ReachabilitySwift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap deleted file mode 100644 index 60076d3..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Reachability { - umbrella header "ReachabilitySwift-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig b/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig deleted file mode 100644 index 3441ec9..0000000 --- a/Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ReachabilitySwift -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "SystemConfiguration" -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}/ReachabilitySwift -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SnapKit/SnapKit-Info.plist b/Pods/Target Support Files/SnapKit/SnapKit-Info.plist deleted file mode 100644 index 8d87a1a..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>5.0.1</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/SnapKit/SnapKit-dummy.m b/Pods/Target Support Files/SnapKit/SnapKit-dummy.m deleted file mode 100644 index b44e8e5..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_SnapKit : NSObject -@end -@implementation PodsDummy_SnapKit -@end diff --git a/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch b/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h b/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h deleted file mode 100644 index 9db6752..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double SnapKitVersionNumber; -FOUNDATION_EXPORT const unsigned char SnapKitVersionString[]; - diff --git a/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig b/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig deleted file mode 100644 index 0c7c84f..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit -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}/SnapKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SnapKit/SnapKit.modulemap b/Pods/Target Support Files/SnapKit/SnapKit.modulemap deleted file mode 100644 index 4b3e47b..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SnapKit { - umbrella header "SnapKit-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig b/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig deleted file mode 100644 index 0c7c84f..0000000 --- a/Pods/Target Support Files/SnapKit/SnapKit.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SnapKit -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}/SnapKit -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftLint/SwiftLint.debug.xcconfig b/Pods/Target Support Files/SwiftLint/SwiftLint.debug.xcconfig deleted file mode 100644 index 1f9084d..0000000 --- a/Pods/Target Support Files/SwiftLint/SwiftLint.debug.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftLint -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftLint -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftLint/SwiftLint.release.xcconfig b/Pods/Target Support Files/SwiftLint/SwiftLint.release.xcconfig deleted file mode 100644 index 1f9084d..0000000 --- a/Pods/Target Support Files/SwiftLint/SwiftLint.release.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftLint -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -PODS_BUILD_DIR = ${BUILD_DIR} -PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/SwiftLint -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist deleted file mode 100644 index e2771ff..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>5.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-dummy.m b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-dummy.m deleted file mode 100644 index 3159bec..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_SwiftyJSON : NSObject -@end -@implementation PodsDummy_SwiftyJSON -@end diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h deleted file mode 100644 index e0ef27e..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double SwiftyJSONVersionNumber; -FOUNDATION_EXPORT const unsigned char SwiftyJSONVersionString[]; - diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.debug.xcconfig b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.debug.xcconfig deleted file mode 100644 index cdb0d30..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON -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}/SwiftyJSON -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.modulemap b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.modulemap deleted file mode 100644 index 6f41751..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SwiftyJSON { - umbrella header "SwiftyJSON-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.release.xcconfig b/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.release.xcconfig deleted file mode 100644 index cdb0d30..0000000 --- a/Pods/Target Support Files/SwiftyJSON/SwiftyJSON.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyJSON -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}/SwiftyJSON -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist deleted file mode 100644 index 3424ca6..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>4.0.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-dummy.m b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-dummy.m deleted file mode 100644 index 81588e3..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_SwiftyUserDefaults : NSObject -@end -@implementation PodsDummy_SwiftyUserDefaults -@end diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-umbrella.h b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-umbrella.h deleted file mode 100644 index 5e5408d..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double SwiftyUserDefaultsVersionNumber; -FOUNDATION_EXPORT const unsigned char SwiftyUserDefaultsVersionString[]; - diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.debug.xcconfig b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.debug.xcconfig deleted file mode 100644 index fb58a33..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.debug.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults -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}/SwiftyUserDefaults -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap deleted file mode 100644 index fabe6eb..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module SwiftyUserDefaults { - umbrella header "SwiftyUserDefaults-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.release.xcconfig b/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.release.xcconfig deleted file mode 100644 index fb58a33..0000000 --- a/Pods/Target Support Files/SwiftyUserDefaults/SwiftyUserDefaults.release.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/SwiftyUserDefaults -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}/SwiftyUserDefaults -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Valet/Valet-Info.plist b/Pods/Target Support Files/Valet/Valet-Info.plist deleted file mode 100644 index cd98f8a..0000000 --- a/Pods/Target Support Files/Valet/Valet-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>4.1.1</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/Valet/Valet-dummy.m b/Pods/Target Support Files/Valet/Valet-dummy.m deleted file mode 100644 index 6663196..0000000 --- a/Pods/Target Support Files/Valet/Valet-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_Valet : NSObject -@end -@implementation PodsDummy_Valet -@end diff --git a/Pods/Target Support Files/Valet/Valet-prefix.pch b/Pods/Target Support Files/Valet/Valet-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/Valet/Valet-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/Valet/Valet-umbrella.h b/Pods/Target Support Files/Valet/Valet-umbrella.h deleted file mode 100644 index 0a491b3..0000000 --- a/Pods/Target Support Files/Valet/Valet-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "Valet.h" - -FOUNDATION_EXPORT double ValetVersionNumber; -FOUNDATION_EXPORT const unsigned char ValetVersionString[]; - diff --git a/Pods/Target Support Files/Valet/Valet.debug.xcconfig b/Pods/Target Support Files/Valet/Valet.debug.xcconfig deleted file mode 100644 index a20eb14..0000000 --- a/Pods/Target Support Files/Valet/Valet.debug.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Valet -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "Security" -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}/Valet -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/Valet/Valet.modulemap b/Pods/Target Support Files/Valet/Valet.modulemap deleted file mode 100644 index f59e80b..0000000 --- a/Pods/Target Support Files/Valet/Valet.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Valet { - umbrella header "Valet-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/Valet/Valet.release.xcconfig b/Pods/Target Support Files/Valet/Valet.release.xcconfig deleted file mode 100644 index a20eb14..0000000 --- a/Pods/Target Support Files/Valet/Valet.release.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Valet -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -OTHER_LDFLAGS = $(inherited) -framework "Security" -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}/Valet -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger-Info.plist b/Pods/Target Support Files/XCGLogger/XCGLogger-Info.plist deleted file mode 100644 index 2eb204d..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger-Info.plist +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>CFBundleDevelopmentRegion</key> - <string>en</string> - <key>CFBundleExecutable</key> - <string>${EXECUTABLE_NAME}</string> - <key>CFBundleIdentifier</key> - <string>${PRODUCT_BUNDLE_IDENTIFIER}</string> - <key>CFBundleInfoDictionaryVersion</key> - <string>6.0</string> - <key>CFBundleName</key> - <string>${PRODUCT_NAME}</string> - <key>CFBundlePackageType</key> - <string>FMWK</string> - <key>CFBundleShortVersionString</key> - <string>6.1.0</string> - <key>CFBundleSignature</key> - <string>????</string> - <key>CFBundleVersion</key> - <string>${CURRENT_PROJECT_VERSION}</string> - <key>NSPrincipalClass</key> - <string></string> -</dict> -</plist> diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger-dummy.m b/Pods/Target Support Files/XCGLogger/XCGLogger-dummy.m deleted file mode 100644 index 3850b97..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import <Foundation/Foundation.h> -@interface PodsDummy_XCGLogger : NSObject -@end -@implementation PodsDummy_XCGLogger -@end diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger-prefix.pch b/Pods/Target Support Files/XCGLogger/XCGLogger-prefix.pch deleted file mode 100644 index 082f8af..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger-prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger-umbrella.h b/Pods/Target Support Files/XCGLogger/XCGLogger-umbrella.h deleted file mode 100644 index a4d2c9f..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger-umbrella.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifdef __OBJC__ -#import <Cocoa/Cocoa.h> -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - - -FOUNDATION_EXPORT double XCGLoggerVersionNumber; -FOUNDATION_EXPORT const unsigned char XCGLoggerVersionString[]; - diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger.debug.xcconfig b/Pods/Target Support Files/XCGLogger/XCGLogger.debug.xcconfig deleted file mode 100644 index a4da009..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger.debug.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" -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}/XCGLogger -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SWIFT_VERSION = 4.2 -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger.modulemap b/Pods/Target Support Files/XCGLogger/XCGLogger.modulemap deleted file mode 100644 index 28cab08..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module XCGLogger { - umbrella header "XCGLogger-umbrella.h" - - export * - module * { export * } -} diff --git a/Pods/Target Support Files/XCGLogger/XCGLogger.release.xcconfig b/Pods/Target Support Files/XCGLogger/XCGLogger.release.xcconfig deleted file mode 100644 index a4da009..0000000 --- a/Pods/Target Support Files/XCGLogger/XCGLogger.release.xcconfig +++ /dev/null @@ -1,13 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/XCGLogger -FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ObjcExceptionBridging" -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}/XCGLogger -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES -SWIFT_VERSION = 4.2 -USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES diff --git a/Pods/Valet/LICENSE b/Pods/Valet/LICENSE deleted file mode 100644 index 65ee1c1..0000000 --- a/Pods/Valet/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. \ No newline at end of file diff --git a/Pods/Valet/README.md b/Pods/Valet/README.md deleted file mode 100644 index 4e5055e..0000000 --- a/Pods/Valet/README.md +++ /dev/null @@ -1,266 +0,0 @@ -# Valet - -[![CI Status](https://travis-ci.org/square/Valet.svg?branch=master)](https://travis-ci.org/square/Valet) -[![Carthage Compatibility](https://img.shields.io/badge/carthage-✓-e2c245.svg)](https://github.com/Carthage/Carthage/) -[![Version](https://img.shields.io/cocoapods/v/Valet.svg)](https://cocoapods.org/pods/Valet) -[![License](https://img.shields.io/cocoapods/l/Valet.svg)](https://cocoapods.org/pods/Valet) -[![Platform](https://img.shields.io/cocoapods/p/Valet.svg)](https://cocoapods.org/pods/Valet) - -Valet lets you securely store data in the iOS, tvOS, watchOS, or macOS Keychain without knowing a thing about how the Keychain works. It’s easy. We promise. - -## Getting Started - -### CocoaPods - -Install with [CocoaPods](http://cocoapods.org) by adding the following to your `Podfile`: - -on iOS: - -``` -platform :ios, '9.0' -use_frameworks! -pod 'Valet' -``` - -on tvOS: - -``` -platform :tvos, '9.0' -use_frameworks! -pod 'Valet' -``` - -on watchOS: - -``` -platform :watchos, '2.0' -use_frameworks! -pod 'Valet' -``` - -on macOS: - -``` -platform :osx, '10.11' -use_frameworks! -pod 'Valet' -``` - -### Carthage - -Install with [Carthage](https://github.com/Carthage/Carthage) by adding the following to your `Cartfile`: - -```ogdl -github "Square/Valet" -``` - -Run `carthage` to build the framework and drag the built `Valet.framework` into your Xcode project. - -### Swift Package Manager - -Install with [Swift Package Manager](https://github.com/apple/swift-package-manager) by adding the following to your `Package.swift`: - -```swift -dependencies: [ - .package(url: "https://github.com/Square/Valet", from: "4.0.0"), -], -``` - -### Submodules - -Or manually checkout the submodule with `git submodule add git@github.com:Square/Valet.git`, drag Valet.xcodeproj to your project, and add Valet as a build dependency. - -## Usage - -### Basic Initialization - -```swift -let myValet = Valet.valet(with: Identifier(nonEmpty: "Druidia")!, accessibility: .whenUnlocked) -``` - -```objc -VALValet *const myValet = [VALValet valetWithIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked]; -``` - -To begin storing data securely using Valet, you need to create a Valet instance with: - -* An identifier – a non-empty string that is used to identify this Valet. The Swift API uses an `Identifier` wrapper class to enforce the non-empty constraint. -* An accessibility value – an enum ([Accessibility](Sources/Valet/Accessibility.swift#L25)) that defines when you will be able to persist and retrieve data. - -This `myValet` instance can be used to store and retrieve data securely on this device, but only when the device is unlocked. - -#### Choosing the Best Identifier - -The identifier you choose for your Valet is used to create a sandbox for the data your Valet writes to the keychain. Two Valets of the same type created via the same initializer, accessibility value, and identifier will be able to read and write the same key:value pairs; Valets with different identifiers each have their own sandbox. Choose an identifier that describes the kind of data your Valet will protect. You do not need to include your application name or bundle identifier in your Valet’s identifier. - -#### Choosing a User-friendly Identifier on macOS - -```swift -let myValet = Valet.valet(withExplicitlySet: Identifier(nonEmpty: "Druidia")!, accessibility: .whenUnlocked) -``` - -```objc -VALValet *const myValet = [VALValet valetWithExplicitlySetIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked]; -``` - -Mac apps signed with a developer ID may see their Valet’s identifier [shown to their users](https://github.com/square/Valet/issues/140). ⚠️⚠️ While it is possible to explicitly set a user-friendly identifier, note that doing so bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs ⚠️⚠️. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - -#### Choosing the Best Accessibility Value - -The Accessibility enum is used to determine when your secrets can be accessed. It’s a good idea to use the strictest accessibility possible that will allow your app to function. For example, if your app does not run in the background you will want to ensure the secrets can only be read when the phone is unlocked by using `.whenUnlocked` or `.whenUnlockedThisDeviceOnly`. - -#### Changing an Accessibility Value After Persisting Data - -```swift -let myOldValet = Valet.valet(withExplicitlySet: Identifier(nonEmpty: "Druidia")!, accessibility: .whenUnlocked) -let myNewValet = Valet.valet(withExplicitlySet: Identifier(nonEmpty: "Druidia")!, accessibility: .afterFirstUnlock) -try? myNewValet.migrateObjects(from: myOldValet, removeOnCompletion: true) -``` - -```objc -VALValet *const myOldValet = [VALValet valetWithExplicitlySetIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked]; -VALValet *const myNewValet = [VALValet valetWithExplicitlySetIdentifier:@"Druidia" accessibility:VALAccessibilityAfterFirstUnlock]; -[myNewValet migrateObjectsFrom:myOldValet removeOnCompletion:true error:nil]; -``` - -The Valet type, identifier, accessibility value, and initializer chosen to create a Valet are combined to create a sandbox within the keychain. This behavior ensures that different Valets can not read or write one another's key:value pairs. If you change a Valet's accessibility after persisting key:value pairs, you must migrate the key:value pairs from the Valet with the no-longer-desired accessibility to the Valet with the desired accessibility to avoid data loss. - -### Reading and Writing - -```swift -let username = "Skroob" -try? myValet.setString("12345", forKey: username) -let myLuggageCombination = myValet.string(forKey: username) -``` - -```objc -NSString *const username = @"Skroob"; -[myValet setString:@"12345" forKey:username error:nil]; -NSString *const myLuggageCombination = [myValet stringForKey:username error:nil]; -``` - -In addition to allowing the storage of strings, Valet allows the storage of `Data` objects via `setObject(_ object: Data, forKey key: Key)` and `object(forKey key: String)`. Valets created with a different class type, via a different initializer, or with a different accessibility attribute will not be able to read or modify values in `myValet`. - -### Sharing Secrets Among Multiple Applications Using a Keychain Sharing Entitlement - -```swift -let mySharedValet = Valet.sharedGroupValet(with: SharedGroupIdentifier(appIDPrefix: "AppID12345", nonEmptyGroup: "Druidia")!, accessibility: .whenUnlocked) -``` - -```objc -VALValet *const mySharedValet = [VALValet sharedGroupValetWithAppIDPrefix:@"AppID12345" sharedGroupIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked]; -``` - -This instance can be used to store and retrieve data securely across any app written by the same developer that has `AppID12345.Druidia` (or `$(AppIdentifierPrefix)Druidia`) set as a value for the `keychain-access-groups` key in the app’s `Entitlements`, where `AppID12345` is the application’s [App ID prefix](https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps#2974920). This Valet is accessible when the device is unlocked. Note that `myValet` and `mySharedValet` can not read or modify one another’s values because the two Valets were created with different initializers. All Valet types can share secrets across applications written by the same developer by using the `sharedGroupValet` initializer. - -### Sharing Secrets Among Multiple Applications Using an App Groups Entitlement - -```swift -let mySharedValet = Valet.sharedGroupValet(with: SharedGroupIdentifier(groupPrefix: "group", nonEmptyGroup: "Druidia")!, accessibility: .whenUnlocked) -``` - -```objc -VALValet *const mySharedValet = [VALValet sharedGroupValetWithGroupPrefix:@"group" sharedGroupIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked]; -``` - -This instance can be used to store and retrieve data securely across any app written by the same developer that has `group.Druidia` set as a value for the `com.apple.security.application-groups` key in the app’s `Entitlements`. This Valet is accessible when the device is unlocked. Note that `myValet` and `mySharedValet` cannot read or modify one another’s values because the two Valets were created with different initializers. All Valet types can share secrets across applications written by the same developer by using the `sharedGroupValet` initializer. Note that on macOS, the `groupPrefix` [must be the App ID prefix](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups#discussion). - -### Sharing Secrets Across Devices with iCloud - -```swift -let myCloudValet = Valet.iCloudValet(with: Identifier(nonEmpty: "Druidia")!, accessibility: .whenUnlocked) -``` - -```objc -VALValet *const myCloudValet = [VALValet iCloudValetWithIdentifier:@"Druidia" accessibility:VALAccessibilityWhenUnlocked]; -``` - -This instance can be used to store and retrieve data that can be retrieved by this app on other devices logged into the same iCloud account with iCloud Keychain enabled. If iCloud Keychain is not enabled on this device, secrets can still be read and written, but will not sync to other devices. Note that `myCloudValet` can not read or modify values in either `myValet` or `mySharedValet` because `myCloudValet` was created a different initializer. - -### Protecting Secrets with Face ID, Touch ID, or device Passcode - -```swift -let mySecureEnclaveValet = SecureEnclaveValet.valet(with: Identifier(nonEmpty: "Druidia")!, accessControl: .userPresence) -``` - -```objc -VALSecureEnclaveValet *const mySecureEnclaveValet = [VALSecureEnclaveValet valetWithIdentifier:@"Druidia" accessControl:VALAccessControlUserPresence]; -``` - -This instance can be used to store and retrieve data in the Secure Enclave. Each time data is retrieved from this Valet, the user will be prompted to confirm their presence via Face ID, Touch ID, or by entering their device passcode. *If no passcode is set on the device, this instance will be unable to access or store data.* Data is removed from the Secure Enclave when the user removes a passcode from the device. Storing data using `SecureEnclaveValet` is the most secure way to store data on iOS, tvOS, watchOS, and macOS. - -```swift -let mySecureEnclaveValet = SinglePromptSecureEnclaveValet.valet(with: Identifier(nonEmpty: "Druidia")!, accessControl: .userPresence) -``` - -```objc -VALSinglePromptSecureEnclaveValet *const mySecureEnclaveValet = [VALSinglePromptSecureEnclaveValet valetWithIdentifier:@"Druidia" accessControl:VALAccessControlUserPresence]; -``` - -This instance also stores and retrieves data in the Secure Enclave, but does not require the user to confirm their presence each time data is retrieved. Instead, the user will be prompted to confirm their presence only on the first data retrieval. A `SinglePromptSecureEnclaveValet` instance can be forced to prompt the user on the next data retrieval by calling the instance method `requirePromptOnNextAccess()`. - -**In order for your customers not to receive a prompt that your app does not yet support Face ID, you must set a value for the Privacy - Face ID Usage Description [(NSFaceIDUsageDescription)](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW75) key in your app’s Info.plist.** - -### Thread Safety - -Valet is built to be thread safe: it is possible to use a Valet instance on any queue or thread. Valet instances ensure that code that talks to the Keychain is atomic – it is impossible to corrupt data in Valet by reading and writing on multiple queues simultaneously. - -However, because the Keychain is effectively disk storage, there is no guarantee that reading and writing items is fast - accessing a Valet instance from the main queue can result in choppy animations or blocked UI. As a result, we recommend utilizing your Valet instance on a background queue; treat Valet like you treat other code that reads from and writes to disk. - -### Migrating Existing Keychain Values into Valet - -Already using the Keychain and no longer want to maintain your own Keychain code? We feel you. That’s why we wrote `migrateObjects(matching query: [String : AnyHashable], removeOnCompletion: Bool)`. This method allows you to migrate all your existing Keychain entries to a Valet instance in one line. Just pass in a Dictionary with the `kSecClass`, `kSecAttrService`, and any other `kSecAttr*` attributes you use – we’ll migrate the data for you. If you need more control over how your data is migrated, use `migrateObjects(matching query: [String : AnyHashable], compactMap: (MigratableKeyValuePair<AnyHashable>) throws -> MigratableKeyValuePair<String>?)` to filter or remap key:value pairs as part of your migration. - -### Integrating Valet into a macOS application - -Your macOS application must have the Keychain Sharing entitlement in order to use Valet, even if your application does not intend to share keychain data between applications. For instructions on how to add a Keychain Sharing entitlement to your application, read [Apple's documentation on the subject](https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps#2974918). For more information on why this requirement exists, see [issue #213](https://github.com/square/Valet/issues/213). - -If your macOS application supports macOS 10.14 or prior, you must run `myValet.migrateObjectsFromPreCatalina()` before reading values from a Valet. macOS Catalina introduced a breaking change to the macOS keychain, requiring that macOS keychain items that utilize `kSecAttrAccessible` or `kSecAttrAccessGroup` set `kSecUseDataProtectionKeychain` to `true` [when writing or accessing](https://developer.apple.com/documentation/security/ksecusedataprotectionkeychain) these items. Valet’s `migrateObjectsFromPreCatalina()` upgrades items entered into the keychain on older macOS devices or other operating systems to include the key:value pair `kSecUseDataProtectionKeychain:true`. Note that Valets that share keychain items between devices with iCloud are exempt from this requirement. Similarly, `SecureEnclaveValet` and `SinglePromptSecureEnclaveValet` are exempt from this requirement. - -### Debugging - -Valet guarantees it will never fail to write to or read from the keychain unless `canAccessKeychain()` returns `false`. There are only a few cases that can lead to the keychain being inaccessible: - -1. Using the wrong `Accessibility` for your use case. Examples of improper use include using `.whenPasscodeSetThisDeviceOnly` when there is no passcode set on the device, or using `.whenUnlocked` when running in the background. -2. Initializing a Valet with shared access group Valet when the shared access group identifier is not in your entitlements file. -3. Using `SecureEnclaveValet` on an iOS device that doesn’t have a Secure Enclave. The Secure Enclave was introduced with the [A7 chip](https://www.apple.com/business/docs/iOS_Security_Guide.pdf), which [first appeared](https://en.wikipedia.org/wiki/Apple_A7#Products_that_include_the_Apple_A7) in the iPhone 5S, iPad Air, and iPad Mini 2. -4. Running your app in DEBUG from Xcode. Xcode sometimes does not properly sign your app, which causes a [failure to access keychain](https://github.com/square/Valet/issues/10#issuecomment-114408954) due to entitlements. If you run into this issue, just hit Run in Xcode again. This signing issue will not occur in properly signed (not DEBUG) builds. -5. Running your app on device or in the simulator with a debugger attached may also [cause an entitlements error](https://forums.developer.apple.com/thread/4743) to be returned when reading from or writing to the keychain. To work around this issue on device, run the app without the debugger attached. After running once without the debugger attached the keychain will usually behave properly for a few runs with the debugger attached before the process needs to be repeated. -6. Running your app or unit tests without the application-identifier entitlement. Xcode 8 introduced a requirement that all schemes must be signed with the application-identifier entitlement to access the keychain. To satisfy this requirement when running unit tests, your unit tests must be run inside of a host application. - -## Requirements - -* Xcode 11.0 or later. Xcode 10 and Xcode 9 require [Valet version 3.2.8](https://github.com/square/Valet/releases/tag/3.2.8). Earlier versions of Xcode require [Valet version 2.4.2](https://github.com/square/Valet/releases/tag/2.4.2). -* iOS 9 or later. -* tvOS 9 or later. -* watchOS 2 or later. -* macOS 10.11 or later. - -## Migrating from prior Valet versions - -The good news: most Valet configurations do _not_ have to migrate keychain data when upgrading from an older version of Valet. All Valet objects are backwards compatible with their counterparts from prior versions. We have exhaustive unit tests to prove it (search for `test_backwardsCompatibility`). Valets that have had their configurations deprecated by Apple will need to migrate stored data. - -The bad news: there are multiple source-breaking API changes from prior versions. - -Both guides below explain the changes required to upgrade to Valet 4. - -### Migrating from Valet 2 - -1. Initializers have changed in both Swift and Objective-C - both languages use class methods now, which felt more semantically honest (a lot of the time you’re not instantiating a new Valet, you’re re-accessing one you’ve already created). [See example usage above](#basic-initialization). -1. `VALSynchronizableValet` (which allowed keychains to be synced to iCloud) has been replaced by a `Valet.iCloudValet(with:accessibility:)` (or `+[VALValet iCloudValetWithIdentifier:accessibility:]` in Objective-C). [See examples above](#sharing-secrets-across-devices-with-icloud). -1. `VALAccessControl` has been renamed to `SecureEnclaveAccessControl` (`VALSecureEnclaveAccessControl` in Objective-C). This enum no longer references `TouchID`; instead it refers to unlocking with `biometric` due to the introduction of Face ID. -1. `Valet`, `SecureEnclaveValet`, and `SinglePromptSecureEnclaveValet` are no longer in the same inheritance tree. All three now inherit directly from `NSObject` and use composition to share code. If you were relying on the subclass hierarchy before, 1) that might be a code smell 2) consider declaring a protocol for the shared behavior you were expecting to make your migration to Valet 3 easier. - -You'll also need to continue reading through the [migration from Valet 3](#migration-from-valet-3) section below. - -### Migrating from Valet 3 - -1. The accessibility values `always` and `alwaysThisDeviceOnly` have been removed from Valet, because Apple has deprecated their counterparts (see the documentation for [kSecAttrAccessibleAlways](https://developer.apple.com/documentation/security/ksecattraccessiblealways) and [kSecAttrAccessibleAlwaysThisDeviceOnly](https://developer.apple.com/documentation/security/ksecattraccessiblealwaysthisdeviceonly)). To migrate values stored with `always` accessibility, use the method `migrateObjectsFromAlwaysAccessibleValet(removeOnCompletion:)` on a Valet with your new preferred accessibility. To migrate values stored with `alwaysThisDeviceOnly` accessibility, use the method `migrateObjectsFromAlwaysAccessibleThisDeviceOnlyValet(removeOnCompletion:)` on a Valet with your new preferred accessibility. -1. Most APIs that returned optionals or `Bool` values have been migrated to returning a nonoptional and throwing if an error is encountered. Ignoring the error that can be thrown by each API will keep your code flow behaving the same as it did before. Walking through one example: in Swift, `let secret: String? = myValet.string(forKey: myKey)` becomes `let secret: String? = try? myValet.string(forKey: myKey)`. In Objective-C, `NSString *const secret = [myValet stringForKey:myKey];` becomes `NSString *const secret = [myValet stringForKey:myKey error:nil];`. If you're interested in the reason data wasn't returned, use a [do-catch](https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html#ID541) statement in Swift, or pass in an `NSError` to each API call and inspect the output in Objective-C. Each method clearly documents the `Error` type it can `throw`. [See examples above](#reading-and-writing). -1. The class method used to create a Valet that can share secrets between applications using keychain shared access groups has changed. In order to prevent the incorrect detection of the App ID prefix [in rare circumstances](https://github.com/square/Valet/pull/218), the App ID prefix must now be explicitly passed into these methods. [See examples above](#sharing-secrets-across-devices-with-icloud). - -## Contributing - -We’re glad you’re interested in Valet, and we’d love to see where you take it. Please read our [contributing guidelines](Contributing.md) prior to submitting a Pull Request. - -Thanks, and please *do* take it for a joyride! diff --git a/Pods/Valet/Sources/Valet/Accessibility.swift b/Pods/Valet/Sources/Valet/Accessibility.swift deleted file mode 100644 index adb0f09..0000000 --- a/Pods/Valet/Sources/Valet/Accessibility.swift +++ /dev/null @@ -1,76 +0,0 @@ -// -// Accessibility.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -@objc(VALAccessibility) -public enum Accessibility: Int, CaseIterable, CustomStringConvertible, Equatable { - /// Valet data can only be accessed while the device is unlocked. This attribute is recommended for data that only needs to be accessible while the application is in the foreground. Valet data with this attribute will migrate to a new device when using encrypted backups. - case whenUnlocked = 1 - /// Valet data can only be accessed once the device has been unlocked after a restart. This attribute is recommended for data that needs to be accessible by background applications. Valet data with this attribute will migrate to a new device when using encrypted backups. - case afterFirstUnlock = 2 - - /// Valet data can only be accessed while the device is unlocked. This attribute is recommended for items that only need to be accessible while the application is in the foreground. Valet data with this attribute will never migrate to a new device, so these items will be missing after a backup is restored to a new device. No items can be stored in this class on devices without a passcode. Disabling the device passcode will cause all items in this class to be deleted. - case whenPasscodeSetThisDeviceOnly = 4 - /// Valet data can only be accessed while the device is unlocked. This is recommended for data that only needs to be accessible while the application is in the foreground. Valet data with this attribute will never migrate to a new device, so these items will be missing after a backup is restored to a new device. - case whenUnlockedThisDeviceOnly = 5 - /// Valet data can only be accessed once the device has been unlocked after a restart. This is recommended for items that need to be accessible by background applications. Valet data with this attribute will never migrate to a new device, so these items will be missing after a backup is restored to a new device. - case afterFirstUnlockThisDeviceOnly = 6 - - // MARK: CustomStringConvertible - - public var description: String { - switch self { - case .afterFirstUnlock: - return "AccessibleAfterFirstUnlock" - case .afterFirstUnlockThisDeviceOnly: - return "AccessibleAfterFirstUnlockThisDeviceOnly" - case .whenPasscodeSetThisDeviceOnly: - return "AccessibleWhenPasscodeSetThisDeviceOnly" - case .whenUnlocked: - return "AccessibleWhenUnlocked" - case .whenUnlockedThisDeviceOnly: - return "AccessibleWhenUnlockedThisDeviceOnly" - } - } - - // MARK: Public Properties - - public var secAccessibilityAttribute: String { - let accessibilityAttribute: CFString - - switch self { - case .afterFirstUnlock: - accessibilityAttribute = kSecAttrAccessibleAfterFirstUnlock - case .afterFirstUnlockThisDeviceOnly: - accessibilityAttribute = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly - case .whenPasscodeSetThisDeviceOnly: - accessibilityAttribute = kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly - case .whenUnlocked: - accessibilityAttribute = kSecAttrAccessibleWhenUnlocked - case .whenUnlockedThisDeviceOnly: - accessibilityAttribute = kSecAttrAccessibleWhenUnlockedThisDeviceOnly - } - - return accessibilityAttribute as String - } - -} diff --git a/Pods/Valet/Sources/Valet/CloudAccessibility.swift b/Pods/Valet/Sources/Valet/CloudAccessibility.swift deleted file mode 100644 index 5bc13c7..0000000 --- a/Pods/Valet/Sources/Valet/CloudAccessibility.swift +++ /dev/null @@ -1,52 +0,0 @@ -// -// CloudAccessibility.swift -// Valet -// -// Created by Dan Federman on 9/17/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -@objc(VALCloudAccessibility) -public enum CloudAccessibility: Int, CaseIterable, CustomStringConvertible, Equatable { - /// Valet data can only be accessed while the device is unlocked. This attribute is recommended for data that only needs to be accessible while the application is in the foreground. Valet data with this attribute will migrate to a new device when using encrypted backups. - case whenUnlocked = 1 - /// Valet data can only be accessed once the device has been unlocked after a restart. This attribute is recommended for data that needs to be accessible by background applications. Valet data with this attribute will migrate to a new device when using encrypted backups. - case afterFirstUnlock = 2 - - // MARK: CustomStringConvertible - - public var description: String { - accessibility.description - } - - // MARK: Public Properties - - public var accessibility: Accessibility { - switch self { - case .whenUnlocked: - return .whenUnlocked - case .afterFirstUnlock: - return .afterFirstUnlock - } - } - - public var secAccessibilityAttribute: String { - accessibility.secAccessibilityAttribute - } - -} diff --git a/Pods/Valet/Sources/Valet/Identifier.swift b/Pods/Valet/Sources/Valet/Identifier.swift deleted file mode 100644 index f5435de..0000000 --- a/Pods/Valet/Sources/Valet/Identifier.swift +++ /dev/null @@ -1,45 +0,0 @@ -// -// Identifier.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -public struct Identifier: CustomStringConvertible { - - // MARK: Initialization - - public init?(nonEmpty string: String?) { - guard let string = string, !string.isEmpty else { - return nil - } - - backingString = string - } - - // MARK: CustomStringConvertible - - public var description: String { - return backingString - } - - // MARK: Private Properties - - private let backingString: String -} diff --git a/Pods/Valet/Sources/Valet/Internal/Configuration.swift b/Pods/Valet/Sources/Valet/Internal/Configuration.swift deleted file mode 100644 index dab1e09..0000000 --- a/Pods/Valet/Sources/Valet/Internal/Configuration.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// Configuration.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -internal enum Configuration: CustomStringConvertible { - case valet(Accessibility) - case iCloud(CloudAccessibility) - case secureEnclave(SecureEnclaveAccessControl) - case singlePromptSecureEnclave(SecureEnclaveAccessControl) - - // MARK: CustomStringConvertible - - internal var description: String { - switch self { - case .valet: - return "VALValet" - case .iCloud: - return "VALSynchronizableValet" - case .secureEnclave: - return "VALSecureEnclaveValet" - case .singlePromptSecureEnclave: - return "VALSinglePromptSecureEnclaveValet" - } - } - - // MARK: Internal Properties - - internal var accessibility: Accessibility { - switch self { - case let .valet(accessibility): - return accessibility - case let .iCloud(cloudAccessibility): - return cloudAccessibility.accessibility - case .secureEnclave, .singlePromptSecureEnclave: - return Accessibility.whenPasscodeSetThisDeviceOnly - } - } - - internal var prettyDescription: String { - let configurationDescription: String = { - switch self { - case .valet: - return "(Valet)" - case .iCloud: - return "(iCloud)" - case .secureEnclave: - return "(Secure Enclave)" - case .singlePromptSecureEnclave: - return "(Single Prompt)" - } - }() - return "\(accessibility) \(configurationDescription)" - } -} diff --git a/Pods/Valet/Sources/Valet/Internal/Keychain.swift b/Pods/Valet/Sources/Valet/Internal/Keychain.swift deleted file mode 100644 index d251186..0000000 --- a/Pods/Valet/Sources/Valet/Internal/Keychain.swift +++ /dev/null @@ -1,358 +0,0 @@ -// -// Keychain.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -internal final class Keychain { - - // MARK: Private Static Properties - - private static let canaryKey = "VAL_KeychainCanaryUsername" - private static let canaryValue = "VAL_KeychainCanaryPassword" - - // MARK: Keychain Accessibility - - internal static func canAccess(attributes: [String : AnyHashable]) -> Bool { - func isCanaryValueInKeychain() -> Bool { - do { - let retrievedCanaryValue = try string(forKey: canaryKey, options: attributes) - return retrievedCanaryValue == canaryValue - - } catch { - return false - } - } - - if isCanaryValueInKeychain() { - return true - - } else { - var secItemQuery = attributes - secItemQuery[kSecAttrAccount as String] = canaryKey - secItemQuery[kSecValueData as String] = Data(canaryValue.utf8) - try? SecItem.add(attributes: secItemQuery) - - return isCanaryValueInKeychain() - } - } - - // MARK: Getters - - internal static func string(forKey key: String, options: [String : AnyHashable]) throws -> String { - let data = try object(forKey: key, options: options) - if let string = String(data: data, encoding: .utf8) { - return string - } else { - throw KeychainError.itemNotFound - } - } - - internal static func object(forKey key: String, options: [String : AnyHashable]) throws -> Data { - guard !key.isEmpty else { - throw KeychainError.emptyKey - } - - var secItemQuery = options - secItemQuery[kSecAttrAccount as String] = key - secItemQuery[kSecMatchLimit as String] = kSecMatchLimitOne - secItemQuery[kSecReturnData as String] = true - - return try SecItem.copy(matching: secItemQuery) - } - - // MARK: Setters - - internal static func setString(_ string: String, forKey key: String, options: [String: AnyHashable]) throws { - let data = Data(string.utf8) - try setObject(data, forKey: key, options: options) - } - - internal static func setObject(_ object: Data, forKey key: String, options: [String: AnyHashable]) throws { - guard !key.isEmpty else { - throw KeychainError.emptyKey - } - - guard !object.isEmpty else { - throw KeychainError.emptyValue - } - - var secItemQuery = options - secItemQuery[kSecAttrAccount as String] = key - - #if os(macOS) - // Never update an existing keychain item on OS X, since the existing item could have unauthorized apps in the Access Control List. Fixes zero-day Keychain vuln found here: https://drive.google.com/file/d/0BxxXk1d3yyuZOFlsdkNMSGswSGs/view - try SecItem.deleteItems(matching: secItemQuery) - secItemQuery[kSecValueData as String] = object - try SecItem.add(attributes: secItemQuery) - #else - if performCopy(forKey: key, options: options) == errSecSuccess { - try SecItem.update(attributes: [kSecValueData as String: object], forItemsMatching: secItemQuery) - } else { - secItemQuery[kSecValueData as String] = object - try SecItem.add(attributes: secItemQuery) - } - #endif - } - - // MARK: Removal - - internal static func removeObject(forKey key: String, options: [String : AnyHashable]) throws { - guard !key.isEmpty else { - throw KeychainError.emptyKey - } - - var secItemQuery = options - secItemQuery[kSecAttrAccount as String] = key - - try SecItem.deleteItems(matching: secItemQuery) - } - - internal static func removeAllObjects(matching options: [String : AnyHashable]) throws { - try SecItem.deleteItems(matching: options) - } - - // MARK: Contains - - internal static func performCopy(forKey key: String, options: [String : AnyHashable]) -> OSStatus { - guard !key.isEmpty else { - return errSecParam - } - - var secItemQuery = options - secItemQuery[kSecAttrAccount as String] = key - - return SecItem.performCopy(matching: secItemQuery) - } - - // MARK: AllObjects - - internal static func allKeys(options: [String: AnyHashable]) throws -> Set<String> { - var secItemQuery = options - secItemQuery[kSecMatchLimit as String] = kSecMatchLimitAll - secItemQuery[kSecReturnAttributes as String] = true - - do { - let collection: Any = try SecItem.copy(matching: secItemQuery) - if let singleMatch = collection as? [String: AnyHashable], let singleKey = singleMatch[kSecAttrAccount as String] as? String, singleKey != canaryKey { - return Set([singleKey]) - - } else if let multipleMatches = collection as? [[String: AnyHashable]] { - return Set(multipleMatches.compactMap({ attributes in - let key = attributes[kSecAttrAccount as String] as? String - return key != canaryKey ? key : nil - })) - - } else { - return Set() - } - - } catch KeychainError.itemNotFound { - // Nothing was found. That's fine. - return Set() - } catch { - // This isn't a recoverable error. Throw. - throw error - } - } - - // MARK: Migration - - internal static func migrateObjects(matching query: [String : AnyHashable], into destinationAttributes: [String : AnyHashable], compactMap: (MigratableKeyValuePair<AnyHashable>) throws -> MigratableKeyValuePair<String>?) throws { - guard !query.isEmpty else { - // Migration requires secItemQuery to contain values. - throw MigrationError.invalidQuery - } - - guard query[kSecMatchLimit as String] as? String as CFString? != kSecMatchLimitOne else { - // Migration requires kSecMatchLimit to be set to kSecMatchLimitAll. - throw MigrationError.invalidQuery - } - - guard query[kSecReturnData as String] as? Bool != true else { - // kSecReturnData is not supported in a migration query. - throw MigrationError.invalidQuery - } - - guard query[kSecReturnAttributes as String] as? Bool != false else { - // Migration requires kSecReturnAttributes to be set to kCFBooleanTrue. - throw MigrationError.invalidQuery - } - - guard query[kSecReturnRef as String] as? Bool != true else { - // kSecReturnRef is not supported in a migration query. - throw MigrationError.invalidQuery - } - - guard query[kSecReturnPersistentRef as String] as? Bool != false else { - // Migration requires kSecReturnPersistentRef to be set to kCFBooleanTrue. - throw MigrationError.invalidQuery - } - - guard query[kSecClass as String] as? String as CFString? == kSecClassGenericPassword else { - // Migration requires kSecClass to be set to kSecClassGenericPassword to avoid data loss. - throw MigrationError.invalidQuery - } - - guard query[kSecAttrAccessControl as String] == nil else { - // kSecAttrAccessControl is not supported in a migration query. Keychain items can not be migrated en masse from the Secure Enclave. - throw MigrationError.invalidQuery - } - - var secItemQuery = query - secItemQuery[kSecMatchLimit as String] = kSecMatchLimitAll - secItemQuery[kSecReturnAttributes as String] = true - secItemQuery[kSecReturnData as String] = false - secItemQuery[kSecReturnRef as String] = false - secItemQuery[kSecReturnPersistentRef as String] = true - - let collection: Any = try SecItem.copy(matching: secItemQuery) - let retrievedItemsToMigrate: [[String: AnyHashable]] - if let singleMatch = collection as? [String : AnyHashable] { - retrievedItemsToMigrate = [singleMatch] - - } else if let multipleMatches = collection as? [[String: AnyHashable]] { - retrievedItemsToMigrate = multipleMatches - - } else { - throw MigrationError.dataToMigrateInvalid - } - - // Now that we have the persistent refs with attributes, get the data associated with each keychain entry. - var retrievedItemsToMigrateWithData = [[String : AnyHashable]]() - for retrievedItem in retrievedItemsToMigrate { - guard let retrievedPersistentRef = retrievedItem[kSecValuePersistentRef as String] else { - throw KeychainError.couldNotAccessKeychain - - } - - let retrieveDataQuery: [String : AnyHashable] = [ - kSecValuePersistentRef as String : retrievedPersistentRef, - kSecReturnData as String : true - ] - - do { - let data: Data = try SecItem.copy(matching: retrieveDataQuery) - guard !data.isEmpty else { - throw MigrationError.dataToMigrateInvalid - } - - var retrievedItemToMigrateWithData = retrievedItem - retrievedItemToMigrateWithData[kSecValueData as String] = data - retrievedItemsToMigrateWithData.append(retrievedItemToMigrateWithData) - } catch KeychainError.itemNotFound { - // It is possible for metadata-only items to exist in the keychain that do not have data associated with them. Ignore this entry. - continue - - } catch { - throw error - } - } - - // Sanity check that we are capable of migrating the data. - var keyValuePairsToMigrate = [String: Data]() - for keychainEntry in retrievedItemsToMigrateWithData { - guard let key = keychainEntry[kSecAttrAccount as String] else { - throw MigrationError.keyToMigrateInvalid - } - - guard key as? String != Keychain.canaryKey else { - // We don't care about this key. Move along. - continue - } - - guard let data = keychainEntry[kSecValueData as String] as? Data else { - // This state should be impossible, per Apple's documentation for `kSecValueData`. - throw MigrationError.dataToMigrateInvalid - } - - guard let migratablePair = try compactMap(MigratableKeyValuePair<AnyHashable>(key: key, value: data)) else { - // We don't care about this key. Move along. - continue - } - - guard !migratablePair.key.isEmpty else { - throw MigrationError.keyToMigrateInvalid - } - - guard keyValuePairsToMigrate[migratablePair.key] == nil else { - throw MigrationError.duplicateKeyToMigrate - } - - guard !migratablePair.value.isEmpty else { - throw MigrationError.dataToMigrateInvalid - } - - if Keychain.performCopy(forKey: migratablePair.key, options: destinationAttributes) == errSecItemNotFound { - keyValuePairsToMigrate[migratablePair.key] = migratablePair.value - } else { - throw MigrationError.keyToMigrateAlreadyExistsInValet - } - } - - // Capture the keys in the destination prior to migration beginning. - let keysInKeychainPreMigration = Set(try Keychain.allKeys(options: destinationAttributes)) - - // All looks good. Time to actually migrate. - for keyValuePair in keyValuePairsToMigrate { - do { - try Keychain.setObject(keyValuePair.value, forKey: keyValuePair.key, options: destinationAttributes) - } catch { - revertMigration(into: destinationAttributes, keysInKeychainPreMigration: keysInKeychainPreMigration) - throw error - } - } - } - - internal static func migrateObjects(matching query: [String : AnyHashable], into destinationAttributes: [String : AnyHashable], removeOnCompletion: Bool) throws { - // Capture the keys in the destination prior to migration beginning. - let keysInKeychainPreMigration = Set(try Keychain.allKeys(options: destinationAttributes)) - - // Attempt migration. - try migrateObjects(matching: query, into: destinationAttributes) { keychainKeyValuePair in - guard let key = keychainKeyValuePair.key as? String else { - throw MigrationError.keyToMigrateInvalid - } - return MigratableKeyValuePair(key: key, value: keychainKeyValuePair.value) - } - - // Remove data if requested. - if removeOnCompletion { - do { - try Keychain.removeAllObjects(matching: query) - } catch { - revertMigration(into: destinationAttributes, keysInKeychainPreMigration: keysInKeychainPreMigration) - - throw MigrationError.removalFailed - } - - // We're done! - } - } - - internal static func revertMigration(into destinationAttributes: [String : AnyHashable], keysInKeychainPreMigration: Set<String>) { - if let allKeysPostPotentiallyPartialMigration = try? Keychain.allKeys(options: destinationAttributes) { - let migratedKeys = allKeysPostPotentiallyPartialMigration.subtracting(keysInKeychainPreMigration) - migratedKeys.forEach { migratedKey in - try? Keychain.removeObject(forKey: migratedKey, options: destinationAttributes) - } - } - } -} diff --git a/Pods/Valet/Sources/Valet/Internal/SecItem.swift b/Pods/Valet/Sources/Valet/Internal/SecItem.swift deleted file mode 100644 index 2c0f7af..0000000 --- a/Pods/Valet/Sources/Valet/Internal/SecItem.swift +++ /dev/null @@ -1,159 +0,0 @@ -// -// SecItem.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -internal func execute<ReturnType>(in lock: NSLock, block: () throws -> ReturnType) rethrows -> ReturnType { - lock.lock() - defer { - lock.unlock() - } - return try block() -} - - -internal final class SecItem { - - // MARK: Internal Class Methods - - internal static func copy<DesiredType>(matching query: [String : AnyHashable]) throws -> DesiredType { - if query.isEmpty { - assertionFailure("Must provide a query with at least one item") - } - - var status = errSecNotAvailable - var result: AnyObject? = nil - execute(in: secItemLock) { - status = SecItemCopyMatching(query as CFDictionary, &result) - } - - if status == errSecSuccess { - if let result = result as? DesiredType { - return result - - } else { - // The query failed to pull out a value object of the desired type, but did find metadata matching this query. - // This can happen because either the query didn't ask for return data via [kSecReturnData : true], or because a metadata-only item existed in the keychain. - throw KeychainError.itemNotFound - } - - } else { - throw KeychainError(status: status) - } - } - - internal static func performCopy(matching query: [String : AnyHashable]) -> OSStatus { - guard !query.isEmpty else { - // Must provide a query with at least one item - return errSecParam - } - - var status = errSecNotAvailable - execute(in: secItemLock) { - status = SecItemCopyMatching(query as CFDictionary, nil) - } - - return status - } - - internal static func add(attributes: [String : AnyHashable]) throws { - if attributes.isEmpty { - assertionFailure("Must provide attributes with at least one item") - } - - var status = errSecNotAvailable - var result: AnyObject? = nil - execute(in: secItemLock) { - status = SecItemAdd(attributes as CFDictionary, &result) - } - - switch status { - case errSecSuccess: - // We're done! - break - default: - throw KeychainError(status: status) - } - } - - internal static func update(attributes: [String : AnyHashable], forItemsMatching query: [String : AnyHashable]) throws { - if attributes.isEmpty { - assertionFailure("Must provide attributes with at least one item") - } - - if query.isEmpty { - assertionFailure("Must provide a query with at least one item") - } - - var status = errSecNotAvailable - execute(in: secItemLock) { - status = SecItemUpdate(query as CFDictionary, attributes as CFDictionary) - } - - switch status { - case errSecSuccess: - // We're done! - break - default: - throw KeychainError(status: status) - } - } - - internal static func deleteItems(matching query: [String : AnyHashable]) throws { - if query.isEmpty { - assertionFailure("Must provide a query with at least one item") - } - - var secItemQuery = query - #if os(macOS) - // This line must exist on OS X, but must not exist on iOS. - secItemQuery[kSecMatchLimit as String] = kSecMatchLimitAll - #endif - var status = errSecNotAvailable - execute(in: secItemLock) { - status = SecItemDelete(secItemQuery as CFDictionary) - } - - if status == errSecSuccess { - // We're done! - - } else { - switch KeychainError(status: status) { - case .couldNotAccessKeychain: - throw KeychainError.couldNotAccessKeychain - - case .missingEntitlement: - throw KeychainError.missingEntitlement - - case .emptyKey, - .emptyValue, - .itemNotFound, - .userCancelled: - // We succeeded as long as we can confirm that the item is not in the keychain. - break - } - } - } - - // MARK: Private Properties - - private static let secItemLock = NSLock() -} diff --git a/Pods/Valet/Sources/Valet/Internal/Service.swift b/Pods/Valet/Sources/Valet/Internal/Service.swift deleted file mode 100644 index 016048d..0000000 --- a/Pods/Valet/Sources/Valet/Internal/Service.swift +++ /dev/null @@ -1,146 +0,0 @@ -// -// Service.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -internal enum Service: CustomStringConvertible, Equatable { - case standard(Identifier, Configuration) - case sharedGroup(SharedGroupIdentifier, Configuration) - - #if os(macOS) - case standardOverride(service: Identifier, Configuration) - case sharedGroupOverride(service: SharedGroupIdentifier, Configuration) - #endif - - // MARK: Equatable - - internal static func ==(lhs: Service, rhs: Service) -> Bool { - lhs.description == rhs.description - } - - // MARK: CustomStringConvertible - - internal var description: String { - secService - } - - // MARK: Internal Static Methods - - internal static func standard(with configuration: Configuration, identifier: Identifier, accessibilityDescription: String) -> String { - "VAL_\(configuration.description)_initWithIdentifier:accessibility:_\(identifier)_\(accessibilityDescription)" - } - - internal static func sharedGroup(with configuration: Configuration, identifier: SharedGroupIdentifier, accessibilityDescription: String) -> String { - "VAL_\(configuration.description)_initWithSharedAccessGroupIdentifier:accessibility:_\(identifier.groupIdentifier)_\(accessibilityDescription)" - } - - internal static func sharedGroup(with configuration: Configuration, explicitlySetIdentifier identifier: Identifier, accessibilityDescription: String) -> String { - "VAL_\(configuration.description)_initWithSharedAccessGroupIdentifier:accessibility:_\(identifier)_\(accessibilityDescription)" - } - - // MARK: Internal Methods - - internal func generateBaseQuery() -> [String : AnyHashable] { - var baseQuery: [String : AnyHashable] = [ - kSecClass as String : kSecClassGenericPassword as String, - kSecAttrService as String : secService, - ] - - if #available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *) { - baseQuery[kSecUseDataProtectionKeychain as String] = true - } - - let configuration: Configuration - switch self { - case let .standard(_, desiredConfiguration): - configuration = desiredConfiguration - - case let .sharedGroup(identifier, desiredConfiguration): - baseQuery[kSecAttrAccessGroup as String] = identifier.description - configuration = desiredConfiguration - - #if os(macOS) - case let .standardOverride(_, desiredConfiguration): - configuration = desiredConfiguration - - case let .sharedGroupOverride(identifier, desiredConfiguration): - baseQuery[kSecAttrAccessGroup as String] = identifier.description - configuration = desiredConfiguration - #endif - } - - switch configuration { - case .valet: - baseQuery[kSecAttrAccessible as String] = configuration.accessibility.secAccessibilityAttribute - - case .iCloud: - baseQuery[kSecAttrSynchronizable as String] = true - baseQuery[kSecAttrAccessible as String] = configuration.accessibility.secAccessibilityAttribute - - case let .secureEnclave(desiredAccessControl), - let .singlePromptSecureEnclave(desiredAccessControl): - // Note that kSecAttrAccessControl and kSecAttrAccessible are mutually exclusive. - baseQuery[kSecAttrAccessControl as String] = SecAccessControlCreateWithFlags(nil, kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly, desiredAccessControl.secAccessControl, nil) - } - - return baseQuery - } - - // MARK: Private Methods - - private var secService: String { - var service: String - switch self { - case let .standard(identifier, configuration): - service = Service.standard(with: configuration, identifier: identifier, accessibilityDescription: configuration.accessibility.description) - case let .sharedGroup(identifier, configuration): - service = Service.sharedGroup(with: configuration, identifier: identifier, accessibilityDescription: configuration.accessibility.description) - #if os(macOS) - case let .standardOverride(identifier, _): - service = identifier.description - case let .sharedGroupOverride(identifier, _): - service = identifier.groupIdentifier - #endif - } - - switch self { - case let .standard(_, configuration), - let .sharedGroup(_, configuration): - switch configuration { - case .valet, .iCloud: - // Nothing to do here. - break - - case let .secureEnclave(accessControl), - let .singlePromptSecureEnclave(accessControl): - service += accessControl.description - } - - return service - - #if os(macOS) - case .standardOverride, - .sharedGroupOverride: - return service - #endif - } - } -} diff --git a/Pods/Valet/Sources/Valet/KeychainError.swift b/Pods/Valet/Sources/Valet/KeychainError.swift deleted file mode 100644 index 2a5c1c1..0000000 --- a/Pods/Valet/Sources/Valet/KeychainError.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// KeychainError.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square Inc. -// -// Licensed under the Apache License Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing software -// distributed under the License is distributed on an "AS IS" BASIS -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -@objc(VALKeychainError) -public enum KeychainError: Int, CaseIterable, CustomStringConvertible, Error, Equatable { - /// The keychain could not be accessed. - case couldNotAccessKeychain - /// User dismissed the user-presence prompt. - case userCancelled - /// No data was found for the requested key. - case itemNotFound - /// The application does not have the proper entitlements to perform the requested action. - /// This may be due to an Apple Keychain bug. As a workaround try running on a device that is not attached to a debugger. - /// - SeeAlso: https://forums.developer.apple.com/thread/4743 - case missingEntitlement - /// The key provided is empty. - case emptyKey - /// The value provided is empty. - case emptyValue - - init(status: OSStatus) { - switch status { - case errSecItemNotFound: - self = .itemNotFound - case errSecUserCanceled, - errSecAuthFailed: - self = .userCancelled - case errSecMissingEntitlement: - self = .missingEntitlement - default: - self = .couldNotAccessKeychain - } - } - - // MARK: CustomStringConvertible - - public var description: String { - switch self { - case .couldNotAccessKeychain: return "KeychainError.couldNotAccessKeychain" - case .emptyKey: return "KeychainError.emptyKey" - case .emptyValue: return "KeychainError.emptyValue" - case .itemNotFound: return "KeychainError.itemNotFound" - case .missingEntitlement: return "KeychainError.missingEntitlement" - case .userCancelled: return "KeychainError.userCancelled" - } - } - -} diff --git a/Pods/Valet/Sources/Valet/MigratableKeyValuePair.swift b/Pods/Valet/Sources/Valet/MigratableKeyValuePair.swift deleted file mode 100644 index 736d442..0000000 --- a/Pods/Valet/Sources/Valet/MigratableKeyValuePair.swift +++ /dev/null @@ -1,134 +0,0 @@ -// -// MigratableKeyValuePair.swift -// Valet -// -// Created by Dan Federman on 5/20/20. -// Copyright © 2020 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -/// A struct that represented a key:value pair that can be migrated. -public struct MigratableKeyValuePair<Key: Hashable>: Hashable { - - // MARK: Initialization - - /// Creates a migratable key:value pair with the provided inputs. - /// - Parameters: - /// - key: The key in the key:value pair. - /// - value: The value in the key:value pair. - public init(key: Key, value: Data) { - self.key = key - self.value = value - } - - /// Creates a migratable key:value pair with the provided inputs. - /// - Parameters: - /// - key: The key in the key:value pair. - /// - value: The desired value in the key:value pair, represented as a String. - public init(key: Key, value: String) { - self.key = key - self.value = Data(value.utf8) - } - - // MARK: Public - - /// The key in the key:value pair. - public let key: Key - /// The value in the key:value pair. - public let value: Data -} - -// MARK: - Objective-C Compatibility - -@objc(VALMigratableKeyValuePairInput) -public final class ObjectiveCCompatibilityMigratableKeyValuePairInput: NSObject { - - // MARK: Initialization - - internal init(key: Any, value: Data) { - self.key = key - self.value = value - } - - // MARK: Public - - /// The key in the key:value pair. - @objc - public let key: Any - /// The value in the key:value pair. - @objc - public let value: Data -} - -@objc(VALMigratableKeyValuePairOutput) -public class ObjectiveCCompatibilityMigratableKeyValuePairOutput: NSObject { - - // MARK: Initialization - - /// Creates a migratable key:value pair with the provided inputs. - /// - Parameters: - /// - key: The key in the key:value pair. - /// - value: The value in the key:value pair. - @objc - public init(key: String, value: Data) { - self.key = key - self.value = value - preventMigration = false - } - - /// Creates a migratable key:value pair with the provided inputs. - /// - Parameters: - /// - key: The key in the key:value pair. - /// - stringValue: The desired value in the key:value pair, represented as a String. - @objc - public init(key: String, stringValue: String) { - self.key = key - self.value = Data(stringValue.utf8) - preventMigration = false - } - - // MARK: Public Static Methods - - /// A sentinal `ObjectiveCCompatibilityMigratableKeyValuePairOutput` that conveys that the migration should be prevented. - @available(swift, obsoleted: 1.0) - @objc - public static func preventMigration() -> ObjectiveCCompatibilityMigratableKeyValuePairOutput { - ObjectiveCCompatibilityPreventMigrationOutput() - } - - // MARK: Public - - /// The key in the key:value pair. - @objc - public let key: String - /// The value in the key:value pair. - @objc - public let value: Data - - // MARK: Internal - - internal fileprivate(set) var preventMigration: Bool - -} - -private final class ObjectiveCCompatibilityPreventMigrationOutput: ObjectiveCCompatibilityMigratableKeyValuePairOutput { - - init() { - super.init(key: "", stringValue: "") - preventMigration = true - } - -} diff --git a/Pods/Valet/Sources/Valet/MigrationError.swift b/Pods/Valet/Sources/Valet/MigrationError.swift deleted file mode 100644 index b912a13..0000000 --- a/Pods/Valet/Sources/Valet/MigrationError.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// MigrationError.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/16/17. -// Copyright © 2017 Square Inc. -// -// Licensed under the Apache License Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing software -// distributed under the License is distributed on an "AS IS" BASIS -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -@objc(VALMigrationResult) -public enum MigrationError: Int, CaseIterable, CustomStringConvertible, Error, Equatable { - /// Migration failed because the keychain query was not valid. - case invalidQuery - /// Migration failed because a key staged for migration was invalid. - case keyToMigrateInvalid - /// Migration failed because some data staged for migration was invalid. - case dataToMigrateInvalid - /// Migration failed because two equivalent keys were staged for migration. - case duplicateKeyToMigrate - /// Migration failed because a key staged for migration duplicates a key already managed by Valet. - case keyToMigrateAlreadyExistsInValet - /// Migration failed because removing the migrated data from the keychain failed. - case removalFailed - - // MARK: CustomStringConvertible - - public var description: String { - switch self { - case .invalidQuery: return "MigrationError.invalidQuery" - case .keyToMigrateInvalid: return "MigrationError.keyToMigrateInvalid" - case .dataToMigrateInvalid: return "MigrationError.dataToMigrateInvalid" - case .duplicateKeyToMigrate: return "MigrationError.duplicateKeyToMigrate" - case .keyToMigrateAlreadyExistsInValet: return "MigrationError.keyToMigrateAlreadyExistsInValet" - case .removalFailed: return "MigrationError.removalFailed" - } - } -} diff --git a/Pods/Valet/Sources/Valet/SecureEnclave.swift b/Pods/Valet/Sources/Valet/SecureEnclave.swift deleted file mode 100644 index d8be290..0000000 --- a/Pods/Valet/Sources/Valet/SecureEnclave.swift +++ /dev/null @@ -1,127 +0,0 @@ -// -// SecureEnclave.swift -// Valet -// -// Created by Dan Federman on 9/19/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -public final class SecureEnclave { - - // MARK: Internal Methods - - /// - Parameter service: The service of the keychain slice we want to check if we can access. - /// - Returns: `true` if the keychain is accessible for reading and writing, `false` otherwise. - /// - Note: Determined by writing a value to the keychain and then reading it back out. - internal static func canAccessKeychain(with service: Service) -> Bool { - // To avoid prompting the user for Touch ID or passcode, create a Valet with our identifier and accessibility and ask it if it can access the keychain. - let noPromptValet: Valet - switch service { - #if os(macOS) - case let .standardOverride(identifier, _): - noPromptValet = .valet(with: identifier, accessibility: .whenPasscodeSetThisDeviceOnly) - #endif - case let .standard(identifier, _): - noPromptValet = .valet(with: identifier, accessibility: .whenPasscodeSetThisDeviceOnly) - #if os(macOS) - case let .sharedGroupOverride(identifier, _): - noPromptValet = .sharedGroupValet(withExplicitlySet: identifier, accessibility: .whenPasscodeSetThisDeviceOnly) - #endif - case let .sharedGroup(identifier, _): - noPromptValet = .sharedGroupValet(with: identifier, accessibility: .whenPasscodeSetThisDeviceOnly) - } - - return noPromptValet.canAccessKeychain() - } - - /// - Parameters: - /// - object: A Data value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `object` from the keychain. - /// - options: A base query used to scope the calls in the keychain. - /// - Throws: An error of type `KeychainError`. - internal static func setObject(_ object: Data, forKey key: String, options: [String : AnyHashable]) throws { - // Remove the key before trying to set it. This will prevent us from calling SecItemUpdate on an item stored on the Secure Enclave, which would cause iOS to prompt the user for authentication. - try Keychain.removeObject(forKey: key, options: options) - - try Keychain.setObject(object, forKey: key, options: options) - } - - /// - Parameters: - /// - key: A key used to retrieve the desired object from the keychain. - /// - userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. - /// - options: A base query used to scope the calls in the keychain. - /// - Returns: The data currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - internal static func object(forKey key: String, withPrompt userPrompt: String, options: [String : AnyHashable]) throws -> Data { - var secItemQuery = options - if !userPrompt.isEmpty { - secItemQuery[kSecUseOperationPrompt as String] = userPrompt - } - - return try Keychain.object(forKey: key, options: secItemQuery) - } - - /// - Parameters: - /// - key: The key to look up in the keychain. - /// - options: A base query used to scope the calls in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. - /// - Throws: An error of type `KeychainError`. - internal static func containsObject(forKey key: String, options: [String : AnyHashable]) throws -> Bool { - var secItemQuery = options - secItemQuery[kSecUseAuthenticationUI as String] = kSecUseAuthenticationUIFail - - let status = Keychain.performCopy(forKey: key, options: secItemQuery) - switch status { - case errSecSuccess, - errSecInteractionNotAllowed: - // An item exists in the keychain if we could successfully copy the item, or if we got an error telling us we weren't allowed to copy the item since we couldn't prompt the user. - return true - case errSecItemNotFound: - return false - default: - throw KeychainError(status: status) - } - } - - /// - Parameters: - /// - string: A String value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `string` from the keychain. - /// - options: A base query used to scope the calls in the keychain. - /// - Throws: An error of type `KeychainError`. - internal static func setString(_ string: String, forKey key: String, options: [String : AnyHashable]) throws { - // Remove the key before trying to set it. This will prevent us from calling SecItemUpdate on an item stored on the Secure Enclave, which would cause iOS to prompt the user for authentication. - try Keychain.removeObject(forKey: key, options: options) - - try Keychain.setString(string, forKey: key, options: options) - } - - /// - Parameters: - /// - key: A key used to retrieve the desired object from the keychain. - /// - userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. - /// - options: A base query used to scope the calls in the keychain. - /// - Returns: The string currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - internal static func string(forKey key: String, withPrompt userPrompt: String, options: [String : AnyHashable]) throws -> String { - var secItemQuery = options - if !userPrompt.isEmpty { - secItemQuery[kSecUseOperationPrompt as String] = userPrompt - } - - return try Keychain.string(forKey: key, options: secItemQuery) - } -} diff --git a/Pods/Valet/Sources/Valet/SecureEnclaveAccessControl.swift b/Pods/Valet/Sources/Valet/SecureEnclaveAccessControl.swift deleted file mode 100644 index 522677e..0000000 --- a/Pods/Valet/Sources/Valet/SecureEnclaveAccessControl.swift +++ /dev/null @@ -1,118 +0,0 @@ -// -// SecureEnclaveAccessControl.swift -// Valet -// -// Created by Dan Federman on 9/18/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -@objc(VALSecureEnclaveAccessControl) -public enum SecureEnclaveAccessControl: Int, CustomStringConvertible, Equatable { - /// Access to keychain elements requires user presence verification via Touch ID, Face ID, or device Passcode. Keychain elements are still accessible by Touch ID even if fingers are added or removed. Touch ID does not have to be available or enrolled. - case userPresence = 1 - - /// Access to keychain elements requires user presence verification via Face ID, or any finger enrolled in Touch ID. Keychain elements remain accessible via Face ID or Touch ID after faces or fingers are added or removed. Face ID must be enabled with at least one face enrolled, or Touch ID must be available and at least one finger must be enrolled. - @available(macOS 10.12.1, *) - case biometricAny - - /// Access to keychain elements requires user presence verification via the face currently enrolled in Face ID, or fingers currently enrolled in Touch ID. Previously written keychain elements become inaccessible when faces or fingers are added or removed. Face ID must be enabled with at least one face enrolled, or Touch ID must be available and at least one finger must be enrolled. - @available(macOS 10.12.1, *) - case biometricCurrentSet - - /// Access to keychain elements requires user presence verification via device Passcode. - case devicePasscode - - // MARK: CustomStringConvertible - - public var description: String { - switch self { - case .userPresence: - /* - VALSecureEnclaveValet v1.0-v2.0.7 used UserPresence without a suffix – the concept of a customizable AccessControl was added in v2.1. - For backwards compatibility, do not append an access control suffix for UserPresence. - */ - return "" - case .biometricAny: - if #available(macOS 10.12.1, *) { - return "_AccessControlTouchIDAnyFingerprint" - } else { - assertionFailure(".biometricAny requires macOS 10.12.1.") - return "" - } - case .biometricCurrentSet: - if #available(macOS 10.12.1, *) { - return "_AccessControlTouchIDCurrentFingerprintSet" - } else { - assertionFailure(".biometricCurrentSet requires macOS 10.12.1.") - return "" - } - case .devicePasscode: - return "_AccessControlDevicePasscode" - } - } - - // MARK: Internal Properties - - internal var secAccessControl: SecAccessControlCreateFlags { - switch self { - case .userPresence: - return .userPresence - case .biometricAny: - if #available(iOS 11.3, tvOS 11.3, watchOS 4.3, macOS 10.13.4, *) { - return .biometryAny - } else if #available(macOS 10.12.1, *) { - return .touchIDAny - } else { - assertionFailure(".biometricAny requires macOS 10.12.1.") - return .userPresence - } - case .biometricCurrentSet: - if #available(iOS 11.3, tvOS 11.3, watchOS 4.3, macOS 10.13.4, *) { - return .biometryCurrentSet - } else if #available(macOS 10.12.1, *) { - return .touchIDCurrentSet - } else { - assertionFailure(".biometricCurrentSet requires macOS 10.12.1.") - return .userPresence - } - case .devicePasscode: - if #available(macOS 10.11, *) { - return .devicePasscode - } else { - assertionFailure(".devicePasscode requires macOS 10.11.") - return .userPresence - } - } - } - - internal static func allValues() -> [SecureEnclaveAccessControl] { - if #available(macOS 10.12.1, *) { - return [ - .userPresence, - .biometricAny, - .biometricCurrentSet, - .devicePasscode - ] - } else { - return [ - .userPresence, - .devicePasscode - ] - } - } -} diff --git a/Pods/Valet/Sources/Valet/SecureEnclaveValet.swift b/Pods/Valet/Sources/Valet/SecureEnclaveValet.swift deleted file mode 100644 index a97c816..0000000 --- a/Pods/Valet/Sources/Valet/SecureEnclaveValet.swift +++ /dev/null @@ -1,299 +0,0 @@ -// -// SecureEnclaveValet.swift -// Valet -// -// Created by Dan Federman on 9/18/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -/// Reads and writes keychain elements that are stored on the Secure Enclave using Accessibility attribute `.whenPasscodeSetThisDeviceOnly`. Accessing these keychain elements will require the user to confirm their presence via Touch ID, Face ID, or passcode entry. If no passcode is set on the device, accessing the keychain via a `SecureEnclaveValet` will fail. Data is removed from the Secure Enclave when the user removes a passcode from the device. -@objc(VALSecureEnclaveValet) -public final class SecureEnclaveValet: NSObject { - - // MARK: Public Class Methods - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a SecureEnclaveValet. - /// - accessControl: The desired access control for the SecureEnclaveValet. - /// - Returns: A SecureEnclaveValet that reads/writes keychain elements with the desired flavor. - public class func valet(with identifier: Identifier, accessControl: SecureEnclaveAccessControl) -> SecureEnclaveValet { - let key = Service.standard(identifier, .secureEnclave(accessControl)).description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = SecureEnclaveValet(identifier: identifier, accessControl: accessControl) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - /// - Parameters: - /// - identifier: A non-empty string that must correspond with the value for keychain-access-groups in your Entitlements file. - /// - accessControl: The desired access control for the SecureEnclaveValet. - /// - Returns: A SecureEnclaveValet that reads/writes keychain elements that can be shared across applications written by the same development team. - public class func sharedGroupValet(with identifier: SharedGroupIdentifier, accessControl: SecureEnclaveAccessControl) -> SecureEnclaveValet { - let key = Service.sharedGroup(identifier, .secureEnclave(accessControl)).description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = SecureEnclaveValet(sharedAccess: identifier, accessControl: accessControl) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - // MARK: Equatable - - /// - Returns: `true` if lhs and rhs both read from and write to the same sandbox within the keychain. - public static func ==(lhs: SecureEnclaveValet, rhs: SecureEnclaveValet) -> Bool { - lhs.service == rhs.service - } - - // MARK: Private Class Properties - - private static let identifierToValetMap = NSMapTable<NSString, SecureEnclaveValet>.strongToWeakObjects() - - // MARK: Initialization - - @available(*, unavailable) - public override init() { - fatalError("Use the class methods above to create usable SecureEnclaveValet objects") - } - - private convenience init(identifier: Identifier, accessControl: SecureEnclaveAccessControl) { - self.init( - identifier: identifier, - service: .standard(identifier, .secureEnclave(accessControl)), - accessControl: accessControl) - } - - private convenience init(sharedAccess groupIdentifier: SharedGroupIdentifier, accessControl: SecureEnclaveAccessControl) { - self.init( - identifier: groupIdentifier.asIdentifier, - service: .sharedGroup(groupIdentifier, .secureEnclave(accessControl)), - accessControl: accessControl) - } - - private init(identifier: Identifier, service: Service, accessControl: SecureEnclaveAccessControl) { - self.identifier = identifier - self.service = service - self.accessControl = accessControl - baseKeychainQuery = service.generateBaseQuery() - } - - // MARK: Hashable - - public override var hash: Int { - service.description.hashValue - } - - // MARK: Public Properties - - public let identifier: Identifier - @objc - public let accessControl: SecureEnclaveAccessControl - - // MARK: Public Methods - - /// - Returns: `true` if the keychain is accessible for reading and writing, `false` otherwise. - /// - Note: Determined by writing a value to the keychain and then reading it back out. Will never prompt the user for Face ID, Touch ID, or password. - @objc - public func canAccessKeychain() -> Bool { - SecureEnclave.canAccessKeychain(with: service) - } - - /// - Parameters: - /// - object: A Data value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `object` from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func setObject(_ object: Data, forKey key: String) throws { - try execute(in: lock) { - try SecureEnclave.setObject(object, forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameters: - /// - key: A key used to retrieve the desired object from the keychain. - /// - userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. - /// - Returns: The data currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - @objc - public func object(forKey key: String, withPrompt userPrompt: String) throws -> Data { - try execute(in: lock) { - try SecureEnclave.object(forKey: key, withPrompt: userPrompt, options: baseKeychainQuery) - } - } - - /// - Parameter key: The key to look up in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. - /// - Throws: An error of type `KeychainError`. - /// - Note: Will never prompt the user for Face ID, Touch ID, or password. - public func containsObject(forKey key: String) throws -> Bool { - try execute(in: lock) { - try SecureEnclave.containsObject(forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameters: - /// - string: A String value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `string` from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func setString(_ string: String, forKey key: String) throws { - try execute(in: lock) { - try SecureEnclave.setString(string, forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameters: - /// - key: A key used to retrieve the desired object from the keychain. - /// - userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. - /// - Returns: The string currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - @objc - public func string(forKey key: String, withPrompt userPrompt: String) throws -> String { - try execute(in: lock) { - try SecureEnclave.string(forKey: key, withPrompt: userPrompt, options: baseKeychainQuery) - } - } - - /// Removes a key/object pair from the keychain. - /// - Parameter key: A key used to remove the desired object from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func removeObject(forKey key: String) throws { - try execute(in: lock) { - try Keychain.removeObject(forKey: key, options: baseKeychainQuery) - } - } - - /// Removes all key/object pairs accessible by this Valet instance from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func removeAllObjects() throws { - try execute(in: lock) { - try Keychain.removeAllObjects(matching: baseKeychainQuery) - } - } - - /// Migrates objects matching the input query into the receiving SecureEnclaveValet instance. - /// - Parameters: - /// - query: The query with which to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - removeOnCompletion: If `true`, the migrated data will be removed from the keychain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjects(matching query: [String : AnyHashable], removeOnCompletion: Bool) throws { - try execute(in: lock) { - try Keychain.migrateObjects(matching: query, into: baseKeychainQuery, removeOnCompletion: removeOnCompletion) - } - } - - /// Migrates objects matching the vended keychain query into the receiving SecureEnclaveValet instance. - /// - Parameters: - /// - valet: A Valet whose vended keychain query is used to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - removeOnCompletion: If `true`, the migrated data will be removed from the keychfain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjects(from valet: Valet, removeOnCompletion: Bool) throws { - try migrateObjects(matching: valet.baseKeychainQuery, removeOnCompletion: removeOnCompletion) - } - - // MARK: Renamed Methods - - @available(*, unavailable, renamed: "setObject(_:forKey:)") - public func set(object: Data, forKey key: String) -> Bool { fatalError() } - - @available(*, unavailable, renamed: "setString(_:forKey:)") - public func set(string: String, forKey key: String) -> Bool { fatalError() } - - // MARK: Internal Properties - - internal let service: Service - - // MARK: Private Properties - - private let lock = NSLock() - private let baseKeychainQuery: [String : AnyHashable] - -} - - -// MARK: - Objective-C Compatibility - - -extension SecureEnclaveValet { - - // MARK: Public Class Methods - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a SecureEnclaveValet. - /// - accessControl: The desired access control for the SecureEnclaveValet. - /// - Returns: A SecureEnclaveValet that reads/writes keychain elements with the desired flavor. - @objc(valetWithIdentifier:accessControl:) - public class func 🚫swift_valet(with identifier: String, accessControl: SecureEnclaveAccessControl) -> SecureEnclaveValet? { - guard let identifier = Identifier(nonEmpty: identifier) else { - return nil - } - return valet(with: identifier, accessControl: accessControl) - } - - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that cooresponds to a value in keychain-access-groups in the application's Entitlements file. This string must not be empty. - /// - accessControl: The desired access control for the SecureEnclaveValet. - /// - Returns: A SecureEnclaveValet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @objc(sharedGroupValetWithAppIDPrefix:sharedGroupIdentifier:accessControl:) - public class func 🚫swift_sharedGroupValet(appIDPrefix: String, nonEmptyIdentifier identifier: String, accessControl: SecureEnclaveAccessControl) -> SecureEnclaveValet? { - guard let identifier = SharedGroupIdentifier(appIDPrefix: appIDPrefix, nonEmptyGroup: identifier) else { - return nil - } - return sharedGroupValet(with: identifier, accessControl: accessControl) - } - - /// - Parameters: - /// - groupPrefix: On iOS, iPadOS, watchOS, and tvOS, this prefix must equal "group". On macOS, this prefix is the application's App ID prefix, which can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that corresponds to a value in com.apple.security.application-groups in the application's Entitlements file. This string must not be empty. - /// - accessControl: The desired access control for the SecureEnclaveValet. - /// - Returns: A SecureEnclaveValet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @objc(sharedGroupValetWithGroupPrefix:sharedGroupIdentifier:accessControl:) - public class func 🚫swift_sharedGroupValet(groupPrefix: String, nonEmptyIdentifier identifier: String, accessControl: SecureEnclaveAccessControl) -> SecureEnclaveValet? { - guard let identifier = SharedGroupIdentifier(groupPrefix: groupPrefix, nonEmptyGroup: identifier) else { - return nil - } - return sharedGroupValet(with: identifier, accessControl: accessControl) - } - - /// - Parameter key: The key to look up in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. Will return `false` if the keychain is not accessible. - /// - Note: Will never prompt the user for Face ID, Touch ID, or password. - @available(swift, obsoleted: 1.0) - @objc(containsObjectForKey:) - public func 🚫swift_containsObject(forKey key: String) -> Bool { - guard let containsObject = try? containsObject(forKey: key) else { - return false - } - return containsObject - } - -} diff --git a/Pods/Valet/Sources/Valet/SharedGroupIdentifier.swift b/Pods/Valet/Sources/Valet/SharedGroupIdentifier.swift deleted file mode 100644 index a8973df..0000000 --- a/Pods/Valet/Sources/Valet/SharedGroupIdentifier.swift +++ /dev/null @@ -1,81 +0,0 @@ -// -// SharedGroupIdentifier.swift -// Valet -// -// Created by Dan Federman on 2/25/20. -// Copyright © 2020 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -public struct SharedGroupIdentifier: CustomStringConvertible { - - // MARK: Initialization - - /// A representation of a shared access group identifier. - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - groupIdentifier: An identifier that cooresponds to a value in keychain-access-groups in the application's Entitlements file. This string must not be empty. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - public init?(appIDPrefix: String, nonEmptyGroup groupIdentifier: String?) { - guard !appIDPrefix.isEmpty, let groupIdentifier = groupIdentifier, !groupIdentifier.isEmpty else { - return nil - } - - self.prefix = appIDPrefix - self.groupIdentifier = groupIdentifier - } - - /// A representation of a shared app group identifier. - /// - Parameters: - /// - groupPrefix: On iOS, iPadOS, watchOS, and tvOS, this prefix must equal "group". On macOS, this prefix is the application's App ID prefix, which can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - groupIdentifier: An identifier that corresponds to a value in com.apple.security.application-groups in the application's Entitlements file. This string must not be empty. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - public init?(groupPrefix: String, nonEmptyGroup groupIdentifier: String?) { - #if os(macOS) - guard !groupPrefix.isEmpty, let groupIdentifier = groupIdentifier, !groupIdentifier.isEmpty else { - return nil - } - #else - guard groupPrefix == Self.appGroupPrefix, let groupIdentifier = groupIdentifier, !groupIdentifier.isEmpty else { - return nil - } - #endif - - self.prefix = groupPrefix - self.groupIdentifier = groupIdentifier - } - - // MARK: CustomStringConvertible - - public var description: String { - prefix + "." + groupIdentifier - } - - // MARK: Internal Properties - - internal let prefix: String - internal let groupIdentifier: String - - internal var asIdentifier: Identifier { - // It is safe to force unwrap because we've already validated that our description is non-empty. - Identifier(nonEmpty: description)! - } - - // MARK: Private Static Properties - - private static let appGroupPrefix = "group" -} diff --git a/Pods/Valet/Sources/Valet/SinglePromptSecureEnclaveValet.swift b/Pods/Valet/Sources/Valet/SinglePromptSecureEnclaveValet.swift deleted file mode 100644 index 9afab41..0000000 --- a/Pods/Valet/Sources/Valet/SinglePromptSecureEnclaveValet.swift +++ /dev/null @@ -1,342 +0,0 @@ -// -// SinglePromptSecureEnclaveValet.swift -// Valet -// -// Created by Dan Federman on 9/19/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -#if canImport(LocalAuthentication) - -import LocalAuthentication -import Foundation - - -/// Reads and writes keychain elements that are stored on the Secure Enclave using Accessibility attribute `.whenPasscodeSetThisDeviceOnly`. The first access of these keychain elements will require the user to confirm their presence via Touch ID, Face ID, or passcode entry. If no passcode is set on the device, accessing the keychain via a `SinglePromptSecureEnclaveValet` will fail. Data is removed from the Secure Enclave when the user removes a passcode from the device. -@available(tvOS 11.0, *) -@objc(VALSinglePromptSecureEnclaveValet) -public final class SinglePromptSecureEnclaveValet: NSObject { - - // MARK: Public Class Methods - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a SinglePromptSecureEnclaveValet. - /// - accessControl: The desired access control for the SinglePromptSecureEnclaveValet. - /// - Returns: A SinglePromptSecureEnclaveValet that reads/writes keychain elements with the desired flavor. - public class func valet(with identifier: Identifier, accessControl: SecureEnclaveAccessControl) -> SinglePromptSecureEnclaveValet { - let key = Service.standard(identifier, .singlePromptSecureEnclave(accessControl)).description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = SinglePromptSecureEnclaveValet(identifier: identifier, accessControl: accessControl) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - /// - Parameters: - /// - identifier: A non-empty identifier that must correspond with the value for keychain-access-groups in your Entitlements file. - /// - accessControl: The desired access control for the SinglePromptSecureEnclaveValet. - /// - Returns: A SinglePromptSecureEnclaveValet that reads/writes keychain elements that can be shared across applications written by the same development team. - public class func sharedGroupValet(with identifier: SharedGroupIdentifier, accessControl: SecureEnclaveAccessControl) -> SinglePromptSecureEnclaveValet { - let key = Service.sharedGroup(identifier, .singlePromptSecureEnclave(accessControl)).description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = SinglePromptSecureEnclaveValet(sharedAccess: identifier, accessControl: accessControl) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - // MARK: Equatable - - /// - Returns: `true` if lhs and rhs both read from and write to the same sandbox within the keychain. - public static func ==(lhs: SinglePromptSecureEnclaveValet, rhs: SinglePromptSecureEnclaveValet) -> Bool { - lhs.service == rhs.service - } - - // MARK: Private Class Properties - - private static let identifierToValetMap = NSMapTable<NSString, SinglePromptSecureEnclaveValet>.strongToWeakObjects() - - // MARK: Initialization - - @available(*, unavailable) - public override init() { - fatalError("Use the class methods above to create usable SinglePromptSecureEnclaveValet objects") - } - - private convenience init(identifier: Identifier, accessControl: SecureEnclaveAccessControl) { - self.init( - identifier: identifier, - service: .standard(identifier, .singlePromptSecureEnclave(accessControl)), - accessControl: accessControl) - } - - private convenience init(sharedAccess groupIdentifier: SharedGroupIdentifier, accessControl: SecureEnclaveAccessControl) { - self.init( - identifier: groupIdentifier.asIdentifier, - service: .sharedGroup(groupIdentifier, .singlePromptSecureEnclave(accessControl)), - accessControl: accessControl) - } - - private init(identifier: Identifier, service: Service, accessControl: SecureEnclaveAccessControl) { - self.identifier = identifier - self.service = service - self.accessControl = accessControl - baseKeychainQuery = service.generateBaseQuery() - } - - // MARK: Hashable - - public override var hash: Int { - service.description.hashValue - } - - // MARK: Public Properties - - public let identifier: Identifier - @objc - public let accessControl: SecureEnclaveAccessControl - - // MARK: Public Methods - - /// - Returns: `true` if the keychain is accessible for reading and writing, `false` otherwise. - /// - Note: Determined by writing a value to the keychain and then reading it back out. Will never prompt the user for Face ID, Touch ID, or password. - @objc - public func canAccessKeychain() -> Bool { - SecureEnclave.canAccessKeychain(with: service) - } - - /// - Parameters: - /// - object: A Data value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `object` from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func setObject(_ object: Data, forKey key: String) throws { - try execute(in: lock) { - try SecureEnclave.setObject(object, forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameters: - /// - key: A key used to retrieve the desired object from the keychain. - /// - userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. If the `SinglePromptSecureEnclaveValet` has already been unlocked, no prompt will be shown. - /// - Returns: The data currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - @objc - public func object(forKey key: String, withPrompt userPrompt: String) throws -> Data { - try execute(in: lock) { - try SecureEnclave.object(forKey: key, withPrompt: userPrompt, options: try continuedAuthenticationKeychainQuery()) - } - } - - /// - Parameter key: The key to look up in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. - /// - Throws: An error of type `KeychainError`. - /// - Note: Will never prompt the user for Face ID, Touch ID, or password. - public func containsObject(forKey key: String) throws -> Bool { - try execute(in: lock) { - try SecureEnclave.containsObject(forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameters: - /// - string: A String value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `string` from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func setString(_ string: String, forKey key: String) throws { - try execute(in: lock) { - try SecureEnclave.setString(string, forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameters: - /// - key: A key used to retrieve the desired object from the keychain. - /// - userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. If the `SinglePromptSecureEnclaveValet` has already been unlocked, no prompt will be shown. - /// - Returns: The string currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - @objc - public func string(forKey key: String, withPrompt userPrompt: String) throws -> String { - try execute(in: lock) { - try SecureEnclave.string(forKey: key, withPrompt: userPrompt, options: try continuedAuthenticationKeychainQuery()) - } - } - - /// Forces a prompt for Face ID, Touch ID, or passcode entry on the next data retrieval from the Secure Enclave. - @objc - public func requirePromptOnNextAccess() { - execute(in: lock) { - localAuthenticationContext.invalidate() - localAuthenticationContext = LAContext() - } - } - - /// - Parameter userPrompt: The prompt displayed to the user in Apple's Face ID, Touch ID, or passcode entry UI. If the `SinglePromptSecureEnclaveValet` has already been unlocked, no prompt will be shown. If no items are found, will return an empty set. - /// - Returns: The set of all (String) keys currently stored in this Valet instance. - /// - Throws: An error of type `KeychainError`. - @objc - public func allKeys(userPrompt: String) throws -> Set<String> { - try execute(in: lock) { - var secItemQuery = try continuedAuthenticationKeychainQuery() - if !userPrompt.isEmpty { - secItemQuery[kSecUseOperationPrompt as String] = userPrompt - } - - return try Keychain.allKeys(options: secItemQuery) - } - } - - /// Removes a key/object pair from the keychain. - /// - Parameter key: A key used to remove the desired object from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func removeObject(forKey key: String) throws { - try execute(in: lock) { - try Keychain.removeObject(forKey: key, options: baseKeychainQuery) - } - } - - /// Removes all key/object pairs accessible by this Valet instance from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func removeAllObjects() throws { - try execute(in: lock) { - try Keychain.removeAllObjects(matching: baseKeychainQuery) - } - } - - /// Migrates objects matching the input query into the receiving SinglePromptSecureEnclaveValet instance. - /// - Parameters: - /// - query: The query with which to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - removeOnCompletion: If `true`, the migrated data will be removed from the keychain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjects(matching query: [String : AnyHashable], removeOnCompletion: Bool) throws { - try execute(in: lock) { - try Keychain.migrateObjects(matching: query, into: baseKeychainQuery, removeOnCompletion: removeOnCompletion) - } - } - - /// Migrates objects matching the vended keychain query into the receiving SinglePromptSecureEnclaveValet instance. - /// - Parameters: - /// - valet: A Valet whose vended keychain query is used to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - removeOnCompletion: If `true`, the migrated data will be removed from the keychfain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjects(from valet: Valet, removeOnCompletion: Bool) throws { - try migrateObjects(matching: valet.baseKeychainQuery, removeOnCompletion: removeOnCompletion) - } - - // MARK: Renamed Methods - - @available(*, unavailable, renamed: "setObject(_:forKey:)") - public func set(object: Data, forKey key: String) -> Bool { fatalError() } - - @available(*, unavailable, renamed: "setString(_:forKey:)") - public func set(string: String, forKey key: String) -> Bool { fatalError() } - - // MARK: Internal Properties - - internal let service: Service - - // MARK: Private Properties - - private let lock = NSLock() - private var localAuthenticationContext = LAContext() - private let baseKeychainQuery: [String : AnyHashable] - - /// A keychain query dictionary that allows for continued read access to the Secure Enclave after the a single unlock event. - /// This query should be used when retrieving keychain data, but should not be used for keychain writes or `containsObject` checks. - /// Using this query in a `containsObject` check can cause a false positive in the case where an element has been removed from - /// the keychain by the operating system due to a face, fingerprint, or password change. - private func continuedAuthenticationKeychainQuery() throws -> [String : AnyHashable] { - var keychainQuery = baseKeychainQuery - keychainQuery[kSecUseAuthenticationContext as String] = localAuthenticationContext - return keychainQuery - } -} - - -// MARK: - Objective-C Compatibility - - -@available(tvOS 11.0, *) -extension SinglePromptSecureEnclaveValet { - - // MARK: Public Class Methods - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a SinglePromptSecureEnclaveValet. - /// - accessControl: The desired access control for the SinglePromptSecureEnclaveValet. - /// - Returns: A SinglePromptSecureEnclaveValet that reads/writes keychain elements with the desired flavor. - @objc(valetWithIdentifier:accessControl:) - public class func 🚫swift_valet(with identifier: String, accessControl: SecureEnclaveAccessControl) -> SinglePromptSecureEnclaveValet? { - guard let identifier = Identifier(nonEmpty: identifier) else { - return nil - } - - return valet(with: identifier, accessControl: accessControl) - } - - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that cooresponds to a value in keychain-access-groups in the application's Entitlements file. This string must not be empty. - /// - accessControl: The desired access control for the SinglePromptSecureEnclaveValet. - /// - Returns: A SinglePromptSecureEnclaveValet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @objc(sharedGroupValetWithAppIDPrefix:sharedGroupIdentifier:accessControl:) - public class func 🚫swift_sharedGroupValet(appIDPrefix: String, nonEmptyIdentifier identifier: String, accessControl: SecureEnclaveAccessControl) -> SinglePromptSecureEnclaveValet? { - guard let identifier = SharedGroupIdentifier(appIDPrefix: appIDPrefix, nonEmptyGroup: identifier) else { - return nil - } - return sharedGroupValet(with: identifier, accessControl: accessControl) - } - - /// - Parameters: - /// - groupPrefix: On iOS, iPadOS, watchOS, and tvOS, this prefix must equal "group". On macOS, this prefix is the application's App ID prefix, which can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that corresponds to a value in com.apple.security.application-groups in the application's Entitlements file. This string must not be empty. - /// - accessControl: The desired access control for the SinglePromptSecureEnclaveValet. - /// - Returns: A SinglePromptSecureEnclaveValet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @objc(sharedGroupValetWithGroupPrefix:sharedGroupIdentifier:accessControl:) - public class func 🚫swift_sharedGroupValet(groupPrefix: String, nonEmptyIdentifier identifier: String, accessControl: SecureEnclaveAccessControl) -> SinglePromptSecureEnclaveValet? { - guard let identifier = SharedGroupIdentifier(groupPrefix: groupPrefix, nonEmptyGroup: identifier) else { - return nil - } - return sharedGroupValet(with: identifier, accessControl: accessControl) - } - - /// - Parameter key: The key to look up in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. Will return `false` if the keychain is not accessible. - /// - Note: Will never prompt the user for Face ID, Touch ID, or password. - @available(swift, obsoleted: 1.0) - @objc(containsObjectForKey:) - public func 🚫swift_containsObject(forKey key: String) -> Bool { - guard let containsObject = try? containsObject(forKey: key) else { - return false - } - return containsObject - } - -} - -#endif diff --git a/Pods/Valet/Sources/Valet/Valet.h b/Pods/Valet/Sources/Valet/Valet.h deleted file mode 100644 index f518eb8..0000000 --- a/Pods/Valet/Sources/Valet/Valet.h +++ /dev/null @@ -1,20 +0,0 @@ -// -// Valet.h -// Valet -// -// Created by Dan Federman on 1/21/15. -// Copyright 2015 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - diff --git a/Pods/Valet/Sources/Valet/Valet.swift b/Pods/Valet/Sources/Valet/Valet.swift deleted file mode 100644 index 7803f44..0000000 --- a/Pods/Valet/Sources/Valet/Valet.swift +++ /dev/null @@ -1,772 +0,0 @@ -// -// Valet.swift -// Valet -// -// Created by Dan Federman and Eric Muller on 9/17/17. -// Copyright © 2017 Square, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -//    http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - - -/// Reads and writes keychain elements. -@objc(VALValet) -public final class Valet: NSObject { - - // MARK: Public Class Methods - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements with the desired accessibility and identifier. - public class func valet(with identifier: Identifier, accessibility: Accessibility) -> Valet { - findOrCreate(identifier, configuration: .valet(accessibility)) - } - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet (synchronized with iCloud) that reads/writes keychain elements with the desired accessibility and identifier. - public class func iCloudValet(with identifier: Identifier, accessibility: CloudAccessibility) -> Valet { - findOrCreate(identifier, configuration: .iCloud(accessibility)) - } - - /// - Parameters: - /// - identifier: The identifier for the Valet's shared access group. Must correspond with the value for keychain-access-groups in your Entitlements file. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements that can be shared across applications written by the same development team. - public class func sharedGroupValet(with identifier: SharedGroupIdentifier, accessibility: Accessibility) -> Valet { - findOrCreate(identifier, configuration: .valet(accessibility)) - } - - /// - Parameters: - /// - identifier: The identifier for the Valet's shared access group. Must correspond with the value for keychain-access-groups in your Entitlements file. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet (synchronized with iCloud) that reads/writes keychain elements that can be shared across applications written by the same development team. - public class func iCloudSharedGroupValet(with identifier: SharedGroupIdentifier, accessibility: CloudAccessibility) -> Valet { - findOrCreate(identifier, configuration: .iCloud(accessibility)) - } - - #if os(macOS) - /// Creates a Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements with the desired accessibility and identifier. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - public class func valet(withExplicitlySet identifier: Identifier, accessibility: Accessibility) -> Valet { - findOrCreate(explicitlySet: identifier, configuration: .valet(accessibility)) - } - - /// Creates an iCloud Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet (synchronized with iCloud) that reads/writes keychain elements with the desired accessibility and identifier. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - public class func iCloudValet(withExplicitlySet identifier: Identifier, accessibility: CloudAccessibility) -> Valet { - findOrCreate(explicitlySet: identifier, configuration: .iCloud(accessibility)) - } - - /// Creates a shared-access-group Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - identifier: The identifier for the Valet's shared access group. Must correspond with the value for keychain-access-groups in your Entitlements file. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - public class func sharedGroupValet(withExplicitlySet identifier: SharedGroupIdentifier, accessibility: Accessibility) -> Valet { - findOrCreate(explicitlySet: identifier, configuration: .valet(accessibility)) - } - - /// Creates an iCloud-shared-access-group Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - identifier: The identifier for the Valet's shared access group. Must correspond with the value for keychain-access-groups in your Entitlements file. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet (synchronized with iCloud) that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - public class func iCloudSharedGroupValet(withExplicitlySet identifier: SharedGroupIdentifier, accessibility: CloudAccessibility) -> Valet { - findOrCreate(explicitlySet: identifier, configuration: .iCloud(accessibility)) - } - #endif - - // MARK: Equatable - - /// - Returns: `true` if lhs and rhs both read from and write to the same sandbox within the keychain. - public static func ==(lhs: Valet, rhs: Valet) -> Bool { - lhs.service == rhs.service - } - - // MARK: Private Class Properties - - private static let identifierToValetMap = NSMapTable<NSString, Valet>.strongToWeakObjects() - - // MARK: Private Class Functions - - private class func findOrCreate(_ identifier: Identifier, configuration: Configuration) -> Valet { - let service: Service = .standard(identifier, configuration) - let key = service.description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = Valet(identifier: identifier, configuration: configuration) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - private class func findOrCreate(_ identifier: SharedGroupIdentifier, configuration: Configuration) -> Valet { - let service: Service = .sharedGroup(identifier, configuration) - let key = service.description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = Valet(sharedAccess: identifier, configuration: configuration) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - - #if os(macOS) - private class func findOrCreate(explicitlySet identifier: Identifier, configuration: Configuration) -> Valet { - let service: Service = .standardOverride(service: identifier, configuration) - let key = service.description + configuration.description + configuration.accessibility.description + identifier.description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = Valet(overrideIdentifier: identifier, configuration: configuration) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - private class func findOrCreate(explicitlySet identifier: SharedGroupIdentifier, configuration: Configuration) -> Valet { - let service: Service = .sharedGroupOverride(service: identifier, configuration) - let key = service.description + configuration.description + configuration.accessibility.description + identifier.description as NSString - if let existingValet = identifierToValetMap.object(forKey: key) { - return existingValet - - } else { - let valet = Valet(overrideSharedAccess: identifier, configuration: configuration) - identifierToValetMap.setObject(valet, forKey: key) - return valet - } - } - - #endif - - // MARK: Initialization - - @available(*, unavailable) - public override init() { - fatalError("Use the class methods above to create usable Valet objects") - } - - private convenience init(identifier: Identifier, configuration: Configuration) { - self.init( - identifier: identifier, - service: .standard(identifier, configuration), - configuration: configuration) - } - - private convenience init(sharedAccess groupIdentifier: SharedGroupIdentifier, configuration: Configuration) { - self.init( - identifier: groupIdentifier.asIdentifier, - service: .sharedGroup(groupIdentifier, configuration), - configuration: configuration) - } - - private init(identifier: Identifier, service: Service, configuration: Configuration) { - self.identifier = identifier - self.configuration = configuration - self.service = service - accessibility = configuration.accessibility - baseKeychainQuery = service.generateBaseQuery() - } - - #if os(macOS) - private init(overrideIdentifier: Identifier, configuration: Configuration) { - self.identifier = overrideIdentifier - self.configuration = configuration - service = .standardOverride(service: identifier, configuration) - accessibility = configuration.accessibility - baseKeychainQuery = service.generateBaseQuery() - } - - private init(overrideSharedAccess identifier: SharedGroupIdentifier, configuration: Configuration) { - self.identifier = identifier.asIdentifier - self.configuration = configuration - service = .sharedGroupOverride(service: identifier, configuration) - accessibility = configuration.accessibility - baseKeychainQuery = service.generateBaseQuery() - } - #endif - - // MARK: CustomStringConvertible - - public override var description: String { - "\(super.description) \(identifier.description) \(configuration.prettyDescription)" - } - - // MARK: Hashable - - public override var hash: Int { - service.description.hashValue - } - - // MARK: Public Properties - - @objc - public let accessibility: Accessibility - public let identifier: Identifier - - // MARK: Public Methods - - /// - Returns: `true` if the keychain is accessible for reading and writing, `false` otherwise. - /// - Note: Determined by writing a value to the keychain and then reading it back out. - @objc - public func canAccessKeychain() -> Bool { - execute(in: lock) { - return Keychain.canAccess(attributes: baseKeychainQuery) - } - } - - /// - Parameters: - /// - object: A Data value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `object` from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func setObject(_ object: Data, forKey key: String) throws { - try execute(in: lock) { - try Keychain.setObject(object, forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameter key: A key used to retrieve the desired object from the keychain. - /// - Returns: The data currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - @objc - public func object(forKey key: String) throws -> Data { - try execute(in: lock) { - try Keychain.object(forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameter key: The key to look up in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. - /// - Throws: An error of type `KeychainError`. - public func containsObject(forKey key: String) throws -> Bool { - try execute(in: lock) { - let status = Keychain.performCopy(forKey: key, options: baseKeychainQuery) - switch status { - case errSecSuccess: - return true - case errSecItemNotFound: - return false - default: - throw KeychainError(status: status) - } - } - } - - /// - Parameters: - /// - string: A String value to be inserted into the keychain. - /// - key: A key that can be used to retrieve the `string` from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func setString(_ string: String, forKey key: String) throws { - try execute(in: lock) { - try Keychain.setString(string, forKey: key, options: baseKeychainQuery) - } - } - - /// - Parameter key: A key used to retrieve the desired object from the keychain. - /// - Returns: The string currently stored in the keychain for the provided key. - /// - Throws: An error of type `KeychainError`. - @objc - public func string(forKey key: String) throws -> String { - try execute(in: lock) { - try Keychain.string(forKey: key, options: baseKeychainQuery) - } - } - - /// - Returns: The set of all (String) keys currently stored in this Valet instance. If no items are found, will return an empty set. - /// - Throws: An error of type `KeychainError`. - @objc - public func allKeys() throws -> Set<String> { - try execute(in: lock) { - try Keychain.allKeys(options: baseKeychainQuery) - } - } - - /// Removes a key/object pair from the keychain. - /// - Parameter key: A key used to remove the desired object from the keychain. - /// - Throws: An error of type `KeychainError`. - /// - Note: No error is thrown if the `key` is not found in the keychain. - @objc - public func removeObject(forKey key: String) throws { - try execute(in: lock) { - try Keychain.removeObject(forKey: key, options: baseKeychainQuery) - } - } - - /// Removes all key/object pairs accessible by this Valet instance from the keychain. - /// - Throws: An error of type `KeychainError`. - @objc - public func removeAllObjects() throws { - try execute(in: lock) { - try Keychain.removeAllObjects(matching: baseKeychainQuery) - } - } - - /// Migrates objects matching the input query into the receiving Valet instance. - /// - Parameters: - /// - query: The query with which to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - compactMap: A closure that transforms a key:value pair from the raw pair currently in the keychain into a key:value pair we'll insert into the destination Valet. Returning `nil` from this closure will cause that key:value pair not to be migrated. `throw`ing from this closure will prevent migration. - /// - Throws: An error of type `KeychainError` or `MigrationError`. Will rethrow any error thrown by `compactMap`. - /// - Note: The keychain is not modified if an error is thrown. - public func migrateObjects(matching query: [String : AnyHashable], compactMap: (MigratableKeyValuePair<AnyHashable>) throws -> MigratableKeyValuePair<String>?) throws { - try execute(in: lock) { - try Keychain.migrateObjects(matching: query, into: baseKeychainQuery, compactMap: compactMap) - } - } - - /// Migrates objects matching the input query into the receiving Valet instance. - /// - Parameters: - /// - query: The query with which to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - removeOnCompletion: If `true`, the migrated data will be removed from the keychain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjects(matching query: [String : AnyHashable], removeOnCompletion: Bool) throws { - try execute(in: lock) { - try Keychain.migrateObjects(matching: query, into: baseKeychainQuery, removeOnCompletion: removeOnCompletion) - } - } - - /// Migrates objects matching the input query into the receiving Valet instance. - /// - Parameters: - /// - valet: The Valet used to retrieve the existing keychain data that should be migrated. - /// - compactMap: A closure that transforms a key:value pair from the raw pair currently in the keychain into a key:value pair we'll insert into the destination Valet. Returning `nil` from this closure will cause that key:value pair not to be migrated. `throw`ing from this closure will prevent migration. - /// - Throws: An error of type `KeychainError` or `MigrationError`. Will rethrow any error thrown by `compactMap`. - /// - Note: The keychain is not modified if an error is thrown. - public func migrateObjects(from valet: Valet, compactMap: (MigratableKeyValuePair<AnyHashable>) throws -> MigratableKeyValuePair<String>?) throws { - try execute(in: lock) { - try Keychain.migrateObjects(matching: valet.baseKeychainQuery, into: baseKeychainQuery, compactMap: compactMap) - } - } - - /// Migrates objects in the input Valet into the receiving Valet instance. - /// - Parameters: - /// - valet: The Valet used to retrieve the existing keychain data that should be migrated. - /// - removeOnCompletion: If `true`, the migrated data will be removed from the keychain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjects(from valet: Valet, removeOnCompletion: Bool) throws { - try migrateObjects(matching: valet.baseKeychainQuery, removeOnCompletion: removeOnCompletion) - } - - /// Call this method if your Valet used to have its accessibility set to `always`. - /// This method migrates objects set on a Valet with the same type and identifier, but with its accessibility set to `always` (which was possible prior to Valet 4.0) to the current Valet. - /// - Parameter removeOnCompletion: If `true`, the migrated data will be removed from the keychain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjectsFromAlwaysAccessibleValet(removeOnCompletion: Bool) throws { - var keychainQuery = baseKeychainQuery - - #if os(macOS) - if #available(OSX 10.15, *) { - // Don't over-specify our query. We don't know if the values were written post-Catalina. - keychainQuery[kSecUseDataProtectionKeychain as String] = nil - } - #endif - - keychainQuery[kSecAttrAccessible as String] = "dk" // kSecAttrAccessibleAlways, but with the value hardcoded to avoid a build warning. - let accessibilityDescription = "AccessibleAlways" - let serviceAttribute: String - switch service { - case let .sharedGroup(sharedGroupIdentifier, _): - serviceAttribute = Service.sharedGroup(with: configuration, identifier: sharedGroupIdentifier, accessibilityDescription: accessibilityDescription) - case .standard: - serviceAttribute = Service.standard(with: configuration, identifier: identifier, accessibilityDescription: accessibilityDescription) - #if os(macOS) - case let .sharedGroupOverride(sharedGroupIdentifier, _): - serviceAttribute = sharedGroupIdentifier.description - case .standardOverride: - serviceAttribute = identifier.description - #endif - } - keychainQuery[kSecAttrService as String] = serviceAttribute - try migrateObjects(matching: keychainQuery, removeOnCompletion: removeOnCompletion) - } - - /// Call this method if your Valet used to have its accessibility set to `alwaysThisDeviceOnly`. - /// This method migrates objects set on a Valet with the same type and identifier, but with its accessibility set to `alwaysThisDeviceOnly` (which was possible prior to Valet 4.0) to the current Valet. - /// - Parameter removeOnCompletion: If `true`, the migrated data will be removed from the keychain if the migration succeeds. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @objc - public func migrateObjectsFromAlwaysAccessibleThisDeviceOnlyValet(removeOnCompletion: Bool) throws { - var keychainQuery = baseKeychainQuery - - #if os(macOS) - if #available(OSX 10.15, *) { - // Don't over-specify our query. We don't know if the values were written post-Catalina. - keychainQuery[kSecUseDataProtectionKeychain as String] = nil - } - #endif - - keychainQuery[kSecAttrAccessible as String] = "dku" // kSecAttrAccessibleAlwaysThisDeviceOnly, but with the value hardcoded to avoid a build warning. - let accessibilityDescription = "AccessibleAlwaysThisDeviceOnly" - let serviceAttribute: String - switch service { - case let .sharedGroup(identifier, _): - serviceAttribute = Service.sharedGroup(with: configuration, identifier: identifier, accessibilityDescription: accessibilityDescription) - case .standard: - serviceAttribute = Service.standard(with: configuration, identifier: identifier, accessibilityDescription: accessibilityDescription) - #if os(macOS) - case .sharedGroupOverride: - serviceAttribute = Service.sharedGroup(with: configuration, explicitlySetIdentifier: identifier, accessibilityDescription: accessibilityDescription) - case .standardOverride: - serviceAttribute = Service.standard(with: configuration, identifier: identifier, accessibilityDescription: accessibilityDescription) - #endif - } - keychainQuery[kSecAttrService as String] = serviceAttribute - try migrateObjects(matching: keychainQuery, removeOnCompletion: removeOnCompletion) - } - - #if os(macOS) - /// Migrates objects that were written to this Valet prior to macOS 10.15 to a format that can be read on macOS 10.15 and later. The new format is backwards compatible, allowing these values to be read on older operating systems. - /// - Throws: An error of type `KeychainError` or `MigrationError`. - /// - Note: The keychain is not modified if an error is thrown. - @available(macOS 10.15, *) - @objc - public func migrateObjectsFromPreCatalina() throws { - var keychainQuery = baseKeychainQuery - keychainQuery[kSecUseDataProtectionKeychain as String] = false - - // We do not need to remove these items on completion, since we are updating the kSecUseDataProtectionKeychain attribute in-place. - try migrateObjects(matching: keychainQuery, removeOnCompletion: false) - } - #endif - - // MARK: Renamed Methods - - @available(*, unavailable, renamed: "setObject(_:forKey:)") - public func set(object: Data, forKey key: String) -> Bool { fatalError() } - - @available(*, unavailable, renamed: "setString(_:forKey:)") - public func set(string: String, forKey key: String) -> Bool { fatalError() } - - // MARK: Internal Properties - - internal let configuration: Configuration - internal let service: Service - internal let baseKeychainQuery: [String : AnyHashable] - - // MARK: Private Properties - - private let lock = NSLock() -} - - -// MARK: - Objective-C Compatibility - - -extension Valet { - - // MARK: Public Class Methods - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements with the desired accessibility. - @available(swift, obsoleted: 1.0) - @objc(valetWithIdentifier:accessibility:) - public class func 🚫swift_vanillaValet(with identifier: String, accessibility: Accessibility) -> Valet? { - guard let identifier = Identifier(nonEmpty: identifier) else { - return nil - } - return valet(with: identifier, accessibility: accessibility) - } - - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes iCloud-shared keychain elements with the desired accessibility. - @available(swift, obsoleted: 1.0) - @objc(iCloudValetWithIdentifier:accessibility:) - public class func 🚫swift_iCloudValet(with identifier: String, accessibility: CloudAccessibility) -> Valet? { - guard let identifier = Identifier(nonEmpty: identifier) else { - return nil - } - return iCloudValet(with: identifier, accessibility: accessibility) - } - - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that corresponds to a value in keychain-access-groups in the application's Entitlements file. This string must not be empty. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @available(swift, obsoleted: 1.0) - @objc(sharedGroupValetWithAppIDPrefix:sharedGroupIdentifier:accessibility:) - public class func 🚫swift_vanillaSharedGroupValet(appIDPrefix: String, nonEmptyIdentifier identifier: String, accessibility: Accessibility) -> Valet? { - guard let identifier = SharedGroupIdentifier(appIDPrefix: appIDPrefix, nonEmptyGroup: identifier) else { - return nil - } - return sharedGroupValet(with: identifier, accessibility: accessibility) - } - - /// - Parameters: - /// - groupPrefix: On iOS, iPadOS, watchOS, and tvOS, this prefix must equal "group". On macOS, this prefix is the application's App ID prefix, which can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that corresponds to a value in com.apple.security.application-groups in the application's Entitlements file. This string must not be empty. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @available(swift, obsoleted: 1.0) - @objc(sharedGroupValetWithGroupPrefix:sharedGroupIdentifier:accessibility:) - public class func 🚫swift_vanillaSharedGroupValet(groupPrefix: String, nonEmptyIdentifier identifier: String, accessibility: Accessibility) -> Valet? { - guard let identifier = SharedGroupIdentifier(groupPrefix: groupPrefix, nonEmptyGroup: identifier) else { - return nil - } - return sharedGroupValet(with: identifier, accessibility: accessibility) - } - - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that corresponds to a value in keychain-access-groups in the application's Entitlements file. This string must not be empty. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes iCloud-shared keychain elements that can be shared across applications written by the same development team. - @available(swift, obsoleted: 1.0) - @objc(iCloudValetWithAppIDPrefix:sharedGroupIdentifier:accessibility:) - public class func 🚫swift_iCloudSharedGroupValet(appIDPrefix: String, nonEmptyIdentifier identifier: String, accessibility: CloudAccessibility) -> Valet? { - guard let identifier = SharedGroupIdentifier(appIDPrefix: appIDPrefix, nonEmptyGroup: identifier) else { - return nil - } - return iCloudSharedGroupValet(with: identifier, accessibility: accessibility) - } - - /// - Parameters: - /// - groupPrefix: On iOS, iPadOS, watchOS, and tvOS, this prefix must equal "group". On macOS, this prefix is the application's App ID prefix, which can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: An identifier that corresponds to a value in com.apple.security.application-groups in the application's Entitlements file. This string must not be empty. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes iCloud-shared keychain elements that can be shared across applications written by the same development team. - @available(swift, obsoleted: 1.0) - @objc(iCloudValetWithGroupPrefix:sharedGroupIdentifier:accessibility:) - public class func 🚫swift_iCloudSharedGroupValet(groupPrefix: String, nonEmptyIdentifier identifier: String, accessibility: CloudAccessibility) -> Valet? { - guard let identifier = SharedGroupIdentifier(groupPrefix: groupPrefix, nonEmptyGroup: identifier) else { - return nil - } - return iCloudSharedGroupValet(with: identifier, accessibility: accessibility) - } - - #if os(macOS) - /// Creates a Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements with the desired accessibility and identifier. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - @available(swift, obsoleted: 1.0) - @objc(valetWithExplicitlySetIdentifier:accessibility:) - public class func 🚫swift_valet(withExplicitlySet identifier: String, accessibility: Accessibility) -> Valet? { - guard let identifier = Identifier(nonEmpty: identifier) else { - return nil - } - return findOrCreate(explicitlySet: identifier, configuration: .valet(accessibility)) - } - - /// Creates an iCloud Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - identifier: A non-empty string that uniquely identifies a Valet. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet (synchronized with iCloud) that reads/writes keychain elements with the desired accessibility and identifier. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - @available(swift, obsoleted: 1.0) - @objc(iCloudValetWithExplicitlySetIdentifier:accessibility:) - public class func 🚫swift_iCloudValet(withExplicitlySet identifier: String, accessibility: CloudAccessibility) -> Valet? { - guard let identifier = Identifier(nonEmpty: identifier) else { - return nil - } - return findOrCreate(explicitlySet: identifier, configuration: .iCloud(accessibility)) - } - - /// Creates a shared-access-group Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: A non-empty string that must correspond with the value for keychain-access-groups in your Entitlements file. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @available(swift, obsoleted: 1.0) - @objc(valetWithAppIDPrefix:explicitlySetSharedGroupIdentifier:accessibility:) - public class func 🚫swift_sharedGroupValet(appIDPrefix: String, withExplicitlySet identifier: String, accessibility: Accessibility) -> Valet? { - guard let identifier = SharedGroupIdentifier(appIDPrefix: appIDPrefix, nonEmptyGroup: identifier) else { - return nil - } - return findOrCreate(explicitlySet: identifier, configuration: .valet(accessibility)) - } - - /// Creates an iCloud-shared-access-group Valet with an explicitly set kSecAttrService. - /// - Parameters: - /// - appIDPrefix: The application's App ID prefix. This string can be found by inspecting the application's provisioning profile, or viewing the application's App ID Configuration on developer.apple.com. This string must not be empty. - /// - identifier: A non-empty string that must correspond with the value for keychain-access-groups in your Entitlements file. Must be unique relative to other Valet identifiers. - /// - accessibility: The desired accessibility for the Valet. - /// - Returns: A Valet (synchronized with iCloud) that reads/writes keychain elements that can be shared across applications written by the same development team. - /// - Warning: Using an explicitly set kSecAttrService bypasses this project’s guarantee that one Valet type will not have access to one another type’s key:value pairs. To maintain this guarantee, ensure that each Valet’s identifier is globally unique. - /// - SeeAlso: https://github.com/square/Valet/issues/140 - /// - SeeAlso: https://developer.apple.com/documentation/security/keychain_services/keychain_items/sharing_access_to_keychain_items_among_a_collection_of_apps - @available(swift, obsoleted: 1.0) - @objc(iCloudValetWithAppIDPrefix:explicitlySetSharedGroupIdentifier:accessibility:) - public class func 🚫swift_iCloudSharedGroupValet(appIDPrefix: String, withExplicitlySet identifier: String, accessibility: CloudAccessibility) -> Valet? { - guard let identifier = SharedGroupIdentifier(appIDPrefix: appIDPrefix, nonEmptyGroup: identifier) else { - return nil - } - return findOrCreate(explicitlySet: identifier, configuration: .iCloud(accessibility)) - } - #endif - - // MARK: Public Methods - - /// - Parameter key: The key to look up in the keychain. - /// - Returns: `true` if a value has been set for the given key, `false` otherwise. Will return `false` if the keychain is not accessible. - /// - Note: Will never prompt the user for Face ID, Touch ID, or password. - @available(swift, obsoleted: 1.0) - @objc(containsObjectForKey:) - public func 🚫swift_containsObject(forKey key: String) -> Bool { - guard let containsObject = try? containsObject(forKey: key) else { - return false - } - return containsObject - } - - /// Migrates objects matching the input query into the receiving Valet instance. - /// - Parameters: - /// - query: The query with which to retrieve existing keychain data via a call to SecItemCopyMatching. - /// - compactMap: A closure that transforms a key:value pair from the raw pair currently in the keychain into a key:value pair we'll insert into the destination Valet. Returning `nil` from this closure will cause that key:value pair not to be migrated. Returning `VALMigratableKeyValuePairOutput.preventMigration` will prevent migrating any key:value pairs. - /// - error: An error of type `KeychainError` or `MigrationError`. - @available(swift, obsoleted: 1.0) - @objc(migrateObjectsMatching:compactMap:error:) - public func 🚫swift_migrateObjects(matching query: [String : AnyHashable], compactMap: (ObjectiveCCompatibilityMigratableKeyValuePairInput) -> ObjectiveCCompatibilityMigratableKeyValuePairOutput?) throws { - try objc_compatibility_migrateObjects(matching: query, compactMap: compactMap) - } - - /// Migrates objects matching the input query into the receiving Valet instance. - /// - Parameters: - /// - valet: The Valet used to retrieve the existing keychain data that should be migrated. - /// - compactMap: A closure that transforms a key:value pair from the raw pair currently in the keychain into a key:value pair we'll insert into the destination Valet. Returning `nil` from this closure will cause that key:value pair not to be migrated. Returning `VALMigratableKeyValuePairOutput.preventMigration` will prevent migrating any key:value pairs. - /// - error: An error of type `KeychainError` or `MigrationError`. - @available(swift, obsoleted: 1.0) - @objc(migrateObjectsFrom:compactMap:error:) - public func 🚫swift_migrateObjects(from valet: Valet, compactMap: (ObjectiveCCompatibilityMigratableKeyValuePairInput) -> ObjectiveCCompatibilityMigratableKeyValuePairOutput?) throws { - try objc_compatibility_migrateObjects(matching: valet.baseKeychainQuery, compactMap: compactMap) - } - - // MARK: Private Methods - - private func objc_compatibility_migrateObjects(matching query: [String : AnyHashable], compactMap: (ObjectiveCCompatibilityMigratableKeyValuePairInput) -> ObjectiveCCompatibilityMigratableKeyValuePairOutput?) throws { - try execute(in: lock) { - struct PreventedMigrationSentinel: Error {} - do { - try Keychain.migrateObjects(matching: query, into: baseKeychainQuery) { input in - guard let output = compactMap(ObjectiveCCompatibilityMigratableKeyValuePairInput(key: input.key, value: input.value)) else { - return nil - } - guard !output.preventMigration else { - throw PreventedMigrationSentinel() - } - return MigratableKeyValuePair<String>(key: output.key, value: output.value) - } - } catch is PreventedMigrationSentinel { - // Do nothing. This error shouldn't be surfaced to Objective-C. - } catch { - throw error - } - } - } - -} - -// MARK: - Testing - -internal extension Valet { - - // MARK: Permutations - - class func permutations(with identifier: Identifier) -> [Valet] { - Accessibility.allCases.map { accessibility in - .valet(with: identifier, accessibility: accessibility) - } - } - - class func permutations(with identifier: SharedGroupIdentifier) -> [Valet] { - Accessibility.allCases.map { accessibility in - .sharedGroupValet(with: identifier, accessibility: accessibility) - } - } - - class func iCloudPermutations(with identifier: Identifier) -> [Valet] { - CloudAccessibility.allCases.map { cloudAccessibility in - .iCloudValet(with: identifier, accessibility: cloudAccessibility) - } - } - - class func iCloudPermutations(with identifier: SharedGroupIdentifier) -> [Valet] { - CloudAccessibility.allCases.map { cloudAccessibility in - .iCloudSharedGroupValet(with: identifier, accessibility: cloudAccessibility) - } - } - - #if os(macOS) - class func permutations(withExplictlySet identifier: Identifier, shared: Bool = false) -> [Valet] { - Accessibility.allCases.map { accessibility in - .valet(withExplicitlySet: identifier, accessibility: accessibility) - } - } - - class func permutations(withExplictlySet identifier: SharedGroupIdentifier) -> [Valet] { - Accessibility.allCases.map { accessibility in - .sharedGroupValet(withExplicitlySet: identifier, accessibility: accessibility) - } - } - - class func iCloudPermutations(withExplictlySet identifier: Identifier, shared: Bool = false) -> [Valet] { - CloudAccessibility.allCases.map { cloudAccessibility in - .iCloudValet(withExplicitlySet: identifier, accessibility: cloudAccessibility) - } - } - - class func iCloudPermutations(withExplictlySet identifier: SharedGroupIdentifier) -> [Valet] { - CloudAccessibility.allCases.map { cloudAccessibility in - .iCloudSharedGroupValet(withExplicitlySet: identifier, accessibility: cloudAccessibility) - } - } - #endif - -} diff --git a/Pods/XCGLogger/.swift-version b/Pods/XCGLogger/.swift-version deleted file mode 100644 index bf77d54..0000000 --- a/Pods/XCGLogger/.swift-version +++ /dev/null @@ -1 +0,0 @@ -4.2 diff --git a/Pods/XCGLogger/LICENSE.txt b/Pods/XCGLogger/LICENSE.txt deleted file mode 100644 index 58aaa4d..0000000 --- a/Pods/XCGLogger/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Dave Wood, Cerebral Gardens http://www.cerebralgardens.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/Pods/XCGLogger/README.md b/Pods/XCGLogger/README.md deleted file mode 100644 index 8a5c034..0000000 --- a/Pods/XCGLogger/README.md +++ /dev/null @@ -1,588 +0,0 @@ -![XCGLogger][xcglogger-logo] - -[![badge-language]][swift.org] -[![badge-platforms]][swift.org] -[![badge-license]][license] - -[![badge-travis]][travis] -[![badge-swiftpm]][swiftpm] -[![badge-cocoapods]][cocoapods-xcglogger] -[![badge-carthage]][carthage] - -[![badge-mastodon]][mastodon-davewoodx] -[![badge-twitter]][twitter-davewoodx] - -[![badge-sponsors]][cerebral-gardens] -[![badge-patreon]][patreon-davewoodx] - -## tl;dr -XCGLogger is the original debug log module for use in Swift projects. - -Swift does not include a C preprocessor so developers are unable to use the debug log `#define` macros they would use in Objective-C. This means our traditional way of generating nice debug logs no longer works. Resorting to just plain old `print` calls means you lose a lot of helpful information, or requires you to type a lot more code. - -XCGLogger allows you to log details to the console (and optionally a file, or other custom destinations), just like you would have with `NSLog()` or `print()`, but with additional information, such as the date, function name, filename and line number. - -Go from this: - -```Simple message``` - -to this: - -```2014-06-09 06:44:43.600 [Debug] [AppDelegate.swift:40] application(_:didFinishLaunchingWithOptions:): Simple message``` - -#### Example -<img src="https://raw.githubusercontent.com/DaveWoodCom/XCGLogger/master/ReadMeImages/SampleLog.png" alt="Example" style="width: 690px;" /> - -### Communication _(Hat Tip AlamoFire)_ - -* If you need help, use [Stack Overflow][stackoverflow] (Tag '[xcglogger][stackoverflow]'). -* If you'd like to ask a general question, use [Stack Overflow][stackoverflow]. -* If you've found a bug, open an issue. -* If you have a feature request, open an issue. -* If you want to contribute, submit a pull request. -* If you use XCGLogger, please Star the project on [GitHub][github-xcglogger] - -## Installation - -### Git Submodule - -Execute: - -```git submodule add https://github.com/DaveWoodCom/XCGLogger.git``` - -in your repository folder. - -### [Carthage][carthage] - -Add the following line to your `Cartfile`. - -```github "DaveWoodCom/XCGLogger" ~> 6.1.0``` - -Then run `carthage update --no-use-binaries` or just `carthage update`. For details of the installation and usage of Carthage, visit [its project page][carthage]. - -Developers running 5.0 and above in Swift will need to add `$(SRCROOT)/Carthage/Build/iOS/ObjcExceptionBridging.framework` to their Input Files in the Copy Carthage Frameworks Build Phase. - -### [CocoaPods][cocoapods] - -Add something similar to the following lines to your `Podfile`. You may need to adjust based on your platform, version/branch etc. - -``` -source 'https://github.com/CocoaPods/Specs.git' -platform :ios, '8.0' -use_frameworks! - -pod 'XCGLogger', '~> 6.1.0' -``` - -Specifying the pod `XCGLogger` on its own will include the core framework. We're starting to add subspecs to allow you to include optional components as well: - -`pod 'XCGLogger/UserInfoHelpers', '~> 6.1.0'`: Include some experimental code to help deal with using UserInfo dictionaries to tag log messages. - -Then run `pod install`. For details of the installation and usage of CocoaPods, visit [its official web site][cocoapods]. - -Note: Before CocoaPods 1.4.0 it was not possible to use multiple pods with a mixture of Swift versions. You may need to ensure each pod is configured for the correct Swift version (check the targets in the pod project of your workspace). If you manually adjust the Swift version for a project, it'll reset the next time you run `pod install`. You can add a `post_install` hook into your podfile to automate setting the correct Swift versions. This is largely untested, and I'm not sure it's a good solution, but it seems to work: - -``` -post_install do |installer| - installer.pods_project.targets.each do |target| - if ['SomeTarget-iOS', 'SomeTarget-watchOS'].include? "#{target}" - print "Setting #{target}'s SWIFT_VERSION to 4.2\n" - target.build_configurations.each do |config| - config.build_settings['SWIFT_VERSION'] = '4.2' - end - else - print "Setting #{target}'s SWIFT_VERSION to Undefined (Xcode will automatically resolve)\n" - target.build_configurations.each do |config| - config.build_settings.delete('SWIFT_VERSION') - end - end - end - - print "Setting the default SWIFT_VERSION to 3.2\n" - installer.pods_project.build_configurations.each do |config| - config.build_settings['SWIFT_VERSION'] = '3.2' - end -end -``` - -You can adjust that to suit your needs of course. - -### [Swift Package Manager][swiftpm] - -Add the following entry to your package's dependencies: - -``` -.Package(url: "https://github.com/DaveWoodCom/XCGLogger.git", majorVersion: 6) -``` - -### Backwards Compatibility - -Use: -* XCGLogger version [6.1.0][xcglogger-6.1.0] for Swift 4.2 -* XCGLogger version [6.0.4][xcglogger-6.0.4] for Swift 4.1 -* XCGLogger version [6.0.2][xcglogger-6.0.2] for Swift 4.0 -* XCGLogger version [5.0.5][xcglogger-5.0.5] for Swift 3.0-3.2 -* XCGLogger version [3.6.0][xcglogger-3.6.0] for Swift 2.3 -* XCGLogger version [3.5.3][xcglogger-3.5.3] for Swift 2.2 -* XCGLogger version [3.2][xcglogger-3.2] for Swift 2.0-2.1 -* XCGLogger version [2.x][xcglogger-2.x] for Swift 1.2 -* XCGLogger version [1.x][xcglogger-1.x] for Swift 1.1 and below. - -## Basic Usage (Quick Start) - -_This quick start method is intended just to get you up and running with the logger. You should however use the [advanced usage below](#advanced-usage-recommended) to get the most out of this library._ - -Add the XCGLogger project as a subproject to your project, and add the appropriate library as a dependency of your target(s). -Under the `General` tab of your target, add `XCGLogger.framework` and `ObjcExceptionBridging.framework` to the `Embedded Binaries` section. - -Then, in each source file: - -```Swift -import XCGLogger -``` - -In your AppDelegate (or other global file), declare a global constant to the default XCGLogger instance. - -```Swift -let log = XCGLogger.default -``` - -In the -```Swift -application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? = nil) // iOS, tvOS -``` - -or - -```Swift -applicationDidFinishLaunching(_ notification: Notification) // macOS -``` - -function, configure the options you need: - -```Swift -log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: "path/to/file", fileLevel: .debug) -``` - -The value for `writeToFile:` can be a `String` or `URL`. If the file already exists, it will be cleared before we use it. Omit the parameter or set it to `nil` to log to the console only. You can optionally set a different log level for the file output using the `fileLevel:` parameter. Set it to `nil` or omit it to use the same log level as the console. - -Then, whenever you'd like to log something, use one of the convenience methods: - -```Swift -log.verbose("A verbose message, usually useful when working on a specific problem") -log.debug("A debug message") -log.info("An info message, probably useful to power users looking in console.app") -log.warning("A warning message, may indicate a possible error") -log.error("An error occurred, but it's recoverable, just info about what happened") -log.severe("A severe error occurred, we are likely about to crash now") -``` - -The different methods set the log level of the message. XCGLogger will only print messages with a log level that is greater to or equal to its current log level setting. So a logger with a level of `.error` will only output log messages with a level of `.error`, or `.severe`. - -## Advanced Usage (Recommended) - -XCGLogger aims to be simple to use and get you up and running quickly with as few as 2 lines of code above. But it allows for much greater control and flexibility. - -A logger can be configured to deliver log messages to a variety of destinations. Using the basic setup above, the logger will output log messages to the standard Xcode debug console, and optionally a file if a path is provided. It's quite likely you'll want to send logs to more interesting places, such as the Apple System Console, a database, third party server, or another application such as [NSLogger][NSLogger]. This is accomplished by adding the destination to the logger. - -Here's an example of configuring the logger to output to the Apple System Log as well as a file. - -```Swift -// Create a logger object with no destinations -let log = XCGLogger(identifier: "advancedLogger", includeDefaultDestinations: false) - -// Create a destination for the system console log (via NSLog) -let systemDestination = AppleSystemLogDestination(identifier: "advancedLogger.systemDestination") - -// Optionally set some configuration options -systemDestination.outputLevel = .debug -systemDestination.showLogIdentifier = false -systemDestination.showFunctionName = true -systemDestination.showThreadName = true -systemDestination.showLevel = true -systemDestination.showFileName = true -systemDestination.showLineNumber = true -systemDestination.showDate = true - -// Add the destination to the logger -log.add(destination: systemDestination) - -// Create a file log destination -let fileDestination = FileDestination(writeToFile: "/path/to/file", identifier: "advancedLogger.fileDestination") - -// Optionally set some configuration options -fileDestination.outputLevel = .debug -fileDestination.showLogIdentifier = false -fileDestination.showFunctionName = true -fileDestination.showThreadName = true -fileDestination.showLevel = true -fileDestination.showFileName = true -fileDestination.showLineNumber = true -fileDestination.showDate = true - -// Process this destination in the background -fileDestination.logQueue = XCGLogger.logQueue - -// Add the destination to the logger -log.add(destination: fileDestination) - -// Add basic app info, version info etc, to the start of the logs -log.logAppDetails() -``` - -You can configure each log destination with different options depending on your needs. - -Another common usage pattern is to have multiple loggers, perhaps one for UI issues, one for networking, and another for data issues. - -Each log destination can have its own log level. As a convenience, you can set the log level on the log object itself and it will pass that level to each destination. Then set the destinations that need to be different. - -**Note**: A destination object can only be added to one logger object, adding it to a second will remove it from the first. - -### Initialization Using A Closure - -Alternatively you can use a closure to initialize your global variable, so that all initialization is done in one place -```Swift -let log: XCGLogger = { - let log = XCGLogger(identifier: "advancedLogger", includeDefaultDestinations: false) - - // Customize as needed - - return log -}() -``` - -**Note**: This creates the log object lazily, which means it's not created until it's actually needed. This delays the initial output of the app information details. Because of this, I recommend forcing the log object to be created at app launch by adding the line `let _ = log` at the top of your `didFinishLaunching` method if you don't already log something on app launch. - -### Log Anything - -You can log strings: - -```Swift -log.debug("Hi there!") -``` - -or pretty much anything you want: - -```Swift -log.debug(true) -log.debug(CGPoint(x: 1.1, y: 2.2)) -log.debug(MyEnum.Option) -log.debug((4, 2)) -log.debug(["Device": "iPhone", "Version": 7]) -``` - -### Filtering Log Messages - -New to XCGLogger 4, you can now create filters to apply to your logger (or to specific destinations). Create and configure your filters (examples below), and then add them to the logger or destination objects by setting the optional `filters` property to an array containing the filters. Filters are applied in the order they exist in the array. During processing, each filter is asked if the log message should be excluded from the log. If any filter excludes the log message, it's excluded. Filters have no way to reverse the exclusion of another filter. - -If a destination's `filters` property is `nil`, the log's `filters` property is used instead. To have one destination log everything, while having all other destinations filter something, add the filters to the log object and set the one destination's `filters` property to an empty array `[]`. - -**Note**: Unlike destinations, you can add the same filter object to multiple loggers and/or multiple destinations. - -#### Filter by Filename - -To exclude all log messages from a specific file, create an exclusion filter like so: - -```Swift -log.filters = [FileNameFilter(excludeFrom: ["AppDelegate.swift"], excludePathWhenMatching: true)] -``` - -`excludeFrom:` takes an `Array<String>` or `Set<String>` so you can specify multiple files at the same time. - -`excludePathWhenMatching:` defaults to `true` so you can omit it unless you want to match path's as well. - -To include log messages only for a specific set to files, create the filter using the `includeFrom:` initializer. It's also possible to just toggle the `inverse` property to flip the exclusion filter to an inclusion filter. - -#### Filter by Tag - -In order to filter log messages by tag, you must of course be able to set a tag on the log messages. Each log message can now have additional, user defined data attached to them, to be used by filters (and/or formatters etc). This is handled with a `userInfo: Dictionary<String, Any>` object. The dictionary key should be a namespaced string to avoid collisions with future additions. Official keys will begin with `com.cerebralgardens.xcglogger`. The tag key can be accessed by `XCGLogger.Constants.userInfoKeyTags`. You definitely don't want to be typing that, so feel free to create a global shortcut: `let tags = XCGLogger.Constants.userInfoKeyTags`. Now you can easily tag your logs: - -```Swift -let sensitiveTag = "Sensitive" -log.debug("A tagged log message", userInfo: [tags: sensitiveTag]) -``` - -The value for tags can be an `Array<String>`, `Set<String>`, or just a `String`, depending on your needs. They'll all work the same way when filtered. - -Depending on your workflow and usage, you'll probably create faster methods to set up the `userInfo` dictionary. See [below](#mixing-and-matching) for other possible shortcuts. - -Now that you have your logs tagged, you can filter easily: - -```Swift -log.filters = [TagFilter(excludeFrom: [sensitiveTag])] -``` - -Just like the `FileNameFilter`, you can use `includeFrom:` or toggle `inverse` to include only log messages that have the specified tags. - -#### Filter by Developer - -Filtering by developer is exactly like filtering by tag, only using the `userInfo` key of `XCGLogger.Constants.userInfoKeyDevs`. In fact, both filters are subclasses of the `UserInfoFilter` class that you can use to create additional filters. See [Extending XCGLogger](#extending-xcglogger) below. - -#### Mixing and Matching - -In large projects with multiple developers, you'll probably want to start tagging log messages, as well as indicate the developer that added the message. - -While extremely flexible, the `userInfo` dictionary can be a little cumbersome to use. There are a few possible methods you can use to simply things. I'm still testing these out myself so they're not officially part of the library yet (I'd love feedback or other suggestions). - -I have created some experimental code to help create the UserInfo dictionaries. (Include the optional `UserInfoHelpers` subspec if using CocoaPods). Check the iOS Demo app to see it in use. - -There are two structs that conform to the `UserInfoTaggingProtocol` protocol. `Tag` and `Dev`. - -You can create an extension on each of these that suit your project. For example: - -```Swift -extension Tag { - static let sensitive = Tag("sensitive") - static let ui = Tag("ui") - static let data = Tag("data") -} - -extension Dev { - static let dave = Dev("dave") - static let sabby = Dev("sabby") -} -``` - -Along with these types, there's an overloaded operator `|` that can be used to merge them together into a dictionary compatible with the `UserInfo:` parameter of the logging calls. - -Then you can log messages like this: - -```Swift -log.debug("A tagged log message", userInfo: Dev.dave | Tag.sensitive) -``` - -There are some current issues I see with these `UserInfoHelpers`, which is why I've made it optional/experimental for now. I'd love to hear comments/suggestions for improvements. - -1. The overloaded operator `|` merges dictionaries so long as there are no `Set`s. If one of the dictionaries contains a `Set`, it'll use one of them, without merging them. Preferring the left hand side if both sides have a set for the same key. -2. Since the `userInfo:` parameter needs a dictionary, you can't pass in a single Dev or Tag object. You need to use at least two with the `|` operator to have it automatically convert to a compatible dictionary. If you only want one Tag for example, you must access the `.dictionary` parameter manually: `userInfo: Tag("Blah").dictionary`. - -### Selectively Executing Code - -All log methods operate on closures. Using the same syntactic sugar as Swift's `assert()` function, this approach ensures we don't waste resources building log messages that won't be output anyway, while at the same time preserving a clean call site. - -For example, the following log statement won't waste resources if the debug log level is suppressed: - -```Swift -log.debug("The description of \(thisObject) is really expensive to create") -``` - -Similarly, let's say you have to iterate through a loop in order to do some calculation before logging the result. In Objective-C, you could put that code block between `#if` `#endif`, and prevent the code from running. But in Swift, previously you would need to still process that loop, wasting resources. With `XCGLogger` it's as simple as: - -```Swift -log.debug { - var total = 0.0 - for receipt in receipts { - total += receipt.total - } - - return "Total of all receipts: \(total)" -} -``` - -In cases where you wish to selectively execute code without generating a log line, return `nil`, or use one of the methods: `verboseExec`, `debugExec`, `infoExec`, `warningExec`, `errorExec`, and `severeExec`. - -### Custom Date Formats - -You can create your own `DateFormatter` object and assign it to the logger. - -```Swift -let dateFormatter = DateFormatter() -dateFormatter.dateFormat = "MM/dd/yyyy hh:mma" -dateFormatter.locale = Locale.current -log.dateFormatter = dateFormatter -``` - -### Enhancing Log Messages With Colour - -XCGLogger supports adding formatting codes to your log messages to enable colour in various places. The original option was to use the [XcodeColors plug-in][XcodeColors]. However, Xcode (as of version 8) no longer officially supports plug-ins. You can still view your logs in colour, just not in Xcode at the moment. You can use the ANSI colour support to add colour to your fileDestination objects and view your logs via a terminal window. This gives you some extra options such as adding Bold, Italics, or (please don't) Blinking! - -Once enabled, each log level can have its own colour. These colours can be customized as desired. If using multiple loggers, you could alternatively set each logger to its own colour. - -An example of setting up the ANSI formatter: - -```Swift -if let fileDestination: FileDestination = log.destination(withIdentifier: XCGLogger.Constants.fileDestinationIdentifier) as? FileDestination { - let ansiColorLogFormatter: ANSIColorLogFormatter = ANSIColorLogFormatter() - ansiColorLogFormatter.colorize(level: .verbose, with: .colorIndex(number: 244), options: [.faint]) - ansiColorLogFormatter.colorize(level: .debug, with: .black) - ansiColorLogFormatter.colorize(level: .info, with: .blue, options: [.underline]) - ansiColorLogFormatter.colorize(level: .warning, with: .red, options: [.faint]) - ansiColorLogFormatter.colorize(level: .error, with: .red, options: [.bold]) - ansiColorLogFormatter.colorize(level: .severe, with: .white, on: .red) - fileDestination.formatters = [ansiColorLogFormatter] -} -``` - -As with filters, you can use the same formatter objects for multiple loggers and/or multiple destinations. If a destination's `formatters` property is `nil`, the logger's `formatters` property will be used instead. - -See [Extending XCGLogger](#extending-xcglogger) below for info on creating your own custom formatters. - -### Alternate Configurations - -By using Swift build flags, different log levels can be used in debugging versus staging/production. -Go to Build Settings -> Swift Compiler - Custom Flags -> Other Swift Flags and add `-DDEBUG` to the Debug entry. - -```Swift -#if DEBUG - log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) -#else - log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) -#endif -``` - -You can set any number of options up in a similar fashion. See the updated iOSDemo app for an example of using different log destinations based on options, search for `USE_NSLOG`. - -### Background Log Processing - -By default, the supplied log destinations will process the logs on the thread they're called on. This is to ensure the log message is displayed immediately when debugging an application. You can add a breakpoint immediately after a log call and see the results when the breakpoint hits. - -However, if you're not actively debugging the application, processing the logs on the current thread can introduce a performance hit. You can now specify a destination process its logs on a dispatch queue of your choice (or even use a default supplied one). - -```Swift -fileDestination.logQueue = XCGLogger.logQueue -``` - -or even - -```Swift -fileDestination.logQueue = DispatchQueue.global(qos: .background) -``` - -This works extremely well when combined with the [Alternate Configurations](#alternate-configurations) method above. - -```Swift -#if DEBUG - log.setup(level: .debug, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) -#else - log.setup(level: .severe, showThreadName: true, showLevel: true, showFileNames: true, showLineNumbers: true) - if let consoleLog = log.logDestination(XCGLogger.Constants.baseConsoleDestinationIdentifier) as? ConsoleDestination { - consoleLog.logQueue = XCGLogger.logQueue - } -#endif -``` - -### Append To Existing Log File - -When using the advanced configuration of the logger (see [Advanced Usage above](#advanced-usage-recommended)), you can now specify that the logger append to an existing log file, instead of automatically overwriting it. - -Add the optional `shouldAppend:` parameter when initializing the `FileDestination` object. You can also add the `appendMarker:` parameter to add a marker to the log file indicating where a new instance of your app started appending. By default we'll add `-- ** ** ** --` if the parameter is omitted. Set it to `nil` to skip appending the marker. - -```let fileDestination = FileDestination(writeToFile: "/path/to/file", identifier: "advancedLogger.fileDestination", shouldAppend: true, appendMarker: "-- Relauched App --")``` - - -### Automatic Log File Rotation - -When logging to a file, you have the option to automatically rotate the log file to an archived destination, and have the logger automatically create a new log file in place of the old one. - -Create a destination using the `AutoRotatingFileDestination` class and set the following properties: - -`targetMaxFileSize`: Auto rotate once the file is larger than this - -`targetMaxTimeInterval`: Auto rotate after this many seconds - -`targetMaxLogFiles`: Number of archived log files to keep, older ones are automatically deleted - -Those are all guidelines for the logger, not hard limits. - -### Extending XCGLogger - -You can create alternate log destinations (besides the built in ones). Your custom log destination must implement the `DestinationProtocol` protocol. Instantiate your object, configure it, and then add it to the `XCGLogger` object with `add(destination:)`. There are two base destination classes (`BaseDestination` and `BaseQueuedDestination`) you can inherit from to handle most of the process for you, requiring you to only implement one additional method in your custom class. Take a look at `ConsoleDestination` and `FileDestination` for examples. - -You can also create custom filters or formatters. Take a look at the provided versions as a starting point. Note that filters and formatters have the ability to alter the log messages as they're processed. This means you can create a filter that strips passwords, highlights specific words, encrypts messages, etc. - -## Contributing - -XCGLogger is the best logger available for Swift because of the contributions from the community like you. There are many ways you can help continue to make it great. - -1. Star the project on [GitHub][github-xcglogger]. -2. Report issues/bugs you find. -3. Suggest features. -4. Submit pull requests. -5. Download and install one of my apps: [https://www.cerebralgardens.com/apps/][cerebral-gardens-apps] Try my newest app: [All the Rings][all-the-rings]. -6. You can visit my [Patreon][patreon-davewoodx] and contribute financially. - -**Note**: when submitting a pull request, please use lots of small commits verses one huge commit. It makes it much easier to merge in when there are several pull requests that need to be combined for a new version. - -<!-- Removed these since plug-ins seem to be gone for good now -## Third Party Tools That Work With XCGLogger - -**Note**: These plug-ins no longer 'officially' work in Xcode. File a [bug report](https://openradar.appspot.com/27447585) if you'd like to see plug-ins return to Xcode. - -[**XcodeColors:**][XcodeColors] Enable colour in the Xcode console -<br /> -[**KZLinkedConsole:**][KZLinkedConsole] Link from a log line directly to the code that produced it - -**Note**: These may not yet work with the Swift 4 version of XCGLogger. - -[**XCGLoggerNSLoggerConnector:**][XCGLoggerNSLoggerConnector] Send your logs to [NSLogger][NSLogger] ---> - -## To Do - -- Add more examples of some advanced use cases -- Add additional log destination types -- Add Objective-C support -- Add Linux support - -## More - -If you find this library helpful, you'll definitely find this other tool helpful: - -Watchdog: https://watchdogforxcode.com/ - -Also, please check out some of my other projects: - -All the Rings: [App Store](https://itunes.apple.com/app/all-the-rings/id1186956966?pt=17255&ct=github&mt=8&at=11lMGu) -Rudoku: [App Store](https://itunes.apple.com/app/rudoku/id965105321?pt=17255&ct=github&mt=8&at=11lMGu) -TV Tune Up: https://www.cerebralgardens.com/tvtuneup - -### Change Log - -The change log is now in its own file: [CHANGELOG.md](CHANGELOG.md) - -[xcglogger-logo]: https://github.com/DaveWoodCom/XCGLogger/raw/master/ReadMeImages/XCGLoggerLogo_326x150.png -[swift.org]: https://swift.org/ -[license]: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -[travis]: https://travis-ci.org/DaveWoodCom/XCGLogger -[swiftpm]: https://swift.org/package-manager/ -[cocoapods]: https://cocoapods.org/ -[cocoapods-xcglogger]: https://cocoapods.org/pods/XCGLogger -[carthage]: https://github.com/Carthage/Carthage -[cerebral-gardens]: https://www.cerebralgardens.com/ -[cerebral-gardens-apps]: https://www.cerebralgardens.com/apps/ -[all-the-rings]: https://alltherings.fit/?s=GH3 -[mastodon-davewoodx]: https://mastodon.social/@davewoodx -[twitter-davewoodx]: https://twitter.com/davewoodx -[github-xcglogger]: https://github.com/DaveWoodCom/XCGLogger -[stackoverflow]: https://stackoverflow.com/questions/tagged/xcglogger -[patreon-davewoodx]: https://www.patreon.com/DaveWoodX - -[badge-language]: https://img.shields.io/badge/Swift-1.x%20%7C%202.x%20%7C%203.x%20%7C%204.x-orange.svg?style=flat -[badge-platforms]: https://img.shields.io/badge/Platforms-macOS%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-lightgray.svg?style=flat -[badge-license]: https://img.shields.io/badge/License-MIT-lightgrey.svg?style=flat -[badge-travis]: https://img.shields.io/travis/DaveWoodCom/XCGLogger/master.svg?style=flat -[badge-swiftpm]: https://img.shields.io/badge/Swift_Package_Manager-v6.1.0-64a6dd.svg?style=flat -[badge-cocoapods]: https://img.shields.io/cocoapods/v/XCGLogger.svg?style=flat -[badge-carthage]: https://img.shields.io/badge/Carthage-v6.1.0-64a6dd.svg?style=flat - -[badge-sponsors]: https://img.shields.io/badge/Sponsors-Cerebral%20Gardens-orange.svg?style=flat -[badge-mastodon]: https://img.shields.io/badge/Mastodon-DaveWoodX-606A84.svg?style=flat -[badge-twitter]: https://img.shields.io/twitter/follow/DaveWoodX.svg?style=social -[badge-patreon]: https://img.shields.io/badge/Patreon-DaveWoodX-F96854.svg?style=flat - -[XcodeColors]: https://github.com/robbiehanson/XcodeColors -[KZLinkedConsole]: https://github.com/krzysztofzablocki/KZLinkedConsole -[NSLogger]: https://github.com/fpillet/NSLogger -[XCGLoggerNSLoggerConnector]: https://github.com/markuswinkler/XCGLoggerNSLoggerConnector -[Firelog]: http://jogabo.github.io/firelog/ -[Firebase]: https://www.firebase.com/ - -[xcglogger-6.1.0]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/6.1.0 -[xcglogger-6.0.4]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/6.0.4 -[xcglogger-6.0.2]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/6.0.2 -[xcglogger-5.0.5]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/5.0.5 -[xcglogger-3.6.0]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.6.0 -[xcglogger-3.5.3]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.5.3 -[xcglogger-3.2]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/3.2.0 -[xcglogger-2.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/2.4.0 -[xcglogger-1.x]: https://github.com/DaveWoodCom/XCGLogger/releases/tag/1.8.1 diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/AppleSystemLogDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/AppleSystemLogDestination.swift deleted file mode 100644 index 416067a..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/AppleSystemLogDestination.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// AppleSystemLogDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation -import Dispatch - -// MARK: - AppleSystemLogDestination -/// A standard destination that outputs log details to the Apple System Log using NSLog instead of print -open class AppleSystemLogDestination: BaseQueuedDestination { - // MARK: - Properties - /// Option: whether or not to output the date the log was created (Always false for this destination) - open override var showDate: Bool { - get { - return false - } - set { - // ignored, NSLog adds the date, so we always want showDate to be false in this subclass - } - } - - // MARK: - Overridden Methods - /// Print the log to the Apple System Log facility (using NSLog). - /// - /// - Parameters: - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open override func write(message: String) { - NSLog("%@", message) - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/AutoRotatingFileDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/AutoRotatingFileDestination.swift deleted file mode 100644 index dc62d27..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/AutoRotatingFileDestination.swift +++ /dev/null @@ -1,286 +0,0 @@ -// -// AutoRotatingFileDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2017-03-31. -// Copyright © 2017 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation - -// MARK: - AutoRotatingFileDestination -/// A destination that outputs log details to files in a log folder, with auto-rotate options (by size or by time) -open class AutoRotatingFileDestination: FileDestination { - // MARK: - Constants - public static let autoRotatingFileDefaultMaxFileSize: UInt64 = 1_048_576 - public static let autoRotatingFileDefaultMaxTimeInterval: TimeInterval = 600 - - // MARK: - Properties - /// Option: desired maximum size of a log file, if 0, no maximum (log files may exceed this, it's a guideline only) - open var targetMaxFileSize: UInt64 = autoRotatingFileDefaultMaxFileSize { - didSet { - if targetMaxFileSize < 1 { - targetMaxFileSize = .max - } - } - } - - /// Option: desired maximum time in seconds stored in a log file, if 0, no maximum (log files may exceed this, it's a guideline only) - open var targetMaxTimeInterval: TimeInterval = autoRotatingFileDefaultMaxTimeInterval { - didSet { - if targetMaxTimeInterval < 1 { - targetMaxTimeInterval = 0 - } - } - } - - /// Option: the desired number of archived log files to keep (number of log files may exceed this, it's a guideline only) - open var targetMaxLogFiles: UInt8 = 10 { - didSet { - cleanUpLogFiles() - } - } - - /// Option: the URL of the folder to store archived log files (defaults to the same folder as the initial log file) - open var archiveFolderURL: URL? = nil { - didSet { - guard let archiveFolderURL = archiveFolderURL else { return } - try? FileManager.default.createDirectory(at: archiveFolderURL, withIntermediateDirectories: true) - } - } - - /// Option: an optional closure to execute whenever the log is auto rotated - open var autoRotationCompletion: ((_ success: Bool) -> Void)? = nil - - /// A custom date formatter object to use as the suffix of archived log files - internal var _customArchiveSuffixDateFormatter: DateFormatter? = nil - /// The date formatter object to use as the suffix of archived log files - open var archiveSuffixDateFormatter: DateFormatter! { - get { - guard _customArchiveSuffixDateFormatter == nil else { return _customArchiveSuffixDateFormatter } - struct Statics { - static var archiveSuffixDateFormatter: DateFormatter = { - let defaultArchiveSuffixDateFormatter = DateFormatter() - defaultArchiveSuffixDateFormatter.locale = NSLocale.current - defaultArchiveSuffixDateFormatter.dateFormat = "_yyyy-MM-dd_HHmmss" - return defaultArchiveSuffixDateFormatter - }() - } - - return Statics.archiveSuffixDateFormatter - } - set { - _customArchiveSuffixDateFormatter = newValue - } - } - - /// Size of the current log file - internal var currentLogFileSize: UInt64 = 0 - - /// Start time of the current log file - internal var currentLogStartTimeInterval: TimeInterval = 0 - - /// The base file name of the log file - internal var baseFileName: String = "xcglogger" - - /// The extension of the log file name - internal var fileExtension: String = "log" - - // MARK: - Class Properties - /// A default folder for storing archived logs if one isn't supplied - open class var defaultLogFolderURL: URL { - #if os(OSX) - let defaultLogFolderURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("log") - try? FileManager.default.createDirectory(at: defaultLogFolderURL, withIntermediateDirectories: true) - return defaultLogFolderURL - #elseif os(iOS) || os(tvOS) || os(watchOS) - let urls = FileManager.default.urls(for: .cachesDirectory, in: .userDomainMask) - let defaultLogFolderURL = urls[urls.endIndex - 1].appendingPathComponent("log") - try? FileManager.default.createDirectory(at: defaultLogFolderURL, withIntermediateDirectories: true) - return defaultLogFolderURL - #endif - } - - // MARK: - Life Cycle - public init(owner: XCGLogger? = nil, writeToFile: Any, identifier: String = "", shouldAppend: Bool = false, appendMarker: String? = "-- ** ** ** --", attributes: [FileAttributeKey: Any]? = nil, maxFileSize: UInt64 = autoRotatingFileDefaultMaxFileSize, maxTimeInterval: TimeInterval = autoRotatingFileDefaultMaxTimeInterval, archiveSuffixDateFormatter: DateFormatter? = nil, targetMaxLogFiles: UInt8 = 10) { - super.init(owner: owner, writeToFile: writeToFile, identifier: identifier, shouldAppend: true, appendMarker: shouldAppend ? appendMarker : nil, attributes: attributes) - - currentLogStartTimeInterval = Date().timeIntervalSince1970 - self.archiveSuffixDateFormatter = archiveSuffixDateFormatter - self.shouldAppend = shouldAppend - self.targetMaxFileSize = maxFileSize < 1 ? .max : maxFileSize - self.targetMaxTimeInterval = maxTimeInterval < 1 ? 0 : maxTimeInterval - self.targetMaxLogFiles = targetMaxLogFiles - - guard let writeToFileURL = writeToFileURL else { return } - - // Calculate some details for naming archived logs based on the current log file path/name - fileExtension = writeToFileURL.pathExtension - baseFileName = writeToFileURL.lastPathComponent - if let fileExtensionRange: Range = baseFileName.range(of: ".\(fileExtension)", options: .backwards), - fileExtensionRange.upperBound >= baseFileName.endIndex { - baseFileName = String(baseFileName[baseFileName.startIndex ..< fileExtensionRange.lowerBound]) - } - - let filePath: String = writeToFileURL.path - let logFileName: String = "\(baseFileName).\(fileExtension)" - if let logFileNameRange: Range = filePath.range(of: logFileName, options: .backwards), - logFileNameRange.upperBound >= filePath.endIndex { - let archiveFolderPath: String = String(filePath[filePath.startIndex ..< logFileNameRange.lowerBound]) - archiveFolderURL = URL(fileURLWithPath: "\(archiveFolderPath)") - } - if archiveFolderURL == nil { - archiveFolderURL = type(of: self).defaultLogFolderURL - } - - do { - // Initialize starting values for file size and start time so shouldRotate calculations are valid - let fileAttributes: [FileAttributeKey: Any] = try FileManager.default.attributesOfItem(atPath: filePath) - currentLogFileSize = fileAttributes[.size] as? UInt64 ?? 0 - currentLogStartTimeInterval = (fileAttributes[.creationDate] as? Date ?? Date()).timeIntervalSince1970 - } - catch let error as NSError { - owner?._logln("Unable to determine current file attributes of log file: \(error.localizedDescription)", level: .warning) - } - - // Because we always start by appending, regardless of the shouldAppend setting, we now need to handle the cases where we don't want to append or that we have now reached the rotation threshold for our current log file - if !shouldAppend || shouldRotate() { - rotateFile() - } - } - - /// Scan the log folder and delete log files that are no longer relevant. - /// - /// - Parameters: None. - /// - /// - Returns: Nothing. - /// - open func cleanUpLogFiles() { - var archivedFileURLs: [URL] = self.archivedFileURLs() - guard archivedFileURLs.count > Int(targetMaxLogFiles) else { return } - - archivedFileURLs.removeFirst(Int(targetMaxLogFiles)) - - let fileManager: FileManager = FileManager.default - for archivedFileURL in archivedFileURLs { - do { - try fileManager.removeItem(at: archivedFileURL) - } - catch let error as NSError { - owner?._logln("Unable to delete old archived log file \(archivedFileURL.path): \(error.localizedDescription)", level: .error) - } - } - } - - /// Delete all archived log files. - /// - /// - Parameters: None. - /// - /// - Returns: Nothing. - /// - open func purgeArchivedLogFiles() { - let fileManager: FileManager = FileManager.default - for archivedFileURL in archivedFileURLs() { - do { - try fileManager.removeItem(at: archivedFileURL) - } - catch let error as NSError { - owner?._logln("Unable to delete old archived log file \(archivedFileURL.path): \(error.localizedDescription)", level: .error) - } - } - } - - /// Get the URLs of the archived log files. - /// - /// - Parameters: None. - /// - /// - Returns: An array of file URLs pointing to previously archived log files, sorted with the most recent logs first. - /// - open func archivedFileURLs() -> [URL] { - let archiveFolderURL: URL = (self.archiveFolderURL ?? type(of: self).defaultLogFolderURL) - guard let fileURLs = try? FileManager.default.contentsOfDirectory(at: archiveFolderURL, includingPropertiesForKeys: nil, options: [.skipsHiddenFiles]) else { return [] } - guard let identifierData: Data = identifier.data(using: .utf8) else { return [] } - - var archivedDetails: [(url: URL, timestamp: String)] = [] - for fileURL in fileURLs { - guard let archivedLogIdentifierOptionalData = try? fileURL.extendedAttribute(forName: XCGLogger.Constants.extendedAttributeArchivedLogIdentifierKey) else { continue } - guard let archivedLogIdentifierData = archivedLogIdentifierOptionalData else { continue } - guard archivedLogIdentifierData == identifierData else { continue } - - guard let timestampOptionalData = try? fileURL.extendedAttribute(forName: XCGLogger.Constants.extendedAttributeArchivedLogTimestampKey) else { continue } - guard let timestampData = timestampOptionalData else { continue } - guard let timestamp = String(data: timestampData, encoding: .utf8) else { continue } - - archivedDetails.append((fileURL, timestamp)) - } - - archivedDetails.sort(by: { (lhs, rhs) -> Bool in lhs.timestamp > rhs.timestamp }) - var archivedFileURLs: [URL] = [] - for archivedDetail in archivedDetails { - archivedFileURLs.append(archivedDetail.url) - } - - return archivedFileURLs - } - - /// Rotate the current log file. - /// - /// - Parameters: None. - /// - /// - Returns: Nothing. - /// - open func rotateFile() { - var archiveFolderURL: URL = (self.archiveFolderURL ?? type(of: self).defaultLogFolderURL) - archiveFolderURL = archiveFolderURL.appendingPathComponent("\(baseFileName)\(archiveSuffixDateFormatter.string(from: Date()))") - archiveFolderURL = archiveFolderURL.appendingPathExtension(fileExtension) - rotateFile(to: archiveFolderURL, closure: autoRotationCompletion) - - currentLogStartTimeInterval = Date().timeIntervalSince1970 - currentLogFileSize = 0 - - cleanUpLogFiles() - } - - /// Determine if the log file should be rotated. - /// - /// - Parameters: None. - /// - /// - Returns: - /// - true: The log file should be rotated. - /// - false: The log file doesn't have to be rotated. - /// - open func shouldRotate() -> Bool { - // Do not rotate until critical setup has been completed so that we do not accidentally rotate once to the defaultLogFolderURL before determining the desired log location - guard archiveFolderURL != nil else { return false } - - // File Size - guard currentLogFileSize < targetMaxFileSize else { return true } - - // Time Interval, zero = never rotate - guard targetMaxTimeInterval > 0 else { return false } - - // Time Interval, else check time - guard Date().timeIntervalSince1970 - currentLogStartTimeInterval < targetMaxTimeInterval else { return true } - - return false - } - - // MARK: - Overridden Methods - /// Write the log to the log file. - /// - /// - Parameters: - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open override func write(message: String) { - currentLogFileSize += UInt64(message.count) - - super.write(message: message) - - if shouldRotate() { - rotateFile() - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseDestination.swift deleted file mode 100644 index 470d755..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseDestination.swift +++ /dev/null @@ -1,181 +0,0 @@ -// -// BaseDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation - -// MARK: - BaseDestination -/// A base class destination that doesn't actually output the log anywhere and is intended to be subclassed -open class BaseDestination: DestinationProtocol, CustomDebugStringConvertible { - // MARK: - Properties - /// Logger that owns the destination object - open var owner: XCGLogger? - - /// Identifier for the destination (should be unique) - open var identifier: String - - /// Log level for this destination - open var outputLevel: XCGLogger.Level = .debug - - /// Flag whether or not we've logged the app details to this destination - open var haveLoggedAppDetails: Bool = false - - /// Array of log formatters to apply to messages before they're output - open var formatters: [LogFormatterProtocol]? = nil - - /// Array of log filters to apply to messages before they're output - open var filters: [FilterProtocol]? = nil - - /// Option: whether or not to output the log identifier - open var showLogIdentifier: Bool = false - - /// Option: whether or not to output the function name that generated the log - open var showFunctionName: Bool = true - - /// Option: whether or not to output the thread's name the log was created on - open var showThreadName: Bool = false - - /// Option: whether or not to output the fileName that generated the log - open var showFileName: Bool = true - - /// Option: whether or not to output the line number where the log was generated - open var showLineNumber: Bool = true - - /// Option: whether or not to output the log level of the log - open var showLevel: Bool = true - - /// Option: whether or not to output the date the log was created - open var showDate: Bool = true - - /// Option: override descriptions of log levels - open var levelDescriptions: [XCGLogger.Level: String] = [:] - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - return "\(extractTypeName(self)): \(identifier) - Level: \(outputLevel) showLogIdentifier: \(showLogIdentifier) showFunctionName: \(showFunctionName) showThreadName: \(showThreadName) showLevel: \(showLevel) showFileName: \(showFileName) showLineNumber: \(showLineNumber) showDate: \(showDate)" - } - } - - // MARK: - Life Cycle - public init(owner: XCGLogger? = nil, identifier: String = "") { - self.owner = owner - self.identifier = identifier - } - - // MARK: - Methods to Process Log Details - /// Process the log details. - /// - /// - Parameters: - /// - logDetails: Structure with all of the details for the log to process. - /// - /// - Returns: Nothing - /// - open func process(logDetails: LogDetails) { - guard let owner = owner else { return } - - var extendedDetails: String = "" - - if showDate { - extendedDetails += "\((owner.dateFormatter != nil) ? owner.dateFormatter!.string(from: logDetails.date) : logDetails.date.description) " - } - - if showLevel { - extendedDetails += "[\(levelDescriptions[logDetails.level] ?? owner.levelDescriptions[logDetails.level] ?? logDetails.level.description)] " - } - - if showLogIdentifier { - extendedDetails += "[\(owner.identifier)] " - } - - if showThreadName { - if Thread.isMainThread { - extendedDetails += "[main] " - } - else { - if let threadName = Thread.current.name, !threadName.isEmpty { - extendedDetails += "[\(threadName)] " - } - else if let queueName = DispatchQueue.currentQueueLabel, !queueName.isEmpty { - extendedDetails += "[\(queueName)] " - } - else { - extendedDetails += String(format: "[%p] ", Thread.current) - } - } - } - - if showFileName { - extendedDetails += "[\((logDetails.fileName as NSString).lastPathComponent)\((showLineNumber ? ":" + String(logDetails.lineNumber) : ""))] " - } - else if showLineNumber { - extendedDetails += "[\(logDetails.lineNumber)] " - } - - if showFunctionName { - extendedDetails += "\(logDetails.functionName) " - } - - output(logDetails: logDetails, message: "\(extendedDetails)> \(logDetails.message)") - } - - /// Process the log details (internal use, same as process(logDetails:) but omits function/file/line info). - /// - /// - Parameters: - /// - logDetails: Structure with all of the details for the log to process. - /// - /// - Returns: Nothing - /// - open func processInternal(logDetails: LogDetails) { - guard let owner = owner else { return } - - var extendedDetails: String = "" - - if showDate { - extendedDetails += "\((owner.dateFormatter != nil) ? owner.dateFormatter!.string(from: logDetails.date) : logDetails.date.description) " - } - - if showLevel { - extendedDetails += "[\(logDetails.level)] " - } - - if showLogIdentifier { - extendedDetails += "[\(owner.identifier)] " - } - - output(logDetails: logDetails, message: "\(extendedDetails)> \(logDetails.message)") - } - - // MARK: - Misc methods - /// Check if the destination's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: The log level to check. - /// - /// - Returns: - /// - true: Log destination is at the log level specified or lower. - /// - false: Log destination is at a higher log level. - /// - open func isEnabledFor(level: XCGLogger.Level) -> Bool { - return level >= self.outputLevel - } - - // MARK: - Methods that must be overridden in subclasses - /// Output the log to the destination. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open func output(logDetails: LogDetails, message: String) { - // Do something with the text in an overridden version of this method - precondition(false, "Must override this") - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseQueuedDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseQueuedDestination.swift deleted file mode 100644 index bd17d2d..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/BaseQueuedDestination.swift +++ /dev/null @@ -1,64 +0,0 @@ -// -// BaseQueuedDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2017-04-02. -// Copyright © 2017 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation -import Dispatch - -// MARK: - BaseQueuedDestination -/// A base class destination (with a possible DispatchQueue) that doesn't actually output the log anywhere and is intended to be subclassed -open class BaseQueuedDestination: BaseDestination { - // MARK: - Properties - /// The dispatch queue to process the log on - open var logQueue: DispatchQueue? = nil - - // MARK: - Life Cycle - - // MARK: - Overridden Methods - /// Apply filters and formatters to the message before queuing it to be written by the write method. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Message ready to be formatted for output. - /// - /// - Returns: Nothing - /// - open override func output(logDetails: LogDetails, message: String) { - let outputClosure = { - // Create mutable versions of our parameters - var logDetails = logDetails - var message = message - - // Apply filters, if any indicate we should drop the message, we abort before doing the actual logging - guard !self.shouldExclude(logDetails: &logDetails, message: &message) else { return } - - self.applyFormatters(logDetails: &logDetails, message: &message) - self.write(message: message) - } - - if let logQueue = logQueue { - logQueue.async(execute: outputClosure) - } - else { - outputClosure() - } - } - - // MARK: - Methods that must be overridden in subclasses - /// Write the log message to the destination. - /// - /// - Parameters: - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open func write(message: String) { - // Do something with the message in an overridden version of this method - precondition(false, "Must override this") - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/ConsoleDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/ConsoleDestination.swift deleted file mode 100644 index 1683cdf..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/ConsoleDestination.swift +++ /dev/null @@ -1,26 +0,0 @@ -// -// ConsoleDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Dispatch - -// MARK: - ConsoleDestination -/// A standard destination that outputs log details to the console -open class ConsoleDestination: BaseQueuedDestination { - // MARK: - Overridden Methods - /// Print the log to the console. - /// - /// - Parameters: - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open override func write(message: String) { - print(message) - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/DestinationProtocol.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/DestinationProtocol.swift deleted file mode 100644 index d10e761..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/DestinationProtocol.swift +++ /dev/null @@ -1,124 +0,0 @@ -// -// DestinationProtocol.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - DestinationProtocol -/// Protocol for destination classes to conform to -public protocol DestinationProtocol: CustomDebugStringConvertible { - // MARK: - Properties - /// Logger that owns the destination object - var owner: XCGLogger? {get set} - - /// Identifier for the destination (should be unique) - var identifier: String {get set} - - /// Log level for this destination - var outputLevel: XCGLogger.Level {get set} - - /// Flag whether or not we've logged the app details to this destination - var haveLoggedAppDetails: Bool { get set } - - /// Array of log formatters to apply to messages before they're output - var formatters: [LogFormatterProtocol]? { get set } - - /// Array of log filters to apply to messages before they're output - var filters: [FilterProtocol]? { get set } - - // MARK: - Methods - /// Process the log details. - /// - /// - Parameters: - /// - logDetails: Structure with all of the details for the log to process. - /// - /// - Returns: Nothing - /// - func process(logDetails: LogDetails) - - /// Process the log details (internal use, same as processLogDetails but omits function/file/line info). - /// - /// - Parameters: - /// - logDetails: Structure with all of the details for the log to process. - /// - /// - Returns: Nothing - /// - func processInternal(logDetails: LogDetails) - - /// Check if the destination's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: The log level to check. - /// - /// - Returns: - /// - true: Log destination is at the log level specified or lower. - /// - false: Log destination is at a higher log level. - /// - func isEnabledFor(level: XCGLogger.Level) -> Bool - - /// Apply filters to determine if the log message should be logged. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: - /// - true: Drop this log message. - /// - false: Keep this log message and continue processing. - /// - func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool - - /// Apply formatters. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - func applyFormatters(logDetails: inout LogDetails, message: inout String) -} - -extension DestinationProtocol { - - /// Iterate over all of the log filters in this destination, or the logger if none set for the destination. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: - /// - true: Drop this log message. - /// - false: Keep this log message and continue processing. - /// - public func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool { - guard let filters = self.filters ?? self.owner?.filters, filters.count > 0 else { return false } - - for filter in filters { - if filter.shouldExclude(logDetails: &logDetails, message: &message) { - return true - } - } - - return false - } - - /// Iterate over all of the log formatters in this destination, or the logger if none set for the destination. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - public func applyFormatters(logDetails: inout LogDetails, message: inout String) { - guard let formatters = self.formatters ?? self.owner?.formatters, formatters.count > 0 else { return } - - for formatter in formatters { - formatter.format(logDetails: &logDetails, message: &message) - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/FileDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/FileDestination.swift deleted file mode 100644 index c0f5def..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/FileDestination.swift +++ /dev/null @@ -1,245 +0,0 @@ -// -// FileDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation -import Dispatch - -// MARK: - FileDestination -/// A standard destination that outputs log details to a file -open class FileDestination: BaseQueuedDestination { - // MARK: - Properties - /// Logger that owns the destination object - open override var owner: XCGLogger? { - didSet { - if owner != nil { - openFile() - } - else { - closeFile() - } - } - } - - /// FileURL of the file to log to - open var writeToFileURL: URL? = nil { - didSet { - openFile() - } - } - - /// File handle for the log file - internal var logFileHandle: FileHandle? = nil - - /// Option: whether or not to append to the log file if it already exists - internal var shouldAppend: Bool - - /// Option: if appending to the log file, the string to output at the start to mark where the append took place - internal var appendMarker: String? - - /// Option: Attributes to use when creating a new file - internal var fileAttributes: [FileAttributeKey: Any]? = nil - - // MARK: - Life Cycle - public init(owner: XCGLogger? = nil, writeToFile: Any, identifier: String = "", shouldAppend: Bool = false, appendMarker: String? = "-- ** ** ** --", attributes: [FileAttributeKey: Any]? = nil) { - self.shouldAppend = shouldAppend - self.appendMarker = appendMarker - self.fileAttributes = attributes - - if writeToFile is NSString { - writeToFileURL = URL(fileURLWithPath: writeToFile as! String) - } - else if let writeToFile = writeToFile as? URL, writeToFile.isFileURL { - writeToFileURL = writeToFile - } - else { - writeToFileURL = nil - } - - super.init(owner: owner, identifier: identifier) - - if owner != nil { - openFile() - } - } - - deinit { - // close file stream if open - closeFile() - } - - // MARK: - File Handling Methods - /// Open the log file for writing. - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - private func openFile() { - guard let owner = owner else { return } - - if logFileHandle != nil { - closeFile() - } - - guard let writeToFileURL = writeToFileURL else { return } - - let fileManager: FileManager = FileManager.default - let fileExists: Bool = fileManager.fileExists(atPath: writeToFileURL.path) - if !shouldAppend || !fileExists { - fileManager.createFile(atPath: writeToFileURL.path, contents: nil, attributes: fileAttributes) - } - - do { - logFileHandle = try FileHandle(forWritingTo: writeToFileURL) - if fileExists && shouldAppend { - logFileHandle?.seekToEndOfFile() - - if let appendMarker = appendMarker, - let encodedData = "\(appendMarker)\n".data(using: String.Encoding.utf8) { - - _try({ - self.logFileHandle?.write(encodedData) - }, - catch: { (exception: NSException) in - print("Objective-C Exception occurred: \(exception)") - }) - } - } - } - catch let error as NSError { - owner._logln("Attempt to open log file for \(fileExists && shouldAppend ? "appending" : "writing") failed: \(error.localizedDescription)", level: .error, source: self) - logFileHandle = nil - return - } - - owner.logAppDetails(selectedDestination: self) - - let logDetails = LogDetails(level: .info, date: Date(), message: "XCGLogger " + (fileExists && shouldAppend ? "appending" : "writing") + " log to: " + writeToFileURL.absoluteString, functionName: "", fileName: "", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo) - owner._logln(logDetails.message, level: logDetails.level, source: self) - if owner.destination(withIdentifier: identifier) == nil { - processInternal(logDetails: logDetails) - } - } - - /// Close the log file. - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - private func closeFile() { - logFileHandle?.synchronizeFile() - logFileHandle?.closeFile() - logFileHandle = nil - } - - /// Force any buffered data to be written to the file. - /// - /// - Parameters: - /// - closure: An optional closure to execute after the file has been rotated. - /// - /// - Returns: Nothing. - /// - open func flush(closure: (() -> Void)? = nil) { - if let logQueue = logQueue { - logQueue.async { - self.logFileHandle?.synchronizeFile() - closure?() - } - } - else { - logFileHandle?.synchronizeFile() - closure?() - } - } - - /// Rotate the log file, storing the existing log file in the specified location. - /// - /// - Parameters: - /// - archiveToFile: FileURL or path (as String) to where the existing log file should be rotated to. - /// - closure: An optional closure to execute after the file has been rotated. - /// - /// - Returns: - /// - true: Log file rotated successfully. - /// - false: Error rotating the log file. - /// - @discardableResult open func rotateFile(to archiveToFile: Any, closure: ((_ success: Bool) -> Void)? = nil) -> Bool { - var archiveToFileURL: URL? = nil - - if archiveToFile is NSString { - archiveToFileURL = URL(fileURLWithPath: archiveToFile as! String) - } - else if let archiveToFile = archiveToFile as? URL, archiveToFile.isFileURL { - archiveToFileURL = archiveToFile - } - else { - closure?(false) - return false - } - - if let archiveToFileURL = archiveToFileURL, - let writeToFileURL = writeToFileURL { - - let fileManager: FileManager = FileManager.default - guard !fileManager.fileExists(atPath: archiveToFileURL.path) else { closure?(false); return false } - - closeFile() - haveLoggedAppDetails = false - - do { - try fileManager.moveItem(atPath: writeToFileURL.path, toPath: archiveToFileURL.path) - } - catch let error as NSError { - openFile() - owner?._logln("Unable to rotate file \(writeToFileURL.path) to \(archiveToFileURL.path): \(error.localizedDescription)", level: .error, source: self) - closure?(false) - return false - } - - do { - if let identifierData: Data = identifier.data(using: .utf8) { - try archiveToFileURL.setExtendedAttribute(data: identifierData, forName: XCGLogger.Constants.extendedAttributeArchivedLogIdentifierKey) - } - if let timestampData: Data = "\(Date().timeIntervalSince1970)".data(using: .utf8) { - try archiveToFileURL.setExtendedAttribute(data: timestampData, forName: XCGLogger.Constants.extendedAttributeArchivedLogTimestampKey) - } - } - catch let error as NSError { - owner?._logln("Unable to set extended file attributes on file \(archiveToFileURL.path): \(error.localizedDescription)", level: .error, source: self) - } - - owner?._logln("Rotated file \(writeToFileURL.path) to \(archiveToFileURL.path)", level: .info, source: self) - openFile() - closure?(true) - return true - } - - closure?(false) - return false - } - - // MARK: - Overridden Methods - /// Write the log to the log file. - /// - /// - Parameters: - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open override func write(message: String) { - if let encodedData = "\(message)\n".data(using: String.Encoding.utf8) { - _try({ - self.logFileHandle?.write(encodedData) - }, - catch: { (exception: NSException) in - print("Objective-C Exception occurred: \(exception)") - }) - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Destinations/TestDestination.swift b/Pods/XCGLogger/Sources/XCGLogger/Destinations/TestDestination.swift deleted file mode 100644 index 3fb9851..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Destinations/TestDestination.swift +++ /dev/null @@ -1,109 +0,0 @@ -// -// TestDestination.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-26. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Dispatch - -// MARK: - TestDestination -/// A destination for testing, preload it with the expected logs, send your logs, then check for success -open class TestDestination: BaseQueuedDestination { - // MARK: - Properties - /// Array of all expected log messages - open var expectedLogMessages: [String] = [] - - /// Array of received, unexpected log messages - open var unexpectedLogMessages: [String] = [] - - /// Number of log messages still expected - open var remainingNumberOfExpectedLogMessages: Int { - get { - return expectedLogMessages.count - } - } - - /// Number of unexpected log messages - open var numberOfUnexpectedLogMessages: Int { - get { - return unexpectedLogMessages.count - } - } - - /// Add the messages you expect to be logged - /// - /// - Parameters: - /// - expectedLogMessage: The log message, formated as you expect it to be received. - /// - /// - Returns: Nothing - /// - open func add(expectedLogMessage message: String) { - sync { - expectedLogMessages.append(message) - } - } - - /// Execute a closure on the logQueue if it exists, otherwise just execute on the current thread - /// - /// - Parameters: - /// - closure: The closure to execute. - /// - /// - Returns: Nothing - /// - fileprivate func sync(closure: () -> ()) { - if let logQueue = logQueue { - logQueue.sync { - closure() - } - } - else { - closure() - } - } - - /// Reset our expectations etc for additional tests - /// - /// - Parameters: Nothing - /// - /// - Returns: Nothing - /// - open func reset() { - haveLoggedAppDetails = false - expectedLogMessages = [] - unexpectedLogMessages = [] - } - - // MARK: - Overridden Methods - /// Removes line from expected log messages if there's a match, otherwise adds to unexpected log messages. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - open override func output(logDetails: LogDetails, message: String) { - sync { - var logDetails = logDetails - var message = message - - // Apply filters, if any indicate we should drop the message, we abort before doing the actual logging - if self.shouldExclude(logDetails: &logDetails, message: &message) { - return - } - - applyFormatters(logDetails: &logDetails, message: &message) - - let index = expectedLogMessages.index(of: message) - if let index = index { - expectedLogMessages.remove(at: index) - } - else { - unexpectedLogMessages.append(message) - } - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Extensions/DispatchQueue+XCGAdditions.swift b/Pods/XCGLogger/Sources/XCGLogger/Extensions/DispatchQueue+XCGAdditions.swift deleted file mode 100644 index 0e17e2f..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Extensions/DispatchQueue+XCGAdditions.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// DispatchQueue+XCGAdditions.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-26. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Dispatch - -/// Extensions to the DispatchQueue class -extension DispatchQueue { - - /// Extract the current dispatch queue's label name (Temp workaround until this is added to Swift 3.0 properly) - public static var currentQueueLabel: String? { - return String(validatingUTF8: __dispatch_queue_get_label(nil)) - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Extensions/URL+XCGAdditions.swift b/Pods/XCGLogger/Sources/XCGLogger/Extensions/URL+XCGAdditions.swift deleted file mode 100644 index adf83b8..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Extensions/URL+XCGAdditions.swift +++ /dev/null @@ -1,82 +0,0 @@ -// -// URL+ExtendedAttributes.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2017-04-04. -// Copyright © 2017 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// -// Based on code by Martin-R here: https://stackoverflow.com/a/38343753/144857 - -import Foundation - -extension URL { - - /// Get extended attribute. - func extendedAttribute(forName name: String) throws -> Data? { - let data: Data? = try self.withUnsafeFileSystemRepresentation { (fileSystemPath: (UnsafePointer<Int8>?)) -> Data? in - // Determine attribute size - let length = getxattr(fileSystemPath, name, nil, 0, 0, 0) - guard length >= 0 else { return nil } - - // Create buffer with required size - var data = Data(count: length) - - // Retrieve attribute - let result = data.withUnsafeMutableBytes { - getxattr(fileSystemPath, name, $0, length, 0, 0) - } - guard result >= 0 else { throw URL.posixError(errno) } - return data - } - - return data - } - - /// Set extended attribute. - func setExtendedAttribute(data: Data, forName name: String) throws { - try self.withUnsafeFileSystemRepresentation { fileSystemPath in - let result = data.withUnsafeBytes { - setxattr(fileSystemPath, name, $0, data.count, 0, 0) - } - guard result >= 0 else { throw URL.posixError(errno) } - } - } - - /// Remove extended attribute. - func removeExtendedAttribute(forName name: String) throws { - try self.withUnsafeFileSystemRepresentation { fileSystemPath in - let result = removexattr(fileSystemPath, name, 0) - guard result >= 0 else { throw URL.posixError(errno) } - } - } - - /// Get list of all extended attributes. - func listExtendedAttributes() throws -> [String] { - let list = try self.withUnsafeFileSystemRepresentation { (fileSystemPath: (UnsafePointer<Int8>?)) -> [String] in - let length = listxattr(fileSystemPath, nil, 0, 0) - guard length >= 0 else { throw URL.posixError(errno) } - - // Create buffer with required size - var data = Data(count: length) - - // Retrieve attribute list - let result = data.withUnsafeMutableBytes { - listxattr(fileSystemPath, $0, length, 0) - } - guard result >= 0 else { throw URL.posixError(errno) } - - // Extract attribute names - let list = data.split(separator: 0).compactMap { - String(data: Data($0), encoding: .utf8) - } - return list - } - return list - } - - /// Helper function to create an NSError from a Unix errno. - private static func posixError(_ err: Int32) -> NSError { - return NSError(domain: NSPOSIXErrorDomain, code: Int(err), userInfo: [NSLocalizedDescriptionKey: String(cString: strerror(err))]) - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Filters/DevFilter.swift b/Pods/XCGLogger/Sources/XCGLogger/Filters/DevFilter.swift deleted file mode 100644 index 101f889..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Filters/DevFilter.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// DevFilter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-09-01. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - DevFilter -/// Filter log messages by devs -open class DevFilter: UserInfoFilter { - - /// Initializer to create an inclusion list of devs to match against - /// - /// Note: Only log messages with a specific dev will be logged, all others will be excluded - /// - /// - Parameters: - /// - devs: Set or Array of devs to match against. - /// - public override init<S: Sequence>(includeFrom devs: S) where S.Iterator.Element == String { - super.init(includeFrom: devs) - userInfoKey = XCGLogger.Constants.userInfoKeyDevs - } - - /// Initializer to create an exclusion list of devs to match against - /// - /// Note: Log messages with a specific dev will be excluded from logging - /// - /// - Parameters: - /// - devs: Set or Array of devs to match against. - /// - public override init<S: Sequence>(excludeFrom devs: S) where S.Iterator.Element == String { - super.init(excludeFrom: devs) - userInfoKey = XCGLogger.Constants.userInfoKeyDevs - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Filters/FileNameFilter.swift b/Pods/XCGLogger/Sources/XCGLogger/Filters/FileNameFilter.swift deleted file mode 100644 index a5f2d80..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Filters/FileNameFilter.swift +++ /dev/null @@ -1,126 +0,0 @@ -// -// FileNameFilter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-31. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation - -// MARK: - FileNameFilter -/// Filter log messages by fileName -open class FileNameFilter: FilterProtocol { - - /// Option to toggle the match results - open var inverse: Bool = false - - /// Option to match full path or just the fileName - private var excludePath: Bool = true - - /// Internal list of fileNames to match against - private var fileNamesToMatch: Set<String> = [] - - /// Initializer to create an inclusion list of fileNames to match against - /// - /// Note: Only log messages from the specified files will be logged, all others will be excluded - /// - /// - Parameters: - /// - fileNames: Set or Array of fileNames to match against. - /// - excludePathWhenMatching: Whether or not to ignore the path for matches. **Default: true ** - /// - public init<S: Sequence>(includeFrom fileNames: S, excludePathWhenMatching: Bool = true) where S.Iterator.Element == String { - inverse = true - excludePath = excludePathWhenMatching - add(fileNames: fileNames) - } - - /// Initializer to create an exclusion list of fileNames to match against - /// - /// Note: Log messages from the specified files will be excluded from logging - /// - /// - Parameters: - /// - fileNames: Set or Array of fileNames to match against. - /// - excludePathWhenMatching: Whether or not to ignore the path for matches. **Default: true ** - /// - public init<S: Sequence>(excludeFrom fileNames: S, excludePathWhenMatching: Bool = true) where S.Iterator.Element == String { - inverse = false - excludePath = excludePathWhenMatching - add(fileNames: fileNames) - } - - /// Add another fileName to the list of names to match against. - /// - /// - Parameters: - /// - fileName: Name of the file to match against. - /// - /// - Returns: - /// - true: FileName added. - /// - false: FileName already added. - /// - @discardableResult open func add(fileName: String) -> Bool { - return fileNamesToMatch.insert(excludePath ? (fileName as NSString).lastPathComponent : fileName).inserted - } - - /// Add a list of fileNames to the list of names to match against. - /// - /// - Parameters: - /// - fileNames: Set or Array of fileNames to match against. - /// - /// - Returns: Nothing - /// - open func add<S: Sequence>(fileNames: S) where S.Iterator.Element == String { - for fileName in fileNames { - add(fileName: fileName) - } - } - - /// Clear the list of fileNames to match against. - /// - /// - Note: Doesn't change whether or not the filter is inclusive of exclusive - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func clear() { - fileNamesToMatch = [] - } - - /// Check if the log message should be excluded from logging. - /// - /// - Note: If the fileName matches - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: - /// - true: Drop this log message. - /// - false: Keep this log message and continue processing. - /// - open func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool { - var matched: Bool = fileNamesToMatch.contains(excludePath ? (logDetails.fileName as NSString).lastPathComponent : logDetails.fileName) - if inverse { - matched = !matched - } - - return matched - } - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - var description: String = "\(extractTypeName(self)): " + (inverse ? "Including only matches for: " : "Excluding matches for: ") - if fileNamesToMatch.count > 5 { - description += "\n\t- " + fileNamesToMatch.sorted().joined(separator: "\n\t- ") - } - else { - description += fileNamesToMatch.sorted().joined(separator: ", ") - } - - return description - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Filters/FilterProtocol.swift b/Pods/XCGLogger/Sources/XCGLogger/Filters/FilterProtocol.swift deleted file mode 100644 index acb3edb..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Filters/FilterProtocol.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// FilterProtocol.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-31. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - FilterProtocol -/// Protocol for log filter classes to conform to -public protocol FilterProtocol: CustomDebugStringConvertible { - - /// Check if the log message should be excluded from logging. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: - /// - true: Drop this log message. - /// - false: Keep this log message and continue processing. - /// - func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Filters/TagFilter.swift b/Pods/XCGLogger/Sources/XCGLogger/Filters/TagFilter.swift deleted file mode 100644 index edb20f8..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Filters/TagFilter.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// TagFilter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-09-01. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - TagFilter -/// Filter log messages by tags -open class TagFilter: UserInfoFilter { - - /// Initializer to create an inclusion list of tags to match against - /// - /// Note: Only log messages with a specific tag will be logged, all others will be excluded - /// - /// - Parameters: - /// - tags: Set or Array of tags to match against. - /// - public override init<S: Sequence>(includeFrom tags: S) where S.Iterator.Element == String { - super.init(includeFrom: tags) - userInfoKey = XCGLogger.Constants.userInfoKeyTags - } - - /// Initializer to create an exclusion list of tags to match against - /// - /// Note: Log messages with a specific tag will be excluded from logging - /// - /// - Parameters: - /// - tags: Set or Array of tags to match against. - /// - public override init<S: Sequence>(excludeFrom tags: S) where S.Iterator.Element == String { - super.init(excludeFrom: tags) - userInfoKey = XCGLogger.Constants.userInfoKeyTags - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Filters/UserInfoFilter.swift b/Pods/XCGLogger/Sources/XCGLogger/Filters/UserInfoFilter.swift deleted file mode 100644 index a397c33..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Filters/UserInfoFilter.swift +++ /dev/null @@ -1,143 +0,0 @@ -// -// UserInfoFilter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-09-01. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - UserInfoFilter -/// Filter log messages by the contents of a key in the UserInfo dictionary -/// Note: - This is intended to be subclassed, unlikely you'll use it directly -open class UserInfoFilter: FilterProtocol { - - /// The key to check in the LogDetails.userInfo dictionary - open var userInfoKey: String = "" - - /// Option to also apply the filter to internal messages (ie, app details, error's opening files etc) - open var applyFilterToInternalMessages: Bool = false - - /// Option to toggle the match results - open var inverse: Bool = false - - /// Internal list of items to match against - private var itemsToMatch: Set<String> = [] - - /// Initializer to create an inclusion list of items to match against - /// - /// Note: Only log messages with a specific item will be logged, all others will be excluded - /// - /// - Parameters: - /// - items: Set or Array of items to match against. - /// - public init<S: Sequence>(includeFrom items: S) where S.Iterator.Element == String { - inverse = true - add(items: items) - } - - /// Initializer to create an exclusion list of items to match against - /// - /// Note: Log messages with a specific item will be excluded from logging - /// - /// - Parameters: - /// - items: Set or Array of items to match against. - /// - public init<S: Sequence>(excludeFrom items: S) where S.Iterator.Element == String { - inverse = false - add(items: items) - } - - /// Add another fileName to the list of names to match against. - /// - /// - Parameters: - /// - item: Item to match against. - /// - /// - Returns: - /// - true: FileName added. - /// - false: FileName already added. - /// - @discardableResult open func add(item: String) -> Bool { - return itemsToMatch.insert(item).inserted - } - - /// Add a list of fileNames to the list of names to match against. - /// - /// - Parameters: - /// - items: Set or Array of fileNames to match against. - /// - /// - Returns: Nothing - /// - open func add<S: Sequence>(items: S) where S.Iterator.Element == String { - for item in items { - add(item: item) - } - } - - /// Clear the list of fileNames to match against. - /// - /// - Note: Doesn't change whether or not the filter is inclusive of exclusive - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func clear() { - itemsToMatch = [] - } - - /// Check if the log message should be excluded from logging. - /// - /// - Note: If the fileName matches - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: - /// - true: Drop this log message. - /// - false: Keep this log message and continue processing. - /// - open func shouldExclude(logDetails: inout LogDetails, message: inout String) -> Bool { - var matched: Bool = false - - if !applyFilterToInternalMessages, - let isInternal = logDetails.userInfo[XCGLogger.Constants.userInfoKeyInternal] as? Bool, - isInternal { - return inverse - } - - if let messageItemsObject = logDetails.userInfo[userInfoKey] { - if let messageItemsSet: Set<String> = messageItemsObject as? Set<String> { - matched = itemsToMatch.intersection(messageItemsSet).count > 0 - } - else if let messageItemsArray: Array<String> = messageItemsObject as? Array<String> { - matched = itemsToMatch.intersection(messageItemsArray).count > 0 - } - else if let messageItem = messageItemsObject as? String { - matched = itemsToMatch.contains(messageItem) - } - } - - if inverse { - matched = !matched - } - - return matched - } - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - var description: String = "\(extractTypeName(self)): \(applyFilterToInternalMessages ? "(Filtering Internal) " : "")" + (inverse ? "Including only matches for: " : "Excluding matches for: ") - if itemsToMatch.count > 5 { - description += "\n\t- " + itemsToMatch.sorted().joined(separator: "\n\t- ") - } - else { - description += itemsToMatch.sorted().joined(separator: ", ") - } - - return description - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/ANSIColorLogFormatter.swift b/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/ANSIColorLogFormatter.swift deleted file mode 100644 index 44b2b33..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/ANSIColorLogFormatter.swift +++ /dev/null @@ -1,342 +0,0 @@ -// -// ANSIColorLogFormatter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-30. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - ANSIColorLogFormatter -/// A log formatter that will add ANSI colour codes to the message -open class ANSIColorLogFormatter: LogFormatterProtocol, CustomDebugStringConvertible { - - /// ANSI Escape code - public static let escape: String = "\u{001b}[" - - /// ANSI Reset colours code - public static let reset: String = "\(escape)m" - - /// Enum to specify ANSI colours - public enum ANSIColor: CustomStringConvertible { - case black - case red - case green - case yellow - case blue - case magenta - case cyan - case lightGrey, lightGray - case darkGrey, darkGray - case lightRed - case lightGreen - case lightYellow - case lightBlue - case lightMagenta - case lightCyan - case white - case `default` - case rgb(red: Int, green: Int, blue: Int) - case colorIndex(number: Int) - - public var foregroundCode: String { - switch self { - case .black: - return "30" - case .red: - return "31" - case .green: - return "32" - case .yellow: - return "33" - case .blue: - return "34" - case .magenta: - return "35" - case .cyan: - return "36" - case .lightGrey, .lightGray: - return "37" - case .darkGrey, .darkGray: - return "90" - case .lightRed: - return "91" - case .lightGreen: - return "92" - case .lightYellow: - return "93" - case .lightBlue: - return "94" - case .lightMagenta: - return "95" - case .lightCyan: - return "96" - case .white: - return "97" - case .default: // Note: Different from the default: at the end of a switch, this is the `default` colour - return "39" - case .rgb(let red, let green, let blue): - return "38;2;\(min(max(0, red), 255));\(min(max(0, green), 255));\(min(max(0, blue), 255))" - case .colorIndex(let number): - return "38;5;\(min(max(0, number), 255))" - } - } - - public var backgroundCode: String { - switch self { - case .black: - return "40" - case .red: - return "41" - case .green: - return "42" - case .yellow: - return "43" - case .blue: - return "44" - case .magenta: - return "45" - case .cyan: - return "46" - case .lightGrey, .lightGray: - return "47" - case .darkGrey, .darkGray: - return "100" - case .lightRed: - return "101" - case .lightGreen: - return "102" - case .lightYellow: - return "103" - case .lightBlue: - return "104" - case .lightMagenta: - return "105" - case .lightCyan: - return "106" - case .white: - return "107" - case .default: // Note: Different from the default: at the end of a switch, this is the `default` colour - return "49" - case .rgb(let red, let green, let blue): - return "48;2;\(min(max(0, red), 255));\(min(max(0, green), 255));\(min(max(0, blue), 255))" - case .colorIndex(let number): - return "48;5;\(min(max(0, number), 255))" - } - } - - /// Human readable description of this colour (CustomStringConvertible) - public var description: String { - switch self { - case .black: - return "Black" - case .red: - return "Red" - case .green: - return "Green" - case .yellow: - return "Yellow" - case .blue: - return "Blue" - case .magenta: - return "Magenta" - case .cyan: - return "Cyan" - case .lightGrey, .lightGray: - return "Light Grey" - case .darkGrey, .darkGray: - return "Dark Grey" - case .lightRed: - return "Light Red" - case .lightGreen: - return "Light Green" - case .lightYellow: - return "Light Yellow" - case .lightBlue: - return "Light Blue" - case .lightMagenta: - return "Light Magenta" - case .lightCyan: - return "Light Cyan" - case .white: - return "White" - case .default: // Note: Different from the default: at the end of a switch, this is the `default` colour - return "Default" - case .rgb(let red, let green, let blue): - return String(format: "(r: %d, g: %d, b: %d) #%02X%02X%02X", red, green, blue, red, green, blue) - case .colorIndex(let number): - return "ANSI color index: \(number)" - } - } - } - - /// Enum to specific ANSI options - public enum ANSIOption: CustomStringConvertible { - case bold - case faint - case italic - case underline - case blink - case blinkFast - case strikethrough - - public var code: String { - switch self { - case .bold: - return "1" - case .faint: - return "2" - case .italic: - return "3" - case .underline: - return "4" - case .blink: - return "5" - case .blinkFast: - return "6" - case .strikethrough: - return "9" - } - } - - public var description: String { - switch self { - case .bold: - return "Bold" - case .faint: - return "Faint" - case .italic: - return "Italic" - case .underline: - return "Underline" - case .blink: - return "Blink" - case .blinkFast: - return "Blink Fast" - case .strikethrough: - return "Strikethrough" - } - } - } - - /// Internal cache of the ANSI codes for each log level - internal var formatStrings: [XCGLogger.Level: String] = [:] - - /// Internal cache of the description for each log level - internal var descriptionStrings: [XCGLogger.Level: String] = [:] - - public init() { - resetFormatting() - } - - /// Set the colours and/or options for a specific log level. - /// - /// - Parameters: - /// - level: The log level. - /// - foregroundColor: The text colour of the message. **Default:** Restore default text colour - /// - backgroundColor: The background colour of the message. **Default:** Restore default background colour - /// - options: Array of ANSIOptions to apply to the message. **Default:** No options - /// - /// - Returns: Nothing - /// - open func colorize(level: XCGLogger.Level, with foregroundColor: ANSIColor = .default, on backgroundColor: ANSIColor = .default, options: [ANSIOption] = []) { - var codes: [String] = [foregroundColor.foregroundCode, backgroundColor.backgroundCode] - var description: String = "\(foregroundColor) on \(backgroundColor)" - - for option in options { - codes.append(option.code) - description += "/\(option)" - } - - formatStrings[level] = ANSIColorLogFormatter.escape + codes.joined(separator: ";") + "m" - descriptionStrings[level] = description - } - - /// Set the colours and/or options for a specific log level. - /// - /// - Parameters: - /// - level: The log level. - /// - custom: A specific ANSI code to use. - /// - /// - Returns: Nothing - /// - open func colorize(level: XCGLogger.Level, custom: String) { - if custom.hasPrefix(ANSIColorLogFormatter.escape) { - formatStrings[level] = "\(custom)" - descriptionStrings[level] = "Custom: \(custom[custom.index(custom.startIndex, offsetBy: ANSIColorLogFormatter.escape.lengthOfBytes(using: .utf8)) ..< custom.endIndex])" - } - else { - formatStrings[level] = ANSIColorLogFormatter.escape + "\(custom)" - descriptionStrings[level] = "Custom: \(custom)" - } - } - - /// Get the cached ANSI codes for the specified log level. - /// - /// - Parameters: - /// - level: The log level. - /// - /// - Returns: The ANSI codes for the specified log level. - /// - internal func formatString(for level: XCGLogger.Level) -> String { - return formatStrings[level] ?? ANSIColorLogFormatter.reset - } - - /// Apply a default set of colours. - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func resetFormatting() { - colorize(level: .verbose, with: .white, options: [.bold]) - colorize(level: .debug, with: .black) - colorize(level: .info, with: .blue) - colorize(level: .warning, with: .yellow) - colorize(level: .error, with: .red, options: [.bold]) - colorize(level: .severe, with: .white, on: .red) - colorize(level: .none) - } - - /// Clear all previously set colours. (Sets each log level back to default) - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func clearFormatting() { - colorize(level: .verbose) - colorize(level: .debug) - colorize(level: .info) - colorize(level: .warning) - colorize(level: .error) - colorize(level: .severe) - colorize(level: .none) - } - - // MARK: - LogFormatterProtocol - /// Apply some additional formatting to the message if appropriate. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: message with the additional formatting - /// - @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String { - message = "\(formatString(for: logDetails.level))\(message)\(ANSIColorLogFormatter.reset)" - return message - } - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - var description: String = "\(extractTypeName(self)): " - for level in XCGLogger.Level.all { - description += "\n\t- \(level) > \(descriptionStrings[level] ?? "None")" - } - - return description - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/Base64LogFormatter.swift b/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/Base64LogFormatter.swift deleted file mode 100644 index 63f5809..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/Base64LogFormatter.swift +++ /dev/null @@ -1,40 +0,0 @@ -// -// Base64LogFormatter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-30. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - Base64LogFormatter -/// An example log formatter to show how encryption could be used to secure log messages, in this case, we just Base64 encode them -open class Base64LogFormatter: LogFormatterProtocol, CustomDebugStringConvertible { - - // MARK: - LogFormatterProtocol - /// Apply some additional formatting to the message if appropriate. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: message with the additional formatting - /// - @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String { - guard let utf8Message = message.data(using: .utf8) else { return message } - - message = utf8Message.base64EncodedString() - return message - } - - /// Initializer, doesn't do anything other than make the class publicly available - public init() { - } - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - return "\(extractTypeName(self))" - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/LogFormatterProtocol.swift b/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/LogFormatterProtocol.swift deleted file mode 100644 index be34293..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/LogFormatterProtocol.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// LogFormatterProtocol.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-30. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -// MARK: - LogFormatterProtocol -/// Protocol for log formatter classes to conform to -public protocol LogFormatterProtocol: CustomDebugStringConvertible { - - /// Apply some additional formatting to the message if appropriate. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: Nothing - /// - @discardableResult func format(logDetails: inout LogDetails, message: inout String) -> String -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/PrePostFixLogFormatter.swift b/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/PrePostFixLogFormatter.swift deleted file mode 100644 index a2c563c..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/PrePostFixLogFormatter.swift +++ /dev/null @@ -1,100 +0,0 @@ -// -// PrePostFixLogFormatter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-09-20. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -#if os(macOS) - import AppKit -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit -#endif - -// MARK: - PrePostFixLogFormatter -/// A log formatter that will optionally add a prefix, and/or postfix string to a message -open class PrePostFixLogFormatter: LogFormatterProtocol, CustomDebugStringConvertible { - - /// Internal cache of the prefix strings for each log level - internal var prefixStrings: [XCGLogger.Level: String] = [:] - - /// Internal cache of the postfix strings codes for each log level - internal var postfixStrings: [XCGLogger.Level: String] = [:] - - public init() { - } - - /// Set the prefix/postfix strings for a specific log level. - /// - /// - Parameters: - /// - prefix: A string to prepend to log messages. - /// - postfix: A string to postpend to log messages. - /// - level: The log level. - /// - /// - Returns: Nothing - /// - open func apply(prefix: String? = nil, postfix: String? = nil, to level: XCGLogger.Level? = nil) { - guard let level = level else { - guard prefix != nil || postfix != nil else { clearFormatting(); return } - - // No level specified, so, apply to all levels - for level in XCGLogger.Level.all { - self.apply(prefix: prefix, postfix: postfix, to: level) - } - return - } - - if let prefix = prefix { - prefixStrings[level] = prefix - } - else { - prefixStrings.removeValue(forKey: level) - } - - if let postfix = postfix { - postfixStrings[level] = postfix - } - else { - postfixStrings.removeValue(forKey: level) - } - } - - /// Clear all previously set colours. (Sets each log level back to default) - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func clearFormatting() { - prefixStrings = [:] - postfixStrings = [:] - } - - // MARK: - LogFormatterProtocol - /// Apply some additional formatting to the message if appropriate. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: message with the additional formatting - /// - @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String { - message = "\(prefixStrings[logDetails.level] ?? "")\(message)\(postfixStrings[logDetails.level] ?? "")" - return message - } - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - var description: String = "\(extractTypeName(self)): " - for level in XCGLogger.Level.all { - description += "\n\t- \(level) > \(prefixStrings[level] ?? "None") | \(postfixStrings[level] ?? "None")" - } - - return description - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/XcodeColorsLogFormatter.swift b/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/XcodeColorsLogFormatter.swift deleted file mode 100644 index f6d878a..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/LogFormatters/XcodeColorsLogFormatter.swift +++ /dev/null @@ -1,257 +0,0 @@ -// -// XcodeColorsLogFormatter.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2016-08-30. -// Copyright © 2016 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -#if os(macOS) - import AppKit -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit -#endif - -// MARK: - XcodeColorsLogFormatter -/// A log formatter that will add colour codes for the [XcodeColor plug-in](https://github.com/robbiehanson/XcodeColors) to the message -open class XcodeColorsLogFormatter: LogFormatterProtocol, CustomDebugStringConvertible { - - /// XcodeColors escape code - public static let escape: String = "\u{001b}[" - - /// XcodeColors code to reset the foreground colour - public static let resetForeground = "\(escape)fg;" - - /// XcodeColors code to reset the background colour - public static let resetBackground = "\(escape)bg;" - - /// XcodeColors code to reset both the foreground and background colours - public static let reset: String = "\(escape);" - - /// Struct to store RGB values - public struct XcodeColor: CustomStringConvertible { - /// Red component - public var red: Int = 0 { - didSet { - guard red < 0 || red > 255 else { return } - red = 0 - } - } - - /// Green component - public var green: Int = 0 { - didSet { - guard green < 0 || green > 255 else { return } - green = 0 - } - } - - /// Blue component - public var blue: Int = 0 { - didSet { - guard blue < 0 || blue > 255 else { return } - blue = 0 - } - } - - /// Foreground code - public var foregroundCode: String { - return "fg\(red),\(green),\(blue)" - } - - /// Background code - public var backgroundCode: String { - return "bg\(red),\(green),\(blue)" - } - - public init(red: Int, green: Int, blue: Int) { - self.red = red - self.green = green - self.blue = blue - } - - public init(_ red: Int, _ green: Int, _ blue: Int) { - self.red = red - self.green = green - self.blue = blue - } - -#if os(macOS) - public init(color: NSColor) { - if let colorSpaceCorrected = color.usingColorSpaceName(NSColorSpaceName.calibratedRGB) { - self.red = Int(colorSpaceCorrected.redComponent * 255) - self.green = Int(colorSpaceCorrected.greenComponent * 255) - self.blue = Int(colorSpaceCorrected.blueComponent * 255) - } - } -#elseif os(iOS) || os(tvOS) || os(watchOS) - public init(color: UIColor) { - var redComponent: CGFloat = 0 - var greenComponent: CGFloat = 0 - var blueComponent: CGFloat = 0 - var alphaComponent: CGFloat = 0 - - color.getRed(&redComponent, green: &greenComponent, blue: &blueComponent, alpha:&alphaComponent) - - self.red = Int(redComponent * 255) - self.green = Int(greenComponent * 255) - self.blue = Int(blueComponent * 255) - } -#endif - - /// Human readable description of this colour (CustomStringConvertible) - public var description: String { - return String(format: "(r: %d, g: %d, b: %d) #%02X%02X%02X", red, green, blue, red, green, blue) - } - - /// Preset colour: Red - public static let red: XcodeColor = { return XcodeColor(red: 255, green: 0, blue: 0) }() - - /// Preset colour: Green - public static let green: XcodeColor = { return XcodeColor(red: 0, green: 255, blue: 0) }() - - /// Preset colour: Blue - public static let blue: XcodeColor = { return XcodeColor(red: 0, green: 0, blue: 255) }() - - /// Preset colour: Black - public static let black: XcodeColor = { return XcodeColor(red: 0, green: 0, blue: 0) }() - - /// Preset colour: White - public static let white: XcodeColor = { return XcodeColor(red: 255, green: 255, blue: 255) }() - - /// Preset colour: Light Grey - public static let lightGrey: XcodeColor = { return XcodeColor(red: 211, green: 211, blue: 211) }() - - /// Preset colour: Dark Grey - public static let darkGrey: XcodeColor = { return XcodeColor(red: 169, green: 169, blue: 169) }() - - /// Preset colour: Orange - public static let orange: XcodeColor = { return XcodeColor(red: 255, green: 165, blue: 0) }() - - /// Preset colour: Purple - public static let purple: XcodeColor = { return XcodeColor(red: 170, green: 0, blue: 170) }() - - /// Preset colour: Dark Green - public static let darkGreen: XcodeColor = { return XcodeColor(red: 0, green: 128, blue: 0) }() - - /// Preset colour: Cyan - public static let cyan: XcodeColor = { return XcodeColor(red: 0, green: 170, blue: 170) }() - } - - /// Internal cache of the XcodeColors codes for each log level - internal var formatStrings: [XCGLogger.Level: String] = [:] - - /// Internal cache of the description for each log level - internal var descriptionStrings: [XCGLogger.Level: String] = [:] - - public init() { - resetFormatting() - } - - /// Set the colours and/or options for a specific log level. - /// - /// - Parameters: - /// - level: The log level. - /// - foregroundColor: The text colour of the message. **Default:** Restore default text colour - /// - backgroundColor: The background colour of the message. **Default:** Restore default background colour - /// - /// - Returns: Nothing - /// - open func colorize(level: XCGLogger.Level, with foregroundColor: XcodeColor? = nil, on backgroundColor: XcodeColor? = nil) { - guard foregroundColor != nil || backgroundColor != nil else { - // neither set, use reset code - formatStrings[level] = XcodeColorsLogFormatter.reset - descriptionStrings[level] = "None" - return - } - - var formatString: String = "" - - if let foregroundColor = foregroundColor { - formatString += "\(XcodeColorsLogFormatter.escape)fg\(foregroundColor.red),\(foregroundColor.green),\(foregroundColor.blue);" - } - else { - formatString += XcodeColorsLogFormatter.resetForeground - } - - if let backgroundColor = backgroundColor { - formatString += "\(XcodeColorsLogFormatter.escape)bg\(backgroundColor.red),\(backgroundColor.green),\(backgroundColor.blue);" - } - else { - formatString += XcodeColorsLogFormatter.resetBackground - } - - formatStrings[level] = formatString - descriptionStrings[level] = "\(foregroundColor?.description ?? "Default") on \(backgroundColor?.description ?? "Default")" - } - - /// Get the cached XcodeColors codes for the specified log level. - /// - /// - Parameters: - /// - level: The log level. - /// - /// - Returns: The XcodeColors codes for the specified log level. - /// - internal func formatString(for level: XCGLogger.Level) -> String { - return formatStrings[level] ?? XcodeColorsLogFormatter.reset - } - - /// Apply a default set of colours. - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func resetFormatting() { - colorize(level: .verbose, with: .lightGrey) - colorize(level: .debug, with: .darkGrey) - colorize(level: .info, with: .blue) - colorize(level: .warning, with: .orange) - colorize(level: .error, with: .red) - colorize(level: .severe, with: .white, on: .red) - colorize(level: .none) - } - - /// Clear all previously set colours. (Sets each log level back to default) - /// - /// - Parameters: None - /// - /// - Returns: Nothing - /// - open func clearFormatting() { - colorize(level: .verbose) - colorize(level: .debug) - colorize(level: .info) - colorize(level: .warning) - colorize(level: .error) - colorize(level: .severe) - colorize(level: .none) - } - - // MARK: - LogFormatterProtocol - /// Apply some additional formatting to the message if appropriate. - /// - /// - Parameters: - /// - logDetails: The log details. - /// - message: Formatted/processed message ready for output. - /// - /// - Returns: message with the additional formatting - /// - @discardableResult open func format(logDetails: inout LogDetails, message: inout String) -> String { - message = "\(formatString(for: logDetails.level))\(message)\(XcodeColorsLogFormatter.reset)" - return message - } - - // MARK: - CustomDebugStringConvertible - open var debugDescription: String { - get { - var description: String = "\(extractTypeName(self)): " - for level in XCGLogger.Level.all { - description += "\n\t- \(level) > \(descriptionStrings[level] ?? "None")" - } - - return description - } - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Misc/HelperFunctions.swift b/Pods/XCGLogger/Sources/XCGLogger/Misc/HelperFunctions.swift deleted file mode 100644 index d8aed1f..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Misc/HelperFunctions.swift +++ /dev/null @@ -1,39 +0,0 @@ -// -// HelperFunctions.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation -import ObjcExceptionBridging - -/// Extract the type name from the given object -/// -/// - parameter someObject: the object for which you need the type name -/// -/// - returns: the type name of the object -func extractTypeName(_ someObject: Any) -> String { - return (someObject is Any.Type) ? "\(someObject)" : "\(type(of: someObject))" -} - -// MARK: - Swiftier interface to the Objective-C exception handling functions -/// Throw an Objective-C exception with the specified name/message/info -/// -/// - parameter name: The name of the exception to throw -/// - parameter message: The message to include in the exception (why it occurred) -/// - parameter userInfo: A dictionary with arbitrary info to be passed along with the exception -func _try(_ tryClosure: @escaping () -> (), catch catchClosure: @escaping (_ exception: NSException) -> (), finally finallyClosure: (() -> ())? = nil) { - _try_objc(tryClosure, catchClosure, finallyClosure ?? {}) -} - -/// Throw an Objective-C exception with the specified name/message/info -/// -/// - parameter name: The name of the exception to throw -/// - parameter message: The message to include in the exception (why it occurred) -/// - parameter userInfo: A dictionary with arbitrary info to be passed along with the exception -func _throw(name: String, message: String? = nil, userInfo: [AnyHashable: Any]? = nil) { - _throw_objc(NSException(name: NSExceptionName(rawValue: name), reason: message ?? name, userInfo: userInfo)) -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/Misc/LogDetails.swift b/Pods/XCGLogger/Sources/XCGLogger/Misc/LogDetails.swift deleted file mode 100644 index c346f57..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/Misc/LogDetails.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// LogDetails.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -import Foundation - -// MARK: - LogDetails -/// Data structure to hold all info about a log message, passed to destination classes -public struct LogDetails { - - /// Log level required to display this log - public var level: XCGLogger.Level - - /// Date this log was sent - public var date: Date - - /// The log message to display - public var message: String - - /// Name of the function that generated this log - public var functionName: String - - /// Name of the file the function exists in - public var fileName: String - - /// The line number that generated this log - public var lineNumber: Int - - /// Dictionary to store miscellaneous data about the log, can be used by formatters and filters etc. Please prefix any keys to help avoid collissions. - public var userInfo: [String: Any] - - public init(level: XCGLogger.Level, date: Date, message: String, functionName: String, fileName: String, lineNumber: Int, userInfo: [String: Any] = [:]) { - self.level = level - self.date = date - self.message = message - self.functionName = functionName - self.fileName = fileName - self.lineNumber = lineNumber - self.userInfo = userInfo - } -} diff --git a/Pods/XCGLogger/Sources/XCGLogger/XCGLogger.swift b/Pods/XCGLogger/Sources/XCGLogger/XCGLogger.swift deleted file mode 100644 index 6723fee..0000000 --- a/Pods/XCGLogger/Sources/XCGLogger/XCGLogger.swift +++ /dev/null @@ -1,1207 +0,0 @@ -// -// XCGLogger.swift -// XCGLogger: https://github.com/DaveWoodCom/XCGLogger -// -// Created by Dave Wood on 2014-06-06. -// Copyright © 2014 Dave Wood, Cerebral Gardens. -// Some rights reserved: https://github.com/DaveWoodCom/XCGLogger/blob/master/LICENSE.txt -// - -#if os(macOS) - import AppKit -#elseif os(iOS) || os(tvOS) || os(watchOS) - import UIKit -#endif - -// MARK: - XCGLogger -/// The main logging class -open class XCGLogger: CustomDebugStringConvertible { - // MARK: - Constants - public struct Constants { - /// Prefix identifier to use for all other identifiers - public static let baseIdentifier = "com.cerebralgardens.xcglogger" - - /// Identifier for the default instance of XCGLogger - public static let defaultInstanceIdentifier = "\(baseIdentifier).defaultInstance" - - /// Identifer for the Xcode console destination - public static let baseConsoleDestinationIdentifier = "\(baseIdentifier).logdestination.console" - - /// Identifier for the Apple System Log destination - public static let systemLogDestinationIdentifier = "\(baseIdentifier).logdestination.console.nslog" - - /// Identifier for the file logging destination - public static let fileDestinationIdentifier = "\(baseIdentifier).logdestination.file" - - /// Identifier for the default dispatch queue - public static let logQueueIdentifier = "\(baseIdentifier).queue" - - /// UserInfo Key - tags - public static let userInfoKeyTags = "\(baseIdentifier).tags" - - /// UserInfo Key - devs - public static let userInfoKeyDevs = "\(baseIdentifier).devs" - - /// UserInfo Key - internal - public static let userInfoKeyInternal = "\(baseIdentifier).internal" - - /// Library version number - public static let versionString = "6.1.0" - - /// Internal userInfo - internal static let internalUserInfo: [String: Any] = [XCGLogger.Constants.userInfoKeyInternal: true] - - /// Extended file attributed key to use when storing the logger's identifier on an archived log file - public static let extendedAttributeArchivedLogIdentifierKey = "\(baseIdentifier).archived.by" - - /// Extended file attributed key to use when storing the time a log file was archived - public static let extendedAttributeArchivedLogTimestampKey = "\(baseIdentifier).archived.at" - } - - // MARK: - Enums - /// Enum defining our log levels - public enum Level: Int, Comparable, CustomStringConvertible { - case verbose - case debug - case info - case warning - case error - case severe - case none - - public var description: String { - switch self { - case .verbose: - return "Verbose" - case .debug: - return "Debug" - case .info: - return "Info" - case .warning: - return "Warning" - case .error: - return "Error" - case .severe: - return "Severe" - case .none: - return "None" - } - } - - public static let all: [Level] = [.verbose, .debug, .info, .warning, .error, .severe] - } - - // MARK: - Default instance - /// The default XCGLogger object - public static let `default`: XCGLogger = XCGLogger(identifier: XCGLogger.Constants.defaultInstanceIdentifier) - - // MARK: - Properties - /// Identifier for this logger object (should be unique) - open var identifier: String = "" - - /// The log level of this logger, any logs received at this level or higher will be output to the destinations - open var outputLevel: Level = .debug { - didSet { - for index in 0 ..< destinations.count { - destinations[index].outputLevel = outputLevel - } - } - } - - /// Option: a closure to execute whenever a logging method is called without a log message - open var noMessageClosure: () -> Any? = { return "" } - - /// Option: override descriptions of log levels - open var levelDescriptions: [XCGLogger.Level: String] = [:] - - /// Array of log formatters to apply to messages before they're output - open var formatters: [LogFormatterProtocol]? = nil - - /// Array of log filters to apply to messages before they're output - open var filters: [FilterProtocol]? = nil - - /// The default dispatch queue used for logging - public static let logQueue: DispatchQueue = DispatchQueue(label: XCGLogger.Constants.logQueueIdentifier, attributes: []) - - /// A custom date formatter object to use when displaying the dates of log messages (internal storage) - internal var _customDateFormatter: DateFormatter? = nil - /// The date formatter object to use when displaying the dates of log messages - open var dateFormatter: DateFormatter? { - get { - guard _customDateFormatter == nil else { return _customDateFormatter } - struct Statics { - static var dateFormatter: DateFormatter = { - let defaultDateFormatter = DateFormatter() - defaultDateFormatter.locale = NSLocale.current - defaultDateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS" - return defaultDateFormatter - }() - } - - return Statics.dateFormatter - } - set { - _customDateFormatter = newValue - } - } - - /// Array containing all of the destinations for this logger - open var destinations: [DestinationProtocol] = [] - - // MARK: - Life Cycle - public init(identifier: String = "", includeDefaultDestinations: Bool = true) { - self.identifier = identifier - - if includeDefaultDestinations { - // Setup a standard console destination - add(destination: ConsoleDestination(identifier: XCGLogger.Constants.baseConsoleDestinationIdentifier)) - } - } - - // MARK: - Setup methods - /// A shortcut method to configure the default logger instance. - /// - /// - Note: The function exists to get you up and running quickly, but it's recommended that you use the advanced usage configuration for most projects. See https://github.com/DaveWoodCom/XCGLogger/blob/master/README.md#advanced-usage-recommended - /// - /// - Parameters: - /// - level: The log level of this logger, any logs received at this level or higher will be output to the destinations. **Default:** Debug - /// - showLogIdentifier: Whether or not to output the log identifier. **Default:** false - /// - showFunctionName: Whether or not to output the function name that generated the log. **Default:** true - /// - showThreadName: Whether or not to output the thread's name the log was created on. **Default:** false - /// - showLevel: Whether or not to output the log level of the log. **Default:** true - /// - showFileNames: Whether or not to output the fileName that generated the log. **Default:** true - /// - showLineNumbers: Whether or not to output the line number where the log was generated. **Default:** true - /// - showDate: Whether or not to output the date the log was created. **Default:** true - /// - writeToFile: FileURL or path (as String) to a file to log all messages to (this file is overwritten each time the logger is created). **Default:** nil => no log file - /// - fileLevel: An alternate log level for the file destination. **Default:** nil => use the same log level as the console destination - /// - /// - Returns: Nothing - /// - open class func setup(level: Level = .debug, showLogIdentifier: Bool = false, showFunctionName: Bool = true, showThreadName: Bool = false, showLevel: Bool = true, showFileNames: Bool = true, showLineNumbers: Bool = true, showDate: Bool = true, writeToFile: Any? = nil, fileLevel: Level? = nil) { - self.default.setup(level: level, showLogIdentifier: showLogIdentifier, showFunctionName: showFunctionName, showThreadName: showThreadName, showLevel: showLevel, showFileNames: showFileNames, showLineNumbers: showLineNumbers, showDate: showDate, writeToFile: writeToFile) - } - - /// A shortcut method to configure the logger. - /// - /// - Note: The function exists to get you up and running quickly, but it's recommended that you use the advanced usage configuration for most projects. See https://github.com/DaveWoodCom/XCGLogger/blob/master/README.md#advanced-usage-recommended - /// - /// - Parameters: - /// - level: The log level of this logger, any logs received at this level or higher will be output to the destinations. **Default:** Debug - /// - showLogIdentifier: Whether or not to output the log identifier. **Default:** false - /// - showFunctionName: Whether or not to output the function name that generated the log. **Default:** true - /// - showThreadName: Whether or not to output the thread's name the log was created on. **Default:** false - /// - showLevel: Whether or not to output the log level of the log. **Default:** true - /// - showFileNames: Whether or not to output the fileName that generated the log. **Default:** true - /// - showLineNumbers: Whether or not to output the line number where the log was generated. **Default:** true - /// - showDate: Whether or not to output the date the log was created. **Default:** true - /// - writeToFile: FileURL or path (as String) to a file to log all messages to (this file is overwritten each time the logger is created). **Default:** nil => no log file - /// - fileLevel: An alternate log level for the file destination. **Default:** nil => use the same log level as the console destination - /// - /// - Returns: Nothing - /// - open func setup(level: Level = .debug, showLogIdentifier: Bool = false, showFunctionName: Bool = true, showThreadName: Bool = false, showLevel: Bool = true, showFileNames: Bool = true, showLineNumbers: Bool = true, showDate: Bool = true, writeToFile: Any? = nil, fileLevel: Level? = nil) { - outputLevel = level - - if let standardConsoleDestination = destination(withIdentifier: XCGLogger.Constants.baseConsoleDestinationIdentifier) as? ConsoleDestination { - standardConsoleDestination.showLogIdentifier = showLogIdentifier - standardConsoleDestination.showFunctionName = showFunctionName - standardConsoleDestination.showThreadName = showThreadName - standardConsoleDestination.showLevel = showLevel - standardConsoleDestination.showFileName = showFileNames - standardConsoleDestination.showLineNumber = showLineNumbers - standardConsoleDestination.showDate = showDate - standardConsoleDestination.outputLevel = level - } - - if let writeToFile: Any = writeToFile { - // We've been passed a file to use for logging, set up a file logger - let standardFileDestination: FileDestination = FileDestination(writeToFile: writeToFile, identifier: XCGLogger.Constants.fileDestinationIdentifier) - - standardFileDestination.showLogIdentifier = showLogIdentifier - standardFileDestination.showFunctionName = showFunctionName - standardFileDestination.showThreadName = showThreadName - standardFileDestination.showLevel = showLevel - standardFileDestination.showFileName = showFileNames - standardFileDestination.showLineNumber = showLineNumbers - standardFileDestination.showDate = showDate - standardFileDestination.outputLevel = fileLevel ?? level - - add(destination: standardFileDestination) - } - - logAppDetails() - } - - // MARK: - Logging methods - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - level: Specified log level **Default:** *Debug*. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing - /// - open class func logln(_ closure: @autoclosure () -> Any?, level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: Specified log level **Default:** *Debug*. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing - /// - open class func logln(_ level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: Specified log level **Default:** *Debug*. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing - /// - open class func logln(_ level: Level = .debug, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - level: Specified log level **Default:** *Debug*. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing - /// - open func logln(_ closure: @autoclosure () -> Any?, level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(level, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: Specified log level **Default:** *Debug*. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing - /// - open func logln(_ level: Level = .debug, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - logln(level, functionName: String(describing: functionName), fileName: String(describing: fileName), lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: Specified log level **Default:** *Debug*. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing - /// - open func logln(_ level: Level = .debug, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - let enabledDestinations = destinations.filter({$0.isEnabledFor(level: level)}) - guard enabledDestinations.count > 0 else { return } - guard let closureResult = closure() else { return } - - let logDetails: LogDetails = LogDetails(level: level, date: Date(), message: String(describing: closureResult), functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo) - for destination in enabledDestinations { - destination.process(logDetails: logDetails) - } - } - - /// Execute some code only when at the specified log level. - /// - /// - Parameters: - /// - level: Specified log level **Default:** *Debug*. - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func exec(_ level: Level = .debug, closure: () -> () = {}) { - self.default.exec(level, closure: closure) - } - - /// Execute some code only when at the specified log level. - /// - /// - Parameters: - /// - level: Specified log level **Default:** *Debug*. - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func exec(_ level: Level = .debug, closure: () -> () = {}) { - guard isEnabledFor(level:level) else { return } - - closure() - } - - /// Generate logs to display your app's vitals (app name, version, etc) as well as XCGLogger's version and log level. - /// - /// - Parameters: - /// - selectedDestination: A specific destination to log the vitals on, if omitted, will log to all destinations - /// - /// - Returns: Nothing. - /// - open func logAppDetails(selectedDestination: DestinationProtocol? = nil) { - let date = Date() - - var buildString = "" - if let infoDictionary = Bundle.main.infoDictionary { - if let CFBundleShortVersionString = infoDictionary["CFBundleShortVersionString"] as? String { - buildString = "Version: \(CFBundleShortVersionString) " - } - if let CFBundleVersion = infoDictionary["CFBundleVersion"] as? String { - buildString += "Build: \(CFBundleVersion) " - } - } - - let processInfo: ProcessInfo = ProcessInfo.processInfo - let XCGLoggerVersionNumber = XCGLogger.Constants.versionString - - var logDetails: [LogDetails] = [] - logDetails.append(LogDetails(level: .info, date: date, message: "\(processInfo.processName) \(buildString)PID: \(processInfo.processIdentifier)", functionName: "", fileName: "", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo)) - logDetails.append(LogDetails(level: .info, date: date, message: "XCGLogger Version: \(XCGLoggerVersionNumber) - Level: \(outputLevel)", functionName: "", fileName: "", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo)) - - for var destination in (selectedDestination != nil ? [selectedDestination!] : destinations) where !destination.haveLoggedAppDetails { - for logDetail in logDetails { - guard destination.isEnabledFor(level:.info) else { continue } - - destination.haveLoggedAppDetails = true - destination.processInternal(logDetails: logDetail) - } - } - } - - // MARK: - Convenience logging methods - // MARK: * Verbose - /// Log something at the Verbose log level. This format of verbose() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure) - } - - /// Log something at the Verbose log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func verbose(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Verbose log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open class func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Verbose log level. This format of verbose() isn't provided the object to log, instead the property *`noMessageClosure`* is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure) - } - - /// Log something at the Verbose log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func verbose(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Verbose log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open func verbose(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.logln(.verbose, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - // MARK: * Debug - /// Log something at the Debug log level. This format of debug() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure) - } - - /// Log something at the Debug log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func debug(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Debug log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open class func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Debug log level. This format of debug() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure) - } - - /// Log something at the Debug log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func debug(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Debug log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open func debug(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.logln(.debug, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - // MARK: * Info - /// Log something at the Info log level. This format of info() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure) - } - - /// Log something at the Info log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func info(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Info log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open class func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Info log level. This format of info() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure) - } - - /// Log something at the Info log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func info(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Info log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open func info(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.logln(.info, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - // MARK: * Warning - /// Log something at the Warning log level. This format of warning() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure) - } - - /// Log something at the Warning log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func warning(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Warning log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open class func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Warning log level. This format of warning() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure) - } - - /// Log something at the Warning log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func warning(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Warning log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open func warning(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.logln(.warning, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - // MARK: * Error - /// Log something at the Error log level. This format of error() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure) - } - - /// Log something at the Error log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func error(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Error log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open class func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Error log level. This format of error() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure) - } - - /// Log something at the Error log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func error(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Error log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open func error(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.logln(.error, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - // MARK: * Severe - /// Log something at the Severe log level. This format of severe() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.default.noMessageClosure) - } - - /// Log something at the Severe log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open class func severe(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.default.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Severe log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open class func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.default.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Severe log level. This format of severe() isn't provided the object to log, instead the property `noMessageClosure` is executed instead. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: self.noMessageClosure) - } - - /// Log something at the Severe log level. - /// - /// - Parameters: - /// - closure: A closure that returns the object to be logged. - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - /// - Returns: Nothing. - /// - open func severe(_ closure: @autoclosure () -> Any?, functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:]) { - self.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - /// Log something at the Severe log level. - /// - /// - Parameters: - /// - functionName: Normally omitted **Default:** *#function*. - /// - fileName: Normally omitted **Default:** *#file*. - /// - lineNumber: Normally omitted **Default:** *#line*. - /// - userInfo: Dictionary for adding arbitrary data to the log message, can be used by filters/formatters etc - /// - closure: A closure that returns the object to be logged. - /// - /// - Returns: Nothing. - /// - open func severe(_ functionName: StaticString = #function, fileName: StaticString = #file, lineNumber: Int = #line, userInfo: [String: Any] = [:], closure: () -> Any?) { - self.logln(.severe, functionName: functionName, fileName: fileName, lineNumber: lineNumber, userInfo: userInfo, closure: closure) - } - - // MARK: - Exec Methods - // MARK: * Verbose - /// Execute some code only when at the Verbose log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func verboseExec(_ closure: () -> () = {}) { - self.default.exec(XCGLogger.Level.verbose, closure: closure) - } - - /// Execute some code only when at the Verbose log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func verboseExec(_ closure: () -> () = {}) { - self.exec(XCGLogger.Level.verbose, closure: closure) - } - - // MARK: * Debug - /// Execute some code only when at the Debug or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func debugExec(_ closure: () -> () = {}) { - self.default.exec(XCGLogger.Level.debug, closure: closure) - } - - /// Execute some code only when at the Debug or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func debugExec(_ closure: () -> () = {}) { - self.exec(XCGLogger.Level.debug, closure: closure) - } - - // MARK: * Info - /// Execute some code only when at the Info or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func infoExec(_ closure: () -> () = {}) { - self.default.exec(XCGLogger.Level.info, closure: closure) - } - - /// Execute some code only when at the Info or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func infoExec(_ closure: () -> () = {}) { - self.exec(XCGLogger.Level.info, closure: closure) - } - - // MARK: * Warning - /// Execute some code only when at the Warning or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func warningExec(_ closure: () -> () = {}) { - self.default.exec(XCGLogger.Level.warning, closure: closure) - } - - /// Execute some code only when at the Warning or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func warningExec(_ closure: () -> () = {}) { - self.exec(XCGLogger.Level.warning, closure: closure) - } - - // MARK: * Error - /// Execute some code only when at the Error or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func errorExec(_ closure: () -> () = {}) { - self.default.exec(XCGLogger.Level.error, closure: closure) - } - - /// Execute some code only when at the Error or lower log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func errorExec(_ closure: () -> () = {}) { - self.exec(XCGLogger.Level.error, closure: closure) - } - - // MARK: * Severe - /// Execute some code only when at the Severe log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open class func severeExec(_ closure: () -> () = {}) { - self.default.exec(XCGLogger.Level.severe, closure: closure) - } - - /// Execute some code only when at the Severe log level. - /// - /// - Parameters: - /// - closure: The code closure to be executed. - /// - /// - Returns: Nothing. - /// - open func severeExec(_ closure: () -> () = {}) { - self.exec(XCGLogger.Level.severe, closure: closure) - } - - // MARK: - Log destination methods - /// Get the destination with the specified identifier. - /// - /// - Parameters: - /// - identifier: Identifier of the destination to return. - /// - /// - Returns: The destination with the specified identifier, if one exists, nil otherwise. - /// - open func destination(withIdentifier identifier: String) -> DestinationProtocol? { - for destination in destinations { - if destination.identifier == identifier { - return destination - } - } - - return nil - } - - /// Add a new destination to the logger. - /// - /// - Parameters: - /// - destination: The destination to add. - /// - /// - Returns: - /// - true: Log destination was added successfully. - /// - false: Failed to add the destination. - /// - @discardableResult open func add(destination: DestinationProtocol) -> Bool { - var destination = destination - - let existingDestination: DestinationProtocol? = self.destination(withIdentifier: destination.identifier) - if existingDestination != nil { - return false - } - - if let previousOwner = destination.owner { - previousOwner.remove(destination: destination) - } - - destination.owner = self - destinations.append(destination) - return true - } - - /// Remove the destination from the logger. - /// - /// - Parameters: - /// - destination: The destination to remove. - /// - /// - Returns: - /// - true: Log destination was removed successfully. - /// - false: Failed to remove the destination. - /// - @discardableResult open func remove(destination: DestinationProtocol) -> Bool { - guard destination.owner === self else { return false } - - let existingDestination: DestinationProtocol? = self.destination(withIdentifier: destination.identifier) - guard existingDestination != nil else { return false } - - // Make our parameter mutable - var destination = destination - destination.owner = nil - - destinations = destinations.filter({$0.owner != nil}) - return true - } - - /// Remove the destination with the specified identifier from the logger. - /// - /// - Parameters: - /// - identifier: The identifier of the destination to remove. - /// - /// - Returns: - /// - true: Log destination was removed successfully. - /// - false: Failed to remove the destination. - /// - @discardableResult open func remove(destinationWithIdentifier identifier: String) -> Bool { - guard let destination = destination(withIdentifier: identifier) else { return false } - return remove(destination: destination) - } - - // MARK: - Misc methods - /// Check if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - level: The log level to check. - /// - /// - Returns: - /// - true: Logger is at the log level specified or lower. - /// - false: Logger is at a higher log levelss. - /// - open func isEnabledFor(level: XCGLogger.Level) -> Bool { - return level >= self.outputLevel - } - - // MARK: - Private methods - /// Log a message if the logger's log level is equal to or lower than the specified level. - /// - /// - Parameters: - /// - message: Message to log. - /// - level: Specified log level. - /// - source: The destination calling this method - /// - /// - Returns: Nothing - /// - internal func _logln(_ message: String, level: Level = .debug, source sourceDestination: DestinationProtocol? = nil) { - let logDetails: LogDetails = LogDetails(level: level, date: Date(), message: message, functionName: "", fileName: "", lineNumber: 0, userInfo: XCGLogger.Constants.internalUserInfo) - for destination in self.destinations { - if level >= .error && sourceDestination?.identifier == destination.identifier { continue } - if (destination.isEnabledFor(level: level)) { - destination.processInternal(logDetails: logDetails) - } - } - } - - // MARK: - DebugPrintable - open var debugDescription: String { - get { - var description: String = "\(extractTypeName(self)): \(identifier) - destinations: \r" - for destination in destinations { - description += "\t \(destination.debugDescription)\r" - } - - return description - } - } -} - -// Implement Comparable for XCGLogger.Level -public func < (lhs: XCGLogger.Level, rhs: XCGLogger.Level) -> Bool { - return lhs.rawValue < rhs.rawValue -} diff --git a/Quests.xcodeproj/project.pbxproj b/Quests.xcodeproj/project.pbxproj index d429d18..cf6c699 100644 --- a/Quests.xcodeproj/project.pbxproj +++ b/Quests.xcodeproj/project.pbxproj @@ -11,6 +11,16 @@ A171A662209B710E00777B6A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A171A661209B710E00777B6A /* Assets.xcassets */; }; A171A665209B710E00777B6A /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A171A663209B710E00777B6A /* MainMenu.xib */; }; A171A66E209B734400777B6A /* StatusMenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A171A66D209B734400777B6A /* StatusMenuController.swift */; }; + A697E59A2FAC01A900886C4B /* Netable in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5992FAC01A900886C4B /* Netable */; }; + A697E59D2FAC01F900886C4B /* SwiftyUserDefaults in Frameworks */ = {isa = PBXBuildFile; productRef = A697E59C2FAC01F900886C4B /* SwiftyUserDefaults */; }; + A697E5A02FAC022C00886C4B /* Valet in Frameworks */ = {isa = PBXBuildFile; productRef = A697E59F2FAC022C00886C4B /* Valet */; }; + A697E5A32FAC028B00886C4B /* ObjcExceptionBridging in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5A22FAC028B00886C4B /* ObjcExceptionBridging */; }; + A697E5A52FAC028B00886C4B /* XCGLogger in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5A42FAC028B00886C4B /* XCGLogger */; }; + A697E5A82FAC02E300886C4B /* Reachability in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5A72FAC02E300886C4B /* Reachability */; }; + A697E5AB2FAC036400886C4B /* Down in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5AA2FAC036400886C4B /* Down */; }; + A697E5AE2FAC038E00886C4B /* SnapKit in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5AD2FAC038E00886C4B /* SnapKit */; }; + A697E5B42FAC05FB00886C4B /* CwlUtils in Frameworks */ = {isa = PBXBuildFile; productRef = A697E5B32FAC05FB00886C4B /* CwlUtils */; }; + A697E5B62FAC05FB00886C4B /* CwlUtils in Embed Frameworks */ = {isa = PBXBuildFile; productRef = A697E5B32FAC05FB00886C4B /* CwlUtils */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; B3066DE02166DA7C008BC1EC /* Source.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3066DDF2166DA7C008BC1EC /* Source.swift */; }; B3066DE62167D24C008BC1EC /* NetworkCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3066DE52167D24C008BC1EC /* NetworkCoordinator.swift */; }; B3066DEB2167D5DC008BC1EC /* GitHubNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3066DEA2167D5DC008BC1EC /* GitHubNetworkModel.swift */; }; @@ -90,10 +100,20 @@ C6393CA7258BC76700E02B45 /* CODE_OF_CONDUCT.md in Resources */ = {isa = PBXBuildFile; fileRef = C6393CA5258BC76700E02B45 /* CODE_OF_CONDUCT.md */; }; C6DFF85F247C455500E364AF /* Apollo in Frameworks */ = {isa = PBXBuildFile; productRef = C6DFF85E247C455500E364AF /* Apollo */; }; C6DFF861247C455500E364AF /* ApolloCodegenLib in Frameworks */ = {isa = PBXBuildFile; productRef = C6DFF860247C455500E364AF /* ApolloCodegenLib */; }; - D06E85E0F8BF2E3AD6938364 /* Pods_Quests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08052DA3518043BC9D1BDBAA /* Pods_Quests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXCopyFilesBuildPhase section */ + A697E5B52FAC05FB00886C4B /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + A697E5B62FAC05FB00886C4B /* CwlUtils in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; B3EAE452215009BC00878B04 /* Copy Launcher */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -108,11 +128,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 08052DA3518043BC9D1BDBAA /* Pods_Quests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Quests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 6652ADA4458D62A5653ADDF8 /* Pods-Quests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Quests.release.xcconfig"; path = "Pods/Target Support Files/Pods-Quests/Pods-Quests.release.xcconfig"; sourceTree = "<group>"; }; - 735168F1C9E7955AA9ABD81C /* Pods-Quests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Quests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Quests/Pods-Quests.debug.xcconfig"; sourceTree = "<group>"; }; - 7D9114BF15DB5B6415AE4B8F /* Pods-Quests.debuginternal.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Quests.debuginternal.xcconfig"; path = "Pods/Target Support Files/Pods-Quests/Pods-Quests.debuginternal.xcconfig"; sourceTree = "<group>"; }; - 837DC5B08CC8440EA8E1AB41 /* Pods-Quests.releaseinternal.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Quests.releaseinternal.xcconfig"; path = "Pods/Target Support Files/Pods-Quests/Pods-Quests.releaseinternal.xcconfig"; sourceTree = "<group>"; }; A171A65C209B710B00777B6A /* Quests.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Quests.app; sourceTree = BUILT_PRODUCTS_DIR; }; A171A65F209B710B00777B6A /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; A171A661209B710E00777B6A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; @@ -208,8 +223,16 @@ files = ( B3EAE455215009DE00878B04 /* ServiceManagement.framework in Frameworks */, C6DFF85F247C455500E364AF /* Apollo in Frameworks */, - D06E85E0F8BF2E3AD6938364 /* Pods_Quests.framework in Frameworks */, + A697E5AB2FAC036400886C4B /* Down in Frameworks */, + A697E5B42FAC05FB00886C4B /* CwlUtils in Frameworks */, + A697E59A2FAC01A900886C4B /* Netable in Frameworks */, + A697E5A52FAC028B00886C4B /* XCGLogger in Frameworks */, + A697E5A82FAC02E300886C4B /* Reachability in Frameworks */, + A697E5A02FAC022C00886C4B /* Valet in Frameworks */, + A697E59D2FAC01F900886C4B /* SwiftyUserDefaults in Frameworks */, C6DFF861247C455500E364AF /* ApolloCodegenLib in Frameworks */, + A697E5A32FAC028B00886C4B /* ObjcExceptionBridging in Frameworks */, + A697E5AE2FAC038E00886C4B /* SnapKit in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -227,7 +250,6 @@ isa = PBXGroup; children = ( B3EAE454215009DE00878B04 /* ServiceManagement.framework */, - 08052DA3518043BC9D1BDBAA /* Pods_Quests.framework */, ); name = Frameworks; sourceTree = "<group>"; @@ -238,7 +260,6 @@ A171A65E209B710B00777B6A /* Quests */, B3EAE442215007F500878B04 /* QuestsLauncher */, A171A65D209B710B00777B6A /* Products */, - CA305091379F90438F118B78 /* Pods */, 9615DA27F83333485935BE44 /* Frameworks */, ); sourceTree = "<group>"; @@ -438,17 +459,6 @@ path = QuestsLauncher; sourceTree = "<group>"; }; - CA305091379F90438F118B78 /* Pods */ = { - isa = PBXGroup; - children = ( - 735168F1C9E7955AA9ABD81C /* Pods-Quests.debug.xcconfig */, - 6652ADA4458D62A5653ADDF8 /* Pods-Quests.release.xcconfig */, - 7D9114BF15DB5B6415AE4B8F /* Pods-Quests.debuginternal.xcconfig */, - 837DC5B08CC8440EA8E1AB41 /* Pods-Quests.releaseinternal.xcconfig */, - ); - name = Pods; - sourceTree = "<group>"; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ @@ -456,23 +466,31 @@ isa = PBXNativeTarget; buildConfigurationList = A171A66A209B710E00777B6A /* Build configuration list for PBXNativeTarget "Quests" */; buildPhases = ( - 20F2E34E11CE17AEEE3DC4DC /* [CP] Check Pods Manifest.lock */, B3BCBA0920B4C1FA001FE60B /* Generate Apollo GraphQL API */, A171A658209B710B00777B6A /* Sources */, A171A659209B710B00777B6A /* Frameworks */, A171A65A209B710B00777B6A /* Resources */, - 57CAF85ADC6263E68E406521 /* [CP] Embed Pods Frameworks */, - B31DB30C20AE2BA4000DE7CD /* Run Swiftlint */, B3EAE452215009BC00878B04 /* Copy Launcher */, + A697E5B52FAC05FB00886C4B /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( + A697E5B92FACF1DD00886C4B /* PBXTargetDependency */, ); name = Quests; packageProductDependencies = ( C6DFF85E247C455500E364AF /* Apollo */, C6DFF860247C455500E364AF /* ApolloCodegenLib */, + A697E5992FAC01A900886C4B /* Netable */, + A697E59C2FAC01F900886C4B /* SwiftyUserDefaults */, + A697E59F2FAC022C00886C4B /* Valet */, + A697E5A22FAC028B00886C4B /* ObjcExceptionBridging */, + A697E5A42FAC028B00886C4B /* XCGLogger */, + A697E5A72FAC02E300886C4B /* Reachability */, + A697E5AA2FAC036400886C4B /* Down */, + A697E5AD2FAC038E00886C4B /* SnapKit */, + A697E5B32FAC05FB00886C4B /* CwlUtils */, ); productName = Quests; productReference = A171A65C209B710B00777B6A /* Quests.app */; @@ -501,8 +519,9 @@ A171A654209B710B00777B6A /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0940; - LastUpgradeCheck = 0930; + LastUpgradeCheck = 2640; ORGANIZATIONNAME = Steamclock; TargetAttributes = { A171A65B209B710B00777B6A = { @@ -529,6 +548,15 @@ mainGroup = A171A653209B710B00777B6A; packageReferences = ( C6DFF85D247C455500E364AF /* XCRemoteSwiftPackageReference "apollo-ios" */, + A697E5982FAC015D00886C4B /* XCRemoteSwiftPackageReference "netable" */, + A697E59B2FAC01F900886C4B /* XCRemoteSwiftPackageReference "SwiftyUserDefaults" */, + A697E59E2FAC022C00886C4B /* XCRemoteSwiftPackageReference "Valet" */, + A697E5A12FAC027600886C4B /* XCRemoteSwiftPackageReference "XCGLogger" */, + A697E5A62FAC02E300886C4B /* XCRemoteSwiftPackageReference "Reachability" */, + A697E5A92FAC036400886C4B /* XCRemoteSwiftPackageReference "down" */, + A697E5AC2FAC038E00886C4B /* XCRemoteSwiftPackageReference "snapkit" */, + A697E5B22FAC05DB00886C4B /* XCRemoteSwiftPackageReference "CwlUtils" */, + A697E5B72FACF19C00886C4B /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */, ); productRefGroup = A171A65D209B710B00777B6A /* Products */; projectDirPath = ""; @@ -583,55 +611,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 20F2E34E11CE17AEEE3DC4DC /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Quests-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; - }; - 57CAF85ADC6263E68E406521 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Quests/Pods-Quests-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - B31DB30C20AE2BA4000DE7CD /* Run Swiftlint */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "Run Swiftlint"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/SwiftLint/swiftlint\"\n"; - }; B3BCBA0920B4C1FA001FE60B /* Generate Apollo GraphQL API */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -719,6 +698,13 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + A697E5B92FACF1DD00886C4B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + productRef = A697E5B82FACF1DD00886C4B /* SwiftLintBuildToolPlugin */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ A171A663209B710E00777B6A /* MainMenu.xib */ = { isa = PBXVariantGroup; @@ -765,6 +751,7 @@ 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; @@ -773,9 +760,12 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = GH868RP95T; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -794,6 +784,7 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -825,6 +816,7 @@ 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; @@ -833,9 +825,12 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = GH868RP95T; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -847,6 +842,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; @@ -854,7 +850,6 @@ }; A171A66B209B710E00777B6A /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 735168F1C9E7955AA9ABD81C /* Pods-Quests.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_ID = com.steamclock.quests; @@ -863,14 +858,15 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202503181000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; + ENABLE_HARDENED_RUNTIME = YES; EXCLUDED_SOURCE_FILE_NAMES = "*.md"; INFOPLIST_FILE = "Quests/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.steamclock.quests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -881,7 +877,6 @@ }; A171A66C209B710E00777B6A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6652ADA4458D62A5653ADDF8 /* Pods-Quests.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_ID = com.steamclock.quests; @@ -890,14 +885,15 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202503181000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; + ENABLE_HARDENED_RUNTIME = YES; EXCLUDED_SOURCE_FILE_NAMES = "*.md"; INFOPLIST_FILE = "Quests/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.3.0; PRODUCT_BUNDLE_IDENTIFIER = com.steamclock.quests; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -932,6 +928,7 @@ 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; @@ -940,9 +937,12 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = GH868RP95T; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -954,6 +954,7 @@ MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; }; @@ -961,7 +962,6 @@ }; B314C97E21CD61D3004A0FDF /* ReleaseInternal */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 837DC5B08CC8440EA8E1AB41 /* Pods-Quests.releaseinternal.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_ID = "com.steamclock.quests-beta"; @@ -970,14 +970,15 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202503181000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; + ENABLE_HARDENED_RUNTIME = YES; EXCLUDED_SOURCE_FILE_NAMES = "*.md"; INFOPLIST_FILE = "Quests/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.3.0; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DINTERNAL"; PRODUCT_BUNDLE_IDENTIFIER = "com.steamclock.quests-beta"; @@ -996,13 +997,13 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202012221000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = QuestsLauncher/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; OTHER_SWIFT_FLAGS = "-DINTERNAL"; PRODUCT_BUNDLE_IDENTIFIER = com.steamclock.QuestsLauncher; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1037,6 +1038,7 @@ 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; @@ -1045,9 +1047,12 @@ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = GH868RP95T; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1066,6 +1071,7 @@ MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; @@ -1073,7 +1079,6 @@ }; B314C98421CD61F4004A0FDF /* DebugInternal */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7D9114BF15DB5B6415AE4B8F /* Pods-Quests.debuginternal.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; BUNDLE_ID = "com.steamclock.quests-beta"; @@ -1082,14 +1087,15 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202503181000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; + ENABLE_HARDENED_RUNTIME = YES; EXCLUDED_SOURCE_FILE_NAMES = "*.md"; INFOPLIST_FILE = "Quests/Supporting Files/Info.plist"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = 1.3.0; OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" -DINTERNAL"; PRODUCT_BUNDLE_IDENTIFIER = "com.steamclock.quests-beta"; @@ -1108,13 +1114,13 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202012221000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = QuestsLauncher/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; OTHER_SWIFT_FLAGS = "-DINTERNAL"; PRODUCT_BUNDLE_IDENTIFIER = com.steamclock.QuestsLauncher; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1131,13 +1137,13 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202012221000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = QuestsLauncher/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_BUNDLE_IDENTIFIER = com.steamclock.QuestsLauncher; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1153,13 +1159,13 @@ CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 202012221000; - DEVELOPMENT_TEAM = GH868RP95T; + DEAD_CODE_STRIPPING = YES; INFOPLIST_FILE = QuestsLauncher/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 10.14; + MACOSX_DEPLOYMENT_TARGET = 11.0; PRODUCT_BUNDLE_IDENTIFIER = com.steamclock.QuestsLauncher; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -1206,6 +1212,78 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + A697E5982FAC015D00886C4B /* XCRemoteSwiftPackageReference "netable" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/steamclock/netable"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.0.2; + }; + }; + A697E59B2FAC01F900886C4B /* XCRemoteSwiftPackageReference "SwiftyUserDefaults" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/sunshinejr/SwiftyUserDefaults"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 4.0.0; + }; + }; + A697E59E2FAC022C00886C4B /* XCRemoteSwiftPackageReference "Valet" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/square/Valet"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.1.0; + }; + }; + A697E5A12FAC027600886C4B /* XCRemoteSwiftPackageReference "XCGLogger" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/DaveWoodCom/XCGLogger"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 7.1.5; + }; + }; + A697E5A62FAC02E300886C4B /* XCRemoteSwiftPackageReference "Reachability" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/ashleymills/Reachability.swift"; + requirement = { + branch = master; + kind = branch; + }; + }; + A697E5A92FAC036400886C4B /* XCRemoteSwiftPackageReference "down" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/johnxnguyen/down"; + requirement = { + branch = master; + kind = branch; + }; + }; + A697E5AC2FAC038E00886C4B /* XCRemoteSwiftPackageReference "snapkit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/snapkit/snapkit"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 5.7.1; + }; + }; + A697E5B22FAC05DB00886C4B /* XCRemoteSwiftPackageReference "CwlUtils" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/mattgallagher/CwlUtils"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 3.0.0; + }; + }; + A697E5B72FACF19C00886C4B /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SimplyDanny/SwiftLintPlugins"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 0.63.2; + }; + }; C6DFF85D247C455500E364AF /* XCRemoteSwiftPackageReference "apollo-ios" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/apollographql/apollo-ios.git"; @@ -1217,6 +1295,56 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + A697E5992FAC01A900886C4B /* Netable */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5982FAC015D00886C4B /* XCRemoteSwiftPackageReference "netable" */; + productName = Netable; + }; + A697E59C2FAC01F900886C4B /* SwiftyUserDefaults */ = { + isa = XCSwiftPackageProductDependency; + package = A697E59B2FAC01F900886C4B /* XCRemoteSwiftPackageReference "SwiftyUserDefaults" */; + productName = SwiftyUserDefaults; + }; + A697E59F2FAC022C00886C4B /* Valet */ = { + isa = XCSwiftPackageProductDependency; + package = A697E59E2FAC022C00886C4B /* XCRemoteSwiftPackageReference "Valet" */; + productName = Valet; + }; + A697E5A22FAC028B00886C4B /* ObjcExceptionBridging */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5A12FAC027600886C4B /* XCRemoteSwiftPackageReference "XCGLogger" */; + productName = ObjcExceptionBridging; + }; + A697E5A42FAC028B00886C4B /* XCGLogger */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5A12FAC027600886C4B /* XCRemoteSwiftPackageReference "XCGLogger" */; + productName = XCGLogger; + }; + A697E5A72FAC02E300886C4B /* Reachability */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5A62FAC02E300886C4B /* XCRemoteSwiftPackageReference "Reachability" */; + productName = Reachability; + }; + A697E5AA2FAC036400886C4B /* Down */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5A92FAC036400886C4B /* XCRemoteSwiftPackageReference "down" */; + productName = Down; + }; + A697E5AD2FAC038E00886C4B /* SnapKit */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5AC2FAC038E00886C4B /* XCRemoteSwiftPackageReference "snapkit" */; + productName = SnapKit; + }; + A697E5B32FAC05FB00886C4B /* CwlUtils */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5B22FAC05DB00886C4B /* XCRemoteSwiftPackageReference "CwlUtils" */; + productName = CwlUtils; + }; + A697E5B82FACF1DD00886C4B /* SwiftLintBuildToolPlugin */ = { + isa = XCSwiftPackageProductDependency; + package = A697E5B72FACF19C00886C4B /* XCRemoteSwiftPackageReference "SwiftLintPlugins" */; + productName = "plugin:SwiftLintBuildToolPlugin"; + }; C6DFF85E247C455500E364AF /* Apollo */ = { isa = XCSwiftPackageProductDependency; package = C6DFF85D247C455500E364AF /* XCRemoteSwiftPackageReference "apollo-ios" */; diff --git a/Quests.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Quests.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 9d3969d..81219d7 100644 --- a/Quests.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Quests.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,70 +1,186 @@ { - "object": { - "pins": [ - { - "package": "Apollo", - "repositoryURL": "https://github.com/apollographql/apollo-ios.git", - "state": { - "branch": null, - "revision": "26996f4034428bb67dbfaace8a5bc30aac09a714", - "version": "0.27.1" - } - }, - { - "package": "PathKit", - "repositoryURL": "https://github.com/kylef/PathKit.git", - "state": { - "branch": null, - "revision": "e2f5be30e4c8f531c9c1e8765aa7b71c0a45d7a0", - "version": "0.9.2" - } - }, - { - "package": "Spectre", - "repositoryURL": "https://github.com/kylef/Spectre.git", - "state": { - "branch": null, - "revision": "f14ff47f45642aa5703900980b014c2e9394b6e5", - "version": "0.9.0" - } - }, - { - "package": "SQLite.swift", - "repositoryURL": "https://github.com/stephencelis/SQLite.swift.git", - "state": { - "branch": null, - "revision": "0a9893ec030501a3956bee572d6b4fdd3ae158a1", - "version": "0.12.2" - } - }, - { - "package": "Starscream", - "repositoryURL": "https://github.com/daltoniam/Starscream", - "state": { - "branch": null, - "revision": "e6b65c6d9077ea48b4a7bdda8994a1d3c6969c8d", - "version": "3.1.1" - } - }, - { - "package": "Stencil", - "repositoryURL": "https://github.com/stencilproject/Stencil.git", - "state": { - "branch": null, - "revision": "0e9a78d6584e3812cd9c09494d5c7b483e8f533c", - "version": "0.13.1" - } - }, - { - "package": "swift-nio-zlib-support", - "repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git", - "state": { - "branch": null, - "revision": "37760e9a52030bb9011972c5213c3350fa9d41fd", - "version": "1.0.0" - } - } - ] - }, - "version": 1 + "originHash" : "b34f30f7d590debe869589f475d4be010ac091a14ebc5b14364ed29dfca944de", + "pins" : [ + { + "identity" : "apollo-ios", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apollographql/apollo-ios.git", + "state" : { + "revision" : "26996f4034428bb67dbfaace8a5bc30aac09a714", + "version" : "0.27.1" + } + }, + { + "identity" : "cwlcatchexception", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mattgallagher/CwlCatchException.git", + "state" : { + "revision" : "07b2ba21d361c223e25e3c1e924288742923f08c", + "version" : "2.2.1" + } + }, + { + "identity" : "cwlpreconditiontesting", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mattgallagher/CwlPreconditionTesting.git", + "state" : { + "revision" : "0139c665ebb45e6a9fbdb68aabfd7c39f3fe0071", + "version" : "2.2.2" + } + }, + { + "identity" : "cwlutils", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mattgallagher/CwlUtils", + "state" : { + "revision" : "0bfc4587d01cfc796b6c7e118fc631333dd8ab33", + "version" : "3.0.0" + } + }, + { + "identity" : "down", + "kind" : "remoteSourceControl", + "location" : "https://github.com/johnxnguyen/down", + "state" : { + "branch" : "master", + "revision" : "e754ab1c80920dd51a8e08290c912ac1c2ac8b58" + } + }, + { + "identity" : "netable", + "kind" : "remoteSourceControl", + "location" : "https://github.com/steamclock/netable", + "state" : { + "revision" : "bb75b33c0a1b88f07b2a6e10e611b7b5dce78dbb", + "version" : "0.10.3" + } + }, + { + "identity" : "nimble", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Quick/Nimble.git", + "state" : { + "revision" : "e9d769113660769a4d9dd3afb855562c0b7ae7b0", + "version" : "7.3.4" + } + }, + { + "identity" : "pathkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kylef/PathKit.git", + "state" : { + "revision" : "e2f5be30e4c8f531c9c1e8765aa7b71c0a45d7a0", + "version" : "0.9.2" + } + }, + { + "identity" : "quick", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Quick/Quick.git", + "state" : { + "revision" : "f2b5a06440ea87eba1a167cab37bf6496646c52e", + "version" : "1.3.4" + } + }, + { + "identity" : "reachability.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/ashleymills/Reachability.swift", + "state" : { + "branch" : "master", + "revision" : "21d1dc412cfecbe6e34f1f4c4eb88d3f912654a6" + } + }, + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/snapkit/snapkit", + "state" : { + "revision" : "2842e6e84e82eb9a8dac0100ca90d9444b0307f4", + "version" : "5.7.1" + } + }, + { + "identity" : "spectre", + "kind" : "remoteSourceControl", + "location" : "https://github.com/kylef/Spectre.git", + "state" : { + "revision" : "f14ff47f45642aa5703900980b014c2e9394b6e5", + "version" : "0.9.0" + } + }, + { + "identity" : "sqlite.swift", + "kind" : "remoteSourceControl", + "location" : "https://github.com/stephencelis/SQLite.swift.git", + "state" : { + "revision" : "0a9893ec030501a3956bee572d6b4fdd3ae158a1", + "version" : "0.12.2" + } + }, + { + "identity" : "starscream", + "kind" : "remoteSourceControl", + "location" : "https://github.com/daltoniam/Starscream", + "state" : { + "revision" : "e6b65c6d9077ea48b4a7bdda8994a1d3c6969c8d", + "version" : "3.1.1" + } + }, + { + "identity" : "stencil", + "kind" : "remoteSourceControl", + "location" : "https://github.com/stencilproject/Stencil.git", + "state" : { + "revision" : "0e9a78d6584e3812cd9c09494d5c7b483e8f533c", + "version" : "0.13.1" + } + }, + { + "identity" : "swift-nio-zlib-support", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-nio-zlib-support.git", + "state" : { + "revision" : "37760e9a52030bb9011972c5213c3350fa9d41fd", + "version" : "1.0.0" + } + }, + { + "identity" : "swiftlintplugins", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SimplyDanny/SwiftLintPlugins", + "state" : { + "revision" : "8a4640d14777685ba8f14e832373160498fbab92", + "version" : "0.63.2" + } + }, + { + "identity" : "swiftyuserdefaults", + "kind" : "remoteSourceControl", + "location" : "https://github.com/sunshinejr/SwiftyUserDefaults", + "state" : { + "revision" : "566ace16ee91242b61e2e9da6cdbe7dfdadd926c", + "version" : "4.0.0" + } + }, + { + "identity" : "valet", + "kind" : "remoteSourceControl", + "location" : "https://github.com/square/Valet", + "state" : { + "revision" : "246baf6be3f9e3ff116dc05251a08f69dd7c7b9d", + "version" : "5.1.0" + } + }, + { + "identity" : "xcglogger", + "kind" : "remoteSourceControl", + "location" : "https://github.com/DaveWoodCom/XCGLogger", + "state" : { + "revision" : "4def3c1c772ca90ad5e7bfc8ac437c3b0b4276cf", + "version" : "7.1.5" + } + } + ], + "version" : 3 } diff --git a/Quests.xcodeproj/xcshareddata/xcschemes/Quests Beta.xcscheme b/Quests.xcodeproj/xcshareddata/xcschemes/Quests Beta.xcscheme index c153fac..9a2a31e 100644 --- a/Quests.xcodeproj/xcshareddata/xcschemes/Quests Beta.xcscheme +++ b/Quests.xcodeproj/xcshareddata/xcschemes/Quests Beta.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1230" + LastUpgradeVersion = "2640" version = "1.3"> <BuildAction parallelizeBuildables = "YES" diff --git a/Quests.xcodeproj/xcshareddata/xcschemes/Quests.xcscheme b/Quests.xcodeproj/xcshareddata/xcschemes/Quests.xcscheme index 9a7dca5..6cea359 100644 --- a/Quests.xcodeproj/xcshareddata/xcschemes/Quests.xcscheme +++ b/Quests.xcodeproj/xcshareddata/xcschemes/Quests.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1220" + LastUpgradeVersion = "2640" version = "1.3"> <BuildAction parallelizeBuildables = "YES" diff --git a/Quests.xcodeproj/xcshareddata/xcschemes/QuestsLauncher.xcscheme b/Quests.xcodeproj/xcshareddata/xcschemes/QuestsLauncher.xcscheme index 210c828..1bfd8e5 100644 --- a/Quests.xcodeproj/xcshareddata/xcschemes/QuestsLauncher.xcscheme +++ b/Quests.xcodeproj/xcshareddata/xcschemes/QuestsLauncher.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1220" + LastUpgradeVersion = "2640" version = "1.3"> <BuildAction parallelizeBuildables = "YES" diff --git a/Quests.xcworkspace/contents.xcworkspacedata b/Quests.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index ad314c5..0000000 --- a/Quests.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<Workspace - version = "1.0"> - <FileRef - location = "group:Quests.xcodeproj"> - </FileRef> - <FileRef - location = "group:Pods/Pods.xcodeproj"> - </FileRef> -</Workspace> diff --git a/Quests.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Quests.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist deleted file mode 100644 index 18d9810..0000000 --- a/Quests.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> -<plist version="1.0"> -<dict> - <key>IDEDidComputeMac32BitWarning</key> - <true/> -</dict> -</plist> diff --git a/Quests.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Quests.xcworkspace/xcshareddata/swiftpm/Package.resolved deleted file mode 100644 index 9d3969d..0000000 --- a/Quests.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ /dev/null @@ -1,70 +0,0 @@ -{ - "object": { - "pins": [ - { - "package": "Apollo", - "repositoryURL": "https://github.com/apollographql/apollo-ios.git", - "state": { - "branch": null, - "revision": "26996f4034428bb67dbfaace8a5bc30aac09a714", - "version": "0.27.1" - } - }, - { - "package": "PathKit", - "repositoryURL": "https://github.com/kylef/PathKit.git", - "state": { - "branch": null, - "revision": "e2f5be30e4c8f531c9c1e8765aa7b71c0a45d7a0", - "version": "0.9.2" - } - }, - { - "package": "Spectre", - "repositoryURL": "https://github.com/kylef/Spectre.git", - "state": { - "branch": null, - "revision": "f14ff47f45642aa5703900980b014c2e9394b6e5", - "version": "0.9.0" - } - }, - { - "package": "SQLite.swift", - "repositoryURL": "https://github.com/stephencelis/SQLite.swift.git", - "state": { - "branch": null, - "revision": "0a9893ec030501a3956bee572d6b4fdd3ae158a1", - "version": "0.12.2" - } - }, - { - "package": "Starscream", - "repositoryURL": "https://github.com/daltoniam/Starscream", - "state": { - "branch": null, - "revision": "e6b65c6d9077ea48b4a7bdda8994a1d3c6969c8d", - "version": "3.1.1" - } - }, - { - "package": "Stencil", - "repositoryURL": "https://github.com/stencilproject/Stencil.git", - "state": { - "branch": null, - "revision": "0e9a78d6584e3812cd9c09494d5c7b483e8f533c", - "version": "0.13.1" - } - }, - { - "package": "swift-nio-zlib-support", - "repositoryURL": "https://github.com/apple/swift-nio-zlib-support.git", - "state": { - "branch": null, - "revision": "37760e9a52030bb9011972c5213c3350fa9d41fd", - "version": "1.0.0" - } - } - ] - }, - "version": 1 -} diff --git a/Quests/Model/Coordinator/AnalyticsModel.swift b/Quests/Model/Coordinator/AnalyticsModel.swift index 114684e..b921021 100644 --- a/Quests/Model/Coordinator/AnalyticsModel.swift +++ b/Quests/Model/Coordinator/AnalyticsModel.swift @@ -26,6 +26,7 @@ import CwlUtils import Foundation import SwiftyUserDefaults + /* * As of our open source release, we've removed Crashlytics and in turn stopped tracking analytics. * diff --git a/Quests/Model/Coordinator/NetworkCoordinator.swift b/Quests/Model/Coordinator/NetworkCoordinator.swift index 86eaa7b..491a412 100644 --- a/Quests/Model/Coordinator/NetworkCoordinator.swift +++ b/Quests/Model/Coordinator/NetworkCoordinator.swift @@ -23,6 +23,7 @@ // import Apollo +import AppKit import Foundation import Netable import Reachability diff --git a/Quests/Model/DefaultsKeys.swift b/Quests/Model/DefaultsKeys.swift index 137bacf..a17386a 100644 --- a/Quests/Model/DefaultsKeys.swift +++ b/Quests/Model/DefaultsKeys.swift @@ -23,6 +23,7 @@ // import SwiftyUserDefaults +import Foundation extension DefaultsKeys { static let hasLaunchedBefore = DefaultsKey<Bool>("hasLaunchedBefore", defaultValue: false) diff --git a/Quests/Model/GitHub/GitHubNetworkModel.swift b/Quests/Model/GitHub/GitHubNetworkModel.swift index 03c0660..c22b62a 100644 --- a/Quests/Model/GitHub/GitHubNetworkModel.swift +++ b/Quests/Model/GitHub/GitHubNetworkModel.swift @@ -23,6 +23,7 @@ // import Apollo +import AppKit import Foundation import Netable import SwiftyUserDefaults diff --git a/Quests/Model/GitLab/GitLabNetworkModel.swift b/Quests/Model/GitLab/GitLabNetworkModel.swift index 53c1f41..b718adb 100644 --- a/Quests/Model/GitLab/GitLabNetworkModel.swift +++ b/Quests/Model/GitLab/GitLabNetworkModel.swift @@ -22,10 +22,8 @@ // THE SOFTWARE. // -import Alamofire import Foundation import Netable -import SwiftyJSON import SwiftyUserDefaults import Valet diff --git a/Quests/Model/JIRA/JiraNetworkModel.swift b/Quests/Model/JIRA/JiraNetworkModel.swift index 00b5227..91ace89 100644 --- a/Quests/Model/JIRA/JiraNetworkModel.swift +++ b/Quests/Model/JIRA/JiraNetworkModel.swift @@ -22,7 +22,6 @@ // THE SOFTWARE. // -import Alamofire import Foundation import Netable import SwiftyUserDefaults diff --git a/Quests/New Group/StatusMenuViewModel.swift b/Quests/New Group/StatusMenuViewModel.swift index f835ff9..6fbdd70 100644 --- a/Quests/New Group/StatusMenuViewModel.swift +++ b/Quests/New Group/StatusMenuViewModel.swift @@ -24,6 +24,7 @@ import Foundation import SwiftyUserDefaults +import AppKit extension Notification.Name { static let shouldOpenSettings = Notification.Name(rawValue: "shouldOpenSettings") diff --git a/Quests/View/CollectionSpacerView.swift b/Quests/View/CollectionSpacerView.swift index 7864276..2b20c50 100644 --- a/Quests/View/CollectionSpacerView.swift +++ b/Quests/View/CollectionSpacerView.swift @@ -23,7 +23,6 @@ // import Cocoa -import SnapKit class CollectionSpacerView: NSView { @IBOutlet private var spacer: NSBox!