From e3491c833f422759656030b7197b1c1495553411 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Wed, 4 May 2022 17:00:00 +0200 Subject: [PATCH] Parse content --- src/org/org_block_heading.nim | 16 ++++++++++++---- src/org/org_types.nim | 4 +++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/org/org_block_heading.nim b/src/org/org_block_heading.nim index 3994800..cd0461c 100644 --- a/src/org/org_block_heading.nim +++ b/src/org/org_block_heading.nim @@ -31,9 +31,12 @@ let doneKeywords = @["DONE"] let parseTodoKeyword = todoKeywords.createTodoKeywordParser() let parseDoneKeyword = doneKeywords.createTodoKeywordParser() +let parseContentText = @[ + anyUntil(choice(@[endOfStream, str("\n*")])), +] + let parseHeadingText = @[ anyUntil(newline), - ignore(newline), ] # func buildStars(token: seq[ParserToken]): seq[ParserToken] = @@ -61,6 +64,11 @@ let buildHeadlineContent = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlo org.headlineContent = tokens org +let buildHeadlineChildren = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.}= + # let headlineString = tokens.tokensToString() + + org.headlineChildrenText = tokens.tokensToString() + org proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult = builder @@ -73,13 +81,13 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult = (@[optional(parseDoneKeyword)], buildTodo, true), (parseHeadingText, buildHeadlineContent, false), + + (parseContentText, buildHeadlineChildren, true) ] ) when isMainModule: - let test = initOrgBuilder("""* TODO Level 1 -** DONE Level 2 -""") + let test = initOrgBuilder("""* TODO Level 1""") .tryBuildHeading() .fold( x => "Nothing", diff --git a/src/org/org_types.nim b/src/org/org_types.nim index 1393c51..82546bf 100644 --- a/src/org/org_types.nim +++ b/src/org/org_types.nim @@ -92,13 +92,15 @@ type level*: int todo*: Option[string] headlineContent*: seq[OrgInlineBlock] + headlineChildrenText*: string func stringifySpecialFields(x: OrgBlock): string = let specialFields = case x.kind: of orgHeading: &"""level: {x.level} todo: {x.todo} -headlineContent: {x.headlineContent}""" +headlineContent: {x.headlineContent} +headlineChildrenText: {x.headlineChildrenText}""" else: "" specialFields