Failed try due to type mismatch of parser internals
This commit is contained in:
@@ -33,11 +33,14 @@ let parseTodoKeyword = todoKeywords.createTodoKeywordParser()
|
|||||||
let parseDoneKeyword = doneKeywords.createTodoKeywordParser()
|
let parseDoneKeyword = doneKeywords.createTodoKeywordParser()
|
||||||
|
|
||||||
let parseContentText = @[
|
let parseContentText = @[
|
||||||
anyUntil(choice(@[endOfStream, str("\n*")])),
|
anyUntil(choice(@[endOfStream, str("\n")])),
|
||||||
]
|
]
|
||||||
|
|
||||||
let parseHeadlineNewline = @[
|
let parseHeadlineNewline = @[
|
||||||
ignore(newline)
|
choice(@[
|
||||||
|
ch(NewLines),
|
||||||
|
endOfStream,
|
||||||
|
])
|
||||||
]
|
]
|
||||||
|
|
||||||
let parseHeadingText = @[
|
let parseHeadingText = @[
|
||||||
@@ -91,9 +94,9 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
|
|||||||
|
|
||||||
(parseHeadingText, buildHeadlineContent, false),
|
(parseHeadingText, buildHeadlineContent, false),
|
||||||
|
|
||||||
(parseContentText, buildHeadlineChildren, true),
|
# (parseContentText, buildHeadlineChildren, true),
|
||||||
|
|
||||||
# (parseHeadlineNewline, buildHeadlineNewline, true),
|
(parseHeadlineNewline, buildHeadlineNewline, false),
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -102,7 +105,8 @@ let headingParser = choice(@[
|
|||||||
endOfStream,
|
endOfStream,
|
||||||
])
|
])
|
||||||
|
|
||||||
let newlineParser = @[newline + newline]
|
|
||||||
|
let contentEndParser = newline
|
||||||
|
|
||||||
let buildNewline = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.} =
|
let buildNewline = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.} =
|
||||||
OrgBlock(
|
OrgBlock(
|
||||||
@@ -121,15 +125,14 @@ let contentParsersSeq: seq[tuple[
|
|||||||
ignoreEmpty: bool,
|
ignoreEmpty: bool,
|
||||||
# concatFn: (seq[OrgBlock], seq[OrgBlock]) -> seq[OrgBlock],
|
# concatFn: (seq[OrgBlock], seq[OrgBlock]) -> seq[OrgBlock],
|
||||||
]] = @[
|
]] = @[
|
||||||
(newlineParser, buildNewline, false),
|
|
||||||
(parseBlockText, buildNewline, true),
|
(parseBlockText, buildNewline, true),
|
||||||
# (newlineParser, buildNewline, false),
|
(contentEndParser, buildNewline, true),
|
||||||
]
|
]
|
||||||
|
|
||||||
proc parseHeadlineChildren(builder: OrgBuilder): OrgBuilderResult =
|
proc parseHeadlineChildren(builder: OrgBuilder): OrgBuilderResult =
|
||||||
var headingBlock = builder.tree[0]
|
var headingBlock = builder.tree[0]
|
||||||
|
|
||||||
echo "Builder " & $builder
|
# echo "Builder " & $builder
|
||||||
|
|
||||||
# var builderAcc: OrgBuilderResult = OrgBuilderResult.ok(builder)
|
# var builderAcc: OrgBuilderResult = OrgBuilderResult.ok(builder)
|
||||||
var builderAcc: OrgBuilderResult = OrgBuilderResult.ok(OrgBuilder(
|
var builderAcc: OrgBuilderResult = OrgBuilderResult.ok(OrgBuilder(
|
||||||
@@ -139,18 +142,23 @@ proc parseHeadlineChildren(builder: OrgBuilder): OrgBuilderResult =
|
|||||||
)
|
)
|
||||||
))
|
))
|
||||||
|
|
||||||
|
echo "builderAcc before parse content ", builderAcc
|
||||||
|
# echo builderAcc.tryParser(headingParser)
|
||||||
while builderAcc.isOk() and builderAcc.tryParser(headingParser).isErr():
|
while builderAcc.isOk() and builderAcc.tryParser(headingParser).isErr():
|
||||||
builderAcc = builderAcc
|
builderAcc = builderAcc
|
||||||
.applyParsersSeqToSeq(
|
.applyParsersSeqToSeq(
|
||||||
contentParsersSeq
|
contentParsersSeq
|
||||||
)
|
)
|
||||||
|
echo "builderAcc after parse in while loop ", builderAcc
|
||||||
# echo builderAcc
|
# echo builderAcc
|
||||||
|
|
||||||
|
|
||||||
let content = builderAcc.fold(
|
let content = builderAcc.fold(
|
||||||
(err) => newSeq[OrgBlock](),
|
(err) => 0, # newSeq[OrgBlock](),
|
||||||
(builder: OrgBuilder) => builder.tree,
|
(builder: OrgBuilder) => len builder.tree,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# echo "builderAcc" & $builderAcc
|
||||||
echo "content" & $content
|
echo "content" & $content
|
||||||
|
|
||||||
# headingBlock.content = content
|
# headingBlock.content = content
|
||||||
@@ -205,6 +213,10 @@ Foo
|
|||||||
Some more content
|
Some more content
|
||||||
"""
|
"""
|
||||||
|
|
||||||
let acc = makeOrg(test2).foldOrg()
|
let test3 = """* TODO Level 1
|
||||||
|
Foo
|
||||||
|
"""
|
||||||
|
|
||||||
echo acc
|
let acc = makeOrg(test3).foldOrg()
|
||||||
|
|
||||||
|
discard acc
|
||||||
|
|||||||
Reference in New Issue
Block a user