Failed try due to type mismatch of parser internals

This commit is contained in:
Florian Schroedl
2022-08-09 22:12:57 +02:00
parent 892eec10d5
commit 56d1b625ee

View File

@@ -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