Parsing org tree

This commit is contained in:
Florian Schroedl
2022-05-04 17:00:00 +02:00
parent e3491c833f
commit 178bbed09d

View File

@@ -35,6 +35,10 @@ let parseContentText = @[
anyUntil(choice(@[endOfStream, str("\n*")])),
]
let parseHeadlineNewline = @[
ignore(newline)
]
let parseHeadingText = @[
anyUntil(newline),
]
@@ -70,7 +74,11 @@ let buildHeadlineChildren = func(tokens: seq[ParserToken], org: OrgBlock): OrgBl
org.headlineChildrenText = tokens.tokensToString()
org
let buildHeadlineNewline = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.}=
org
proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
# echo builder
builder
.applyParsersSeqToSingle(
OrgBlock(kind: orgHeading),
@@ -82,20 +90,37 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
(parseHeadingText, buildHeadlineContent, false),
(parseContentText, buildHeadlineChildren, true)
(parseContentText, buildHeadlineChildren, true),
(parseHeadlineNewline, buildHeadlineContent, true),
(parseHeadlineNewline, buildHeadlineNewline, false),
]
)
when isMainModule:
let test = initOrgBuilder("""* TODO Level 1""")
.tryBuildHeading()
.fold(
x => "Nothing",
x => $x.tree
)
echo test
var acc = initOrgBuilder("""* TODO Level 1
** TODO Level 2
""")
while acc.isOk() and acc.tryParser(endOfStream).isErr():
let unsafeAcc = acc.unsafeGet()
let item = acc
.tryBuildHeading()
.fold(
err => OrgBuilderResult.err((unsafeAcc, "Error")),
(x: OrgBuilder) => OrgBuilderResult.ok(OrgBuilder((
parser: x.parser,
tree: unsafeAcc.tree & x.tree,
)))
)
acc = item
echo acc
# let sampleBuilder = StringBuilderResult
# .ok(StringBuilder((