Basic headline

This commit is contained in:
Florian Schroedl
2022-05-04 17:00:00 +02:00
parent 722e66cf85
commit dae7e7e0a3
3 changed files with 51 additions and 14 deletions

View File

@@ -166,6 +166,7 @@ proc applyParsersToSingle*[T](
builder: Builder[T],
parsers: seq[Parser -> ParserResult],
tokenFoldFn: (seq[ParserToken], T) -> T,
optional = false,
initT: T,
): BuilderResult[T] =
# Apply the current parsing functions and convert to text tokens wrapped in ParserResult
@@ -178,15 +179,20 @@ proc applyParsersToSingle*[T](
newParser
.foldTokens(
(err: ParserError) => BuilderResult[T].err((builder, "foo")),
(newTokens: seq[ParserToken]) => BuilderResult[T].ok(
builder.initBuilder(
newParser.unsafeGet(),
builder.tree
.last()
.orElse(just(initT))
.map((x: T) => @[tokenFoldFn(newTokens, x)])
.getOrElse(newSeq[T]())
)
(newTokens: seq[ParserToken]) => (
if optional and newTokens.len == 0:
BuilderResult[T].ok(builder)
else:
BuilderResult[T].ok(
builder.initBuilder(
newParser.unsafeGet(),
builder.tree
.last()
.orElse(just(initT))
.map((x: T) => @[tokenFoldFn(newTokens, x)])
.getOrElse(newSeq[T]())
)
)
)
)
@@ -196,10 +202,17 @@ proc applyParsersSeqToSingle*[T](
xs: seq[tuple[
parsers: seq[Parser -> ParserResult],
tokenFoldFn: (seq[ParserToken], T) -> T,
ignoreEmpty: bool,
]],
): BuilderResult[T] =
xs.foldl(
a.flatMap((builder: Builder[T]) => applyParsersToSingle(builder, b[0], b[1], initT)),
a.flatMap((builder: Builder[T]) => applyParsersToSingle(
builder,
b.parsers,
b.tokenFoldFn,
b.ignoreEmpty,
initT
)),
builderResult
)