Files
org-parser/src_v2/org/org_builder_api.nim
2022-10-17 15:30:17 +02:00

80 lines
2.2 KiB
Nim

import std/[
collections/sequtils,
strformat,
sugar,
]
import fp/[
resultM,
]
import ./org_types
import ../parser/parser
# -- OrgInlineBlock.Builder.Type
type OrgInlineBuilderT* = OrgInlineBlock
type OrgInlineBuilder* = Builder[OrgInlineBuilderT]
type OrgInlineBuilderResult* = BuilderResult[OrgInlineBuilderT]
# -- OrgInlineBlock.Builder.Initializers
func initOrgInlineBuilder*(content: string): OrgInlineBuilderResult =
return OrgInlineBuilderResult.ok(OrgInlineBuilder((
parser: initParser(content),
tree: newSeq[OrgInlineBuilderT](),
)))
func tokenizeInlineTokens*(kind: orgInlineBlockKind): seq[ParserToken] -> seq[OrgInlineBuilderT] =
return func(tokens: seq[ParserToken]): seq[OrgInlineBuilderT] =
return @[
OrgInlineBuilderT(
kind: kind,
content: tokens.tokensToString(),
)
]
func tokenizeRawText*(kind: orgInlineBlockKind): string -> OrgInlineBuilderT =
return func(content: string): OrgInlineBuilderT =
return OrgInlineBuilderT(
kind: kind,
content: content,
)
# ## Blocks
type OrgBuilderT* = OrgBlock
type OrgBuilder* = Builder[OrgBuilderT]
type OrgBuilderError* = BuilderError[OrgBuilderT]
type OrgBuilderResult* = BuilderResult[OrgBuilderT]
func initOrgBuilder*(content: string): OrgBuilderResult =
return OrgBuilderResult.ok(OrgBuilder((
parser: initParser(content),
tree: newSeq[OrgBuilderT](),
)))
func pprint*(x: OrgBuilder): string =
&"""OrgBuilder(
parser: {x.parser}
tree: {x.tree}
)"""
func `$`*(x: OrgBuilder): string = pprint(x)
func pprint*(x: OrgBuilderError): string =
&"""OrgBuilderError(
parser: {x.parser}
tree: {x.tree}
)"""
func `$`*(x: OrgBuilderError): string = pprint(x)
# # proc orgBuilderConcat*(typeInfo: OrgBuilderT, concatFn: (ParserToken, OrgBuilderT) -> OrgBuilderT):
# # (seq[ParserToken], OrgBuilderT) -> OrgBuilderT =
# # return proc(xs: seq[ParserToken], builder: OrgBuilderT): OrgBuilderT =
# # return xs.foldl(concatFn(b, a), typeInfo)
# proc orgBuilderApply*(concatFn: (ParserToken, OrgBuilderT) -> OrgBuilderT):
# (seq[ParserToken], OrgBuilderT) -> OrgBuilderT =
# return proc(tokens: seq[ParserToken], builder: OrgBuilderT): OrgBuilderT =
# tokens.foldl(concatFn(b, a), builder)