packages feed

mdoc-0.1.0.0: src/Mdoc/Gen/Argument.hs

-- |
--
-- Module      : Mdoc.Gen.Argument
-- Copyright   : (c) 2026 Patrick Brisbin
-- License     : AGPL-3
-- Maintainer  : pbrisbin@gmail.com
-- Stability   : experimental
-- Portability : POSIX
module Mdoc.Gen.Argument
  ( Argument (..)
  , renderArgument
  , renderArgumentForShort
  , renderArgumentForLong
  ) where

import Mdoc.Prelude

import Data.Text qualified as T
import Mdoc.Gen.Optionality
import Mdoc.MacroArg
import Mdoc.MacroName

data Argument = Argument
  { schema :: String
  , optionality :: Optionality
  }
  deriving stock (Eq, Show)

instance IsString Argument where
  fromString schema =
    Argument
      { schema
      , optionality = Required
      }

renderArgument :: Argument -> [MacroArg]
renderArgument Argument {schema} = [Callable Ar, Bare $ esc $ pack schema]

renderArgumentForShort :: Char -> Argument -> [MacroArg]
renderArgumentForShort c arg@Argument {optionality} =
  case optionality of
    Required -> Bare (esc $ T.singleton c) : renderArgument arg
    _ -> [Bare $ esc $ T.singleton c, Callable Op] <> renderArgument arg

renderArgumentForLong :: String -> Argument -> [MacroArg]
renderArgumentForLong x arg@Argument {optionality} =
  case optionality of
    Required ->
      [ Bare $ esc $ pack $ x <> "="
      , Callable Ns
      ]
        <> renderArgument arg
    _ ->
      [ Bare $ esc $ pack x
      , Callable Ns
      , Callable Op
      , Callable Cm
      , Bare "="
      , Callable Ns
      ]
        <> renderArgument arg