From 7f6d75a11e5d17400b257f13cee0d914ff5de60a Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Thu, 20 Jan 2022 17:00:00 +0100 Subject: [PATCH] Convert tokens tail --- src/org/org_text_delimiter.nim | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/org/org_text_delimiter.nim b/src/org/org_text_delimiter.nim index e7cf9cd..48d5eae 100644 --- a/src/org/org_text_delimiter.nim +++ b/src/org/org_text_delimiter.nim @@ -93,7 +93,7 @@ proc parseText[T]( ) found = true - parserAcc = parseResult + parserAcc = parseResult.map(emptyTokens) builderAcc = builder.initBuilder( okParser, tokenFoldFn( @@ -106,7 +106,16 @@ proc parseText[T]( if not found: parserAcc = parserAcc.flatMap(anyCh) - BuilderResult[T].ok(builderAcc) + let textTokens = parserAcc + .foldTokens( + onError = _ => newSeq[T](), + onSuccess = otherWiseFn, + ) + + BuilderResult[T].ok(builder.initBuilder( + builderAcc[0], + builderAcc[1] & textTokens, + )) proc makeRawTokenOrEmpty(xs: seq[ParserToken]): seq[OrgBuilderT] = let str = xs.foldl(a & b.tokenStringValue(), "") @@ -116,7 +125,7 @@ proc makeRawTokenOrEmpty(xs: seq[ParserToken]): seq[OrgBuilderT] = when isMainModule: let foo = OrgBuilderResult.ok(OrgBuilder(( - parser: initParser("Just *some text* here"), + parser: initParser("Just *some text* here *right*"), tree: newSeq[OrgBuilderT](), ))) .flatMap((builder: OrgBuilder) => parseText( @@ -127,7 +136,7 @@ when isMainModule: otherWiseFn = makeRawTokenOrEmpty, )) # .foldBuilder( - # err => &"Error Parsing: {err}", + # err => "", # xs => $xs # )