Finsih builder for all formatting options
This commit is contained in:
@@ -16,28 +16,11 @@ let parseBetweenDelimiter* = proc(delimiterParser: (Parser -> ParserResult)): (P
|
||||
|
||||
let boldParser* = parseBetweenDelimiter(ch('*'))
|
||||
let italicParser* = parseBetweenDelimiter(ch('/'))
|
||||
let underlinedParser* = parseBetweenDelimiter(ch('_'))
|
||||
let underlineParser* = parseBetweenDelimiter(ch('_'))
|
||||
let verbatimParser* = parseBetweenDelimiter(ch('='))
|
||||
let codeParser* = parseBetweenDelimiter(ch('~'))
|
||||
let strikeThroughParser* = parseBetweenDelimiter(ch('+'))
|
||||
|
||||
|
||||
# until parser != delimiterparser
|
||||
# takeChar and save to current parser
|
||||
# else:
|
||||
# saveTokens to new text block
|
||||
# saveBlock delimiterparser
|
||||
|
||||
# let delimiterParser* = anyUntil(choice(@[
|
||||
# boldParser,
|
||||
# italicParser,
|
||||
# underlinedParser,
|
||||
# verbatimParser,
|
||||
# codeParser,
|
||||
# strikeThroughParser,
|
||||
# ]), newline)
|
||||
|
||||
|
||||
type OrgBuilderT* = OrgElement
|
||||
type OrgBuilder* = Builder[OrgBuilderT]
|
||||
type OrgBuilderResult* = BuilderResult[OrgBuilderT]
|
||||
@@ -54,6 +37,36 @@ proc makeBoldToken*(content: string): OrgBuilderT =
|
||||
content: content,
|
||||
)
|
||||
|
||||
proc makeItalicToken*(content: string): OrgBuilderT =
|
||||
OrgBuilderT(
|
||||
kind: orgItalicText,
|
||||
content: content,
|
||||
)
|
||||
|
||||
proc makeUnderlineToken*(content: string): OrgBuilderT =
|
||||
OrgBuilderT(
|
||||
kind: orgUnderlineText,
|
||||
content: content,
|
||||
)
|
||||
|
||||
proc makeVerbatimToken*(content: string): OrgBuilderT =
|
||||
OrgBuilderT(
|
||||
kind: orgVerbatimText,
|
||||
content: content,
|
||||
)
|
||||
|
||||
proc makeCodeToken*(content: string): OrgBuilderT =
|
||||
OrgBuilderT(
|
||||
kind: orgCodeText,
|
||||
content: content,
|
||||
)
|
||||
|
||||
proc makeStrikeThroughToken*(content: string): OrgBuilderT =
|
||||
OrgBuilderT(
|
||||
kind: orgStrikeThroughText,
|
||||
content: content,
|
||||
)
|
||||
|
||||
proc makeOrgToken*(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()
|
||||
@@ -125,13 +138,18 @@ proc makeRawTokenOrEmpty(xs: seq[ParserToken]): seq[OrgBuilderT] =
|
||||
when isMainModule:
|
||||
|
||||
let foo = OrgBuilderResult.ok(OrgBuilder((
|
||||
parser: initParser("Just *some text* here *right*"),
|
||||
parser: initParser("Regular *bold* /italic/ _underline_ =verbatim= ~code~ +strikethrough+"),
|
||||
tree: newSeq[OrgBuilderT](),
|
||||
)))
|
||||
.flatMap((builder: OrgBuilder) => parseText(
|
||||
builder = builder,
|
||||
builderFns = @[
|
||||
(boldParser, makeOrgToken(makeBoldToken)),
|
||||
(italicParser, makeOrgToken(makeItalicToken)),
|
||||
(underlineParser, makeOrgToken(makeUnderlineToken)),
|
||||
(verbatimParser, makeOrgToken(makeVerbatimToken)),
|
||||
(codeParser, makeOrgToken(makeCodeToken)),
|
||||
(strikeThroughParser, makeOrgToken(makeStrikeThroughToken)),
|
||||
],
|
||||
otherWiseFn = makeRawTokenOrEmpty,
|
||||
))
|
||||
|
||||
Reference in New Issue
Block a user