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 boldParser* = parseBetweenDelimiter(ch('*'))
|
||||||
let italicParser* = parseBetweenDelimiter(ch('/'))
|
let italicParser* = parseBetweenDelimiter(ch('/'))
|
||||||
let underlinedParser* = parseBetweenDelimiter(ch('_'))
|
let underlineParser* = parseBetweenDelimiter(ch('_'))
|
||||||
let verbatimParser* = parseBetweenDelimiter(ch('='))
|
let verbatimParser* = parseBetweenDelimiter(ch('='))
|
||||||
let codeParser* = parseBetweenDelimiter(ch('~'))
|
let codeParser* = parseBetweenDelimiter(ch('~'))
|
||||||
let strikeThroughParser* = 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 OrgBuilderT* = OrgElement
|
||||||
type OrgBuilder* = Builder[OrgBuilderT]
|
type OrgBuilder* = Builder[OrgBuilderT]
|
||||||
type OrgBuilderResult* = BuilderResult[OrgBuilderT]
|
type OrgBuilderResult* = BuilderResult[OrgBuilderT]
|
||||||
@@ -54,6 +37,36 @@ proc makeBoldToken*(content: string): OrgBuilderT =
|
|||||||
content: content,
|
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] =
|
proc makeOrgToken*(orgTokenFn: 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 & parserTokens.foldl(a & b.tokenStringValue(), "").orgTokenFn()
|
||||||
@@ -125,13 +138,18 @@ proc makeRawTokenOrEmpty(xs: seq[ParserToken]): seq[OrgBuilderT] =
|
|||||||
when isMainModule:
|
when isMainModule:
|
||||||
|
|
||||||
let foo = OrgBuilderResult.ok(OrgBuilder((
|
let foo = OrgBuilderResult.ok(OrgBuilder((
|
||||||
parser: initParser("Just *some text* here *right*"),
|
parser: initParser("Regular *bold* /italic/ _underline_ =verbatim= ~code~ +strikethrough+"),
|
||||||
tree: newSeq[OrgBuilderT](),
|
tree: newSeq[OrgBuilderT](),
|
||||||
)))
|
)))
|
||||||
.flatMap((builder: OrgBuilder) => parseText(
|
.flatMap((builder: OrgBuilder) => parseText(
|
||||||
builder = builder,
|
builder = builder,
|
||||||
builderFns = @[
|
builderFns = @[
|
||||||
(boldParser, makeOrgToken(makeBoldToken)),
|
(boldParser, makeOrgToken(makeBoldToken)),
|
||||||
|
(italicParser, makeOrgToken(makeItalicToken)),
|
||||||
|
(underlineParser, makeOrgToken(makeUnderlineToken)),
|
||||||
|
(verbatimParser, makeOrgToken(makeVerbatimToken)),
|
||||||
|
(codeParser, makeOrgToken(makeCodeToken)),
|
||||||
|
(strikeThroughParser, makeOrgToken(makeStrikeThroughToken)),
|
||||||
],
|
],
|
||||||
otherWiseFn = makeRawTokenOrEmpty,
|
otherWiseFn = makeRawTokenOrEmpty,
|
||||||
))
|
))
|
||||||
|
|||||||
Reference in New Issue
Block a user