Parse org heading content
This commit is contained in:
@@ -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((
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user