module Options.Applicative.Help.Pretty
( module Text.PrettyPrint.ANSI.Leijen
, (.$.)
, groupOrNestLine
, altSep
) where
import Control.Applicative
import Data.Semigroup ((<>))
import Text.PrettyPrint.ANSI.Leijen hiding ((<$>), (<>), columns)
import Text.PrettyPrint.ANSI.Leijen.Internal (Doc (..), flatten)
import qualified Text.PrettyPrint.ANSI.Leijen as PP
import Prelude
(.$.) :: Doc -> Doc -> Doc
(.$.) = (PP.<$>)
ifNotAtRoot :: (Doc -> Doc) -> Doc -> Doc
ifNotAtRoot f doc =
Nesting $ \i ->
Column $ \j ->
if i == j
then doc
else f doc
groupOrNestLine :: Doc -> Doc
groupOrNestLine =
Union
<$> flatten
<*> ifNotAtRoot (line <>) . nest 2
altSep :: Doc -> Doc -> Doc
altSep x y =
group (x <+> char '|' <> line) <//> y