Restore link parser
This commit is contained in:
@@ -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,
|
||||
# )
|
||||
|
||||
Reference in New Issue
Block a user