Restore link parser

This commit is contained in:
Florian Schroedl
2022-08-28 14:53:01 +02:00
parent f6d289b223
commit e876a487f5

View File

@@ -1,5 +1,6 @@
import std/[ import std/[
collections/sequtils, collections/sequtils,
strformat,
sugar, sugar,
] ]
import fp/[ import fp/[
@@ -7,6 +8,7 @@ import fp/[
resultM, resultM,
] ]
import fusion/matching import fusion/matching
import ./org_types
import ./org_builder_api import ./org_builder_api
import ../parser/parser import ../parser/parser
import ../utils/fp import ../utils/fp
@@ -19,7 +21,6 @@ import ../utils/fp
# option, # option,
# ] # ]
# import ./org_builder_api # import ./org_builder_api
# import ./org_types
# import ../parser/parser_internals # import ../parser/parser_internals
# import ../parser/parser_types # import ../parser/parser_types
@@ -56,31 +57,37 @@ let linkParser* = proc(parser: Parser): ParserResult {.closure.} =
else: else:
linkValue linkValue
# proc linkStringifier*(linkUrl: string, linkDescription: Option[string]): string = # -- Tokenizers
# case (linkUrl, linkDescription):
# of (@linkUrl, Some(@linkDescription)):
# return &"[[{linkUrl}][{linkDescription}]]"
# of (@linkUrl, None()):
# return &"[[{linkUrl}]]"
# func linkTokenizer*(parserTokens: seq[ParserToken]): OrgInlineBuilderT = proc linkStringifier*(linkUrl: string, linkDescription: Option[string]): string =
# [@linkUrl, @linkDescription] := parserTokens.map(tokenStringValue) case (linkUrl, linkDescription):
# let maybeLinkDescription = linkDescription.some().notEmpty() of (@linkUrl, Some(@linkDescription)):
# return OrgInlineBuilderT( return &"[[{linkUrl}][{linkDescription}]]"
# kind: orgLink, of (@linkUrl, None()):
# content: linkStringifier(linkUrl, maybeLinkDescription), return &"[[{linkUrl}]]"
# linkUrl: linkUrl,
# linkDescription: maybeLinkDescription,
# )
# let linkTokenizerSeq* = proc(parserTokens: seq[ParserToken]): seq[OrgInlineBuilderT] {.closure.} = proc linkTokenizer*(parserTokens: seq[ParserToken]): seq[OrgInlineBuilderT] =
# return @[linkTokenizer(parserTokens)] [@linkUrl, @linkDescription] := parserTokens.map(toString)
let linkDescriptionOption = linkDescription.some().notEmpty()
return @[
OrgInlineBuilderT(
kind: orgLink,
content: linkStringifier(linkUrl, linkDescriptionOption),
linkUrl: linkUrl,
linkDescription: linkDescriptionOption,
)
]
when isMainModule:
block testParsers:
proc testParser(str: string, parser: parserFnT): string =
initParserResult(str).flatMap(parser).tokensToString()
assert testParser("[[placeholder.com]]", linkParser) == "placeholder.com"
assert testParser("[[placeholder.com][ - title]]", linkParser) == "placeholder.com - title"
# when isMainModule:
# # echo initParser("[[https://florianschroedl.com]]").linkParser()
# echo initParser("[[https://florianschroedl.com][My blog]]")
# .linkParser() # .linkParser()
# .foldTokens( # .foldTokens(
# onError = (x) => newSeq[OrgInlineBuilderT](), # onError = xs => newSeq[OrgInlineBuilderT](),
# onSuccess = proc(xs: seq[ParserToken]): seq[OrgInlineBuilderT] = linkTokenizerSeq(xs), # onSuccess = linkTokenizer,
# ) # )