Skip to content

Commit 3b4c9e2

Browse files
committed
Use NSRegularExpression to support below iOS 16
1 parent d8e0552 commit 3b4c9e2

File tree

3 files changed

+24
-14
lines changed

3 files changed

+24
-14
lines changed

Package.swift

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// swift-tools-version:5.8
1+
// swift-tools-version:5.6
22

33
import PackageDescription
44

@@ -29,9 +29,6 @@ let package = Package(
2929
.product(name: "cmark-gfm", package: "swift-cmark"),
3030
.product(name: "cmark-gfm-extensions", package: "swift-cmark"),
3131
.product(name: "NetworkImage", package: "NetworkImage"),
32-
],
33-
swiftSettings: [
34-
.enableUpcomingFeature("BareSlashRegexLiterals"),
3532
]
3633
),
3734
.testTarget(

Sources/MarkdownUI/Utility/InlineNode+RawImageData.swift

+22-9
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,36 @@ extension InlineNode {
2222
}
2323

2424
extension InlineNode {
25-
@available(iOS 16.0, macOS 13.0, tvOS 13.0, watchOS 6.0, *)
2625
var size: MarkdownImageSize? {
2726
switch self {
2827
case .text(let input):
29-
let pattern = /{(?:width\s*=\s*(\d+)px\s*)?(?:height\s*=\s*(\d+)px\s*)?(?:width\s*=\s*(\d+)px\s*)?(?:height\s*=\s*(\d+)px\s*)?\}/
28+
let pattern = "\\{(?:width\\s*=\\s*(\\d+)px\\s*)?(?:height\\s*=\\s*(\\d+)px\\s*)?(?:width\\s*=\\s*(\\d+)px\\s*)?(?:height\\s*=\\s*(\\d+)px\\s*)?\\}"
3029

31-
if let match = input.wholeMatch(of: pattern) {
32-
let widthParts = [match.output.1, match.output.3].compactMap { $0 }
33-
let heightParts = [match.output.2, match.output.4].compactMap { $0 }
30+
guard let regex = try? NSRegularExpression(pattern: pattern, options: []) else {
31+
return nil
32+
}
33+
34+
let range = NSRange(input.startIndex..<input.endIndex, in: input)
35+
guard let match = regex.firstMatch(in: input, options: [], range: range) else {
36+
return nil
37+
}
3438

35-
let width = widthParts.compactMap { Float(String($0)) }.last
36-
let height = heightParts.compactMap { Float(String($0)) }.last
39+
var width: CGFloat?
40+
var height: CGFloat?
3741

38-
return MarkdownImageSize(width: width.map(CGFloat.init), height: height.map(CGFloat.init))
42+
if let widthRange = Range(match.range(at: 1), in: input), let widthValue = Int(input[widthRange]) {
43+
width = CGFloat(widthValue)
44+
} else if let widthRange = Range(match.range(at: 3), in: input), let widthValue = Int(input[widthRange]) {
45+
width = CGFloat(widthValue)
3946
}
4047

41-
return nil
48+
if let heightRange = Range(match.range(at: 2), in: input), let heightValue = Int(input[heightRange]) {
49+
height = CGFloat(heightValue)
50+
} else if let heightRange = Range(match.range(at: 4), in: input), let heightValue = Int(input[heightRange]) {
51+
height = CGFloat(heightValue)
52+
}
53+
54+
return MarkdownImageSize(width: width, height: height)
4255
default:
4356
return nil
4457
}

Sources/MarkdownUI/Views/Inlines/ImageView.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ struct ImageView: View {
5353

5454
extension ImageView {
5555
init?(_ inlines: [InlineNode]) {
56-
if inlines.count == 2, #available(iOS 16.0, macOS 13.0, tvOS 16.0, *), let data = inlines.first?.imageData, let size = inlines.last?.size {
56+
if inlines.count == 2, let data = inlines.first?.imageData, let size = inlines.last?.size {
5757
self.init(data: data, size: size)
5858
}
5959
else if inlines.count == 1, let data = inlines.first?.imageData {

0 commit comments

Comments
 (0)