packages feed

mdoc-0.1.0.2: 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} =
  prefix <> [Callable Ns] <> renderArgument arg
 where
  prefix =
    case optionality of
      Required -> [Bare $ esc $ pack $ x <> "="]
      _ ->
        [ Bare $ esc $ pack x
        , Callable Ns
        , Callable Op
        , Callable Cm
        , Bare "="
        ]