diff --git a/src/org/org_block_heading.nim b/src/org/org_block_heading.nim index a842be9..6b605b6 100644 --- a/src/org/org_block_heading.nim +++ b/src/org/org_block_heading.nim @@ -33,11 +33,14 @@ let parseTodoKeyword = todoKeywords.createTodoKeywordParser() let parseDoneKeyword = doneKeywords.createTodoKeywordParser() let parseContentText = @[ - anyUntil(choice(@[endOfStream, str("\n*")])), + anyUntil(choice(@[endOfStream, str("\n")])), ] let parseHeadlineNewline = @[ - ignore(newline) + choice(@[ + ch(NewLines), + endOfStream, + ]) ] let parseHeadingText = @[ @@ -91,9 +94,9 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult = (parseHeadingText, buildHeadlineContent, false), - (parseContentText, buildHeadlineChildren, true), + # (parseContentText, buildHeadlineChildren, true), - # (parseHeadlineNewline, buildHeadlineNewline, true), + (parseHeadlineNewline, buildHeadlineNewline, false), ] ) @@ -102,7 +105,8 @@ let headingParser = choice(@[ endOfStream, ]) -let newlineParser = @[newline + newline] + +let contentEndParser = newline let buildNewline = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.} = OrgBlock( @@ -121,15 +125,14 @@ let contentParsersSeq: seq[tuple[ ignoreEmpty: bool, # concatFn: (seq[OrgBlock], seq[OrgBlock]) -> seq[OrgBlock], ]] = @[ - (newlineParser, buildNewline, false), (parseBlockText, buildNewline, true), - # (newlineParser, buildNewline, false), + (contentEndParser, buildNewline, true), ] proc parseHeadlineChildren(builder: OrgBuilder): OrgBuilderResult = var headingBlock = builder.tree[0] - echo "Builder " & $builder + # echo "Builder " & $builder # var builderAcc: OrgBuilderResult = OrgBuilderResult.ok(builder) 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(): builderAcc = builderAcc .applyParsersSeqToSeq( contentParsersSeq ) + echo "builderAcc after parse in while loop ", builderAcc # echo builderAcc let content = builderAcc.fold( - (err) => newSeq[OrgBlock](), - (builder: OrgBuilder) => builder.tree, + (err) => 0, # newSeq[OrgBlock](), + (builder: OrgBuilder) => len builder.tree, ) + + # echo "builderAcc" & $builderAcc echo "content" & $content # headingBlock.content = content @@ -205,6 +213,10 @@ Foo Some more content """ - let acc = makeOrg(test2).foldOrg() + let test3 = """* TODO Level 1 +Foo +""" - echo acc + let acc = makeOrg(test3).foldOrg() + + discard acc