Parse heading content

This commit is contained in:
Florian Schroedl
2022-06-10 18:55:47 +02:00
parent 0b606f32e6
commit 3ed85815d6

View File

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