Parse org heading content

This commit is contained in:
Florian Schroedl
2022-05-04 17:00:00 +02:00
parent 6559220f74
commit 59815a517e
2 changed files with 26 additions and 11 deletions

View File

@@ -1,17 +1,19 @@
import std/sugar
import std/strformat
import std/collections/sequtils
import std/strutils
import results
import fusion/matching import fusion/matching
import results
import std/collections/sequtils
import std/strformat
import std/strutils
import std/sugar
import ../utils/fp
import ../parser/parser_internals import ../parser/parser_internals
import ../parser/parser_types import ../parser/parser_types
import ../parser/utils import ../parser/utils
import ./org_properties_block import ../utils/fp
import ./org_types
import ./org_builder import ./org_builder
import ./org_properties_block
import ./org_text_delimiter
import ./org_types
{.experimental: "caseStmtMacros".} {.experimental: "caseStmtMacros".}
@@ -48,9 +50,18 @@ let buildTodo = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closur
org org
let buildHeadlineContent = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.}= let buildHeadlineContent = func(tokens: seq[ParserToken], org: OrgBlock): OrgBlock {.closure.}=
org.headlineContent = tokens.tokensToString() let headlineString = tokens.tokensToString()
let tokens = tryBuildInline(headlineString)
.fold(
x => newSeq[OrgInlineBuilderT](),
(x: OrgInlineBuilder) => x.tree,
)
org.headlineContent = tokens
org org
proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult = proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
builder builder
.applyParsersSeqToSingle( .applyParsersSeqToSingle(
@@ -66,13 +77,17 @@ proc tryBuildHeading(builder: OrgBuilderResult): OrgBuilderResult =
) )
when isMainModule: when isMainModule:
echo initOrgBuilder("*** Some stars") let test = initOrgBuilder("""* TODO Level 1
** DONE Level 2
""")
.tryBuildHeading() .tryBuildHeading()
.fold( .fold(
x => "Nothing", x => "Nothing",
x => $x.tree x => $x.tree
) )
echo test
# let sampleBuilder = StringBuilderResult # let sampleBuilder = StringBuilderResult
# .ok(StringBuilder(( # .ok(StringBuilder((

View File

@@ -91,7 +91,7 @@ type
of orgHeading: of orgHeading:
level*: int level*: int
todo*: Option[string] todo*: Option[string]
headlineContent*: string headlineContent*: seq[OrgInlineBlock]
func stringifySpecialFields(x: OrgBlock): string = func stringifySpecialFields(x: OrgBlock): string =
let specialFields = case x.kind: let specialFields = case x.kind: