packages feed

tinytools-0.1.0.4: src/Potato/Flow/Configuration.hs

{-# LANGUAGE RecordWildCards #-}

module Potato.Flow.Configuration where

import           Relude

import           Potato.Data.Text.Unicode

import           Data.Default
import qualified Text.Show

data PotatoConfiguration = PotatoConfiguration {
    _potatoConfiguration_allowGraphemeClusters            :: Bool -- NOTE we don't support replacing grapheme clusters as this would require reverting past inputs
    -- TODO rename to disallow
    , _potatoConfiguration_allowOrReplaceUnicodeWideChars :: Maybe (Maybe Char) -- outer Maybe is if we disallow, inner Maybe is what we replace with
    , _potatoConfiguration_unicodeWideCharFn              :: Char -> Int8
  }

instance Show PotatoConfiguration where
  show PotatoConfiguration {..} = "_potatoConfiguration_allowGraphemeClusters: " <> show _potatoConfiguration_allowGraphemeClusters <> "\n_potatoConfiguration_allowOrReplaceUnicodeWideChars: " <> show _potatoConfiguration_allowOrReplaceUnicodeWideChars

instance Default PotatoConfiguration where
  def = PotatoConfiguration {
      _potatoConfiguration_allowGraphemeClusters = False
      --, _potatoConfiguration_allowOrReplaceUnicodeWideChars = Just (Just '☺')
      , _potatoConfiguration_allowOrReplaceUnicodeWideChars = Nothing
      -- NOTE getCharWidth is unsafely modified by vty on initialization based on the terminal config file
      , _potatoConfiguration_unicodeWideCharFn = getCharWidth
    }