Skip to content

Commit f6d5535

Browse files
committed
Fix and add test case for single line block parse
1 parent cc9875f commit f6d5535

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

Sources/Markdown/Base/DirectiveArgument.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ public struct DirectiveArgumentText: Equatable {
201201
var line = TrimmedLine(untrimmedText[...],
202202
source: range?.lowerBound.source,
203203
lineNumber: range?.lowerBound.line,
204-
parseIndex: parseIndex)
204+
parseIndex: parseIndex,
205+
startParseIndex: untrimmedText.index(parseIndex, offsetBy: 1 - (range?.lowerBound.column ?? 1)))
205206
line.lexWhitespace()
206207
while !line.isEmptyOrAllWhitespace {
207208
let name: TrimmedLine.Lex?

Sources/Markdown/Parser/BlockDirectiveParser.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -304,12 +304,12 @@ struct TrimmedLine {
304304
}
305305

306306
/// - parameter untrimmedText: ``untrimmedText``
307-
init(_ untrimmedText: Substring, source: URL?, lineNumber: Int?, parseIndex: Substring.Index? = nil) {
307+
init(_ untrimmedText: Substring, source: URL?, lineNumber: Int?, parseIndex: Substring.Index? = nil, startParseIndex: Substring.Index? = nil) {
308308
self.untrimmedText = untrimmedText
309309
self.source = source
310310
self.parseIndex = parseIndex ?? untrimmedText.startIndex
311311
self.lineNumber = lineNumber
312-
self.startParseIndex = self.parseIndex
312+
self.startParseIndex = startParseIndex ?? self.parseIndex
313313
}
314314

315315
/// Return the UTF-8 source location of the parse index if the line

Tests/MarkdownTests/Parsing/BlockDirectiveParserTests.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,5 +1042,29 @@ class BlockDirectiveArgumentParserTests: XCTestCase {
10421042
└─ Text "Line c This is a single-line comment"
10431043
"""
10441044
XCTAssertEqual(expected, documentation.debugDescription())
1045+
1046+
func testDirectiveArgumentOnNonfirstLineParsing() throws {
1047+
let source = """
1048+
1049+
@Options(scope: page)
1050+
"""
1051+
1052+
let line = 2
1053+
let document = Document(parsing: source, options: .parseBlockDirectives)
1054+
let directive = try XCTUnwrap(document.child(at: 0) as? BlockDirective)
1055+
let arguments = directive.argumentText.parseNameValueArguments()
1056+
let scopeArg = try XCTUnwrap(arguments["scope"])
1057+
1058+
XCTAssertEqual("scope", scopeArg.name)
1059+
XCTAssertEqual(
1060+
scopeArg.nameRange,
1061+
SourceLocation(line: line, column: 10, source: nil) ..< SourceLocation(line: line, column: 15, source: nil)
1062+
)
1063+
1064+
XCTAssertEqual("page", scopeArg.value)
1065+
XCTAssertEqual(
1066+
scopeArg.valueRange,
1067+
SourceLocation(line: line, column: 17, source: nil) ..< SourceLocation(line: line, column: 21, source: nil)
1068+
)
10451069
}
10461070
}

0 commit comments

Comments
 (0)