Parsing org tree
This commit is contained in:
@@ -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((
|
||||
|
||||
Reference in New Issue
Block a user