diff --git a/Sources/SwiftParser/Languages/MarkdownLanguage.swift b/Sources/SwiftParser/Languages/MarkdownLanguage.swift index 4d364fa..188ffe5 100644 --- a/Sources/SwiftParser/Languages/MarkdownLanguage.swift +++ b/Sources/SwiftParser/Languages/MarkdownLanguage.swift @@ -126,7 +126,17 @@ public struct MarkdownLanguage: CodeLanguage { func add(_ t: Token) { tokens.append(t) } while index < input.endIndex { let ch = input[index] - if ch == "#" { + if ch == "\\" { + let start = index + advance() + if index < input.endIndex { + let escaped = input[index] + advance() + add(.text(String(escaped), start..!~|;&=".contains(input[index]) && + !"#-*+_`[].()<>!~|;&=\\".contains(input[index]) && !input[index].isNumber { advance() } diff --git a/Tests/SwiftParserTests/SwiftParserTests.swift b/Tests/SwiftParserTests/SwiftParserTests.swift index 7fc1f74..d98f1ee 100644 --- a/Tests/SwiftParserTests/SwiftParserTests.swift +++ b/Tests/SwiftParserTests/SwiftParserTests.swift @@ -92,6 +92,15 @@ final class SwiftParserTests: XCTestCase { XCTAssertEqual(result.root.children.first?.type as? MarkdownLanguage.Element, .image) } + func testMarkdownEscapedCharacters() { + let parser = SwiftParser() + let source = "\\*not italic\\*" + let result = parser.parse(source, language: MarkdownLanguage()) + XCTAssertEqual(result.errors.count, 0) + XCTAssertEqual(result.root.children.count, 1) + XCTAssertEqual(result.root.children.first?.value, "*not italic*") + } + func testPrattExpression() { let parser = SwiftParser() let source = "x = 1 + 2 * 3"