module Hhp.PkgDoc (packageDoc) where

import System.Process (readProcess)

import Hhp.Types
import Hhp.GhcPkg

-- | Obtaining the package name and the doc path of a module.
packageDoc :: Options
           -> Cradle
           -> ModuleString
           -> IO String
packageDoc :: Options -> Cradle -> [Char] -> IO [Char]
packageDoc Options
_ Cradle
cradle [Char]
mdl = Cradle -> [Char] -> IO [Char]
pkgDoc Cradle
cradle [Char]
mdl

pkgDoc :: Cradle -> String -> IO String
pkgDoc :: Cradle -> [Char] -> IO [Char]
pkgDoc Cradle
cradle [Char]
mdl = do
    [Char]
pkg <- [Char] -> [Char]
trim forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [Char] -> [[Char]] -> [Char] -> IO [Char]
readProcess [Char]
"ghc-pkg" [[Char]]
toModuleOpts []
    if [Char]
pkg forall a. Eq a => a -> a -> Bool
== [Char]
"" then
        forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
"\n"
      else do
        [Char]
htmlpath <- [Char] -> [[Char]] -> [Char] -> IO [Char]
readProcess [Char]
"ghc-pkg" ([Char] -> [[Char]]
toDocDirOpts [Char]
pkg) []
        let ret :: [Char]
ret = [Char]
pkg forall a. [a] -> [a] -> [a]
++ [Char]
" " forall a. [a] -> [a] -> [a]
++ forall a. Int -> [a] -> [a]
drop Int
14 [Char]
htmlpath
        forall (m :: * -> *) a. Monad m => a -> m a
return [Char]
ret
  where
    toModuleOpts :: [[Char]]
toModuleOpts = [[Char]
"find-module", [Char]
mdl, [Char]
"--simple-output"]
                   forall a. [a] -> [a] -> [a]
++ [GhcPkgDb] -> [[Char]]
ghcPkgDbStackOpts (Cradle -> [GhcPkgDb]
cradlePkgDbStack Cradle
cradle)
    toDocDirOpts :: [Char] -> [[Char]]
toDocDirOpts [Char]
pkg = [[Char]
"field", [Char]
pkg, [Char]
"haddock-html"]
                       forall a. [a] -> [a] -> [a]
++ [GhcPkgDb] -> [[Char]]
ghcPkgDbStackOpts (Cradle -> [GhcPkgDb]
cradlePkgDbStack Cradle
cradle)
    trim :: [Char] -> [Char]
trim = forall a. (a -> Bool) -> [a] -> [a]
takeWhile (forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
`notElem` [Char]
" \n")