Restore link parser
This commit is contained in:
@@ -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:
|
when isMainModule:
|
||||||
# # echo initParser("[[https://florianschroedl.com]]").linkParser()
|
block testParsers:
|
||||||
# echo initParser("[[https://florianschroedl.com][My blog]]")
|
proc testParser(str: string, parser: parserFnT): string =
|
||||||
# .linkParser()
|
initParserResult(str).flatMap(parser).tokensToString()
|
||||||
# .foldTokens(
|
|
||||||
# onError = (x) => newSeq[OrgInlineBuilderT](),
|
assert testParser("[[placeholder.com]]", linkParser) == "placeholder.com"
|
||||||
# onSuccess = proc(xs: seq[ParserToken]): seq[OrgInlineBuilderT] = linkTokenizerSeq(xs),
|
assert testParser("[[placeholder.com][ - title]]", linkParser) == "placeholder.com - title"
|
||||||
# )
|
|
||||||
|
# .linkParser()
|
||||||
|
# .foldTokens(
|
||||||
|
# onError = xs => newSeq[OrgInlineBuilderT](),
|
||||||
|
# onSuccess = linkTokenizer,
|
||||||
|
# )
|
||||||
|
|||||||
Reference in New Issue
Block a user