neuron-0.2.0.0: src/Neuron/Zettelkasten/Link.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoImplicitPrelude #-}
-- | Special Zettel links in Markdown
module Neuron.Zettelkasten.Link where
import Neuron.Zettelkasten.Link.Action
import Neuron.Zettelkasten.Link.View
import Neuron.Zettelkasten.Store
import Relude
import qualified Text.MMark.Extension as Ext
import Text.MMark.Extension (Extension, Inline (..))
-- | MMark extension to transform @z:/@ links in Markdown
linkActionExt :: ZettelStore -> Extension
linkActionExt store =
Ext.inlineRender $ \f -> \case
inline@(Link inner uri _title) ->
case linkActionFromUri uri of
Just lact ->
let mlink = MarkdownLink (Ext.asPlainText inner) uri
in linkActionRender store mlink lact
Nothing ->
f inline
inline ->
f inline