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