packages feed

mdoc-0.1.0.0: src/Mdoc/MacroName.hs

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

import Mdoc.Prelude

import Data.Text qualified as T

data MacroName
  = PercentA
  | PercentB
  | PercentC
  | PercentD
  | PercentI
  | PercentJ
  | PercentN
  | PercentO
  | PercentP
  | PercentQ
  | PercentR
  | PercentT
  | PercentU
  | PercentV
  | Ac
  | Ad
  | An
  | Ao
  | Ap
  | Aq
  | Ar
  | At
  | Bc
  | Bd
  | Bf
  | Bk
  | Bl
  | Bq
  | Brc
  | Brq
  | Bsx
  | Bt
  | Bx
  | Cd
  | Cm
  | D1
  | Db
  | Dc
  | Dd
  | Dl
  | Do
  | Dq
  | Dt
  | Dv
  | Dx
  | Ec
  | Ed
  | Ef
  | Ek
  | El
  | Em
  | En
  | Eo
  | Er
  | Es
  | Ev
  | Ex
  | Fa
  | Fc
  | Fd
  | Fl
  | Fn
  | Fo
  | Fr
  | Ft
  | Fx
  | Hf
  | Ic
  | In
  | It
  | Lb
  | Li
  | Lk
  | Lp
  | Ms
  | Mt
  | Nd
  | Nm
  | No
  | Ns
  | Nx
  | Oc
  | Oo
  | Op
  | Os
  | Ot
  | Ox
  | Pa
  | Pc
  | Pf
  | Po
  | Pp
  | Pq
  | Qc
  | Ql
  | Qo
  | Qq
  | Re
  | Rs
  | Rv
  | Sc
  | Sh
  | Sm
  | So
  | Sq
  | Ss
  | St
  | Sx
  | Sy
  | Ta
  | Tg
  | Tn
  | Ud
  | Ux
  | Va
  | Vt
  | Xc
  | Xo
  | Xr
  | Troff'ad
  | Troff'br
  | Troff'sp
  deriving stock (Bounded, Enum, Eq, Show)

macroNameText :: MacroName -> Text
macroNameText n = fromMaybe shown $ percent <|> troff <|> bug
 where
  shown = pack $ show n
  percent = ("%" <>) <$> T.stripPrefix "Percent" shown
  troff = T.stripPrefix "Troff'" shown
  bug = T.stripPrefix "Bug" shown