80 lines
2.2 KiB
Nim
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)
|