This commit is contained in:
Florian Schroedl
2023-10-04 15:02:49 +02:00
parent 065b298d1f
commit 6e50d9f013
3 changed files with 25 additions and 5 deletions

View File

@@ -1,5 +1,14 @@
#+TITLE: Spec #+TITLE: Spec
- dsfsd
1. 23231o
#+begin_src
#+end_src
- sdfsdfsdf
- sdfsdfsdf
* Specs * Specs

View File

@@ -31,7 +31,7 @@ let verbatimTokenizer* = tokenizeInlineTokens(orgVerbatimText)
let codeTokenizer* = tokenizeInlineTokens(orgCodeText) let codeTokenizer* = tokenizeInlineTokens(orgCodeText)
let strikeThroughTokenizer* = tokenizeInlineTokens(orgStrikeThroughText) let strikeThroughTokenizer* = tokenizeInlineTokens(orgStrikeThroughText)
let styledTextTokenizers = @[ let styledTextTokenizers* = @[
(boldParser, boldTokenizer), (boldParser, boldTokenizer),
(italicParser, italicTokenizer), (italicParser, italicTokenizer),
(underlineParser, underlineTokenizer), (underlineParser, underlineTokenizer),
@@ -41,7 +41,7 @@ let styledTextTokenizers = @[
(linkParser, linkTokenizer), (linkParser, linkTokenizer),
] ]
proc tryTokenizeRawText(tokens: seq[ParserToken]): seq[OrgInlineBuilderT] = proc tryTokenizeRawText*(tokens: seq[ParserToken]): seq[OrgInlineBuilderT] =
## Merge all parser `tokens` into a string to tokenize for the builder. ## Merge all parser `tokens` into a string to tokenize for the builder.
## Unless the string is empty, in this case return an empty list. ## Unless the string is empty, in this case return an empty list.
let str = tokens.foldl(a & b.toString(), "") let str = tokens.foldl(a & b.toString(), "")

View File

@@ -35,6 +35,8 @@ import fusion/matching
# with default OrgBuilder -> OrgBuilder # with default OrgBuilder -> OrgBuilder
# until Eol # until Eol
let lineParser = anyUntil(newlineOrEol)
let listTypesParser = choice(@[ let listTypesParser = choice(@[
ch('-'), ch('-'),
ch('+'), ch('+'),
@@ -71,7 +73,6 @@ let buildListItem = proc(builder: OrgBuilder): OrgBuilderResult {.closure.} =
listBulletType: '-', listBulletType: '-',
listContent: tryTokenizeInline(content.tokens.tokensToString()).unsafeGet().tree listContent: tryTokenizeInline(content.tokens.tokensToString()).unsafeGet().tree
) )
# echo treeResult
OrgBuilderResult.ok(OrgBuilder(( OrgBuilderResult.ok(OrgBuilder((
parser: content, parser: content,
@@ -100,11 +101,21 @@ proc buildParagraph*(
if builderResult.isOk(): if builderResult.isOk():
found = true found = true
builderAcc = builderResult builderAcc = builderResult
break break
if not found: if not found:
builderAcc
.flatMap((builder: OrgBuilder) => tryTokenize(
builder = builder,
builderFns = styledTextTokenizers,
defaultTokenizerFn = tryTokenizeRawText,
))
.fold(
OrgInlineBuilder
)
builderAcc = OrgBuilderResult.err(OrgBuilderError( builderAcc = OrgBuilderResult.err(OrgBuilderError(
kind: builderError, kind: builderError,
parser: builderAcc.fold( parser: builderAcc.fold(
@@ -123,5 +134,5 @@ when isMainModule:
block testParsers: block testParsers:
let test = initOrgBuilder("""- List item let test = initOrgBuilder("""- List item
1. List item 1. List item
- random stuff""").flatMap((builder: OrgBuilder) => builder.buildParagraph(paragraphBuilders)) random stuff""").flatMap((builder: OrgBuilder) => builder.buildParagraph(paragraphBuilders))
echo test echo test