Parse content

This commit is contained in:
Florian Schroedl
2022-05-04 17:00:00 +02:00
parent 59815a517e
commit e3491c833f
2 changed files with 15 additions and 5 deletions

View File

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

View File

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