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, 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 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( .flatMap((builder: OrgBuilder) => tryParseBuild(
builder = builder, builder = builder,
builderFns = @[ builderFns = @[
(boldParser, mergeOrgToken(boldTokenizer)), (boldParser, mergeOrgTokens(boldTokenizer)),
(italicParser, mergeOrgToken(italicTokenizer)), (italicParser, mergeOrgTokens(italicTokenizer)),
(underlineParser, mergeOrgToken(underlineTokenizer)), (underlineParser, mergeOrgTokens(underlineTokenizer)),
(verbatimParser, mergeOrgToken(verbatimTokenizer)), (verbatimParser, mergeOrgTokens(verbatimTokenizer)),
(codeParser, mergeOrgToken(codeTokenizer)), (codeParser, mergeOrgTokens(codeTokenizer)),
(strikeThroughParser, mergeOrgToken(strikeThroughTokenizer)), (strikeThroughParser, mergeOrgTokens(strikeThroughTokenizer)),
], ],
defaultBuilderFn = makeRawTokenOrEmpty, defaultBuilderFn = makeRawTokenOrEmpty,
)) ))

View File

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