@swiftbrowser/swift 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +214 -0
- package/README.md +10 -2
- package/Sources/AVFoundation/AVFoundation.swift +131 -0
- package/Sources/AVFoundation/Asset.swift +487 -0
- package/Sources/AVFoundation/AudioSession.swift +144 -0
- package/Sources/AVFoundation/CMTime.swift +303 -0
- package/Sources/AVFoundation/Capture.swift +688 -0
- package/Sources/AVFoundation/Player.swift +749 -0
- package/Sources/AVFoundation/PlayerView.swift +117 -0
- package/Sources/AVKit/AVKit.swift +132 -0
- package/Sources/Accelerate/Accelerate.swift +122 -0
- package/Sources/AppIntents/AppIntents.swift +144 -0
- package/Sources/AppIntents/Parameters.swift +220 -0
- package/Sources/AppIntents/Shortcuts.swift +159 -0
- package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
- package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
- package/Sources/AuthenticationServices/Authorization.swift +251 -0
- package/Sources/Charts/Charts.swift +61 -0
- package/Sources/Combine/AnyCancellable.swift +65 -0
- package/Sources/Combine/AnyPublisher.swift +148 -0
- package/Sources/Combine/AnySubscriber.swift +230 -0
- package/Sources/Combine/Cancellable.swift +35 -0
- package/Sources/Combine/Codable.swift +29 -0
- package/Sources/Combine/CombineIdentifier.swift +45 -0
- package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
- package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
- package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
- package/Sources/Combine/CurrentValueSubject.swift +252 -0
- package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
- package/Sources/Combine/Future.swift +228 -0
- package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
- package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
- package/Sources/Combine/Helpers/ConduitList.swift +59 -0
- package/Sources/Combine/Helpers/DebugHook.swift +177 -0
- package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
- package/Sources/Combine/Helpers/Locking.swift +30 -0
- package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
- package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
- package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
- package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
- package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
- package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
- package/Sources/Combine/Helpers/Utils.swift +30 -0
- package/Sources/Combine/Helpers/Violations.swift +33 -0
- package/Sources/Combine/ImmediateScheduler.swift +178 -0
- package/Sources/Combine/LICENSE +21 -0
- package/Sources/Combine/NotificationPublisher.swift +48 -0
- package/Sources/Combine/ObjectWillChange.swift +46 -0
- package/Sources/Combine/PassthroughSubject.swift +222 -0
- package/Sources/Combine/Publisher+Subscribe.swift +53 -0
- package/Sources/Combine/Publishers/Deferred.swift +48 -0
- package/Sources/Combine/Publishers/Empty.swift +54 -0
- package/Sources/Combine/Publishers/Fail.swift +42 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
- package/Sources/Combine/Publishers/Just.swift +313 -0
- package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
- package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
- package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
- package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
- package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
- package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
- package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
- package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
- package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
- package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
- package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
- package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
- package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
- package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
- package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
- package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
- package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
- package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
- package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
- package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
- package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
- package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
- package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
- package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
- package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
- package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
- package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
- package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
- package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
- package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
- package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
- package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
- package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
- package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
- package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
- package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
- package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
- package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
- package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
- package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
- package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
- package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
- package/Sources/Combine/Publishers/Publishers.swift +13 -0
- package/Sources/Combine/Publishers/Record.swift +237 -0
- package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
- package/Sources/Combine/Result.swift +46 -0
- package/Sources/Combine/Scheduler.swift +89 -0
- package/Sources/Combine/Schedulers.swift +211 -0
- package/Sources/Combine/Subject+Void.swift +17 -0
- package/Sources/Combine/Subscriber+Void.swift +20 -0
- package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
- package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
- package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
- package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
- package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
- package/Sources/Combine/Subscription.swift +22 -0
- package/Sources/Combine/Subscriptions.swift +42 -0
- package/Sources/Combine/SwiftUIObservation.swift +10 -0
- package/Sources/Combine/_Introspection.swift +107 -0
- package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
- package/Sources/Compression/Compression.swift +365 -0
- package/Sources/Compression/Deflate.swift +407 -0
- package/Sources/Compression/Zlib.swift +179 -0
- package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
- package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
- package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
- package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
- package/Sources/CoreImage/CIColor.swift +41 -0
- package/Sources/CoreImage/CIContext.swift +31 -0
- package/Sources/CoreImage/CIDetector.swift +57 -0
- package/Sources/CoreImage/CIFilter.swift +243 -0
- package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
- package/Sources/CoreImage/CIImage.swift +162 -0
- package/Sources/CoreImage/QRCode.swift +393 -0
- package/Sources/CoreLocation/Coordinate.swift +30 -0
- package/Sources/CoreLocation/Location.swift +65 -0
- package/Sources/CoreML/Evaluation.swift +414 -0
- package/Sources/CoreML/FeatureValue.swift +266 -0
- package/Sources/CoreML/Model.swift +269 -0
- package/Sources/CoreML/MultiArray.swift +92 -0
- package/Sources/CoreML/Specification.swift +233 -0
- package/Sources/CoreText/CoreText.swift +64 -0
- package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
- package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
- package/Sources/CryptoKit/CryptoKit.swift +375 -0
- package/Sources/CryptoKit/Curve25519.swift +317 -0
- package/Sources/CryptoKit/P256.swift +321 -0
- package/Sources/FoundationBridge/AppStorage.swift +165 -0
- package/Sources/FoundationBridge/AssetResources.swift +90 -0
- package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
- package/Sources/FoundationBridge/AsyncImage.swift +116 -0
- package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
- package/Sources/FoundationBridge/Bundle.swift +119 -0
- package/Sources/FoundationBridge/CombineExports.swift +8 -0
- package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
- package/Sources/FoundationBridge/Dispatch.swift +458 -0
- package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
- package/Sources/FoundationBridge/FileImporter.swift +128 -0
- package/Sources/FoundationBridge/FileSystem.swift +68 -0
- package/Sources/FoundationBridge/FoundationBridge.swift +29 -0
- package/Sources/FoundationBridge/HostResolution.swift +31 -0
- package/Sources/FoundationBridge/ItemProvider.swift +655 -0
- package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
- package/Sources/FoundationBridge/Links.swift +127 -0
- package/Sources/FoundationBridge/ListFormatter.swift +32 -0
- package/Sources/FoundationBridge/Locale.swift +86 -0
- package/Sources/FoundationBridge/Localization.swift +149 -0
- package/Sources/FoundationBridge/Locks.swift +50 -0
- package/Sources/FoundationBridge/Markdown.swift +527 -0
- package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
- package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
- package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
- package/Sources/FoundationBridge/Operation.swift +195 -0
- package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
- package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
- package/Sources/FoundationBridge/SceneStorage.swift +78 -0
- package/Sources/FoundationBridge/SecurityExports.swift +8 -0
- package/Sources/FoundationBridge/Selector.swift +226 -0
- package/Sources/FoundationBridge/StringComparators.swift +17 -0
- package/Sources/FoundationBridge/Table.swift +211 -0
- package/Sources/FoundationBridge/TextAttributes.swift +42 -0
- package/Sources/FoundationBridge/Timer.swift +53 -0
- package/Sources/FoundationBridge/UITextChecker.swift +30 -0
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/FoundationBridge/UserDefaults.swift +183 -0
- package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
- package/Sources/FoundationBridge/WebSocket.swift +187 -0
- package/Sources/FoundationModels/FoundationModels.swift +1098 -0
- package/Sources/ImageIO/GIF.swift +72 -0
- package/Sources/ImageIO/ImageIO.swift +248 -0
- package/Sources/ImageIO/ImageTypes.swift +28 -0
- package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
- package/Sources/LocalAuthentication/LAContext.swift +86 -0
- package/Sources/MapKit/Geometry.swift +223 -0
- package/Sources/MapKit/Map.swift +638 -0
- package/Sources/MapKit/MapView.swift +229 -0
- package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
- package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
- package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
- package/Sources/OSLog/OSLog.swift +6 -0
- package/Sources/Photos/Photos.swift +572 -0
- package/Sources/PhotosUI/PhotosPicker.swift +248 -0
- package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
- package/Sources/QuickLook/QuickLook.swift +168 -0
- package/Sources/SafariServices/SafariServices.swift +106 -0
- package/Sources/Security/Security.swift +332 -0
- package/Sources/StoreKit/AppStore.swift +207 -0
- package/Sources/StoreKit/Products.swift +280 -0
- package/Sources/StoreKit/RequestReview.swift +28 -0
- package/Sources/StoreKit/StoreKit1.swift +486 -0
- package/Sources/StoreKit/StoreViews.swift +428 -0
- package/Sources/StoreKit/Transactions.swift +197 -0
- package/Sources/SwiftData/Macros.swift +58 -0
- package/Sources/SwiftData/ModelActor.swift +38 -0
- package/Sources/SwiftData/ModelContainer.swift +129 -0
- package/Sources/SwiftData/ModelContext.swift +451 -0
- package/Sources/SwiftData/PersistentModel.swift +238 -0
- package/Sources/SwiftData/Properties.swift +261 -0
- package/Sources/SwiftData/Query.swift +256 -0
- package/Sources/SwiftData/Schema.swift +192 -0
- package/Sources/SwiftData/Store.swift +146 -0
- package/Sources/SwiftData/StringPredicates.swift +125 -0
- package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
- package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
- package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
- package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
- package/Sources/SwiftDataMacros/Plugin.swift +18 -0
- package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
- package/Sources/SwiftUI/API/Accessibility.swift +181 -0
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +221 -0
- package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
- package/Sources/SwiftUI/API/Animation.swift +285 -0
- package/Sources/SwiftUI/API/App.swift +87 -0
- package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
- package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
- package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
- package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
- package/Sources/SwiftUI/API/Canvas.swift +337 -0
- package/Sources/SwiftUI/API/Color.swift +237 -0
- package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
- package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
- package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
- package/Sources/SwiftUI/API/Commands.swift +106 -0
- package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
- package/Sources/SwiftUI/API/ContentShape.swift +33 -0
- package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
- package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
- package/Sources/SwiftUI/API/Controls.swift +300 -0
- package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +92 -0
- package/Sources/SwiftUI/API/EditMode.swift +212 -0
- package/Sources/SwiftUI/API/Effects.swift +388 -0
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +439 -0
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +137 -0
- package/Sources/SwiftUI/API/Font.swift +131 -0
- package/Sources/SwiftUI/API/Gauge.swift +290 -0
- package/Sources/SwiftUI/API/Geometry.swift +89 -0
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +342 -0
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +188 -0
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
- package/Sources/SwiftUI/API/Layout.swift +220 -0
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +331 -0
- package/Sources/SwiftUI/API/Menu.swift +58 -0
- package/Sources/SwiftUI/API/Modifiers.swift +313 -0
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +386 -0
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
- package/Sources/SwiftUI/API/OnChange.swift +48 -0
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +185 -0
- package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
- package/Sources/SwiftUI/API/Popover.swift +41 -0
- package/Sources/SwiftUI/API/Preferences.swift +262 -0
- package/Sources/SwiftUI/API/Presentation.swift +122 -0
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +517 -0
- package/Sources/SwiftUI/API/Publishers.swift +107 -0
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +84 -0
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
- package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
- package/Sources/SwiftUI/API/Sharing.swift +193 -0
- package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
- package/Sources/SwiftUI/API/State.swift +144 -0
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
- package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
- package/Sources/SwiftUI/API/TabContent.swift +841 -0
- package/Sources/SwiftUI/API/Table.swift +382 -0
- package/Sources/SwiftUI/API/Tabs.swift +263 -0
- package/Sources/SwiftUI/API/Tasks.swift +35 -0
- package/Sources/SwiftUI/API/Text.swift +386 -0
- package/Sources/SwiftUI/API/TextDates.swift +61 -0
- package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
- package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
- package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
- package/Sources/SwiftUI/API/Timeline.swift +212 -0
- package/Sources/SwiftUI/API/Toolbar.swift +251 -0
- package/Sources/SwiftUI/API/Transfer.swift +145 -0
- package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
- package/Sources/SwiftUI/API/Video.swift +64 -0
- package/Sources/SwiftUI/API/View.swift +215 -0
- package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
- package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +325 -0
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +660 -0
- package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Charts/Marks.swift +204 -0
- package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
- package/Sources/SwiftUI/Charts/Scales.swift +326 -0
- package/Sources/SwiftUI/Localization/Localization.swift +498 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
- package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
- package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
- package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
- package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
- package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
- package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
- package/Sources/Symbols/Symbols.swift +25 -0
- package/Sources/Translation/Translation.swift +423 -0
- package/Sources/UIKit/Activity.swift +213 -0
- package/Sources/UIKit/Alerts.swift +69 -0
- package/Sources/UIKit/AppDelegate.swift +222 -0
- package/Sources/UIKit/Appearance.swift +84 -0
- package/Sources/UIKit/ColorConversions.swift +70 -0
- package/Sources/UIKit/Controls.swift +225 -0
- package/Sources/UIKit/Device.swift +200 -0
- package/Sources/UIKit/Feedback.swift +65 -0
- package/Sources/UIKit/Font.swift +307 -0
- package/Sources/UIKit/Graphics.swift +204 -0
- package/Sources/UIKit/HostingController.swift +185 -0
- package/Sources/UIKit/Identity.swift +24 -0
- package/Sources/UIKit/Introspectable.swift +510 -0
- package/Sources/UIKit/Pasteboard.swift +363 -0
- package/Sources/UIKit/PhotoAlbum.swift +81 -0
- package/Sources/UIKit/RemoteNotifications.swift +15 -0
- package/Sources/UIKit/Representable.swift +288 -0
- package/Sources/UIKit/SafeArea.swift +12 -0
- package/Sources/UIKit/SceneDelegates.swift +132 -0
- package/Sources/UIKit/Scenes.swift +40 -0
- package/Sources/UIKit/ScrollView.swift +157 -0
- package/Sources/UIKit/ShortcutItems.swift +67 -0
- package/Sources/UIKit/SymbolConfiguration.swift +124 -0
- package/Sources/UIKit/TargetAction.swift +123 -0
- package/Sources/UIKit/TextPaste.swift +161 -0
- package/Sources/UIKit/TextView.swift +538 -0
- package/Sources/UIKit/UIKit.swift +292 -0
- package/Sources/UIKit/UIView.swift +855 -0
- package/Sources/UIKit/ViewTranslation.swift +311 -0
- package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
- package/Sources/UserNotifications/Content.swift +370 -0
- package/Sources/UserNotifications/NotificationCenter.swift +309 -0
- package/Sources/WeatherKit/WeatherKit.swift +228 -0
- package/Sources/WebKit/WebKit.swift +245 -0
- package/Sources/os/os.swift +376 -0
- package/Sources/zlib/zlib.swift +6 -0
- package/index.d.ts +2 -0
- package/index.mjs +16 -0
- package/manifest.d.mts +2 -0
- package/manifest.mjs +39 -0
- package/package.json +30 -4
- package/sync-sources.mjs +33 -0
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
// A QR code encoder for `CIQRCodeGenerator` (ISO/IEC 18004): byte mode, the
|
|
2
|
+
// smallest version (1...40) that holds the message at the requested error
|
|
3
|
+
// correction level, and the mask with the lowest penalty score. The
|
|
4
|
+
// structure follows Project Nayuki's reference implementation (MIT).
|
|
5
|
+
|
|
6
|
+
struct _QRCode {
|
|
7
|
+
enum ErrorCorrection: Int, CaseIterable {
|
|
8
|
+
case low, medium, quartile, high
|
|
9
|
+
|
|
10
|
+
/// Core Image's `inputCorrectionLevel` letters.
|
|
11
|
+
init?(letter: String) {
|
|
12
|
+
switch letter.uppercased() {
|
|
13
|
+
case "L": self = .low
|
|
14
|
+
case "M": self = .medium
|
|
15
|
+
case "Q": self = .quartile
|
|
16
|
+
case "H": self = .high
|
|
17
|
+
default: return nil
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// The two format bits.
|
|
22
|
+
var formatBits: Int {
|
|
23
|
+
switch self {
|
|
24
|
+
case .low: 1
|
|
25
|
+
case .medium: 0
|
|
26
|
+
case .quartile: 3
|
|
27
|
+
case .high: 2
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let version: Int
|
|
33
|
+
let size: Int
|
|
34
|
+
let correction: ErrorCorrection
|
|
35
|
+
/// The mask applied (0...7).
|
|
36
|
+
private(set) var mask: Int = 0
|
|
37
|
+
/// Row-major, true for a dark module.
|
|
38
|
+
private var modules: [Bool]
|
|
39
|
+
private var isFunction: [Bool]
|
|
40
|
+
|
|
41
|
+
func module(x: Int, y: Int) -> Bool { modules[y * size + x] }
|
|
42
|
+
|
|
43
|
+
/// The code for `data`; nil when it does not fit version 40. `mask`
|
|
44
|
+
/// forces a mask pattern instead of the one with the lowest penalty.
|
|
45
|
+
static func encode(_ data: [UInt8], correction: ErrorCorrection, mask forcedMask: Int? = nil) -> _QRCode? {
|
|
46
|
+
var chosen: Int?
|
|
47
|
+
for version in 1...40 {
|
|
48
|
+
let capacity = numDataCodewords(version: version, correction: correction) * 8
|
|
49
|
+
let countBits = version <= 9 ? 8 : 16
|
|
50
|
+
if data.count < (1 << countBits), 4 + countBits + data.count * 8 <= capacity {
|
|
51
|
+
chosen = version
|
|
52
|
+
break
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
guard let version = chosen else { return nil }
|
|
56
|
+
let capacity = numDataCodewords(version: version, correction: correction) * 8
|
|
57
|
+
|
|
58
|
+
// Mode indicator (byte), character count, the bytes, then a
|
|
59
|
+
// terminator, zero bits to a byte boundary and alternating pad bytes.
|
|
60
|
+
var bits: [Bool] = []
|
|
61
|
+
func append(_ value: Int, _ count: Int) {
|
|
62
|
+
for i in stride(from: count - 1, through: 0, by: -1) { bits.append((value >> i) & 1 == 1) }
|
|
63
|
+
}
|
|
64
|
+
append(0b0100, 4)
|
|
65
|
+
append(data.count, version <= 9 ? 8 : 16)
|
|
66
|
+
for byte in data { append(Int(byte), 8) }
|
|
67
|
+
append(0, min(4, capacity - bits.count))
|
|
68
|
+
append(0, (8 - bits.count % 8) % 8)
|
|
69
|
+
var pad = 0xEC
|
|
70
|
+
while bits.count < capacity {
|
|
71
|
+
append(pad, 8)
|
|
72
|
+
pad ^= 0xEC ^ 0x11
|
|
73
|
+
}
|
|
74
|
+
var codewords = [UInt8](repeating: 0, count: bits.count / 8)
|
|
75
|
+
for (index, bit) in bits.enumerated() where bit { codewords[index >> 3] |= 1 << (7 - UInt8(index & 7)) }
|
|
76
|
+
|
|
77
|
+
var code = _QRCode(version: version, correction: correction)
|
|
78
|
+
code.drawFunctionPatterns()
|
|
79
|
+
code.drawCodewords(code.interleavedWithErrorCorrection(codewords))
|
|
80
|
+
var best = forcedMask ?? 0
|
|
81
|
+
if forcedMask == nil {
|
|
82
|
+
var lowest = Int.max
|
|
83
|
+
for candidate in 0..<8 {
|
|
84
|
+
code.applyMask(candidate)
|
|
85
|
+
code.drawFormatBits(mask: candidate)
|
|
86
|
+
let penalty = code.penaltyScore()
|
|
87
|
+
if penalty < lowest {
|
|
88
|
+
lowest = penalty
|
|
89
|
+
best = candidate
|
|
90
|
+
}
|
|
91
|
+
code.applyMask(candidate) // undo: masking is an XOR
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
code.applyMask(best)
|
|
95
|
+
code.drawFormatBits(mask: best)
|
|
96
|
+
code.mask = best
|
|
97
|
+
return code
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private init(version: Int, correction: ErrorCorrection) {
|
|
101
|
+
self.version = version
|
|
102
|
+
self.correction = correction
|
|
103
|
+
size = version * 4 + 17
|
|
104
|
+
modules = [Bool](repeating: false, count: size * size)
|
|
105
|
+
isFunction = [Bool](repeating: false, count: size * size)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// MARK: Function patterns
|
|
109
|
+
|
|
110
|
+
private mutating func setFunction(_ x: Int, _ y: Int, _ dark: Bool) {
|
|
111
|
+
modules[y * size + x] = dark
|
|
112
|
+
isFunction[y * size + x] = true
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
private mutating func drawFunctionPatterns() {
|
|
116
|
+
for i in 0..<size {
|
|
117
|
+
setFunction(6, i, i % 2 == 0)
|
|
118
|
+
setFunction(i, 6, i % 2 == 0)
|
|
119
|
+
}
|
|
120
|
+
drawFinder(3, 3)
|
|
121
|
+
drawFinder(size - 4, 3)
|
|
122
|
+
drawFinder(3, size - 4)
|
|
123
|
+
let positions = alignmentPatternPositions()
|
|
124
|
+
let count = positions.count
|
|
125
|
+
for i in 0..<count {
|
|
126
|
+
for j in 0..<count {
|
|
127
|
+
// Not over the three finder patterns.
|
|
128
|
+
if (i == 0 && j == 0) || (i == 0 && j == count - 1) || (i == count - 1 && j == 0) { continue }
|
|
129
|
+
drawAlignment(positions[i], positions[j])
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
drawFormatBits(mask: 0) // reserves the area; redrawn once the mask is chosen
|
|
133
|
+
drawVersion()
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
private mutating func drawFinder(_ x: Int, _ y: Int) {
|
|
137
|
+
for dy in -4...4 {
|
|
138
|
+
for dx in -4...4 {
|
|
139
|
+
let distance = max(abs(dx), abs(dy))
|
|
140
|
+
let xx = x + dx, yy = y + dy
|
|
141
|
+
if xx >= 0, xx < size, yy >= 0, yy < size { setFunction(xx, yy, distance != 2 && distance != 4) }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private mutating func drawAlignment(_ x: Int, _ y: Int) {
|
|
147
|
+
for dy in -2...2 {
|
|
148
|
+
for dx in -2...2 { setFunction(x + dx, y + dy, max(abs(dx), abs(dy)) != 1) }
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private func alignmentPatternPositions() -> [Int] {
|
|
153
|
+
if version == 1 { return [] }
|
|
154
|
+
let count = version / 7 + 2
|
|
155
|
+
let step = (version * 8 + count * 3 + 5) / (count * 4 - 4) * 2
|
|
156
|
+
var result = [6]
|
|
157
|
+
var position = size - 7
|
|
158
|
+
for _ in 0..<(count - 1) {
|
|
159
|
+
result.insert(position, at: 1)
|
|
160
|
+
position -= step
|
|
161
|
+
}
|
|
162
|
+
return result
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private mutating func drawFormatBits(mask: Int) {
|
|
166
|
+
let data = correction.formatBits << 3 | mask
|
|
167
|
+
var remainder = data
|
|
168
|
+
for _ in 0..<10 { remainder = (remainder << 1) ^ ((remainder >> 9) * 0x537) }
|
|
169
|
+
let bits = (data << 10 | remainder) ^ 0x5412
|
|
170
|
+
func bit(_ i: Int) -> Bool { (bits >> i) & 1 == 1 }
|
|
171
|
+
// Around the top left finder.
|
|
172
|
+
for i in 0...5 { setFunction(8, i, bit(i)) }
|
|
173
|
+
setFunction(8, 7, bit(6))
|
|
174
|
+
setFunction(8, 8, bit(7))
|
|
175
|
+
setFunction(7, 8, bit(8))
|
|
176
|
+
for i in 9..<15 { setFunction(14 - i, 8, bit(i)) }
|
|
177
|
+
// Beside the other two.
|
|
178
|
+
for i in 0..<8 { setFunction(size - 1 - i, 8, bit(i)) }
|
|
179
|
+
for i in 8..<15 { setFunction(8, size - 15 + i, bit(i)) }
|
|
180
|
+
setFunction(8, size - 8, true) // the dark module
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
private mutating func drawVersion() {
|
|
184
|
+
guard version >= 7 else { return }
|
|
185
|
+
var remainder = version
|
|
186
|
+
for _ in 0..<12 { remainder = (remainder << 1) ^ ((remainder >> 11) * 0x1F25) }
|
|
187
|
+
let bits = version << 12 | remainder
|
|
188
|
+
for i in 0..<18 {
|
|
189
|
+
let dark = (bits >> i) & 1 == 1
|
|
190
|
+
let a = size - 11 + i % 3, b = i / 3
|
|
191
|
+
setFunction(a, b, dark)
|
|
192
|
+
setFunction(b, a, dark)
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// MARK: Data
|
|
197
|
+
|
|
198
|
+
/// The data codewords split into blocks, each followed by its
|
|
199
|
+
/// Reed-Solomon error correction, interleaved.
|
|
200
|
+
private func interleavedWithErrorCorrection(_ data: [UInt8]) -> [UInt8] {
|
|
201
|
+
let blocks = Self.blockCount[correction.rawValue][version]
|
|
202
|
+
let eccLength = Self.eccPerBlock[correction.rawValue][version]
|
|
203
|
+
let raw = Self.numRawDataModules(version: version) / 8
|
|
204
|
+
let shortBlocks = blocks - raw % blocks
|
|
205
|
+
let shortLength = raw / blocks
|
|
206
|
+
let divisor = Self.reedSolomonDivisor(degree: eccLength)
|
|
207
|
+
var split: [[UInt8]] = []
|
|
208
|
+
var offset = 0
|
|
209
|
+
for i in 0..<blocks {
|
|
210
|
+
let length = shortLength - eccLength + (i < shortBlocks ? 0 : 1)
|
|
211
|
+
var block = Array(data[offset..<(offset + length)])
|
|
212
|
+
offset += length
|
|
213
|
+
let ecc = Self.reedSolomonRemainder(block, divisor: divisor)
|
|
214
|
+
if i < shortBlocks { block.append(0) } // a placeholder, skipped below
|
|
215
|
+
split.append(block + ecc)
|
|
216
|
+
}
|
|
217
|
+
var result: [UInt8] = []
|
|
218
|
+
result.reserveCapacity(raw)
|
|
219
|
+
for i in 0..<split[0].count {
|
|
220
|
+
for (j, block) in split.enumerated() where i != shortLength - eccLength || j >= shortBlocks {
|
|
221
|
+
result.append(block[i])
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return result
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Two columns at a time from the right, zigzagging up and down, skipping
|
|
228
|
+
/// the timing column and the function patterns.
|
|
229
|
+
private mutating func drawCodewords(_ data: [UInt8]) {
|
|
230
|
+
var index = 0
|
|
231
|
+
var right = size - 1
|
|
232
|
+
while right >= 1 {
|
|
233
|
+
if right == 6 { right = 5 }
|
|
234
|
+
for vertical in 0..<size {
|
|
235
|
+
for j in 0..<2 {
|
|
236
|
+
let x = right - j
|
|
237
|
+
let upward = (right + 1) & 2 == 0
|
|
238
|
+
let y = upward ? size - 1 - vertical : vertical
|
|
239
|
+
if !isFunction[y * size + x], index < data.count * 8 {
|
|
240
|
+
modules[y * size + x] = (data[index >> 3] >> (7 - UInt8(index & 7))) & 1 == 1
|
|
241
|
+
index += 1
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
right -= 2
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
private mutating func applyMask(_ mask: Int) {
|
|
250
|
+
for y in 0..<size {
|
|
251
|
+
for x in 0..<size where !isFunction[y * size + x] {
|
|
252
|
+
let invert: Bool
|
|
253
|
+
switch mask {
|
|
254
|
+
case 0: invert = (x + y) % 2 == 0
|
|
255
|
+
case 1: invert = y % 2 == 0
|
|
256
|
+
case 2: invert = x % 3 == 0
|
|
257
|
+
case 3: invert = (x + y) % 3 == 0
|
|
258
|
+
case 4: invert = (x / 3 + y / 2) % 2 == 0
|
|
259
|
+
case 5: invert = x * y % 2 + x * y % 3 == 0
|
|
260
|
+
case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0
|
|
261
|
+
default: invert = ((x + y) % 2 + x * y % 3) % 2 == 0
|
|
262
|
+
}
|
|
263
|
+
if invert { modules[y * size + x].toggle() }
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// MARK: Penalty
|
|
269
|
+
|
|
270
|
+
/// The mask selection score: runs of five or more, 2×2 blocks, finder-like
|
|
271
|
+
/// patterns and the dark/light balance.
|
|
272
|
+
func penaltyScore() -> Int {
|
|
273
|
+
var result = 0
|
|
274
|
+
for horizontal in [true, false] {
|
|
275
|
+
for a in 0..<size {
|
|
276
|
+
var runColor = false
|
|
277
|
+
var run = 0
|
|
278
|
+
var history = [Int](repeating: 0, count: 7)
|
|
279
|
+
for b in 0..<size {
|
|
280
|
+
let dark = horizontal ? module(x: b, y: a) : module(x: a, y: b)
|
|
281
|
+
if dark == runColor {
|
|
282
|
+
run += 1
|
|
283
|
+
if run == 5 { result += 3 } else if run > 5 { result += 1 }
|
|
284
|
+
} else {
|
|
285
|
+
addHistory(run, &history)
|
|
286
|
+
if !runColor { result += finderLikePatterns(history) * 40 }
|
|
287
|
+
runColor = dark
|
|
288
|
+
run = 1
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// The light border closes the last run.
|
|
292
|
+
if runColor {
|
|
293
|
+
addHistory(run, &history)
|
|
294
|
+
run = 0
|
|
295
|
+
}
|
|
296
|
+
addHistory(run + size, &history)
|
|
297
|
+
result += finderLikePatterns(history) * 40
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
for y in 0..<(size - 1) {
|
|
301
|
+
for x in 0..<(size - 1) {
|
|
302
|
+
let color = module(x: x, y: y)
|
|
303
|
+
if color == module(x: x + 1, y: y), color == module(x: x, y: y + 1), color == module(x: x + 1, y: y + 1) { result += 3 }
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
let dark = modules.reduce(0) { $0 + ($1 ? 1 : 0) }
|
|
307
|
+
let total = size * size
|
|
308
|
+
let k = (abs(dark * 20 - total * 10) + total - 1) / total - 1
|
|
309
|
+
result += k * 10
|
|
310
|
+
return result
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
private func addHistory(_ run: Int, _ history: inout [Int]) {
|
|
314
|
+
// The light border before the first run.
|
|
315
|
+
let length = history[0] == 0 ? run + size : run
|
|
316
|
+
history.removeLast()
|
|
317
|
+
history.insert(length, at: 0)
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
private func finderLikePatterns(_ history: [Int]) -> Int {
|
|
321
|
+
let n = history[1]
|
|
322
|
+
let core = n > 0 && history[2] == n && history[3] == n * 3 && history[4] == n && history[5] == n
|
|
323
|
+
return (core && history[0] >= n * 4 && history[6] >= n ? 1 : 0) + (core && history[6] >= n * 4 && history[0] >= n ? 1 : 0)
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// MARK: Tables and arithmetic
|
|
327
|
+
|
|
328
|
+
static func numRawDataModules(version: Int) -> Int {
|
|
329
|
+
var result = (16 * version + 128) * version + 64
|
|
330
|
+
if version >= 2 {
|
|
331
|
+
let alignments = version / 7 + 2
|
|
332
|
+
result -= (25 * alignments - 10) * alignments - 55
|
|
333
|
+
if version >= 7 { result -= 36 }
|
|
334
|
+
}
|
|
335
|
+
return result
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
static func numDataCodewords(version: Int, correction: ErrorCorrection) -> Int {
|
|
339
|
+
numRawDataModules(version: version) / 8
|
|
340
|
+
- eccPerBlock[correction.rawValue][version] * blockCount[correction.rawValue][version]
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/// Error correction codewords per block, by level (L, M, Q, H) and version (index 0 unused).
|
|
344
|
+
static let eccPerBlock: [[Int]] = [
|
|
345
|
+
[-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
346
|
+
[-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],
|
|
347
|
+
[-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
348
|
+
[-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],
|
|
349
|
+
]
|
|
350
|
+
|
|
351
|
+
/// Error correction blocks, by level (L, M, Q, H) and version (index 0 unused).
|
|
352
|
+
static let blockCount: [[Int]] = [
|
|
353
|
+
[-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],
|
|
354
|
+
[-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],
|
|
355
|
+
[-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],
|
|
356
|
+
[-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81],
|
|
357
|
+
]
|
|
358
|
+
|
|
359
|
+
/// The generator polynomial's coefficients for `degree` codewords, highest first.
|
|
360
|
+
static func reedSolomonDivisor(degree: Int) -> [UInt8] {
|
|
361
|
+
var result = [UInt8](repeating: 0, count: degree)
|
|
362
|
+
result[degree - 1] = 1
|
|
363
|
+
var root: UInt8 = 1
|
|
364
|
+
for _ in 0..<degree {
|
|
365
|
+
for j in 0..<degree {
|
|
366
|
+
result[j] = multiply(result[j], root)
|
|
367
|
+
if j + 1 < degree { result[j] ^= result[j + 1] }
|
|
368
|
+
}
|
|
369
|
+
root = multiply(root, 0x02)
|
|
370
|
+
}
|
|
371
|
+
return result
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
static func reedSolomonRemainder(_ data: [UInt8], divisor: [UInt8]) -> [UInt8] {
|
|
375
|
+
var result = [UInt8](repeating: 0, count: divisor.count)
|
|
376
|
+
for byte in data {
|
|
377
|
+
let factor = byte ^ result.removeFirst()
|
|
378
|
+
result.append(0)
|
|
379
|
+
for i in 0..<result.count { result[i] ^= multiply(divisor[i], factor) }
|
|
380
|
+
}
|
|
381
|
+
return result
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
/// Multiplication in GF(2^8) modulo x^8 + x^4 + x^3 + x^2 + 1.
|
|
385
|
+
static func multiply(_ x: UInt8, _ y: UInt8) -> UInt8 {
|
|
386
|
+
var z = 0
|
|
387
|
+
for i in stride(from: 7, through: 0, by: -1) {
|
|
388
|
+
z = (z << 1) ^ ((z >> 7) * 0x11D)
|
|
389
|
+
z ^= ((Int(y) >> i) & 1) * Int(x)
|
|
390
|
+
}
|
|
391
|
+
return UInt8(z)
|
|
392
|
+
}
|
|
393
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Core Location's value types, without location services: a coordinate is a
|
|
2
|
+
// plain latitude and longitude. No protocol conformances are added, as on
|
|
3
|
+
// Apple platforms (where it is a C struct), so an app's own
|
|
4
|
+
// `extension CLLocationCoordinate2D: Equatable` or `Codable` still compiles.
|
|
5
|
+
|
|
6
|
+
public typealias CLLocationDegrees = Double
|
|
7
|
+
public typealias CLLocationDistance = Double
|
|
8
|
+
|
|
9
|
+
public struct CLLocationCoordinate2D: Sendable {
|
|
10
|
+
public var latitude: CLLocationDegrees
|
|
11
|
+
public var longitude: CLLocationDegrees
|
|
12
|
+
|
|
13
|
+
public init() {
|
|
14
|
+
latitude = 0
|
|
15
|
+
longitude = 0
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public init(latitude: CLLocationDegrees, longitude: CLLocationDegrees) {
|
|
19
|
+
self.latitude = latitude
|
|
20
|
+
self.longitude = longitude
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/// Whether `coordinate` is a valid latitude and longitude.
|
|
25
|
+
public func CLLocationCoordinate2DIsValid(_ coordinate: CLLocationCoordinate2D) -> Bool {
|
|
26
|
+
(-90...90).contains(coordinate.latitude) && (-180...180).contains(coordinate.longitude)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// An invalid coordinate, as Core Location returns when it has none.
|
|
30
|
+
public let kCLLocationCoordinate2DInvalid = CLLocationCoordinate2D(latitude: -180, longitude: -180)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// `CLLocation`: a coordinate with its altitude, accuracy and time, as apps
|
|
2
|
+
// keep one for a place (Food Truck's parking spots). There are no location
|
|
3
|
+
// services, so nothing produces one but the app. Like Apple's (an `NSObject`
|
|
4
|
+
// that does not override `isEqual`), two locations are equal when they are
|
|
5
|
+
// the same object.
|
|
6
|
+
|
|
7
|
+
#if canImport(WASILibc)
|
|
8
|
+
import WASILibc
|
|
9
|
+
#elseif canImport(Glibc)
|
|
10
|
+
import Glibc
|
|
11
|
+
#elseif canImport(Musl)
|
|
12
|
+
import Musl
|
|
13
|
+
#elseif canImport(Darwin)
|
|
14
|
+
import Darwin
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
public typealias CLLocationAccuracy = Double
|
|
18
|
+
public typealias CLLocationSpeed = Double
|
|
19
|
+
public typealias CLLocationDirection = Double
|
|
20
|
+
|
|
21
|
+
open class CLLocation: Hashable, @unchecked Sendable {
|
|
22
|
+
public let coordinate: CLLocationCoordinate2D
|
|
23
|
+
public let altitude: CLLocationDistance
|
|
24
|
+
public let horizontalAccuracy: CLLocationAccuracy
|
|
25
|
+
public let verticalAccuracy: CLLocationAccuracy
|
|
26
|
+
public let course: CLLocationDirection
|
|
27
|
+
public let speed: CLLocationSpeed
|
|
28
|
+
/// Seconds since 1970 (`timestamp` is Foundation's `Date`, which this module does not import).
|
|
29
|
+
public let _timestamp: Double
|
|
30
|
+
|
|
31
|
+
public init(latitude: CLLocationDegrees, longitude: CLLocationDegrees) {
|
|
32
|
+
coordinate = CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
|
|
33
|
+
altitude = 0
|
|
34
|
+
horizontalAccuracy = 0
|
|
35
|
+
verticalAccuracy = -1
|
|
36
|
+
course = -1
|
|
37
|
+
speed = -1
|
|
38
|
+
_timestamp = 0
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
public init(coordinate: CLLocationCoordinate2D, altitude: CLLocationDistance,
|
|
42
|
+
horizontalAccuracy: CLLocationAccuracy, verticalAccuracy: CLLocationAccuracy,
|
|
43
|
+
course: CLLocationDirection = -1, speed: CLLocationSpeed = -1, timestamp: Double = 0) {
|
|
44
|
+
self.coordinate = coordinate
|
|
45
|
+
self.altitude = altitude
|
|
46
|
+
self.horizontalAccuracy = horizontalAccuracy
|
|
47
|
+
self.verticalAccuracy = verticalAccuracy
|
|
48
|
+
self.course = course
|
|
49
|
+
self.speed = speed
|
|
50
|
+
_timestamp = timestamp
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// The great-circle distance to `location`, in meters.
|
|
54
|
+
public func distance(from location: CLLocation) -> CLLocationDistance {
|
|
55
|
+
let radians = Double.pi / 180
|
|
56
|
+
let lat1 = coordinate.latitude * radians, lat2 = location.coordinate.latitude * radians
|
|
57
|
+
let dLat = lat2 - lat1
|
|
58
|
+
let dLon = (location.coordinate.longitude - coordinate.longitude) * radians
|
|
59
|
+
let a = sin(dLat / 2) * sin(dLat / 2) + cos(lat1) * cos(lat2) * sin(dLon / 2) * sin(dLon / 2)
|
|
60
|
+
return 6_371_000 * 2 * atan2(a.squareRoot(), (1 - a).squareRoot())
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public static func == (lhs: CLLocation, rhs: CLLocation) -> Bool { lhs === rhs }
|
|
64
|
+
public func hash(into hasher: inout Hasher) { hasher.combine(ObjectIdentifier(self)) }
|
|
65
|
+
}
|