Skip to content

Commit aed3b26

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

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-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
@@ -265,12 +265,12 @@ struct TrimmedLine {
265265
}
266266

267267
/// - parameter untrimmedText: ``untrimmedText``
268-
init(_ untrimmedText: Substring, source: URL?, lineNumber: Int?, parseIndex: Substring.Index? = nil) {
268+
init(_ untrimmedText: Substring, source: URL?, lineNumber: Int?, parseIndex: Substring.Index? = nil, startParseIndex: Substring.Index? = nil) {
269269
self.untrimmedText = untrimmedText
270270
self.source = source
271271
self.parseIndex = parseIndex ?? untrimmedText.startIndex
272272
self.lineNumber = lineNumber
273-
self.startParseIndex = self.parseIndex
273+
self.startParseIndex = startParseIndex ?? self.parseIndex
274274
}
275275

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

Tests/MarkdownTests/Parsing/BlockDirectiveParserTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -982,4 +982,29 @@ class BlockDirectiveArgumentParserTests: XCTestCase {
982982
"""#
983983
XCTAssertEqual(document.debugDescription(options: .printSourceLocations), expectedDump)
984984
}
985+
986+
func testDirectiveArgumentOnNonfirstLineParsing() throws {
987+
let source = """
988+
989+
@Options(scope: page)
990+
"""
991+
992+
let line = 2
993+
let document = Document(parsing: source, options: .parseBlockDirectives)
994+
let directive = try XCTUnwrap(document.child(at: 0) as? BlockDirective)
995+
let arguments = directive.argumentText.parseNameValueArguments()
996+
let scopeArg = try XCTUnwrap(arguments["scope"])
997+
998+
XCTAssertEqual("scope", scopeArg.name)
999+
XCTAssertEqual(
1000+
scopeArg.nameRange,
1001+
SourceLocation(line: line, column: 10, source: nil) ..< SourceLocation(line: line, column: 15, source: nil)
1002+
)
1003+
1004+
XCTAssertEqual("page", scopeArg.value)
1005+
XCTAssertEqual(
1006+
scopeArg.valueRange,
1007+
SourceLocation(line: line, column: 17, source: nil) ..< SourceLocation(line: line, column: 21, source: nil)
1008+
)
1009+
}
9851010
}

0 commit comments

Comments
 (0)