Parse heading content
This commit is contained in:
@@ -92,10 +92,28 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
|
|||||||
(parseContentText, buildHeadlineChildren, true),
|
(parseContentText, buildHeadlineChildren, true),
|
||||||
|
|
||||||
(parseHeadlineNewline, buildHeadlineNewline, 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 =
|
proc makeOrg*(x: string): OrgBuilderResult =
|
||||||
var acc = initOrgBuilder(x)
|
var acc = initOrgBuilder(x)
|
||||||
|
|
||||||
@@ -104,6 +122,9 @@ proc makeOrg*(x: string): OrgBuilderResult =
|
|||||||
|
|
||||||
let item = acc
|
let item = acc
|
||||||
.tryBuildHeading()
|
.tryBuildHeading()
|
||||||
|
.map(
|
||||||
|
(x: OrgBuilder) => parseHeadlineChildren(x)
|
||||||
|
)
|
||||||
.flatMap(
|
.flatMap(
|
||||||
(x: OrgBuilder) => OrgBuilderResult.ok(OrgBuilder((
|
(x: OrgBuilder) => OrgBuilderResult.ok(OrgBuilder((
|
||||||
parser: x.parser,
|
parser: x.parser,
|
||||||
@@ -124,13 +145,11 @@ proc foldOrg*(x: OrgBuilderResult): string =
|
|||||||
# echo acc.unsafeGet().tree[^1]
|
# echo acc.unsafeGet().tree[^1]
|
||||||
|
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
let test1 = """
|
let test1 = """* TODO Level 1
|
||||||
* TODO Level 1
|
|
||||||
|
|
||||||
Some text inbetween
|
Some text inbetween
|
||||||
|
|
||||||
** DONE Level 2
|
** DONE Level 2"""
|
||||||
"""
|
|
||||||
|
|
||||||
let acc = makeOrg(test1)
|
let acc = makeOrg(test1).foldOrg()
|
||||||
echo acc.foldOrg()
|
# echo acc
|
||||||
|
|||||||
Reference in New Issue
Block a user