packages feed

neuron-0.4.0.0: src/app/Text/MMark/Extension/ReplaceLink.hs

{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE NoImplicitPrelude #-}

module Text.MMark.Extension.ReplaceLink
  ( replaceLink,
  )
where

import Lucid
import Relude
import Relude.Extra.Map
import Text.MMark.Extension (Extension)
import qualified Text.MMark.Extension as Ext
import Text.MMark.MarkdownLink

-- | MMark extension to replace links with some HTML.
replaceLink :: Map MarkdownLink (Html ()) -> Extension
replaceLink linkMap =
  Ext.inlineRender $ \f -> \case
    inline@(Ext.Link inner uri _title) ->
      MarkdownLink (Ext.asPlainText inner) uri
        & flip lookup linkMap
        & fromMaybe (f inline)
    inline ->
      f inline