diff --git a/docs/spec.org b/docs/spec.org index e66448f..bbb3836 100644 --- a/docs/spec.org +++ b/docs/spec.org @@ -1,5 +1,14 @@ #+TITLE: Spec +- dsfsd + 1. 23231o + + #+begin_src + + #+end_src + + - sdfsdfsdf + - sdfsdfsdf * Specs diff --git a/src_v2/org/org_builder_inline_text.nim b/src_v2/org/org_builder_inline_text.nim index 7f18b6d..081deca 100644 --- a/src_v2/org/org_builder_inline_text.nim +++ b/src_v2/org/org_builder_inline_text.nim @@ -31,7 +31,7 @@ let verbatimTokenizer* = tokenizeInlineTokens(orgVerbatimText) let codeTokenizer* = tokenizeInlineTokens(orgCodeText) let strikeThroughTokenizer* = tokenizeInlineTokens(orgStrikeThroughText) -let styledTextTokenizers = @[ +let styledTextTokenizers* = @[ (boldParser, boldTokenizer), (italicParser, italicTokenizer), (underlineParser, underlineTokenizer), @@ -41,7 +41,7 @@ let styledTextTokenizers = @[ (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. ## Unless the string is empty, in this case return an empty list. let str = tokens.foldl(a & b.toString(), "") diff --git a/src_v2/org/org_builder_paragraph.nim b/src_v2/org/org_builder_paragraph.nim index 6a312bd..4edaf31 100644 --- a/src_v2/org/org_builder_paragraph.nim +++ b/src_v2/org/org_builder_paragraph.nim @@ -35,6 +35,8 @@ import fusion/matching # with default OrgBuilder -> OrgBuilder # until Eol +let lineParser = anyUntil(newlineOrEol) + let listTypesParser = choice(@[ ch('-'), ch('+'), @@ -71,7 +73,6 @@ let buildListItem = proc(builder: OrgBuilder): OrgBuilderResult {.closure.} = listBulletType: '-', listContent: tryTokenizeInline(content.tokens.tokensToString()).unsafeGet().tree ) - # echo treeResult OrgBuilderResult.ok(OrgBuilder(( parser: content, @@ -100,11 +101,21 @@ proc buildParagraph*( if builderResult.isOk(): found = true - builderAcc = builderResult break if not found: + builderAcc + .flatMap((builder: OrgBuilder) => tryTokenize( + builder = builder, + builderFns = styledTextTokenizers, + defaultTokenizerFn = tryTokenizeRawText, + )) + .fold( + OrgInlineBuilder + ) + + builderAcc = OrgBuilderResult.err(OrgBuilderError( kind: builderError, parser: builderAcc.fold( @@ -123,5 +134,5 @@ when isMainModule: block testParsers: let test = initOrgBuilder("""- List item 1. List item -- random stuff""").flatMap((builder: OrgBuilder) => builder.buildParagraph(paragraphBuilders)) +random stuff""").flatMap((builder: OrgBuilder) => builder.buildParagraph(paragraphBuilders)) echo test