From af743ad6882bfe1adb0acf7453d36d2075ebb1d5 Mon Sep 17 00:00:00 2001 From: Ezekiel Elin Date: Fri, 29 Nov 2019 17:37:51 -0500 Subject: [PATCH] Introduce case-insensitivity for reference link labels (#16) Merge PR from @ezfe * Introduce case-insensitivity for reference link labels * Moved `.lowercased()` --- Sources/Ink/API/MarkdownParser.swift | 2 +- Sources/Ink/Internal/NamedURLCollection.swift | 6 +++--- Sources/Ink/Internal/URLDeclaration.swift | 4 ++-- Tests/InkTests/LinkTests.swift | 13 +++++++++++++ 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Sources/Ink/API/MarkdownParser.swift b/Sources/Ink/API/MarkdownParser.swift index 2bbb6de..c9a0516 100644 --- a/Sources/Ink/API/MarkdownParser.swift +++ b/Sources/Ink/API/MarkdownParser.swift @@ -42,7 +42,7 @@ public struct MarkdownParser { public func parse(_ markdown: String) -> Markdown { var reader = Reader(string: markdown) var fragments = [ParsedFragment]() - var urlsByName = [Substring : URL]() + var urlsByName = [String : URL]() var metadata: Metadata? while !reader.didReachEnd { diff --git a/Sources/Ink/Internal/NamedURLCollection.swift b/Sources/Ink/Internal/NamedURLCollection.swift index a0391a9..ce0c1fe 100644 --- a/Sources/Ink/Internal/NamedURLCollection.swift +++ b/Sources/Ink/Internal/NamedURLCollection.swift @@ -5,13 +5,13 @@ */ internal struct NamedURLCollection { - private let urlsByName: [Substring : URL] + private let urlsByName: [String : URL] - init(urlsByName: [Substring : URL]) { + init(urlsByName: [String : URL]) { self.urlsByName = urlsByName } func url(named name: Substring) -> URL? { - urlsByName[name] + urlsByName[name.lowercased()] } } diff --git a/Sources/Ink/Internal/URLDeclaration.swift b/Sources/Ink/Internal/URLDeclaration.swift index 188b06b..1dfd34f 100644 --- a/Sources/Ink/Internal/URLDeclaration.swift +++ b/Sources/Ink/Internal/URLDeclaration.swift @@ -5,7 +5,7 @@ */ internal struct URLDeclaration: Readable { - var name: Substring + var name: String var url: URL static func read(using reader: inout Reader) throws -> Self { @@ -15,6 +15,6 @@ internal struct URLDeclaration: Readable { try reader.readWhitespaces() let url = reader.readUntilEndOfLine() - return URLDeclaration(name: name, url: url) + return URLDeclaration(name: name.lowercased(), url: url) } } diff --git a/Tests/InkTests/LinkTests.swift b/Tests/InkTests/LinkTests.swift index 15bffca..6605e10 100644 --- a/Tests/InkTests/LinkTests.swift +++ b/Tests/InkTests/LinkTests.swift @@ -23,6 +23,18 @@ final class LinkTests: XCTestCase { XCTAssertEqual(html, #"

Title

"#) } + func testCaseMismatchedLinkWithReference() { + let html = MarkdownParser().html(from: """ + [Title][Foo] + [Title][αγω] + + [FOO]: /url + [ΑΓΩ]: /φου + """) + + XCTAssertEqual(html, #"

Title Title

"#) + } + func testNumericLinkWithReference() { let html = MarkdownParser().html(from: """ [1][1] @@ -59,6 +71,7 @@ extension LinkTests { return [ ("testLinkWithURL", testLinkWithURL), ("testLinkWithReference", testLinkWithReference), + ("testCaseMismatchedLinkWithReference", testCaseMismatchedLinkWithReference), ("testNumericLinkWithReference", testNumericLinkWithReference), ("testBoldLinkWithInternalMarkers", testBoldLinkWithInternalMarkers), ("testBoldLinkWithExternalMarkers", testBoldLinkWithExternalMarkers),