diff --git a/Sources/Ink/Internal/Heading.swift b/Sources/Ink/Internal/Heading.swift index 219003f..aa42d4d 100644 --- a/Sources/Ink/Internal/Heading.swift +++ b/Sources/Ink/Internal/Heading.swift @@ -21,7 +21,21 @@ internal struct Heading: Fragment { func html(usingURLs urls: NamedURLCollection, modifiers: ModifierCollection) -> String { - let body = text.html(usingURLs: urls, modifiers: modifiers) + var body = text.html(usingURLs: urls, modifiers: modifiers) + + if !body.isEmpty { + let lastCharacterIndex = body.index(before: body.endIndex) + var trimIndex = lastCharacterIndex + + while body[trimIndex] == "#", trimIndex != body.startIndex { + trimIndex = body.index(before: trimIndex) + } + + if trimIndex != lastCharacterIndex { + body = String(body[..\(body)" } diff --git a/Tests/InkTests/HeadingTests.swift b/Tests/InkTests/HeadingTests.swift index 0797bb1..555b1d5 100644 --- a/Tests/InkTests/HeadingTests.swift +++ b/Tests/InkTests/HeadingTests.swift @@ -46,6 +46,18 @@ final class HeadingTests: XCTestCase { let html = MarkdownParser().html(from: markdown) XCTAssertEqual(html, "

\(markdown)

") } + + func testRemovingTrailingMarkersFromHeading() { + let markdown = "# Heading #######" + let html = MarkdownParser().html(from: markdown) + XCTAssertEqual(html, "

Heading

") + } + + func testHeadingWithOnlyTrailingMarkers() { + let markdown = "# #######" + let html = MarkdownParser().html(from: markdown) + XCTAssertEqual(html, "

") + } } extension HeadingTests { @@ -56,7 +68,9 @@ extension HeadingTests { ("testHeadingsWithLeadingNumbers", testHeadingsWithLeadingNumbers), ("testHeadingWithPreviousWhitespace", testHeadingWithPreviousWhitespace), ("testHeadingWithPreviousNewlineAndWhitespace", testHeadingWithPreviousNewlineAndWhitespace), - ("testInvalidHeaderLevel", testInvalidHeaderLevel) + ("testInvalidHeaderLevel", testInvalidHeaderLevel), + ("testRemovingTrailingMarkersFromHeading", testRemovingTrailingMarkersFromHeading), + ("testHeadingWithOnlyTrailingMarkers", testHeadingWithOnlyTrailingMarkers) ] } }