Genius Lyrics (I so like it)

This commit is contained in:
eevee committed 2024-05-04 20:13:19 +03:00
1 parent aca33323f5
commit 04bad04ac9
24 files changed
+765 -2

No files matched your search

@@ -0,0 +1,10 @@
import Foundation
extension Collection {
func dropLast(while predicate: (Element) throws -> Bool) rethrows -> SubSequence {
guard let index = try indices.reversed().first(where: { try !predicate(self[$0]) }) else {
return self[startIndex..<startIndex]
}
return self[...index]
}
}
@@ -0,0 +1,55 @@
import SwiftUI
import UIKit
extension Color {
init(hex: String) {
let hex = hex.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
var int: UInt64 = 0
Scanner(string: hex).scanHexInt64(&int)
let a, r, g, b: UInt64
switch hex.count {
case 3:
(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
case 6:
(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
case 8:
(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
default:
(a, r, g, b) = (1, 1, 1, 0)
}
self.init(
.sRGB,
red: Double(r) / 255,
green: Double(g) / 255,
blue: Double(b) / 255,
opacity: Double(a) / 255
)
}
var components: (red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
typealias NativeColor = UIColor
var r: CGFloat = 0
var g: CGFloat = 0
var b: CGFloat = 0
var a: CGFloat = 0
guard NativeColor(self).getRed(&r, green: &g, blue: &b, alpha: &a) else {
return (0, 0, 0, 0)
}
return (r, g, b, a)
}
var uInt32: UInt32 {
UInt32(components.alpha * 255) << 24
| UInt32(components.red * 255) << 16
| UInt32(components.green * 255) << 8
| UInt32(components.blue * 255)
}
}
@@ -0,0 +1,11 @@
import Foundation
extension Dictionary {
var queryString: String {
return self
.compactMap({ (key, value) -> String in
return "\(key)=\(value)"
})
.joined(separator: "&")
}
}
@@ -1,10 +1,32 @@
import Foundation
extension String {
static func ~= (lhs: String, rhs: String) -> Bool {
guard let regex = try? NSRegularExpression(pattern: rhs) else { return false }
let range = NSRange(location: 0, length: lhs.utf16.count)
return regex.firstMatch(in: lhs, options: [], range: range) != nil
}
var range: NSRange {
NSRange(self.startIndex..., in: self)
}
func containsInsensitive<S: StringProtocol>(_ s: S) -> Bool {
self.range(of: s, options: .caseInsensitive) != nil
}
func matches(_ pattern: String) -> Bool {
try! NSRegularExpression(pattern: pattern)
.firstMatch(in: self, range: self.range) != nil
}
func removeMatches(_ pattern: String) -> String {
try! NSRegularExpression(pattern: pattern)
.stringByReplacingMatches(
in: self,
range: self.range,
withTemplate: ""
)
}
}
@@ -0,0 +1,7 @@
import Foundation
extension URL {
var isLyrics: Bool {
self.path.contains("color-lyrics/v2")
}
}