opt-env-conf-0.4.0.5: src/OptEnvConf/Output.hs
{-# LANGUAGE OverloadedStrings #-}
module OptEnvConf.Output where
import Data.List (intercalate, intersperse)
import Data.List.NonEmpty (NonEmpty (..))
import qualified Data.List.NonEmpty as NE
import Data.Maybe
import Data.Text (Text)
import qualified Data.Text as T
import Data.Version
import GHC.Stack (SrcLoc, prettySrcLoc)
import OptEnvConf.Args (Dashed (..))
import qualified OptEnvConf.Args as Args
import OptEnvConf.Parser
import Text.Colour
stringLines :: String -> [[Chunk]]
stringLines s =
let ls = T.lines (T.pack s)
in map (pure . chunk) ls
progNameChunk :: String -> Chunk
progNameChunk = fore yellow . chunk . T.pack
versionChunk :: Version -> Chunk
versionChunk = chunk . T.pack . showVersion
usageChunk :: Chunk
usageChunk = fore cyan "Usage: "
commandChunk :: String -> Chunk
commandChunk = fore magenta . chunk . T.pack
mMetavarChunk :: Maybe Metavar -> Chunk
mMetavarChunk = metavarChunk . fromMaybe "METAVAR"
metavarChunk :: Metavar -> Chunk
metavarChunk = fore yellow . chunk . T.pack
dashedChunks :: [Dashed] -> Maybe [Chunk]
dashedChunks = fmap dashedChunksNE . NE.nonEmpty
dashedChunksNE :: NonEmpty Dashed -> [Chunk]
dashedChunksNE = intersperse (fore cyan "|") . map dashedChunk . NE.toList
dashedChunk :: Dashed -> Chunk
dashedChunk = fore white . chunk . T.pack . Args.renderDashed
envVarChunksNE :: NonEmpty String -> [Chunk]
envVarChunksNE = intersperse (fore cyan "|") . map envVarChunk . NE.toList
envVarChunk :: String -> Chunk
envVarChunk = fore white . chunk . T.pack
confValChunk :: NonEmpty String -> Chunk
confValChunk = fore white . chunk . T.pack . intercalate "." . NE.toList
defaultValueChunks :: String -> [Chunk]
defaultValueChunks val = ["default: ", fore yellow $ chunk $ T.pack val]
exampleValuesChunks :: [String] -> [Chunk]
exampleValuesChunks vals = case vals of
[] -> []
[val] -> ["example: ", fore yellow $ chunk $ T.pack val]
_ -> ["examples: ", fore yellow $ chunk $ T.intercalate ", " $ map (T.pack . show) vals]
mHelpChunk :: Maybe Help -> Chunk
mHelpChunk = maybe (fore red "undocumented") helpChunk
helpChunk :: Help -> Chunk
helpChunk = fore blue . chunk . T.pack
headerChunks :: Text -> [Chunk]
headerChunks t = [fore cyan (chunk t), ":"]
syntaxChunk :: String -> Chunk
syntaxChunk = fore blue . chunk . T.pack
mSrcLocChunk :: Maybe SrcLoc -> Chunk
mSrcLocChunk = maybe "without srcLoc" srcLocChunk
srcLocChunk :: SrcLoc -> Chunk
srcLocChunk = fore cyan . chunk . T.pack . prettySrcLoc
indent :: [[Chunk]] -> [[Chunk]]
indent = map (" " :)