From 39e5b27a7f7411f209ebf815b4291aee89a2ab59 Mon Sep 17 00:00:00 2001 From: Dongyu Zhao Date: Tue, 15 Jul 2025 17:57:19 +0800 Subject: [PATCH 1/2] Fix Setext heading loop termination --- Sources/SwiftParser/Languages/MarkdownLanguage.swift | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Sources/SwiftParser/Languages/MarkdownLanguage.swift b/Sources/SwiftParser/Languages/MarkdownLanguage.swift index 08e572e..d7b467d 100644 --- a/Sources/SwiftParser/Languages/MarkdownLanguage.swift +++ b/Sources/SwiftParser/Languages/MarkdownLanguage.swift @@ -376,7 +376,10 @@ public struct MarkdownLanguage: CodeLanguage { default: return false } - if idx < context.tokens.count, let next = context.tokens[idx] as? Token, case .newline = next { break } + if idx < context.tokens.count, let next = context.tokens[idx] as? Token { + if case .newline = next { break } + if case .eof = next { break } + } } if count == 0 { return false } if idx < context.tokens.count, let endTok = context.tokens[idx] as? Token { From c5177d743334eb98afb08559e1eca1ca756a159f Mon Sep 17 00:00:00 2001 From: Dongyu Zhao Date: Tue, 15 Jul 2025 18:08:57 +0800 Subject: [PATCH 2/2] Fix heading whitespace and table cells --- Sources/SwiftParser/Languages/MarkdownLanguage.swift | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Sources/SwiftParser/Languages/MarkdownLanguage.swift b/Sources/SwiftParser/Languages/MarkdownLanguage.swift index d7b467d..45e803b 100644 --- a/Sources/SwiftParser/Languages/MarkdownLanguage.swift +++ b/Sources/SwiftParser/Languages/MarkdownLanguage.swift @@ -324,9 +324,9 @@ public struct MarkdownLanguage: CodeLanguage { processed.append(tok) } - let value = processed.map { $0.text }.joined() + let trimmedValue = processed.map { $0.text }.joined().trimmingCharacters(in: .whitespaces) let children = MarkdownLanguage.parseInlineTokens(processed, input: context.input) - let node = MarkdownHeadingNode(value: value, level: count) + let node = MarkdownHeadingNode(value: trimmedValue, level: count) children.forEach { node.addChild($0) } context.currentNode.addChild(node) } @@ -1056,13 +1056,9 @@ public struct MarkdownLanguage: CodeLanguage { cells.append(cell.trimmingCharacters(in: .whitespaces)) cell = "" context.index += 1 - case .newline: - cells.append(cell.trimmingCharacters(in: .whitespaces)) - context.index += 1 - context.currentNode.addChild(MarkdownTableNode(value: cells.joined(separator: "|"))) - return - case .eof: + case .newline, .eof: cells.append(cell.trimmingCharacters(in: .whitespaces)) + if let last = cells.last, last.isEmpty { cells.removeLast() } context.index += 1 context.currentNode.addChild(MarkdownTableNode(value: cells.joined(separator: "|"))) return