├── .gitattributes
├── .gitignore
├── LICENSE
├── Package.swift
├── README.md
├── Sources
├── .swiftlint.yml
├── Abra
│ ├── .swiftlint.yml
│ ├── Abra.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── Abra iOS (debug.optimized).xcscheme
│ │ │ ├── Abra iOS.xcscheme
│ │ │ ├── Abra macOS (debug.optimized).xcscheme
│ │ │ └── Abra macOS.xcscheme
│ ├── Abra
│ │ ├── Shared
│ │ │ ├── AbraApp.swift
│ │ │ ├── AbraCaptureMediaProvider.swift
│ │ │ ├── AbraClientPeer.swift
│ │ │ ├── AbraLogDevice.swift
│ │ │ ├── AbraServerPeer.swift
│ │ │ ├── ActionButton.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── AppIcon-1024.png
│ │ │ │ │ ├── AppIcon-1025.png
│ │ │ │ │ ├── AppIcon-120.png
│ │ │ │ │ ├── AppIcon-121.png
│ │ │ │ │ ├── AppIcon-128.png
│ │ │ │ │ ├── AppIcon-152.png
│ │ │ │ │ ├── AppIcon-16.png
│ │ │ │ │ ├── AppIcon-167.png
│ │ │ │ │ ├── AppIcon-180.png
│ │ │ │ │ ├── AppIcon-20.png
│ │ │ │ │ ├── AppIcon-256.png
│ │ │ │ │ ├── AppIcon-257.png
│ │ │ │ │ ├── AppIcon-29.png
│ │ │ │ │ ├── AppIcon-32.png
│ │ │ │ │ ├── AppIcon-33.png
│ │ │ │ │ ├── AppIcon-40.png
│ │ │ │ │ ├── AppIcon-41.png
│ │ │ │ │ ├── AppIcon-42.png
│ │ │ │ │ ├── AppIcon-512.png
│ │ │ │ │ ├── AppIcon-513.png
│ │ │ │ │ ├── AppIcon-58.png
│ │ │ │ │ ├── AppIcon-59.png
│ │ │ │ │ ├── AppIcon-60.png
│ │ │ │ │ ├── AppIcon-64.png
│ │ │ │ │ ├── AppIcon-80.png
│ │ │ │ │ ├── AppIcon-81.png
│ │ │ │ │ ├── AppIcon-87.png
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ └── Launch.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── Launch.png
│ │ │ ├── BouncingTapGesture.swift
│ │ │ ├── CameraListView.swift
│ │ │ ├── Card.swift
│ │ │ ├── Card.xcassets
│ │ │ │ ├── AccentColor.colorset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── Contents.json
│ │ │ │ ├── black10.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black10.png
│ │ │ │ │ ├── black10@2x.png
│ │ │ │ │ └── black10@3x.png
│ │ │ │ ├── black2.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black2.png
│ │ │ │ │ ├── black2@2x.png
│ │ │ │ │ └── black2@3x.png
│ │ │ │ ├── black3.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black3.png
│ │ │ │ │ ├── black3@2x.png
│ │ │ │ │ └── black3@3x.png
│ │ │ │ ├── black4.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black4.png
│ │ │ │ │ ├── black4@2x.png
│ │ │ │ │ └── black4@3x.png
│ │ │ │ ├── black5.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black5.png
│ │ │ │ │ ├── black5@2x.png
│ │ │ │ │ └── black5@3x.png
│ │ │ │ ├── black6.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black6.png
│ │ │ │ │ ├── black6@2x.png
│ │ │ │ │ └── black6@3x.png
│ │ │ │ ├── black7.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black7.png
│ │ │ │ │ ├── black7@2x.png
│ │ │ │ │ └── black7@3x.png
│ │ │ │ ├── black8.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black8.png
│ │ │ │ │ ├── black8@2x.png
│ │ │ │ │ └── black8@3x.png
│ │ │ │ ├── black9.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── black9.png
│ │ │ │ │ ├── black9@2x.png
│ │ │ │ │ └── black9@3x.png
│ │ │ │ ├── blackace.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── blackace.png
│ │ │ │ │ ├── blackace@2x.png
│ │ │ │ │ └── blackace@3x.png
│ │ │ │ ├── blackjack.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── blackjack.png
│ │ │ │ │ ├── blackjack@2x.png
│ │ │ │ │ └── blackjack@3x.png
│ │ │ │ ├── blackking.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── blackking.png
│ │ │ │ │ ├── blackking@2x.png
│ │ │ │ │ └── blackking@3x.png
│ │ │ │ ├── blackqueen.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── blackqueen.png
│ │ │ │ │ ├── blackqueen@2x.png
│ │ │ │ │ └── blackqueen@3x.png
│ │ │ │ ├── cardad1.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── cardad1.png
│ │ │ │ │ ├── cardad1@2x.png
│ │ │ │ │ └── cardad1@3x.png
│ │ │ │ ├── cardad2.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── cardad2.png
│ │ │ │ │ ├── cardad2@2x.png
│ │ │ │ │ └── cardad2@3x.png
│ │ │ │ ├── cardjokerbw.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── cardjokerbw.png
│ │ │ │ │ ├── cardjokerbw@2x.png
│ │ │ │ │ └── cardjokerbw@3x.png
│ │ │ │ ├── cardjokercolor.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── cardjokercolor.png
│ │ │ │ │ ├── cardjokercolor@2x.png
│ │ │ │ │ └── cardjokercolor@3x.png
│ │ │ │ ├── club.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── club.png
│ │ │ │ │ ├── club@2x.png
│ │ │ │ │ └── club@3x.png
│ │ │ │ ├── diamond.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── diamond.png
│ │ │ │ │ ├── diamond@2x.png
│ │ │ │ │ └── diamond@3x.png
│ │ │ │ ├── facejackclub.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facejackclub.png
│ │ │ │ │ ├── facejackclub@2x.png
│ │ │ │ │ └── facejackclub@3x.png
│ │ │ │ ├── facejackdiamond.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facejackdiamond.png
│ │ │ │ │ ├── facejackdiamond@2x.png
│ │ │ │ │ └── facejackdiamond@3x.png
│ │ │ │ ├── facejackheart.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facejackheart.png
│ │ │ │ │ ├── facejackheart@2x.png
│ │ │ │ │ └── facejackheart@3x.png
│ │ │ │ ├── facejackspade.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facejackspade.png
│ │ │ │ │ ├── facejackspade@2x.png
│ │ │ │ │ └── facejackspade@3x.png
│ │ │ │ ├── facekingclub.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facekingclub.png
│ │ │ │ │ ├── facekingclub@2x.png
│ │ │ │ │ └── facekingclub@3x.png
│ │ │ │ ├── facekingdiamond.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facekingdiamond.png
│ │ │ │ │ ├── facekingdiamond@2x.png
│ │ │ │ │ └── facekingdiamond@3x.png
│ │ │ │ ├── facekingheart.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facekingheart.png
│ │ │ │ │ ├── facekingheart@2x.png
│ │ │ │ │ └── facekingheart@3x.png
│ │ │ │ ├── facekingspade.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facekingspade.png
│ │ │ │ │ ├── facekingspade@2x.png
│ │ │ │ │ └── facekingspade@3x.png
│ │ │ │ ├── facequeenclub.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facequeenclub.png
│ │ │ │ │ ├── facequeenclub@2x.png
│ │ │ │ │ └── facequeenclub@3x.png
│ │ │ │ ├── facequeendiamond.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facequeendiamond.png
│ │ │ │ │ ├── facequeendiamond@2x.png
│ │ │ │ │ └── facequeendiamond@3x.png
│ │ │ │ ├── facequeenheart.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facequeenheart.png
│ │ │ │ │ ├── facequeenheart@2x.png
│ │ │ │ │ └── facequeenheart@3x.png
│ │ │ │ ├── facequeenspade.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── facequeenspade.png
│ │ │ │ │ ├── facequeenspade@2x.png
│ │ │ │ │ └── facequeenspade@3x.png
│ │ │ │ ├── heart.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── heart.png
│ │ │ │ │ ├── heart@2x.png
│ │ │ │ │ └── heart@3x.png
│ │ │ │ ├── red10.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red10.png
│ │ │ │ │ ├── red10@2x.png
│ │ │ │ │ └── red10@3x.png
│ │ │ │ ├── red2.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red2.png
│ │ │ │ │ ├── red2@2x.png
│ │ │ │ │ └── red2@3x.png
│ │ │ │ ├── red3.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red3.png
│ │ │ │ │ ├── red3@2x.png
│ │ │ │ │ └── red3@3x.png
│ │ │ │ ├── red4.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red4.png
│ │ │ │ │ ├── red4@2x.png
│ │ │ │ │ └── red4@3x.png
│ │ │ │ ├── red5.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red5.png
│ │ │ │ │ ├── red5@2x.png
│ │ │ │ │ └── red5@3x.png
│ │ │ │ ├── red6.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red6.png
│ │ │ │ │ ├── red6@2x.png
│ │ │ │ │ └── red6@3x.png
│ │ │ │ ├── red7.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red7.png
│ │ │ │ │ ├── red7@2x.png
│ │ │ │ │ └── red7@3x.png
│ │ │ │ ├── red8.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red8.png
│ │ │ │ │ ├── red8@2x.png
│ │ │ │ │ └── red8@3x.png
│ │ │ │ ├── red9.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── red9.png
│ │ │ │ │ ├── red9@2x.png
│ │ │ │ │ └── red9@3x.png
│ │ │ │ ├── redace.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── redace.png
│ │ │ │ │ ├── redace@2x.png
│ │ │ │ │ └── redace@3x.png
│ │ │ │ ├── redjack.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── redjack.png
│ │ │ │ │ ├── redjack@2x.png
│ │ │ │ │ └── redjack@3x.png
│ │ │ │ ├── redking.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── redking.png
│ │ │ │ │ ├── redking@2x.png
│ │ │ │ │ └── redking@3x.png
│ │ │ │ ├── redqueen.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── redqueen.png
│ │ │ │ │ ├── redqueen@2x.png
│ │ │ │ │ └── redqueen@3x.png
│ │ │ │ └── spade.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── spade.png
│ │ │ │ │ ├── spade@2x.png
│ │ │ │ │ └── spade@3x.png
│ │ │ ├── CardTestData.swift
│ │ │ ├── CardView.swift
│ │ │ ├── ColorExtensions.swift
│ │ │ ├── ConfidenceGaugeView.swift
│ │ │ ├── DeckView.swift
│ │ │ ├── FannedDeck.swift
│ │ │ ├── FormatListView.swift
│ │ │ ├── InfoView.swift
│ │ │ ├── LogView.swift
│ │ │ ├── MenuView.swift
│ │ │ ├── PlatformBackgroundView.swift
│ │ │ ├── Preferences.swift
│ │ │ ├── ScanResultsView.swift
│ │ │ ├── ScannerView.swift
│ │ │ ├── ServerConfig.swift
│ │ │ ├── SettingsView.swift
│ │ │ ├── UIState.swift
│ │ │ ├── ViewExtensions.swift
│ │ │ └── ViewportView.swift
│ │ ├── iOS
│ │ │ ├── Abra--iOS--Info.plist
│ │ │ ├── ServerConfigView.swift
│ │ │ └── iOS.entitlements
│ │ └── macOS
│ │ │ ├── ServerConfigView.swift
│ │ │ └── macOS.entitlements
│ ├── Art
│ │ └── icon
│ │ │ ├── AppIcon-iOS.psd
│ │ │ ├── AppIcon-macOS.psd
│ │ │ ├── Launch.psd
│ │ │ ├── generate-iOS.sh
│ │ │ └── generate-macOS.sh
│ └── Reference
│ │ ├── abra-design.txt
│ │ └── abra-screen.txt
├── CardBars
│ ├── .swiftlint.yml
│ ├── CardBars.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── CardBars.xcscheme
│ └── CardBars
│ │ ├── Assets.xcassets
│ │ └── AppIcon.appiconset
│ │ │ ├── CardBars-icon.png
│ │ │ └── Contents.json
│ │ ├── BarView.swift
│ │ ├── Base.lproj
│ │ └── Main.storyboard
│ │ ├── CardBars.entitlements
│ │ ├── CardBarsAppDelegate.swift
│ │ ├── CardBarsViewController.swift
│ │ └── Info.plist
├── Minion
│ ├── .swiftlint.yml
│ ├── Minion.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── Minion.xcscheme
│ │ │ └── MinionIOS.xcscheme
│ └── Minion
│ │ ├── Array.swift
│ │ ├── Atomic.swift
│ │ ├── CGFloat.swift
│ │ ├── CGPoint.swift
│ │ ├── Codable.swift
│ │ ├── CodecFactory.swift
│ │ ├── Data.swift
│ │ ├── Decodable.swift
│ │ ├── Dictionary.swift
│ │ ├── DiscoveryAdvertiser.swift
│ │ ├── DiscoveryListener.swift
│ │ ├── Encodable.swift
│ │ ├── EntropyCodec.swift
│ │ ├── ImageError.swift
│ │ ├── Info.plist
│ │ ├── Int.swift
│ │ ├── Ipv4Address.swift
│ │ ├── Ipv4Interface.swift
│ │ ├── Ipv4SocketAddress.swift
│ │ ├── LogDevice.swift
│ │ ├── LogDeviceConsole.swift
│ │ ├── LogDeviceFile.swift
│ │ ├── LogDeviceGeneric.swift
│ │ ├── LogLevel.swift
│ │ ├── Logger.swift
│ │ ├── Messages.swift
│ │ ├── Minion.h
│ │ ├── NSBitmapImageRep.swift
│ │ ├── NSImage.swift
│ │ ├── PThreadMutex.swift
│ │ ├── Packet.swift
│ │ ├── PathString.swift
│ │ ├── Peer.swift
│ │ ├── Random.swift
│ │ ├── Server.swift
│ │ ├── Sha256.swift
│ │ ├── Socket.swift
│ │ ├── String.swift
│ │ ├── UInt32.swift
│ │ ├── UdpListener.swift
│ │ ├── UnsafeMutablePointer.swift
│ │ ├── UnsafePointer.swift
│ │ ├── UnsafeRawPointer.swift
│ │ ├── WaitWorker.swift
│ │ ├── sockaddr.swift
│ │ └── sockaddr_in.swift
├── NativeTasks
│ ├── NativeTasks.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── NativeTasks.xcscheme
│ │ │ └── NativeTasksIOS.xcscheme
│ └── NativeTasks
│ │ ├── CircularImageBuffer.h
│ │ ├── FastImage.cpp
│ │ ├── FastImage.h
│ │ ├── Logger.cpp
│ │ ├── Logger.h
│ │ ├── Mutex.h
│ │ ├── NativeInterface.cpp
│ │ ├── SecDescriptor.cpp
│ │ ├── SecDescriptor.h
│ │ ├── VcosException.h
│ │ ├── VideoCapture.cpp
│ │ ├── VideoCapture.h
│ │ ├── VideoException.h
│ │ ├── VideoParameters.cpp
│ │ ├── VideoParameters.h
│ │ ├── include
│ │ ├── NativeInterface.h
│ │ ├── NativeTaskTypes.h
│ │ ├── NativeTasks.h
│ │ └── NativeTasksIOS.h
│ │ └── info.plist
├── Seer
│ ├── .swiftlint.yml
│ ├── Seer.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── Seer (debug.optimized).xcscheme
│ │ │ ├── Seer.xcscheme
│ │ │ ├── SeerIOS (debug.optimized).xcscheme
│ │ │ └── SeerIOS.xcscheme
│ ├── Seer
│ │ ├── AnalysisResult.swift
│ │ ├── Arithmeticable.swift
│ │ ├── CodeDefinition.swift
│ │ ├── Config.swift
│ │ ├── Debug.swift
│ │ ├── Deck.swift
│ │ ├── DeckFormat.swift
│ │ ├── DeckLocation.swift
│ │ ├── DeckMatchResult.swift
│ │ ├── DeckSearch.swift
│ │ ├── DecodeResult.swift
│ │ ├── Decoder.swift
│ │ ├── Double.swift
│ │ ├── Edge.swift
│ │ ├── EdgeDetection.swift
│ │ ├── FixedPoint.swift
│ │ ├── Float.swift
│ │ ├── HammingDistance.swift
│ │ ├── History.swift
│ │ ├── IVector-Imaging.swift
│ │ ├── IVector.swift
│ │ ├── ImageBuffer-Copy.swift
│ │ ├── ImageBuffer-Files.swift
│ │ ├── ImageBuffer-ImageProcessing.swift
│ │ ├── ImageBuffer.swift
│ │ ├── Info.plist
│ │ ├── Int.swift
│ │ ├── Int64.swift
│ │ ├── Line.swift
│ │ ├── MarkDefinition.swift
│ │ ├── MarkLine.swift
│ │ ├── MarkLines.swift
│ │ ├── MarkLocation.swift
│ │ ├── MarkType.swift
│ │ ├── MediaConsumer.swift
│ │ ├── MediaProvider.swift
│ │ ├── MediaViewportProvider.swift
│ │ ├── MinMax.swift
│ │ ├── Numeric.swift
│ │ ├── PausableTime.swift
│ │ ├── Peak.swift
│ │ ├── PerfTimer.swift
│ │ ├── Rect-Imaging.swift
│ │ ├── Rect.swift
│ │ ├── RenderView.swift
│ │ ├── ResultStats.swift
│ │ ├── ResultValidator.swift
│ │ ├── RollingValues.swift
│ │ ├── SampleLine.swift
│ │ ├── ScanManager.swift
│ │ ├── ScannedCard.swift
│ │ ├── SearchLines.swift
│ │ ├── SearchResult.swift
│ │ ├── Seer.h
│ │ ├── SeerMessages.swift
│ │ ├── SeerServerPeer.swift
│ │ ├── StaticMatrix.swift
│ │ ├── UnsafeBidirectionalArray.swift
│ │ ├── UnsafeMutableArray.swift
│ │ ├── ValidationResult.swift
│ │ └── Vector.swift
│ └── SystemModules
│ │ └── C_libpng.build
│ │ ├── cheader.h
│ │ └── module.modulemap
├── Steve
│ ├── .swiftlint.yml
│ ├── Steve.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── Steve (debug.optimized).xcscheme
│ │ │ └── Steve.xcscheme
│ └── Steve
│ │ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ ├── Contents.json
│ │ │ ├── icon-1024.png
│ │ │ ├── icon-128.png
│ │ │ ├── icon-16.png
│ │ │ ├── icon-256.png
│ │ │ ├── icon-257.png
│ │ │ ├── icon-32.png
│ │ │ ├── icon-33.png
│ │ │ ├── icon-512.png
│ │ │ ├── icon-513.png
│ │ │ └── icon-64.png
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ ├── Menus.swift
│ │ ├── Reference
│ │ ├── inter6.quick-random-movements.mp4
│ │ ├── inter6.slow-in-out.mp4
│ │ └── mds12-56b.mp4
│ │ ├── Steve.entitlements
│ │ ├── SteveAppDelegate.swift
│ │ ├── SteveFrameView.swift
│ │ ├── SteveMediaProvider.swift
│ │ ├── SteveMediaViewportProvider.swift
│ │ ├── SteveServerPeer.swift
│ │ ├── SteveViewController.swift
│ │ └── SteveWindow.swift
├── magic.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── mdscodes
│ ├── .swiftlint.yml
│ ├── mdscodes.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ ├── mdscodes (debug.optimized).xcscheme
│ │ │ └── mdscodes.xcscheme
│ └── mdscodes
│ │ ├── MDSCodes.swift
│ │ ├── main.swift
│ │ └── mdscodes.entitlements
└── whisper
│ ├── .swiftlint.yml
│ ├── SystemModules
│ ├── C_AAlib.build
│ │ ├── cheader.h
│ │ └── module.modulemap
│ ├── C_Libav.build
│ │ ├── cheader.h
│ │ └── module.modulemap
│ └── C_ncurses.build
│ │ ├── cheader.h
│ │ └── module.modulemap
│ ├── whisper.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ ├── whisper (debug.optimized).xcscheme
│ │ └── whisper.xcscheme
│ └── whisper
│ ├── CommandLineParser.swift
│ ├── KeyInput.swift
│ ├── LogDeviceTextUi.swift
│ ├── Signals.swift
│ ├── TextUi.swift
│ ├── VideoDecode.swift
│ ├── VideoDecodeError.swift
│ ├── Whisper.swift
│ ├── WhisperCaptureMediaProvider.swift
│ ├── WhisperMediaViewportProvider.swift
│ ├── WhisperServerPeer.swift
│ ├── WhisperVideoMediaProvider.swift
│ ├── main.swift
│ └── whisper.entitlements
├── build
├── decks.json
├── docs
├── DEPS.linux
├── _img-master
│ ├── intro-stages.psd
│ ├── shuffle.psd
│ ├── stamp-generation.psd
│ └── temporal_grid.psd
├── img
│ ├── abra_ipad.png
│ ├── contour-landmarks.png
│ ├── contour-mark-lines.png
│ ├── deck-locations.png
│ ├── deck_extents.png
│ ├── deck_under_ir.jpg
│ ├── device.png
│ ├── error-correction-viz.png
│ ├── ink_comparison.jpg
│ ├── intro-stages.png
│ ├── manual-marks.jpg
│ ├── manual-process.jpg
│ ├── marking-r&d.jpg
│ ├── mds18-54-rubberstamp.png
│ ├── search_grid.png
│ ├── search_line_edge_detect.png
│ ├── sharpness-graphs.png
│ ├── shuffle.png
│ ├── stamp-generation.png
│ ├── stamp-rig.jpg
│ ├── stamped-deck.jpg
│ ├── steve.png
│ ├── temporal_grid.png
│ ├── uv-ink.jpg
│ └── whisper.png
├── index.html
└── markdeep.min.js
├── todo.txt
├── tools
├── slint
└── swiftrevision
└── whisper.conf
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.ttf filter=lfs diff=lfs merge=lfs -text
2 | *.zip filter=lfs diff=lfs merge=lfs -text
3 | *.mp4 filter=lfs diff=lfs merge=lfs -text
4 | *.psd filter=lfs diff=lfs merge=lfs -text
5 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright 2022 Paul Nettle. All rights reserved.
2 |
3 | Redistribution and use in source and binary forms, with or without
4 | modification, are permitted provided that the following conditions are
5 | met:
6 |
7 | * Redistributions of source code must retain the above copyright
8 | notice, this list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright
11 | notice, this list of conditions and the following disclaimer in
12 | the documentation and/or other materials provided with the
13 | distribution.
14 |
15 | * Neither the name of Google nor the names of its contributors may
16 | be used to endorse or promote products derived from this software
17 | without specific prior written permission.
18 |
19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 | HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/Sources/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/Abra/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-1024.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-1025.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-1025.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-120.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-121.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-121.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-152.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-167.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-180.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-20.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-257.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-257.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-33.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-40.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-41.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-41.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-42.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-513.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-513.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-58.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-59.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-59.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-60.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-64.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-80.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-81.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-81.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/AppIcon.appiconset/AppIcon-87.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/Launch.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "scale" : "2x"
10 | },
11 | {
12 | "filename" : "Launch.png",
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | },
21 | "properties" : {
22 | "auto-scaling" : "auto"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Assets.xcassets/Launch.imageset/Launch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Assets.xcassets/Launch.imageset/Launch.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/BouncingTapGesture.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BouncingGapGesture.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 10/3/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import SwiftUI
14 |
15 | // swiftlint:disable type_name
16 |
17 | /// A modified version of `.onTapGesture` that applies a quick scaling "bouncing" spring animation, applied to the scale of the view.
18 | ///
19 | /// Use it like so:
20 | ///
21 | /// @State var scale: CGFloat = 1
22 | /// SomeView()
23 | /// .modifier(bouncingTapGesture(scale: $scale, bounceScale: 1.3) {
24 | /// // your code here to manage the tap gesture
25 | /// })
26 | ///
27 | /// Note that the provided block is executed at the peak of the bounce animation. If, for example the block alters an icon image,
28 | /// that transition will happen at the peak of the initial bounce before returning to the original size.
29 | struct bouncingTapGesture: ViewModifier {
30 | @State private var scale: CGFloat = 1
31 | var count: Int = 1
32 | var bounceScale: CGFloat
33 | var action: () -> Void = {}
34 |
35 | func body(content: Content) -> some View {
36 | content
37 | .scaleEffect(scale)
38 | .animation(.interpolatingSpring(mass: 1.0, stiffness: 500.0, damping: 10, initialVelocity: 10), value: scale)
39 | .onTapGesture(count: count) {
40 | scale = bounceScale
41 | DispatchQueue.main.asyncAfter(deadline: .now() + 0.09) {
42 | scale = 1
43 | action()
44 | }
45 | }
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "display-p3",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.125",
9 | "green" : "0.478",
10 | "red" : "0.859"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "light"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "display-p3",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.125",
27 | "green" : "0.478",
28 | "red" : "0.859"
29 | }
30 | },
31 | "idiom" : "universal"
32 | },
33 | {
34 | "appearances" : [
35 | {
36 | "appearance" : "luminosity",
37 | "value" : "dark"
38 | }
39 | ],
40 | "color" : {
41 | "color-space" : "display-p3",
42 | "components" : {
43 | "alpha" : "1.000",
44 | "blue" : "0.125",
45 | "green" : "0.478",
46 | "red" : "0.859"
47 | }
48 | },
49 | "idiom" : "universal"
50 | }
51 | ],
52 | "info" : {
53 | "author" : "xcode",
54 | "version" : 1
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black10.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black10@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black10@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/black10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/black10.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/black10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/black10@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/black10@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black10.imageset/black10@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black2@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black2@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/black2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/black2.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/black2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/black2@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/black2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black2.imageset/black2@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black3@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black3@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/black3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/black3.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/black3@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/black3@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/black3@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black3.imageset/black3@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black4.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black4@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black4@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/black4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/black4.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/black4@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/black4@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/black4@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black4.imageset/black4@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black5.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black5@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black5@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/black5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/black5.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/black5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/black5@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/black5@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black5.imageset/black5@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black6.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black6@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black6@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/black6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/black6.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/black6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/black6@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/black6@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black6.imageset/black6@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black7.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black7@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black7@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/black7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/black7.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/black7@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/black7@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/black7@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black7.imageset/black7@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black8.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black8@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black8@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/black8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/black8.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/black8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/black8@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/black8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black8.imageset/black8@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "black9.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "black9@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "black9@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/black9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/black9.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/black9@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/black9@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/black9@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/black9.imageset/black9@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "blackace.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "blackace@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "blackace@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/blackace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/blackace.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/blackace@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/blackace@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/blackace@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackace.imageset/blackace@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "blackjack.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "blackjack@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "blackjack@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/blackjack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/blackjack.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/blackjack@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/blackjack@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/blackjack@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackjack.imageset/blackjack@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "blackking.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "blackking@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "blackking@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/blackking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/blackking.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/blackking@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/blackking@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/blackking@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackking.imageset/blackking@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "blackqueen.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "blackqueen@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "blackqueen@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/blackqueen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/blackqueen.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/blackqueen@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/blackqueen@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/blackqueen@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/blackqueen.imageset/blackqueen@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cardad1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "cardad1@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "cardad1@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/cardad1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/cardad1.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/cardad1@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/cardad1@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/cardad1@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardad1.imageset/cardad1@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cardad2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "cardad2@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "cardad2@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/cardad2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/cardad2.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/cardad2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/cardad2@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/cardad2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardad2.imageset/cardad2@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cardjokerbw.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "cardjokerbw@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "cardjokerbw@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/cardjokerbw.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/cardjokerbw.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/cardjokerbw@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/cardjokerbw@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/cardjokerbw@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardjokerbw.imageset/cardjokerbw@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cardjokercolor.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "cardjokercolor@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "cardjokercolor@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/cardjokercolor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/cardjokercolor.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/cardjokercolor@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/cardjokercolor@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/cardjokercolor@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/cardjokercolor.imageset/cardjokercolor@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "club.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "club@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "club@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/club.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/club.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/club@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/club@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/club@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/club.imageset/club@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "diamond.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "diamond@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "diamond@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/diamond.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/diamond.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/diamond@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/diamond@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/diamond@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/diamond.imageset/diamond@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facejackclub.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facejackclub@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facejackclub@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/facejackclub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/facejackclub.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/facejackclub@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/facejackclub@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/facejackclub@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackclub.imageset/facejackclub@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facejackdiamond.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facejackdiamond@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facejackdiamond@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/facejackdiamond.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/facejackdiamond.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/facejackdiamond@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/facejackdiamond@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/facejackdiamond@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackdiamond.imageset/facejackdiamond@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facejackheart.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facejackheart@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facejackheart@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/facejackheart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/facejackheart.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/facejackheart@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/facejackheart@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/facejackheart@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackheart.imageset/facejackheart@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facejackspade.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facejackspade@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facejackspade@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/facejackspade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/facejackspade.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/facejackspade@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/facejackspade@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/facejackspade@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facejackspade.imageset/facejackspade@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facekingclub.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facekingclub@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facekingclub@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/facekingclub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/facekingclub.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/facekingclub@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/facekingclub@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/facekingclub@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingclub.imageset/facekingclub@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facekingdiamond.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facekingdiamond@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facekingdiamond@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/facekingdiamond.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/facekingdiamond.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/facekingdiamond@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/facekingdiamond@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/facekingdiamond@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingdiamond.imageset/facekingdiamond@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facekingheart.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facekingheart@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facekingheart@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/facekingheart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/facekingheart.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/facekingheart@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/facekingheart@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/facekingheart@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingheart.imageset/facekingheart@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facekingspade.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facekingspade@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facekingspade@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/facekingspade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/facekingspade.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/facekingspade@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/facekingspade@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/facekingspade@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facekingspade.imageset/facekingspade@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facequeenclub.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facequeenclub@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facequeenclub@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/facequeenclub.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/facequeenclub.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/facequeenclub@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/facequeenclub@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/facequeenclub@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenclub.imageset/facequeenclub@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facequeendiamond.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facequeendiamond@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facequeendiamond@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/facequeendiamond.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/facequeendiamond.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/facequeendiamond@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/facequeendiamond@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/facequeendiamond@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeendiamond.imageset/facequeendiamond@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facequeenheart.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facequeenheart@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facequeenheart@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/facequeenheart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/facequeenheart.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/facequeenheart@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/facequeenheart@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/facequeenheart@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenheart.imageset/facequeenheart@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "facequeenspade.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "facequeenspade@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "facequeenspade@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/facequeenspade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/facequeenspade.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/facequeenspade@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/facequeenspade@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/facequeenspade@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/facequeenspade.imageset/facequeenspade@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "heart.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "heart@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "heart@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/heart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/heart.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/heart@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/heart@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/heart@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/heart.imageset/heart@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red10.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red10@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red10@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/red10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/red10.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/red10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/red10@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/red10@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red10.imageset/red10@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red2.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red2@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red2@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/red2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/red2.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/red2@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/red2@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/red2@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red2.imageset/red2@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red3.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red3@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red3@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/red3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/red3.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/red3@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/red3@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/red3@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red3.imageset/red3@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red4.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red4@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red4@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/red4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/red4.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/red4@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/red4@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/red4@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red4.imageset/red4@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red5.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red5@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red5@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/red5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/red5.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/red5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/red5@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/red5@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red5.imageset/red5@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red6.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red6@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red6@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/red6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/red6.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/red6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/red6@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/red6@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red6.imageset/red6@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red7.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red7@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red7@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/red7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/red7.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/red7@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/red7@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/red7@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red7.imageset/red7@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red8.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red8@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red8@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/red8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/red8.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/red8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/red8@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/red8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red8.imageset/red8@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "red9.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "red9@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "red9@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/red9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/red9.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/red9@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/red9@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/red9@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/red9.imageset/red9@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "redace.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "redace@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "redace@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/redace.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/redace.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/redace@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/redace@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/redace@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redace.imageset/redace@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "redjack.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "redjack@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "redjack@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/redjack.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/redjack.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/redjack@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/redjack@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/redjack@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redjack.imageset/redjack@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "redking.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "redking@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "redking@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/redking.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/redking.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/redking@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/redking@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/redking@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redking.imageset/redking@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "redqueen.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "redqueen@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "redqueen@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/redqueen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/redqueen.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/redqueen@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/redqueen@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/redqueen@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/redqueen.imageset/redqueen@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "spade.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "spade@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "spade@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/spade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/spade.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/spade@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/spade@2x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/spade@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Abra/Abra/Shared/Card.xcassets/spade.imageset/spade@3x.png
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/CardTestData.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardTestData.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 9/15/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 | import SwiftUI
15 |
16 | struct CardTestData {
17 | static let kFaceCodes =
18 | ["AH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "TH", "JH", "QH", "KH",
19 | "AC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "TC", "JC", "QC", "KC",
20 | "KD", "QD", "JD", "TD", "9D", "8D", "7D", "6D", "5D", "4D", "3D", "2D", "AD",
21 | "KS", "QS", "JS", "TS", "9S", "8S", "7S", "6S", "5S", "4S", "3S", "2S", "AS",
22 | "X1", "X2", "Z1", "Z2"]
23 |
24 | static private var _cards = [Card]()
25 | static var cards: [Card]
26 | {
27 | if _cards.count == 0
28 | {
29 | for faceCode in CardTestData.kFaceCodes
30 | {
31 | var state: Card.State = []
32 | if faceCode == "JH" { state.insert(.missing) }
33 | if faceCode.prefix(1) == "5" { state.insert(.reversed) }
34 | if faceCode.prefix(1) == "T" || faceCode.prefix(1) == "3" { state.insert(.fragile) }
35 | _cards.append(Card(faceCode: faceCode, state: state)!)
36 | }
37 | }
38 |
39 | return _cards
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/ColorExtensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ColorExtensions.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 10/7/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import SwiftUI
14 |
15 | extension Color {
16 | static let brightRed: Color = Color(red: 1, green: 0, blue: 0)
17 | static let brightGreen: Color = Color(red: 0, green: 1, blue: 0)
18 | static let brightBlue: Color = Color(red: 0, green: 0, blue: 1)
19 |
20 | static let highlightedButtonColor: Color = Color(red: 0.6459, green: 0.7832, blue: 0.9358)
21 |
22 | static let darkGray: Color = Color(white: 0.2)
23 | static let mediumGray: Color = Color(white: 0.5)
24 | static let lightGray: Color = Color(white: 0.8)
25 | }
26 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/PlatformBackgroundView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PlatformBackgroundView.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 9/30/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import SwiftUI
14 |
15 | struct PlatformBackgroundView: View {
16 | @Environment(\.colorScheme) var colorScheme
17 | var content: () -> Content
18 |
19 | var body: some View {
20 | RoundedRectangle(cornerRadius: 8)
21 | .fill(colorScheme == .dark ? Color.darkGray : Color.lightGray)
22 | .shadow(color: .black.opacity(0.3), radius: 5, x: 8, y: 8)
23 | content()
24 | }
25 | }
26 |
27 | struct PlatformBackgroundView_Previews: PreviewProvider {
28 | static var previews: some View {
29 | PlatformBackgroundView {
30 | RoundedRectangle(cornerRadius: 8)
31 | .fill(Color.green)
32 | .padding()
33 | }
34 | PlatformBackgroundView {
35 | RoundedRectangle(cornerRadius: 8)
36 | .fill(Color.green)
37 | .padding()
38 | }
39 | .preferredColorScheme(.dark)
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/Preferences.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Preferences.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 10/5/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import SwiftUI
14 |
15 | internal class Preferences {
16 | // -----------------------------------------------------------------------------------------------------------------------------
17 | // Provide a singleton-like interface
18 | // -----------------------------------------------------------------------------------------------------------------------------
19 |
20 | private static var _shared: Preferences?
21 | internal static var shared: Preferences
22 | {
23 | get
24 | {
25 | if _shared == nil
26 | {
27 | _shared = Preferences()
28 | }
29 |
30 | return _shared!
31 | }
32 | set
33 | {
34 | assert(_shared != nil)
35 | }
36 | }
37 |
38 | var isLocalLoopback: Bool
39 | {
40 | return localServerEnabled && !advertiseServer
41 | }
42 |
43 | // -----------------------------------------------------------------------------------------------------------------------------
44 | // Properties
45 | // -----------------------------------------------------------------------------------------------------------------------------
46 |
47 | @AppStorage("freeze") var freeze: Bool = false
48 | @AppStorage("localServerEnabled") var localServerEnabled: Bool = false
49 | @AppStorage("advertiseServer") var advertiseServer: Bool = true
50 | @AppStorage("errorCorrectionDisplay") var errorCorrectionDisplay: Bool = false
51 | @AppStorage("deckFormatName") var deckFormatName: String?
52 | @AppStorage("activeCameraDeviceName") var activeCameraDeviceName: String?
53 | }
54 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/ScanResultsView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScanResultsView.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 9/29/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import SwiftUI
14 |
15 | struct ScanResultsView: View {
16 | @EnvironmentObject var uiState: UIState
17 |
18 | var body: some View {
19 | ZStack {
20 | PlatformBackgroundView {
21 | VStack(spacing: 0) {
22 | if uiState.cards.count > 0 {
23 | DeckView(cards: $uiState.cards)
24 | } else {
25 | Text("No cards found, waiting for scan")
26 | .padding()
27 | .padding(.bottom, 5)
28 | .minimumScaleFactor(0.01)
29 | }
30 | }
31 | }
32 | .padding()
33 | .padding(.bottom, 5)
34 |
35 | VStack {
36 | Spacer()
37 | HStack {
38 | Text("\(uiState.cardCount) card\(uiState.cardCount == 1 ? "":"s")")
39 | .font(.subheadline)
40 | .lineLimit(1)
41 | .minimumScaleFactor(0.01)
42 | Spacer()
43 | }
44 | }
45 | .padding(.leading)
46 | .opacity(uiState.cardCount > 0 ? 1 : 0)
47 | }
48 | }
49 | }
50 |
51 | struct ScanResultsView_Previews: PreviewProvider {
52 | static var previews: some View {
53 | ScanResultsView()
54 | .padding()
55 | .background(Color.black)
56 | .preferredColorScheme(.dark)
57 | .environmentObject(UIState.shared)
58 | #if os(iOS)
59 | ScanResultsView()
60 | .padding()
61 | .background(Color.white)
62 | .preferredColorScheme(.light)
63 | .previewInterfaceOrientation(.landscapeLeft)
64 | .environmentObject(UIState.shared)
65 | #endif
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/Shared/ViewExtensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewExtensions.swift
3 | // Abra
4 | //
5 | // Created by Paul Nettle on 10/1/21.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import SwiftUI
14 |
15 | extension View {
16 | @ViewBuilder
17 | func `if`(_ conditional: Bool, content: (Self) -> Content) -> some View {
18 | if conditional {
19 | content(self)
20 | } else {
21 | self
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/iOS/Abra--iOS--Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UILaunchScreen
6 |
7 | UIImageName
8 | Launch
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/iOS/iOS.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.networking.multicast
6 |
7 | com.apple.security.app-sandbox
8 |
9 | com.apple.security.device.audio-input
10 |
11 | com.apple.security.device.camera
12 |
13 | com.apple.security.files.user-selected.read-only
14 |
15 | com.apple.security.network.client
16 |
17 | com.apple.security.network.server
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Sources/Abra/Abra/macOS/macOS.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.disable-library-validation
6 |
7 | com.apple.security.app-sandbox
8 |
9 | com.apple.security.device.audio-input
10 |
11 | com.apple.security.device.camera
12 |
13 | com.apple.security.files.user-selected.read-only
14 |
15 | com.apple.security.network.client
16 |
17 | com.apple.security.network.server
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Sources/Abra/Art/icon/AppIcon-iOS.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:ad3921f0834fe5d92a4eddd482642eef8f40b336a75bc0692f507df4da87ee2c
3 | size 7605182
4 |
--------------------------------------------------------------------------------
/Sources/Abra/Art/icon/AppIcon-macOS.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:722bf69bf9a7b559a71cd1629c6e3a17abe4ed9473ace1990ae861a23d02e4cc
3 | size 7784324
4 |
--------------------------------------------------------------------------------
/Sources/Abra/Art/icon/Launch.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:2ef50f28b564e3bddc4c2c8fb42d31ad5453dab2f5ce85309c055641e9cb6178
3 | size 6430041
4 |
--------------------------------------------------------------------------------
/Sources/Abra/Art/icon/generate-iOS.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | directory=AppIcon-iOS
4 | sizes=(20 29 40 58 60 76 80 87 120 152 167 180)
5 |
6 | if [[ -d ${directory} ]]; then
7 | echo "Deleting ${directory} directory"
8 | rm -rf ${directory}
9 | fi
10 |
11 | mkdir ${directory}
12 |
13 | # Flatten it into a single 1024x1024
14 | echo "Creating AppIcon-1024.png"
15 | magick convert -alpha on -background none -layers flatten AppIcon-iOS.psd ${directory}/AppIcon-1024.png
16 |
17 | # Generate sizes for each
18 | for i in ${sizes[@]}; do
19 | echo "Creating AppIcon-$i.png"
20 | magick convert -resize $ix$i ${directory}/AppIcon-1024.png ${directory}/AppIcon-$i.png
21 | done
--------------------------------------------------------------------------------
/Sources/Abra/Art/icon/generate-macOS.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | directory=AppIcon-macOS
4 | sizes=(16 32 64 128 256 512)
5 |
6 | if [[ -d ${directory} ]]; then
7 | echo "Deleting ${directory} directory"
8 | rm -rf ${directory}
9 | fi
10 |
11 | mkdir ${directory}
12 |
13 | # Flatten it into a single 1024x1024
14 | echo "Creating AppIcon-1024.png"
15 | magick convert -alpha on -background none -layers flatten AppIcon-macOS.psd ${directory}/AppIcon-1024.png
16 |
17 | # Generate sizes for each
18 | for i in ${sizes[@]}; do
19 | echo "Creating AppIcon-$i.png"
20 | magick convert -resize $ix$i ${directory}/AppIcon-1024.png ${directory}/AppIcon-$i.png
21 | done
--------------------------------------------------------------------------------
/Sources/CardBars/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars/Assets.xcassets/AppIcon.appiconset/CardBars-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/CardBars/CardBars/Assets.xcassets/AppIcon.appiconset/CardBars-icon.png
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "size" : "256x256",
40 | "idiom" : "mac",
41 | "filename" : "CardBars-icon.png",
42 | "scale" : "2x"
43 | },
44 | {
45 | "idiom" : "mac",
46 | "size" : "512x512",
47 | "scale" : "1x"
48 | },
49 | {
50 | "idiom" : "mac",
51 | "size" : "512x512",
52 | "scale" : "2x"
53 | }
54 | ],
55 | "info" : {
56 | "version" : 1,
57 | "author" : "xcode"
58 | }
59 | }
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars/CardBars.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.disable-library-validation
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars/CardBarsAppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardBarsAppDelegate.swift
3 | // CardBars
4 | //
5 | // Created by Paul Nettle on 11/6/16.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Cocoa
14 |
15 | @NSApplicationMain
16 | class CardBarsAppDelegate: NSObject, NSApplicationDelegate
17 | {
18 | @IBAction func copy(_ sender: Any)
19 | {
20 | }
21 |
22 | func applicationDidFinishLaunching(_ aNotification: Notification)
23 | {
24 | // Insert code here to initialize your application
25 | }
26 |
27 | func applicationWillTerminate(_ aNotification: Notification)
28 | {
29 | // Insert code here to tear down your application
30 | }
31 |
32 | func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool
33 | {
34 | return true
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Sources/CardBars/CardBars/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSApplicationCategoryType
24 | public.app-category.entertainment
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSHumanReadableCopyright
28 | Copyright © 2022 Paul Nettle. All rights reserved.
29 | NSMainStoryboardFile
30 | Main
31 | NSPrincipalClass
32 | NSApplication
33 |
34 |
35 |
--------------------------------------------------------------------------------
/Sources/Minion/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 | - legacy_random
21 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion.xcodeproj/xcshareddata/xcschemes/Minion.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion.xcodeproj/xcshareddata/xcschemes/MinionIOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Atomic.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Atomic.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 8/22/00.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // Stolen from: https://www.objc.io/blog/2018/12/18/atomic-variables
16 | public final class Atomic
17 | {
18 | private let queue = DispatchQueue(label: "Atomic serial queue")
19 | private var value_: A
20 |
21 | public init(_ value: A)
22 | {
23 | self.value_ = value
24 | }
25 |
26 | public var value: A
27 | {
28 | get
29 | {
30 | return queue.sync { self.value_ }
31 | }
32 | set
33 | {
34 | return queue.sync { self.value_ = newValue }
35 | }
36 | }
37 |
38 | public func mutate(_ transform: (inout A) -> Void)
39 | {
40 | queue.sync { transform(&self.value_) }
41 | }
42 | }
43 |
44 | public final class AtomicFlag
45 | {
46 | private let queue = DispatchQueue(label: "Atomic flag serial queue")
47 | private var value_: Bool
48 |
49 | public init(_ value: Bool = false)
50 | {
51 | self.value_ = value
52 | }
53 |
54 | public var value: Bool
55 | {
56 | get
57 | {
58 | return queue.sync { self.value_ }
59 | }
60 | set
61 | {
62 | return queue.sync { self.value_ = newValue }
63 | }
64 | }
65 |
66 | public func mutate(_ transform: (inout Bool) -> Void)
67 | {
68 | queue.sync { transform(&self.value_) }
69 | }
70 |
71 | public func toggle()
72 | {
73 | queue.sync { self.value_ = !self.value_ }
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/CGFloat.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CGFloat.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/2/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // ---------------------------------------------------------------------------------------------------------------------------------
16 | // Extension: CGFloat -> Integer support
17 | // ---------------------------------------------------------------------------------------------------------------------------------
18 |
19 | #if !os(iOS)
20 | extension CGFloat
21 | {
22 | /// Returns the nearest integer value
23 | @inline(__always) public func roundToNearest() -> Int
24 | {
25 | return Int(self < 0.0 ? self - 0.5 : self + 0.5)
26 | }
27 |
28 | /// Returns the nearest integer toward zero
29 | @inline(__always) public func roundTowardZero() -> Int
30 | {
31 | return Int(self)
32 | }
33 |
34 | /// Returns the nearest integer away from zero
35 | @inline(__always) public func roundAwayFromZero() -> Int
36 | {
37 | return self > 0 ? Int(ceil()) : Int(floor())
38 | }
39 |
40 | /// Returns integer value toward negative infinity
41 | @inline(__always) public func floor() -> Int
42 | {
43 | #if os(Linux)
44 | return Int(Glibc.floor(self))
45 | #else
46 | return Int(Darwin.floor(self))
47 | #endif
48 | }
49 |
50 | /// Returns integer value toward positive infinity
51 | @inline(__always) public func ceil() -> Int
52 | {
53 | #if os(Linux)
54 | return Int(Glibc.ceil(self))
55 | #else
56 | return Int(Darwin.ceil(self))
57 | #endif
58 | }
59 | }
60 | #endif
61 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Codable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Codable.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 2/4/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// A combination of Decodable and Encodable
16 | public typealias Codable = Encodable & Decodable
17 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Dictionary.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Dictionary.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/24/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// General utilitarian extensions for Dictionary collections
16 | public extension Dictionary where Key: ExpressibleByStringLiteral
17 | {
18 | /// Returns a copy of the dictionary in which every key has been converted to lower-case
19 | ///
20 | /// Be aware that as Dictionaries are case-sensitive by default, that it is possible for this process to cause key collisions.
21 | /// In those cases, the return value will be nil.
22 | func lowercasedKeys() -> [String: Value]?
23 | {
24 | var result = [String: Value]()
25 | for (key, value) in self
26 | {
27 | let lowerKey = String(describing: key).lowercased()
28 | if result[lowerKey] == nil
29 | {
30 | result[lowerKey] = value
31 | }
32 | else
33 | {
34 | return nil
35 | }
36 | }
37 |
38 | return result
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/ImageError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageError.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | public enum ImageError: Error
16 | {
17 | case Conversion(String)
18 | case DimensionMismatch
19 | case FileDimensionMismatch
20 | case WriteFailure(String)
21 | }
22 |
23 | extension ImageError: LocalizedError
24 | {
25 | public var errorDescription: String?
26 | {
27 | switch self
28 | {
29 | case .Conversion(let str):
30 | return "ImageError.Conversion: \(str)"
31 | case .DimensionMismatch:
32 | return "ImageError.DimensionMismatch: Mismatching image dimensions"
33 | case .FileDimensionMismatch:
34 | return "ImageError.FileDimensionMismatch: Mismatching image file dimension with file data size"
35 | case .WriteFailure(let str):
36 | return "ImageError.WriteFailure: \(str)"
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSHumanReadableCopyright
22 | Copyright © 2022 Paul Nettle. All rights reserved.
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Ipv4Address.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Ipv4Address.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 1/28/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// Set of common IP address (v4)
16 | public struct Ipv4Address
17 | {
18 | /// Returns an address set to INADDR_LOOPBACK
19 | public static let kLoopback = UInt32(INADDR_LOOPBACK)
20 |
21 | /// Returns an address set to INADDR_ANY
22 | public static let kAny = UInt32(INADDR_ANY)
23 |
24 | /// Returns an address set to INADDR_BROADCAST
25 | public static let kBroadcast = UInt32(INADDR_BROADCAST)
26 | }
27 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Ipv4SocketAddress.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Ipv4SocketAddress.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 1/28/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// A representation of a socket address (`sockaddr_in`), which, for AF_INET sockets is generally an IP/Port address pair
16 | ///
17 | /// The internal representation for the address and port is in host byte order.
18 | public struct Ipv4SocketAddress
19 | {
20 | /// The IP address
21 | public let address: UInt32
22 |
23 | /// The port address
24 | public let port: UInt16
25 |
26 | /// Initialize from the base types, both of which are in host byte format
27 | public init(address: UInt32, port: UInt16)
28 | {
29 | self.address = address
30 | self.port = port
31 | }
32 |
33 | /// Initialize from a `sockaddr_in`
34 | public init(_ addr: sockaddr_in)
35 | {
36 | address = in_addr_t(bigEndian: addr.sin_addr.s_addr)
37 | port = in_port_t(bigEndian: addr.sin_port)
38 | }
39 |
40 | /// Returns a string representation of this socket address
41 | public func toString() -> String
42 | {
43 | return "\(address.toIPAddress()):\(port)"
44 | }
45 | }
46 |
47 | extension Ipv4SocketAddress: CustomStringConvertible, CustomDebugStringConvertible
48 | {
49 | public var debugDescription: String
50 | {
51 | return description
52 | }
53 |
54 | public var description: String
55 | {
56 | return toString()
57 | }
58 | }
59 |
60 | extension Ipv4SocketAddress: Equatable
61 | {
62 | public static func == (lhs: Ipv4SocketAddress, rhs: Ipv4SocketAddress) -> Bool
63 | {
64 | return lhs.address == rhs.address
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/LogDevice.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LogDevice.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 3/24/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// Defines a device that receives the output from the logger.
16 | ///
17 | /// Devices may be defined for various media, such as a standard log file, a system log, a cloud-based log tracking service, etc.
18 | ///
19 | /// These devices are then added to the logging service via RegisterDevice() and UnregisterDevice() methods in the Logger class.
20 | ///
21 | /// Note that if a device fails to open, it will not be registered.
22 | public protocol LogDevice
23 | {
24 | /// The mask set for this device
25 | var mask: Int { get set }
26 |
27 | /// The name of this device
28 | var name: String { get }
29 |
30 | /// Opens the target output device.
31 | ///
32 | /// If this function fails, it will not get registered.
33 | ///
34 | /// Returns true on success, otherwise false
35 | func open() -> Bool
36 |
37 | /// Writes a log entry to the output device
38 | func write(level: LogLevel, indent: Int, date: String, text: String)
39 |
40 | /// Closes the target output device
41 | func close()
42 | }
43 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/LogDeviceConsole.swift:
--------------------------------------------------------------------------------
1 | //
2 | // LogDeviceConsole.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 3/24/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | public final class LogDeviceConsole: LogDevice
16 | {
17 | /// The mask set for this device
18 | public var mask: Int = 0
19 |
20 | /// Returns the name of this device
21 | public var name: String { return "Console" }
22 |
23 | /// Default initializer - we need this here so we can declare it as public
24 | public init()
25 | {
26 |
27 | }
28 |
29 | /// Opens the target output device
30 | public func open() -> Bool
31 | {
32 | // Noting to do here
33 | return true
34 | }
35 |
36 | /// Writes a log entry to the output device
37 | public func write(level: LogLevel, indent: Int, date: String, text: String)
38 | {
39 | let indentString = String(repeating: " ", count: indent)
40 | let prefix = "\(date) [\(level)] \(indentString)"
41 |
42 | // A simple print is all we need for the console
43 | print(prefix + text)
44 | }
45 |
46 | /// Closes the target output device
47 | public func close()
48 | {
49 | // Nothing to do here
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/Minion.h:
--------------------------------------------------------------------------------
1 | //
2 | // Minion.h
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 9/25/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #import
14 |
15 | // In this header, you should import all the public headers of your framework using statements like #import
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/NSBitmapImageRep.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSBitmapImageRep.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/20/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #if os(macOS)
14 |
15 | import Foundation
16 | import AppKit
17 |
18 | public extension NSBitmapImageRep
19 | {
20 | var png: Data?
21 | {
22 | return representation(using: .png, properties: [:])
23 | }
24 | }
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/NSImage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSImage.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/20/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #if os(macOS)
14 |
15 | import Foundation
16 | import AppKit
17 |
18 | public extension NSImage
19 | {
20 | var png: Data?
21 | {
22 | return tiffRepresentation?.bitmap?.png
23 | }
24 |
25 | /// Saves an NSImage as a PNG file to `url`
26 | ///
27 | /// Returns error string on error, otherwise nil
28 | ///
29 | /// Throws:
30 | /// * An error in the Cocoa domain, if there is an error writing to the `URL`.
31 | /// * An ImageError.ConversionError if a PNG representation cannot be created
32 | func savePng(to url: URL) throws
33 | {
34 | if let png = self.png
35 | {
36 | try png.write(to: url)
37 | }
38 | else
39 | {
40 | throw ImageError.Conversion("Unable to create PNG representation of image for writing to URL: \(url)")
41 | }
42 | }
43 | }
44 |
45 | #endif
46 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/UnsafeMutablePointer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnsafeMutablePointer.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 | #if os(macOS)
15 | import AppKit
16 | #endif
17 | #if os(iOS)
18 | import UIKit
19 | #endif
20 |
21 | public extension UnsafeMutablePointer
22 | {
23 | func toData(count: Int) -> Data?
24 | {
25 | let elementSize = MemoryLayout.size
26 | return Data(bytes: self, count: count * elementSize)
27 | }
28 | }
29 |
30 | public extension UnsafeMutablePointer
31 | {
32 | #if os(macOS) || os(iOS)
33 | func toCGImage(width: Int, height: Int) -> CGImage?
34 | {
35 | let elementSize = MemoryLayout.size
36 | return toData(count: width * height)?.toCGImage(width: width, height: height, bytesPerPixel: elementSize)
37 | }
38 | #endif
39 |
40 | #if os(macOS)
41 | func toNSImage(width: Int, height: Int) -> NSImage?
42 | {
43 | let elementSize = MemoryLayout.size
44 | return toData(count: width * height)?.toNSImage(width: width, height: height, bytesPerPixel: elementSize)
45 | }
46 | #endif
47 | }
48 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/UnsafePointer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnsafePointer.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 | #if os(macOS)
15 | import AppKit
16 | #endif
17 | #if os(iOS)
18 | import UIKit
19 | #endif
20 |
21 | public extension UnsafePointer
22 | {
23 | func toData(count: Int) -> Data?
24 | {
25 | let elementSize = MemoryLayout.size
26 | return Data(bytes: self, count: count * elementSize)
27 | }
28 | }
29 |
30 | #if os(macOS) || os(iOS)
31 | public extension UnsafePointer
32 | {
33 | func toCGImage(width: Int, height: Int) -> CGImage?
34 | {
35 | let elementSize = MemoryLayout.size
36 | return toData(count: width * height)?.toCGImage(width: width, height: height, bytesPerPixel: elementSize)
37 | }
38 |
39 | #if os(macOS)
40 | func toNSImage(width: Int, height: Int) -> NSImage?
41 | {
42 | let elementSize = MemoryLayout.size
43 | return toData(count: width * height)?.toNSImage(width: width, height: height, bytesPerPixel: elementSize)
44 | }
45 | #endif
46 | }
47 | #endif
48 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/UnsafeRawPointer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UnsafeRawPointer.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 | #if os(macOS)
15 | import AppKit
16 | #endif
17 |
18 | public extension UnsafeRawPointer
19 | {
20 | func toData(count: Int, elementSize: Int) -> Data?
21 | {
22 | return Data(bytes: self, count: count * elementSize)
23 | }
24 | }
25 |
26 | #if os(macOS)
27 | public extension UnsafeRawPointer
28 | {
29 | func toCGImage(width: Int, height: Int, elementSize: Int) -> CGImage?
30 | {
31 | return toData(count: width * height, elementSize: elementSize)?.toCGImage(width: width, height: height, bytesPerPixel: elementSize)
32 | }
33 |
34 | func toNSImage(width: Int, height: Int, elementSize: Int) -> NSImage?
35 | {
36 | return toData(count: width * height, elementSize: elementSize)?.toNSImage(width: width, height: height, bytesPerPixel: elementSize)
37 | }
38 | }
39 | #endif
40 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/sockaddr.swift:
--------------------------------------------------------------------------------
1 | //
2 | // sockaddr.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 1/28/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// Convenience extensions for conversion from `sockaddr_in` to `sockaddr`
16 | public extension sockaddr
17 | {
18 | /// Coversion from `sockaddr_in` to `sockaddr`
19 | init(_ addr: sockaddr_in)
20 | {
21 | var tmp = addr
22 | self = withUnsafePointer(to: &tmp) { $0.withMemoryRebound(to: sockaddr.self, capacity: 1) { $0.pointee } }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/Sources/Minion/Minion/sockaddr_in.swift:
--------------------------------------------------------------------------------
1 | //
2 | // sockaddr_in.swift
3 | // Minion
4 | //
5 | // Created by Paul Nettle on 1/28/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// Convenience extensions for conversion from `sockaddr` to `sockaddr_in`
16 | public extension sockaddr_in
17 | {
18 | /// Coversion from `sockaddr_in` to `sockaddr`
19 | init(_ addr: sockaddr)
20 | {
21 | var tmp = addr
22 | self = withUnsafePointer(to: &tmp) { $0.withMemoryRebound(to: sockaddr_in.self, capacity: 1) { $0.pointee } }
23 | }
24 |
25 | /// Initialize a `sockaddr_in` from a `Ipv4SocketAddress`
26 | ///
27 | /// Endian conversion is part of this process
28 | init(_ socketAddress: Ipv4SocketAddress)
29 | {
30 | #if os(Linux)
31 | self.init(sin_family: sa_family_t(AF_INET),
32 | sin_port: in_port_t(socketAddress.port.bigEndian),
33 | sin_addr: in_addr(s_addr: socketAddress.address.bigEndian),
34 | sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
35 | #else
36 | self.init(sin_len: __uint8_t(MemoryLayout.size),
37 | sin_family: sa_family_t(AF_INET),
38 | sin_port: in_port_t(socketAddress.port.bigEndian),
39 | sin_addr: in_addr(s_addr: socketAddress.address.bigEndian),
40 | sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
41 | #endif
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks.xcodeproj/xcshareddata/xcschemes/NativeTasks.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks.xcodeproj/xcshareddata/xcschemes/NativeTasksIOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/Logger.cpp:
--------------------------------------------------------------------------------
1 | //
2 | // Logger.cpp
3 | // NativeTasks
4 | //
5 | // Created by Paul Nettle on 5/22/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #include "Logger.h"
14 |
15 | NativeLogReceiver Logger::logReceiverDebug = nullptr;
16 | NativeLogReceiver Logger::logReceiverInfo = nullptr;
17 | NativeLogReceiver Logger::logReceiverWarn = nullptr;
18 | NativeLogReceiver Logger::logReceiverError = nullptr;
19 | NativeLogReceiver Logger::logReceiverSevere = nullptr;
20 | NativeLogReceiver Logger::logReceiverFatal = nullptr;
21 | NativeLogReceiver Logger::logReceiverTrace = nullptr;
22 | NativeLogReceiver Logger::logReceiverPerf = nullptr;
23 | NativeLogReceiver Logger::logReceiverStatus = nullptr;
24 | NativeLogReceiver Logger::logReceiverFrame = nullptr;
25 | NativeLogReceiver Logger::logReceiverSearch = nullptr;
26 | NativeLogReceiver Logger::logReceiverDecode = nullptr;
27 | NativeLogReceiver Logger::logReceiverResolve = nullptr;
28 | NativeLogReceiver Logger::logReceiverCorrect = nullptr;
29 | NativeLogReceiver Logger::logReceiverIncorrect = nullptr;
30 | NativeLogReceiver Logger::logReceiverResult = nullptr;
31 | NativeLogReceiver Logger::logReceiverBadReport = nullptr;
32 | NativeLogReceiver Logger::logReceiverNetwork = nullptr;
33 | NativeLogReceiver Logger::logReceiverNetworkData = nullptr;
34 | NativeLogReceiver Logger::logReceiverVideo = nullptr;
35 | NativeLogReceiver Logger::logReceiverAlways = nullptr;
36 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/SecDescriptor.h:
--------------------------------------------------------------------------------
1 | //
2 | // SecDescriptor.h
3 | // NativeTasks
4 | //
5 | // Created by Paul Nettle on 5/25/19.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #pragma once
14 |
15 | #if defined(__linux__)
16 |
17 | /// Returns a string with the permanent ethernet MAC addresses
18 | const char *secDescriptor(const char *name);
19 |
20 | #endif // defined(__linux__)
21 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/VideoException.h:
--------------------------------------------------------------------------------
1 | //
2 | // VideoException.h
3 | // NativeTasks
4 | //
5 | // Created by Paul Nettle on 5/13/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #if defined(USE_MMAL)
14 |
15 | #pragma once
16 |
17 | #include
18 | #include
19 | #include "include/NativeTaskTypes.h"
20 |
21 | /// Manages general video-related exceptions
22 | ///
23 | /// For specific types of video exceptions (for example, those from camera captures) this method should be subclassed.
24 | struct VideoException : public std::exception
25 | {
26 | /// Construct a VideoException with a C-style string message
27 | ///
28 | /// Also available: construction via std::string and std::ostream (via std::stringstream)
29 | public: VideoException(const char *message) : mMessage(nullptr == message ? "- unspecified -" : message) { }
30 |
31 | /// Construct a VideoException with a std::string message
32 | ///
33 | /// Also available: construction via C-style string and std::ostream (via std::stringstream)
34 | public: VideoException(const std::string &message) : mMessage(message) { }
35 |
36 | /// Construct a VideoException with a std::ostream (via std::stringstream)
37 | ///
38 | /// The convention for using this includes the use of the `SSTR` typedef, which works as follows:
39 | ///
40 | /// throw VideoException(SSTR << "Decoding complete. " << frameCount << " frames decoded in " << perf.ms << "ms.");
41 | ///
42 | /// Also available: construction via C-style strings and std::string
43 | public: VideoException(const std::ostream &message) : mMessage(static_cast(message).str()) { }
44 |
45 | /// We'll need a virtual destructor so we can override
46 | public: virtual ~VideoException() { }
47 |
48 | /// Returns explanatory information
49 | ///
50 | /// Guaranteed to be a valid pointer.
51 | public: virtual const char* what() const noexcept { return mMessage.c_str(); }
52 |
53 | /// Our stored message
54 | protected: std::string mMessage;
55 | };
56 |
57 | #endif // defined(USE_MMAL)
58 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/include/NativeTaskTypes.h:
--------------------------------------------------------------------------------
1 | //
2 | // NativeTaskTypes.h
3 | // NativeTasks
4 | //
5 | // Created by Paul Nettle on 5/22/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #pragma once
14 |
15 | #include
16 |
17 | /// Type used to represent an 8-bit Luma image sample
18 | typedef uint8_t LumaSample;
19 |
20 | /// Type used to represent an 8-bit Luma image buffer
21 | typedef LumaSample * NativeLumaBuffer;
22 |
23 | /// Type used to represent an 8-bit Luma image sample
24 | typedef uint32_t ColorSample;
25 |
26 | /// Type used to represent an 8-bit Luma image buffer
27 | typedef ColorSample * NativeColorBuffer;
28 |
29 | /// This little ditty is to simplify the use of stringstream being passed into the logging methods. This allows us to do something
30 | /// similar to the following:
31 | ///
32 | /// Logger::info(SSTR << "There were " << count << " entries in the list");
33 | #define SSTR std::ostringstream().flush()
34 |
35 | // ---------------------------------------------------------------------------------------------------------------------------------
36 | // ____ _
37 | // | _ \ ___ ___ ___(_)_ _____ _ __ ___
38 | // | |_) / _ \/ __/ _ \ \ \ / / _ \ '__/ __|
39 | // | _ < __/ (_| __/ |\ V / __/ | \__ \
40 | // |_| \_\___|\___\___|_| \_/ \___|_| |___/
41 | //
42 | // ---------------------------------------------------------------------------------------------------------------------------------
43 |
44 | /// Type definition for a callback that receives images from NativeTasks
45 | typedef void (* NativeCaptureFrameReceiver)(LumaSample *sampleData, uint32_t width, uint32_t height);
46 |
47 | /// Type definition for a callback that receives log messages
48 | typedef void (* NativeLogReceiver)(const char *message);
49 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/include/NativeTasks.h:
--------------------------------------------------------------------------------
1 | //
2 | // NativeTasks.h
3 | // NativeTasks
4 | //
5 | // Created by Paul Nettle on 3/18/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #pragma once
14 |
15 | #include "NativeInterface.h"
16 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/include/NativeTasksIOS.h:
--------------------------------------------------------------------------------
1 | //
2 | // NativeTasksIOS.h
3 | // NativeTasks
4 | //
5 | // Created by Paul Nettle on 3/18/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #pragma once
14 |
15 | #include "NativeInterface.h"
16 |
--------------------------------------------------------------------------------
/Sources/NativeTasks/NativeTasks/info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSHumanReadableCopyright
22 | Copyright © 2022 Paul Nettle. All rights reserved.
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Sources/Seer/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer.xcodeproj/xcshareddata/xcschemes/Seer (debug.optimized).xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer.xcodeproj/xcshareddata/xcschemes/Seer.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer.xcodeproj/xcshareddata/xcschemes/SeerIOS.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
53 |
54 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Arithmeticable.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Math.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 12/28/16.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // ---------------------------------------------------------------------------------------------------------------------------------
16 | // Arithmeticable - a protocol with support for basic arithmetic operations
17 | // ---------------------------------------------------------------------------------------------------------------------------------
18 |
19 | /// Basic protocol that specifies a type supports arithmetic operations
20 | ///
21 | /// Operations: +, -, *, /
22 | public protocol Arithmeticable: ExpressibleByIntegerLiteral
23 | {
24 | static func + (lhs: Self, rhs: Self) -> Self
25 | static func += (lhs: inout Self, rhs: Self)
26 |
27 | static func - (lhs: Self, rhs: Self) -> Self
28 | static func -= (lhs: inout Self, rhs: Self)
29 |
30 | static func * (lhs: Self, rhs: Self) -> Self
31 | static func *= (lhs: inout Self, rhs: Self)
32 |
33 | static func / (lhs: Self, rhs: Self) -> Self
34 | static func /= (lhs: inout Self, rhs: Self)
35 | }
36 |
37 | /// Declare that Int supports Arithmeticable
38 | extension Int: Arithmeticable {}
39 |
40 | /// Declare that Int8 supports Arithmeticable
41 | extension Int8: Arithmeticable {}
42 |
43 | /// Declare that Int32 supports Arithmeticable
44 | extension Int32: Arithmeticable {}
45 |
46 | /// Declare that Int64 supports Arithmeticable
47 | extension Int64: Arithmeticable {}
48 |
49 | /// Declare that UInt supports Arithmeticable
50 | extension UInt: Arithmeticable {}
51 |
52 | /// Declare that UInt8 supports Arithmeticable
53 | extension UInt8: Arithmeticable {}
54 |
55 | /// Declare that UInt32 supports Arithmeticable
56 | extension UInt32: Arithmeticable {}
57 |
58 | /// Declare that UInt64 supports Arithmeticable
59 | extension UInt64: Arithmeticable {}
60 |
61 | /// Declare that Float supports Arithmeticable
62 | extension Float: Arithmeticable {}
63 |
64 | /// Declare that Double supports Arithmeticable
65 | extension Double: Arithmeticable {}
66 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Double.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Double.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 3/2/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // ---------------------------------------------------------------------------------------------------------------------------------
16 | // Extension: Double -> Integer support
17 | // ---------------------------------------------------------------------------------------------------------------------------------
18 |
19 | public extension Double
20 | {
21 | /// Returns the nearest integer value
22 | @inline(__always) func roundToNearest() -> Int
23 | {
24 | return Int(self < 0.0 ? self - 0.5 : self + 0.5)
25 | }
26 |
27 | /// Returns the nearest integer toward zero
28 | @inline(__always) func roundTowardZero() -> Int
29 | {
30 | return Int(self)
31 | }
32 |
33 | /// Returns the nearest integer away from zero
34 | @inline(__always) func roundAwayFromZero() -> Int
35 | {
36 | return self > 0 ? Int(ceil()) : Int(floor())
37 | }
38 |
39 | /// Returns integer value toward negative infinity
40 | @inline(__always) func floor() -> Int
41 | {
42 | #if os(Linux)
43 | return Int(Glibc.floor(self))
44 | #else
45 | return Int(Darwin.floor(self))
46 | #endif
47 | }
48 |
49 | /// Returns integer value toward positive infinity
50 | @inline(__always) func ceil() -> Int
51 | {
52 | #if os(Linux)
53 | return Int(Glibc.ceil(self))
54 | #else
55 | return Int(Darwin.ceil(self))
56 | #endif
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Float.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Float.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 2/3/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // ---------------------------------------------------------------------------------------------------------------------------------
16 | // Extension: Float -> Integer support
17 | // ---------------------------------------------------------------------------------------------------------------------------------
18 |
19 | public extension Float
20 | {
21 | /// Returns the nearest integer value
22 | @inline(__always) func roundToNearest() -> Int
23 | {
24 | return Int(self < 0.0 ? self - 0.5 : self + 0.5)
25 | }
26 |
27 | /// Returns the nearest integer toward zero
28 | @inline(__always) func roundTowardZero() -> Int
29 | {
30 | return Int(self)
31 | }
32 |
33 | /// Returns the nearest integer away from zero
34 | @inline(__always) func roundAwayFromZero() -> Int
35 | {
36 | return self > 0 ? Int(ceil()) : Int(floor())
37 | }
38 |
39 | /// Returns integer value toward negative infinity
40 | @inline(__always) func floor() -> Int
41 | {
42 | #if os(Linux)
43 | return Int(Glibc.floor(self))
44 | #else
45 | return Int(Darwin.floor(self))
46 | #endif
47 | }
48 |
49 | /// Returns integer value toward positive infinity
50 | @inline(__always) func ceil() -> Int
51 | {
52 | #if os(Linux)
53 | return Int(Glibc.ceil(self))
54 | #else
55 | return Int(Darwin.ceil(self))
56 | #endif
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/IVector-Imaging.swift:
--------------------------------------------------------------------------------
1 | //
2 | // IVector-Imaging.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | /// Extensions for drawing points via an IVector
16 | extension IVector
17 | {
18 | /// Sets the color of the sample to `color` a point at the position represented by the (x, y)
19 | public func draw(to image: DebugBuffer?, color: Color)
20 | {
21 | if let samples = image?.buffer
22 | {
23 | if !image!.rect.contains(point: self) { return }
24 |
25 | samples[y * image!.width + x] = alphaBlend(src: color, dst: samples[y * image!.width + x])
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSHumanReadableCopyright
22 | Copyright © 2022 Paul Nettle. All rights reserved.
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Int.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Int.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 2/3/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // ---------------------------------------------------------------------------------------------------------------------------------
16 | // Extension: Printing helper for binary values
17 | // ---------------------------------------------------------------------------------------------------------------------------------
18 |
19 | public extension Int
20 | {
21 | /// Returns a value from the set [-1, 0, +1] representing the sign of the value
22 | @inline(__always) func sign() -> Int
23 | {
24 | // An efficient C++ implementation would look like this, due to the way it converts boolean results to 0/1. This uses
25 | // compares, but avoids branches (so it's very fast.) See http://stackoverflow.com/a/14612943/2203321.
26 | //
27 | // return (self > 0) - (self < 0)
28 | return self < 0 ? -1 : (self > 0 ? 1 : 0)
29 | }
30 |
31 | /// Returns the number of leading bits with the same value (either 0 or 1).
32 | ///
33 | /// Examples displayed in LSB->MSB order:
34 | ///
35 | /// 01000011 -> Two leading bits (both are 1s)
36 | /// 11000000 -> Six leading bits (all are 0s)
37 | ///
38 | /// This function will always return a number >= 1
39 | func countLeadingBits(maxBits: Int = MemoryLayout.size * 8) -> Int
40 | {
41 | assert(maxBits >= 0 && maxBits <= MemoryLayout.size * 8)
42 | let match = self & 1
43 | var count = 1
44 | for i in 1..> i) & 1 != match { break }
47 | count += 1
48 | }
49 |
50 | return count
51 | }
52 |
53 | // Returns the number of bits that are set
54 | //
55 | // IMPORTANT: This method only works for positive values
56 | func countSetBits() -> Int
57 | {
58 | var value = self
59 | var count = 0
60 | while value > 0
61 | {
62 | if (value & 1) == 1 { count += 1}
63 | value = value >> 1
64 | }
65 | return count
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/MediaViewportProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MediaViewportProvider.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 04/18/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | /// The Media Viewport Provider is responsible for displaying the the `DebugBuffer` view of the scanning and decoding process. This
14 | /// includes the display of a block of scanning statistics (a `ResultStats` instance).
15 | public protocol MediaViewportProvider
16 | {
17 | /// Displays the debug buffer image
18 | ///
19 | /// Implementors should copy the image buffer and not rely on its memory beyond the extend of this call. In addition, it should
20 | /// check for changes in the image's dimensions (as the media may have changed since the last call) and react accordingly.
21 | func updateLocalViewport(debugBuffer: DebugBuffer?)
22 |
23 | /// Receives a `ResultsStats` display updates to the user
24 | func updateStats(analysisResult: AnalysisResult, stats: ResultStats)
25 |
26 | /// Provides a mechanism for saving the `DebugBuffer` as a color image (such as PNG or JPG.)
27 | ///
28 | /// This method is similar to `MediaProvider.archiveFrame()` except that this method stores the debug buffer, which may have
29 | /// color debug information drawn within that can be useful for, well, debugging.
30 | func writeViewport()
31 | }
32 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Numeric.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Numeric.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | // ---------------------------------------------------------------------------------------------------------------------------------
16 | // Numeric types
17 | // ---------------------------------------------------------------------------------------------------------------------------------
18 |
19 | /// Our real number type
20 | public typealias Real = Float
21 |
22 | // ---------------------------------------------------------------------------------------------------------------------------------
23 | // Range clamping
24 | // ---------------------------------------------------------------------------------------------------------------------------------
25 |
26 | /// Clamp: "combining min & max since 1026"
27 | @inline(__always) public func clamp(_ x: T, _ min: T, _ max: T) -> T
28 | {
29 | return Swift.min(max, Swift.max(min, x))
30 | }
31 |
--------------------------------------------------------------------------------
/Sources/Seer/Seer/Seer.h:
--------------------------------------------------------------------------------
1 | //
2 | // Seer.h
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 4/1/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #import
14 |
15 | // In this header, you should import all the public headers of your framework using statements like #import
16 |
--------------------------------------------------------------------------------
/Sources/Seer/SystemModules/C_libpng.build/cheader.h:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
--------------------------------------------------------------------------------
/Sources/Seer/SystemModules/C_libpng.build/module.modulemap:
--------------------------------------------------------------------------------
1 | module C_libpng [system]
2 | {
3 | header "cheader.h"
4 | link "png"
5 | export *
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/Steve/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "16x16",
5 | "idiom" : "mac",
6 | "filename" : "icon-16.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "16x16",
11 | "idiom" : "mac",
12 | "filename" : "icon-33.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "32x32",
17 | "idiom" : "mac",
18 | "filename" : "icon-32.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "32x32",
23 | "idiom" : "mac",
24 | "filename" : "icon-64.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "128x128",
29 | "idiom" : "mac",
30 | "filename" : "icon-128.png",
31 | "scale" : "1x"
32 | },
33 | {
34 | "size" : "128x128",
35 | "idiom" : "mac",
36 | "filename" : "icon-257.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "256x256",
41 | "idiom" : "mac",
42 | "filename" : "icon-256.png",
43 | "scale" : "1x"
44 | },
45 | {
46 | "size" : "256x256",
47 | "idiom" : "mac",
48 | "filename" : "icon-513.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "512x512",
53 | "idiom" : "mac",
54 | "filename" : "icon-512.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "512x512",
59 | "idiom" : "mac",
60 | "filename" : "icon-1024.png",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-1024.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-128.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-16.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-256.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-257.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-257.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-32.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-33.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-512.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-513.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-513.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/Sources/Steve/Steve/Assets.xcassets/AppIcon.appiconset/icon-64.png
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSApplicationCategoryType
24 | public.app-category.entertainment
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | NSHumanReadableCopyright
28 | Copyright © 2022 Paul Nettle. All rights reserved.
29 | NSMainStoryboardFile
30 | Main
31 | NSPrincipalClass
32 | NSApplication
33 |
34 |
35 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Reference/inter6.quick-random-movements.mp4:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:249987100529d8494e6e3662ef9a77d7e2c5807dd56f95545ea8ea79b2ace1fc
3 | size 30049781
4 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Reference/inter6.slow-in-out.mp4:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:e6ba644f2cf3f5b05a8337f24235c75a828de76520931f1ac297d805bdb26438
3 | size 54727584
4 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Reference/mds12-56b.mp4:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:e7985e85ac45f9a61c11eef7a9466759babdce1f43c78c49680fc0d05511095d
3 | size 10747441
4 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/Steve.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.disable-library-validation
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/SteveAppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SteveAppDelegate.swift
3 | // Steve
4 | //
5 | // Created by Paul Nettle on 11/7/16.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Cocoa
14 | import Seer
15 |
16 | @NSApplicationMain
17 | class SteveAppDelegate: NSObject, NSApplicationDelegate
18 | {
19 | func applicationDidFinishLaunching(_ aNotification: Notification)
20 | {
21 | }
22 |
23 | func applicationWillTerminate(_ aNotification: Notification)
24 | {
25 | // _ = Config.write()
26 | }
27 |
28 | func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool
29 | {
30 | return true
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Sources/Steve/Steve/SteveWindow.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SteveWindow.swift
3 | // Steve
4 | //
5 | // Created by Paul Nettle on 3/24/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 | import Seer
15 | import AppKit
16 | import Minion
17 |
18 | final class SteveWindow: NSWindow
19 | {
20 | override func close()
21 | {
22 | gLogger.stop(broadcastMessage: ">>> Session ended")
23 | super.close()
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Sources/magic.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
12 |
13 |
15 |
16 |
18 |
19 |
21 |
22 |
24 |
25 |
27 |
28 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/Sources/magic.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/mdscodes/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/mdscodes/mdscodes.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/mdscodes/mdscodes.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/mdscodes/mdscodes.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/mdscodes/mdscodes/mdscodes.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.disable-library-validation
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/whisper/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - for_where
3 | - opening_brace
4 | - identifier_name
5 | - line_length
6 | - file_length
7 | - function_body_length
8 | - cyclomatic_complexity
9 | - type_body_length
10 | - statement_position
11 | - function_parameter_count
12 | - large_tuple
13 | - trailing_comma
14 | - switch_case_alignment
15 | - closure_parameter_position
16 | - nesting
17 | - legacy_hashing
18 | - unused_setter_value
19 | - comment_spacing
20 |
--------------------------------------------------------------------------------
/Sources/whisper/SystemModules/C_AAlib.build/cheader.h:
--------------------------------------------------------------------------------
1 | #include
2 |
--------------------------------------------------------------------------------
/Sources/whisper/SystemModules/C_AAlib.build/module.modulemap:
--------------------------------------------------------------------------------
1 | module C_AAlib [system]
2 | {
3 | header "cheader.h"
4 | link "aa"
5 | export *
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/whisper/SystemModules/C_Libav.build/cheader.h:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 |
--------------------------------------------------------------------------------
/Sources/whisper/SystemModules/C_Libav.build/module.modulemap:
--------------------------------------------------------------------------------
1 | module C_Libav [system]
2 | {
3 | header "cheader.h"
4 | link "avcodec"
5 | link "avutil"
6 | link "avformat"
7 | export *
8 | }
9 |
--------------------------------------------------------------------------------
/Sources/whisper/SystemModules/C_ncurses.build/cheader.h:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
--------------------------------------------------------------------------------
/Sources/whisper/SystemModules/C_ncurses.build/module.modulemap:
--------------------------------------------------------------------------------
1 | module C_ncurses [system]
2 | {
3 | header "cheader.h"
4 | link "ncurses"
5 | export *
6 | }
7 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper/Signals.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Signals.swift
3 | // Whisper
4 | //
5 | // Created by Paul Nettle on 4/2/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | #if os(Linux)
14 | import Glibc
15 | #elseif os(macOS)
16 | import Darwin
17 | #endif
18 |
19 | internal enum Signal: Int32
20 | {
21 | case HUP = 1
22 | case INT = 2
23 | case QUIT = 3
24 | case ILL = 4
25 | case TRAP = 5
26 | case ABRT = 6
27 | case EMT = 7
28 | case FPE = 8
29 | case KILL = 9
30 | case BUS = 10
31 | case SEGV = 11
32 | case SYS = 12
33 | case PIPE = 13
34 | case ALRM = 14
35 | case TERM = 15
36 | case URG = 16
37 | case STOP = 17
38 | case TSTP = 18
39 | case CONT = 19
40 | case CHLD = 20
41 | case TTIN = 21
42 | case TTOU = 22
43 | case IO = 23
44 | case XCPU = 24
45 | case XFSZ = 25
46 | case VTALRM = 26
47 | case PROF = 27
48 | case WINCH = 28
49 | case INFO = 29
50 | case USR1 = 30
51 | case USR2 = 31
52 | }
53 |
54 | typealias SigactionHandler = @convention(c)(Int32) -> Void
55 |
56 | internal func trap(signum: Signal, action: @escaping SigactionHandler)
57 | {
58 | #if os(Linux)
59 | var sigAction = sigaction()
60 | sigAction.__sigaction_handler = unsafeBitCast(action, to: sigaction.__Unnamed_union___sigaction_handler.self)
61 | sigaction(signum.rawValue, &sigAction, nil)
62 | #elseif os(macOS)
63 | // From Swift, sigaction.init() collides with the Darwin.sigaction() function.
64 | // This local typealias allows us to disambiguate them.
65 | typealias SignalAction = sigaction
66 |
67 | var signalAction = SignalAction(__sigaction_u: unsafeBitCast(action, to: __sigaction_u.self), sa_mask: 0, sa_flags: 0)
68 |
69 | withUnsafePointer(to: &signalAction)
70 | { actionPointer -> Void in
71 | sigaction(signum.rawValue, actionPointer, nil)
72 | }
73 | #endif
74 | }
75 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper/VideoDecodeError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // VideoDecodeError.swift
3 | // Seer
4 | //
5 | // Created by Paul Nettle on 3/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 |
15 | enum VideoDecodeError: Error
16 | {
17 | case Frame(String)
18 | case IO(String)
19 | case Stream(String)
20 | case Codec(String)
21 |
22 | var localizedDescription: String
23 | {
24 | switch self
25 | {
26 | case .Frame(let str):
27 | return "VideoDecodeError.Frame: \(str)"
28 | case .IO(let str):
29 | return "VideoDecodeError.IO: \(str)"
30 | case .Stream(let str):
31 | return "VideoDecodeError.Stream: \(str)"
32 | case .Codec(let str):
33 | return "VideoDecodeError.Codec: \(str)"
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper/WhisperServerPeer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WhisperServerPeer.swift
3 | // Whisper
4 | //
5 | // Created by Paul Nettle on 2/23/18.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | import Foundation
14 | import Minion
15 | import Seer
16 |
17 | /// Our application-specific `ServerPeer` implementation, handling payloads specific to Whisper
18 | public class WhisperServerPeer: SeerServerPeer
19 | {
20 | /// A factory for creating `WhisperServerPeer` instances
21 | ///
22 | /// This is used when starting an instance of `Server` (via `Server`'s `start` method)
23 | public static func createWhisperServerPeer(socketAddress: Ipv4SocketAddress, server: Server) -> WhisperServerPeer?
24 | {
25 | return WhisperServerPeer(socketAddress: socketAddress, server: server)
26 | }
27 |
28 | /// Custom code to send information to clients when they connect
29 | public override func onServerConnect(from socketAddress: Ipv4SocketAddress)
30 | {
31 | super.onServerConnect(from: socketAddress)
32 |
33 | guard let socket = self.socket else
34 | {
35 | gLogger.error("WhisperServerPeer.onServerConnect: Server connection received ping, but does not appear to be connected (no socket)")
36 | return
37 | }
38 |
39 | let connMessage = ServerConnectMessage(versions: ["Whisper": whisperVersion, "Minion": MinionVersion, "Seer": SeerVersion])
40 | if !(connMessage.getPayload()?.send(to: socketAddress, over: socket) ?? false)
41 | {
42 | gLogger.warn("WhisperServerPeer.onServerConnect: Failed to send ServerConnect message")
43 | }
44 | }
45 |
46 | /// Provides access to the active `MediaProvider`
47 | public override func getMediaProvider() -> MediaProvider?
48 | {
49 | return Whisper.instance.mediaProvider
50 | }
51 |
52 | public override func onSystemShutdown()
53 | {
54 | Whisper.systemShutdown()
55 | }
56 |
57 | public override func onSystemReboot()
58 | {
59 | Whisper.systemReboot()
60 | }
61 |
62 | public override func onCheckForUpdates()
63 | {
64 | Whisper.checkForUpdates()
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper/main.swift:
--------------------------------------------------------------------------------
1 | //
2 | // main.swift
3 | // Whisper
4 | //
5 | // Created by Paul Nettle on 8/31/17.
6 | //
7 | // This file is part of The Nettle Magic Project.
8 | // Copyright © 2022 Paul Nettle. All rights reserved.
9 | //
10 | // Use of this source code is governed by a BSD-style license that can be found
11 | // in the LICENSE file in the root of the source tree.
12 |
13 | Whisper.instance.run()
14 |
--------------------------------------------------------------------------------
/Sources/whisper/whisper/whisper.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.cs.disable-library-validation
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/docs/DEPS.linux:
--------------------------------------------------------------------------------
1 | ------------------------------------------------------------------------------------------------------------------------------------
2 | LINUX DEPENDENCIES
3 | ------------------------------------------------------------------------------------------------------------------------------------
4 |
5 | SDK:
6 |
7 | clang libpng-dev libncurses5-dev libaa1-dev libavcodec-dev libavformat-dev
8 |
9 | Auto-update support:
10 |
11 | curl
12 |
13 | Quality of life:
14 |
15 | tmux
16 |
--------------------------------------------------------------------------------
/docs/_img-master/intro-stages.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:ebff9079c6e0ef116effb5918a342ca8a9f91c5d7e075bb21cd7efa166c4a792
3 | size 48499009
4 |
--------------------------------------------------------------------------------
/docs/_img-master/shuffle.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:5cbc025b8f6447feb71a0d7949afb4bff620b7954da6f194696c5cedaf8808de
3 | size 162198
4 |
--------------------------------------------------------------------------------
/docs/_img-master/stamp-generation.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:ab8a103af5c81a621f235a12243c4d83c27b1ece2171f5b1d1e5ec228ed0dc9e
3 | size 39051974
4 |
--------------------------------------------------------------------------------
/docs/_img-master/temporal_grid.psd:
--------------------------------------------------------------------------------
1 | version https://git-lfs.github.com/spec/v1
2 | oid sha256:f1f148165d73bfe4832aebbe329a5b13f2a544773a6973cde42447be687a2b9a
3 | size 18798722
4 |
--------------------------------------------------------------------------------
/docs/img/abra_ipad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/abra_ipad.png
--------------------------------------------------------------------------------
/docs/img/contour-landmarks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/contour-landmarks.png
--------------------------------------------------------------------------------
/docs/img/contour-mark-lines.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/contour-mark-lines.png
--------------------------------------------------------------------------------
/docs/img/deck-locations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/deck-locations.png
--------------------------------------------------------------------------------
/docs/img/deck_extents.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/deck_extents.png
--------------------------------------------------------------------------------
/docs/img/deck_under_ir.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/deck_under_ir.jpg
--------------------------------------------------------------------------------
/docs/img/device.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/device.png
--------------------------------------------------------------------------------
/docs/img/error-correction-viz.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/error-correction-viz.png
--------------------------------------------------------------------------------
/docs/img/ink_comparison.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/ink_comparison.jpg
--------------------------------------------------------------------------------
/docs/img/intro-stages.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/intro-stages.png
--------------------------------------------------------------------------------
/docs/img/manual-marks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/manual-marks.jpg
--------------------------------------------------------------------------------
/docs/img/manual-process.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/manual-process.jpg
--------------------------------------------------------------------------------
/docs/img/marking-r&d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/marking-r&d.jpg
--------------------------------------------------------------------------------
/docs/img/mds18-54-rubberstamp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/mds18-54-rubberstamp.png
--------------------------------------------------------------------------------
/docs/img/search_grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/search_grid.png
--------------------------------------------------------------------------------
/docs/img/search_line_edge_detect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/search_line_edge_detect.png
--------------------------------------------------------------------------------
/docs/img/sharpness-graphs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/sharpness-graphs.png
--------------------------------------------------------------------------------
/docs/img/shuffle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/shuffle.png
--------------------------------------------------------------------------------
/docs/img/stamp-generation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/stamp-generation.png
--------------------------------------------------------------------------------
/docs/img/stamp-rig.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/stamp-rig.jpg
--------------------------------------------------------------------------------
/docs/img/stamped-deck.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/stamped-deck.jpg
--------------------------------------------------------------------------------
/docs/img/steve.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/steve.png
--------------------------------------------------------------------------------
/docs/img/temporal_grid.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/temporal_grid.png
--------------------------------------------------------------------------------
/docs/img/uv-ink.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/uv-ink.jpg
--------------------------------------------------------------------------------
/docs/img/whisper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/nettlep/magic/2642ecc54b26b8f2173fbd16f730c92d6cbc072f/docs/img/whisper.png
--------------------------------------------------------------------------------
/tools/slint:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | if [[ ! -z $1 ]]; then
4 | pathOpt="--path $1"
5 | fi
6 |
7 | if which swiftlint >/dev/null; then
8 | swiftlint lint --quiet $pathOpt
9 | else
10 | echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
11 | fi
--------------------------------------------------------------------------------