mdoc-0.2.0.0: src/Mdoc/Data/Page.hs
-- |
--
-- Module : Mdoc.Data.Page
-- Copyright : (c) 2026 Patrick Brisbin
-- License : AGPL-3
-- Maintainer : pbrisbin@gmail.com
-- Stability : experimental
-- Portability : POSIX
module Mdoc.Data.Page
( Page
-- * Adding to @SYNOPSIS@ / @DESCRIPTION@
, addSwitch
, addOption
, addArgument
, addConfig
-- * @ENVIRONMENT@
, addEnvVar
-- * Other, rarel-used elements
, setSynopsis
, setPrologue
, setEpilogue
) where
import Mdoc.Prelude
import Mdoc.Data.Argument
import Mdoc.Data.Config
import Mdoc.Data.Described
import Mdoc.Data.EnvVar
import Mdoc.Data.List (ByItem, Indent, List)
import Mdoc.Data.List qualified as List
import Mdoc.Data.Positional
import Mdoc.Data.Synopsis (Synopsis (..))
import Mdoc.Data.Synopsis qualified as Synopsis
import Mdoc.Optics
import Mdoc.Syntax
data Page = Page
{ synopsis :: Maybe Synopsis
, prologue :: Maybe Mdoc
, options :: Maybe (List Indent Positional)
, configs :: Maybe (List Indent Config)
, environment :: Maybe (List ByItem EnvVar)
, epilogue :: Maybe Mdoc
}
deriving stock (Eq, Generic, Show)
deriving anyclass (ToJSON)
deriving (Monoid, Semigroup) via Generically Page
addSwitch :: Described Flag -> Page -> Page
addSwitch = addPositional . fmap PositionalSwitch
addOption :: Described Option -> Page -> Page
addOption = addPositional . fmap PositionalOption
addArgument :: Described Argument -> Page -> Page
addArgument = addPositional . fmap PositionalArgument
addPositional :: Described Positional -> Page -> Page
addPositional described m =
m
& field @"synopsis" <?>~ Synopsis.singleton described
& field @"options" <?>~ List.singleton described
addConfig :: Described Config -> Page -> Page
addConfig described m =
m & field @"configs" <?>~ List.singleton described
addEnvVar :: Described EnvVar -> Page -> Page
addEnvVar described m =
m & field @"environment" <?>~ List.singleton described
setSynopsis :: Mdoc -> Page -> Page
setSynopsis s = field @"synopsis" ?~ SynopsisCustom s
setPrologue :: Mdoc -> Page -> Page
setPrologue p = field @"prologue" ?~ p
setEpilogue :: Mdoc -> Page -> Page
setEpilogue p = field @"epilogue" ?~ p