module Patat.Presentation.Display.Internal
( DisplaySettings (..)
, themed
) where
import Patat.Presentation.Internal (Margins)
import Patat.Presentation.Settings (Wrap)
import Patat.Presentation.Syntax (Block, RevealState, Var)
import qualified Patat.PrettyPrint as PP
import Patat.Size (Size)
import qualified Patat.Theme as Theme
import qualified Skylighting as Skylighting
data DisplaySettings = DisplaySettings
{ DisplaySettings -> Size
dsSize :: !Size
, DisplaySettings -> Wrap
dsWrap :: !Wrap
, DisplaySettings -> Int
dsTabStop :: !Int
, DisplaySettings -> Margins
dsMargins :: !Margins
, DisplaySettings -> Theme
dsTheme :: !Theme.Theme
, DisplaySettings -> SyntaxMap
dsSyntaxMap :: !Skylighting.SyntaxMap
, DisplaySettings -> Var -> [Block]
dsResolve :: !(Var -> [Block])
, DisplaySettings -> RevealState
dsRevealState :: !RevealState
}
themed
:: DisplaySettings -> (Theme.Theme -> Maybe Theme.Style) -> PP.Doc -> PP.Doc
themed :: DisplaySettings -> (Theme -> Maybe Style) -> Doc -> Doc
themed DisplaySettings
ds Theme -> Maybe Style
f = case Theme -> Maybe Style
f (DisplaySettings -> Theme
dsTheme DisplaySettings
ds) of
Maybe Style
Nothing -> Doc -> Doc
forall a. a -> a
id
Just (Theme.Style []) -> Doc -> Doc
forall a. a -> a
id
Just (Theme.Style [SGR]
codes) -> [SGR] -> Doc -> Doc
PP.ansi [SGR]
codes