Add OrgInlineBlock equalizers

This commit is contained in:
Florian Schroedl
2022-08-28 15:33:24 +02:00
parent df2b2eb9f7
commit b02cbafcc0

View File

@@ -6,8 +6,11 @@ import std/[
import fp/[
option,
]
import fusion/matching
import ../utils/printers
{.experimental: "caseStmtMacros".}
# -- OrgInlineBlock.Type
type
@@ -47,6 +50,21 @@ type
linkUrl*: string
linkDescription*: Option[string]
# OrgInlineBlock.Equals
func `==`*(a: OrgInlineBlock, b: OrgInlineBlock): bool =
## Compare two `OrgInlineBlock` objects.
## TODO Compare children
if (a.kind != b.kind): return false
case ((a.kind, b.kind)):
of((orgLink, orgLink)):
a.linkUrl == b.linkUrl and a.linkDescription == b.linkDescription
else: a.content == b.content
# -- OrgInlineBlock.PrettyPrinters
proc `$`*(x: orgInlineBlockKind): string =
@@ -182,28 +200,38 @@ func pprint*(x: OrgDocument, indent = 0): string =
func `$`*(xs: OrgDocument): string = pprint(xs)
when isMainModule:
let doc = OrgDocument(
children: @[
OrgBlock(
kind: orgHeading,
children: @[
OrgInlineBlock(
kind: orgLink,
linkUrl: "https://placeholder.com",
linkDescription: "Placeholder".some(),
),
],
content: @[
OrgBlock(
kind: orgNewline,
),
OrgBlock(
kind: orgNewline,
)
],
),
OrgBlock(kind: orgHeading, level: 1),
OrgBlock(kind: orgHeading),
]
)
echo doc
block testOrgInlineBlockEquals:
assert OrgInlineBlock(kind: orgRawText) == OrgInlineBlock(kind: orgRawText)
assert OrgInlineBlock(kind: orgRawText, content: "") == OrgInlineBlock(kind: orgRawText, content: "")
assert OrgInlineBlock(kind: orgRawText, content: "a") != OrgInlineBlock(kind: orgRawText, content: "b")
assert OrgInlineBlock(kind: orgRawText) != OrgInlineBlock(kind: orgBoldText)
# Link
assert OrgInlineBlock(kind: orgLink, linkDescription: "desc".some(), linkUrl: "url") == OrgInlineBlock(kind: orgLink, linkDescription: "desc".some(), linkUrl: "url")
assert OrgInlineBlock(kind: orgLink, linkUrl: "url") != OrgInlineBlock(kind: orgLink, linkDescription: "desc".some(), linkUrl: "url")
# let doc = OrgDocument(
# children: @[
# OrgBlock(
# kind: orgHeading,
# children: @[
# OrgInlineBlock(
# kind: orgLink,
# linkUrl: "https://placeholder.com",
# linkDescription: "Placeholder".some(),
# ),
# ],
# content: @[
# OrgBlock(
# kind: orgNewline,
# ),
# OrgBlock(
# kind: orgNewline,
# )
# ],
# ),
# OrgBlock(kind: orgHeading, level: 1),
# OrgBlock(kind: orgHeading),
# ]
# )
# echo doc