pg-entity-0.0.4.1: docs/src/Main.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE Strict #-}
module Main where
import Control.Monad (when)
import Control.Monad.IO.Class (MonadIO)
import Data.Foldable
import Data.Function
import qualified Data.List as List
import Development.Shake
import Development.Shake.FilePath
import qualified LiterateX
import LiterateX.Renderer (Options (..))
import qualified LiterateX.Renderer as Renderer
import qualified LiterateX.Types.SourceFormat as SourceFormat
import qualified System.Directory as Directory
import qualified System.IO.Strict as Strict
main :: IO ()
main = shakeArgs shakeOptions{shakeFiles = "_build"} $ do
phony "process" $ do
putInfo "[+] Processing files…"
liftIO $ Directory.createDirectoryIfMissing True "./docs/.markdown"
liftIO Directory.getCurrentDirectory
>>= liftIO . putStrLn
files' <- getDirectoryFiles "./docs/src" ["//*.hs"]
let files = filter (/= "Main.hs") files'
liftIO $ print files
forM_ files $ \f -> do
let fileName = toMarkdownFile f
liftIO $
LiterateX.transformFileToFile
SourceFormat.DoubleDash
literatexOptions
("./docs/src" </> f)
fileName
processFullProseModule fileName
literatexOptions :: Options
literatexOptions =
Renderer.defaultOptions
{ codeLanguage = Just "haskell"
, numberCodeLines = False
}
toMarkdownFile :: FilePath -> FilePath
toMarkdownFile f =
f
& dropExtension
& appendExtension ".md"
& prependPath "./docs/.markdown"
{-| Prepend the second argument to the first.
To be used in pipelines.
> "foobar" & prependPath "book"
"book/foobar"
-}
prependPath :: FilePath -> FilePath -> FilePath
prependPath prefixPath path = prefixPath </> path
{-| Append the first argument to the second as an extension.
To be used in pipelines.
> "foobar" & appendExtension ".md"
"foobar.md"
-}
appendExtension :: FilePath -> FilePath -> FilePath
appendExtension extension path = path <.> extension
processFullProseModule :: (MonadIO m) => FilePath -> m ()
processFullProseModule filepath = do
file <- liftIO $ Strict.readFile filepath
when ("{-# ANN module False #-}" `List.isInfixOf` file) $
liftIO $
writeFile filepath (unlines $ List.drop 5 $ lines file)