summaryrefslogtreecommitdiff
path: root/hs/Vimwiki/Man.hs
blob: 35d6383839666ab5805d113a228a3b6d7f6124ee (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
{-# LANGUAGE OverloadedStrings
           , CPP
           #-}

module Vimwiki.Man where

import Data.Map (Map)
import qualified Data.Map as M
import Data.Maybe (fromMaybe)
import Data.String (IsString)
import Network.URI
import Text.Pandoc (Inline (Str))
import Util (nullToMaybe)
import Data.Text.Compat

manRewriter :: (PandocStr -> Maybe PandocStr -> Maybe PandocStr -> PandocStr)
            -> [Inline] -> URI -> ([Inline], PandocStr)
manRewriter manImpl _ uri
    = ([Str . conv $ path <> "(" <> (fromMaybe "?" section') <> ")"]
      , manImpl path section' language')
    where path :: PandocStr
          path = conv $ uriPath uri
          section'  = conv . tail <$> nullToMaybe (uriFragment uri)
          language' = conv . tail <$> nullToMaybe (uriQuery uri)


archMan :: (Semigroup a, IsString a) => a -> Maybe a -> Maybe a -> a
archMan page section' language'
    = "https://man.archlinux.org/man/" <> page <> f section' <> f language'
    where f = fromMaybe "" . fmap ("." <>)

mannedMan :: (Semigroup a, IsString a) => a -> Maybe a -> Maybe a -> a
mannedMan page section' language'
    = "https://manned.org/man" <> f language' <> "/" <> page <> f section'
    where f = fromMaybe "" . fmap ("." <>)


-- Comparison of online man pages:
-- https://gist.github.com/rixx/6cb5fa38f694009ad0bd50c275bb61f2
rewriters :: (Semigroup a, IsString a) => Map String (a -> Maybe a -> Maybe a -> a)
rewriters = M.fromList [ ("arch", archMan)
                       , ("manned", mannedMan)
                       ]