module Vgrep.Ansi (
AnsiFormatted
, Formatted ()
, emptyFormatted
, bare
, format
, cat
, mapText
, mapTextWithPos
, takeFormatted
, dropFormatted
, padFormatted
, renderAnsi
, stripAnsi
) where
import Data.Text (Text)
import qualified Graphics.Vty as Vty
import Vgrep.Ansi.Type
import Vgrep.Ansi.Vty.Attributes
renderAnsi :: Attr -> AnsiFormatted -> Vty.Image
renderAnsi attr = \case
Empty -> Vty.emptyImage
Text _ t -> Vty.text' attr t
Format _ attr' t -> renderAnsi (combineStyles attr attr') t
Cat _ ts -> Vty.horizCat (map (renderAnsi attr) ts)
stripAnsi :: Formatted a -> Text
stripAnsi = \case
Empty -> mempty
Text _ t -> t
Format _ _ t -> stripAnsi t
Cat _ ts -> foldMap stripAnsi ts