From 3ed85815d6611f86a07aa62b02c8b71e1c8879f9 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Fri, 10 Jun 2022 18:55:47 +0200 Subject: [PATCH] Parse heading content --- src/org/org_block_heading.nim | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/org/org_block_heading.nim b/src/org/org_block_heading.nim index f75742e..c08e58e 100644 --- a/src/org/org_block_heading.nim +++ b/src/org/org_block_heading.nim @@ -92,10 +92,28 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult = (parseContentText, buildHeadlineChildren, true), (parseHeadlineNewline, buildHeadlineNewline, true), - (parseHeadlineNewline, buildHeadlineNewline, false), ] ) +let headingParser = choice(@[ + newline + ch('*'), + endOfStream, +]) + +proc parseHeadlineChildren(builder: OrgBuilder): OrgBuilder = + let headingBlock = builder.tree[0] + + var parserAcc: ParserResult = ParserResult.ok(builder.parser) + + echo parserAcc + + while parserAcc.isOk() and parserAcc.flatMap(headingParser).isErr(): + parserAcc = parserAcc.flatMap(anyCh) + + # echo parserAcc.flatMap(flattenParserTokens) + + builder + proc makeOrg*(x: string): OrgBuilderResult = var acc = initOrgBuilder(x) @@ -104,6 +122,9 @@ proc makeOrg*(x: string): OrgBuilderResult = let item = acc .tryBuildHeading() + .map( + (x: OrgBuilder) => parseHeadlineChildren(x) + ) .flatMap( (x: OrgBuilder) => OrgBuilderResult.ok(OrgBuilder(( parser: x.parser, @@ -124,13 +145,11 @@ proc foldOrg*(x: OrgBuilderResult): string = # echo acc.unsafeGet().tree[^1] when isMainModule: - let test1 = """ -* TODO Level 1 + let test1 = """* TODO Level 1 Some text inbetween -** DONE Level 2 -""" +** DONE Level 2""" - let acc = makeOrg(test1) - echo acc.foldOrg() + let acc = makeOrg(test1).foldOrg() + # echo acc