20 lines
724 B
Nim
20 lines
724 B
Nim
import std/sugar
|
|
import std/collections/sequtils
|
|
import ./org_types
|
|
import ../parser/parser_types
|
|
|
|
type OrgBuilderT* = OrgElement
|
|
type OrgBuilder* = Builder[OrgBuilderT]
|
|
type OrgBuilderResult* = BuilderResult[OrgBuilderT]
|
|
|
|
func makeOrgBuilderToken*(kind: orgElementKind): string -> OrgBuilderT =
|
|
return func(content: string): OrgBuilderT =
|
|
return OrgBuilderT(
|
|
kind: orgRawText,
|
|
content: content,
|
|
)
|
|
|
|
proc mergeOrgToken*(orgTokenFn: 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()
|