Extract token flattening function

This commit is contained in:
Florian Schroedl
2022-01-20 17:00:00 +01:00
parent ff84711e64
commit b5a678557b
3 changed files with 11 additions and 8 deletions

View File

@@ -14,6 +14,6 @@ func makeOrgBuilderToken*(kind: orgElementKind): string -> OrgBuilderT =
content: content,
)
proc mergeOrgToken*(orgTokenFn: string -> OrgBuilderT): (seq[ParserToken], seq[OrgBuilderT]) -> seq[OrgBuilderT] =
proc mergeOrgTokens*(tokenizer: string -> OrgBuilderT): (seq[ParserToken], seq[OrgBuilderT]) -> seq[OrgBuilderT] =
return proc(parserTokens: seq[ParserToken], builderTokens: seq[OrgBuilderT]): seq[OrgBuilderT] =
return builderTokens & parserTokens.foldl(a & b.tokenStringValue(), "").orgTokenFn()
return builderTokens & tokenizer(parserTokens.tokensToString())

View File

@@ -41,12 +41,12 @@ when isMainModule:
.flatMap((builder: OrgBuilder) => tryParseBuild(
builder = builder,
builderFns = @[
(boldParser, mergeOrgToken(boldTokenizer)),
(italicParser, mergeOrgToken(italicTokenizer)),
(underlineParser, mergeOrgToken(underlineTokenizer)),
(verbatimParser, mergeOrgToken(verbatimTokenizer)),
(codeParser, mergeOrgToken(codeTokenizer)),
(strikeThroughParser, mergeOrgToken(strikeThroughTokenizer)),
(boldParser, mergeOrgTokens(boldTokenizer)),
(italicParser, mergeOrgTokens(italicTokenizer)),
(underlineParser, mergeOrgTokens(underlineTokenizer)),
(verbatimParser, mergeOrgTokens(verbatimTokenizer)),
(codeParser, mergeOrgTokens(codeTokenizer)),
(strikeThroughParser, mergeOrgTokens(strikeThroughTokenizer)),
],
defaultBuilderFn = makeRawTokenOrEmpty,
))

View File

@@ -80,6 +80,9 @@ func tokenStringValue*(x: ParserToken): string =
of parserTokenString:
x.stringValue
func tokensToString*(tokens: seq[ParserToken]): string =
tokens.foldl(a & b.tokenStringValue(), "")
# -- Modifiers
func flattenParserTokens*(parser: Parser): ParserResult =