Parse heading content
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user