From b02cbafcc062c46a3e487e47bd169129bed386c2 Mon Sep 17 00:00:00 2001 From: Florian Schroedl Date: Sun, 28 Aug 2022 15:33:24 +0200 Subject: [PATCH] Add OrgInlineBlock equalizers --- src_v2/org/org_types.nim | 78 +++++++++++++++++++++++++++------------- 1 file changed, 53 insertions(+), 25 deletions(-) diff --git a/src_v2/org/org_types.nim b/src_v2/org/org_types.nim index 4f8cc53..f155c5c 100644 --- a/src_v2/org/org_types.nim +++ b/src_v2/org/org_types.nim @@ -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