{-# LANGUAGE OverloadedStrings #-} -- | This module provides styles for borders as used in terminal -- applications. Your mileage may vary on some of the fancier styles -- due to varying support for some border characters in the fonts your -- users may be using. Because of this, we provide the 'ascii' style in -- addition to the Unicode styles. The 'unicode' style is also a safe -- bet. -- -- To use these in your widgets, see -- 'Brick.Widgets.Core.withBorderStyle'. By default, widgets rendered -- without a specified border style use 'unicode' via the 'Default' -- instance provided by 'BorderStyle'. module Brick.Widgets.Border.Style ( BorderStyle(..) , borderStyleFromChar , ascii , unicode , unicodeBold , unicodeRounded , defaultBorderStyle ) where -- | A border style for use in any widget that needs to render borders -- in a consistent style. data BorderStyle = BorderStyle { bsCornerTL :: Char -- ^ Top-left corner character , bsCornerTR :: Char -- ^ Top-right corner character , bsCornerBR :: Char -- ^ Bottom-right corner character , bsCornerBL :: Char -- ^ Bottom-left corner character , bsIntersectFull :: Char -- ^ Full intersection (cross) , bsIntersectL :: Char -- ^ Left side of a horizontal border intersecting a vertical one , bsIntersectR :: Char -- ^ Right side of a horizontal border intersecting a vertical one , bsIntersectT :: Char -- ^ Top of a vertical border intersecting a horizontal one , bsIntersectB :: Char -- ^ Bottom of a vertical border intersecting a horizontal one , bsHorizontal :: Char -- ^ Horizontal border character , bsVertical :: Char -- ^ Vertical border character } deriving (Show, Read, Eq) defaultBorderStyle :: BorderStyle defaultBorderStyle = unicode -- | Make a border style using the specified character everywhere. borderStyleFromChar :: Char -> BorderStyle borderStyleFromChar c = BorderStyle c c c c c c c c c c c -- |An ASCII border style which will work in any terminal. ascii :: BorderStyle ascii = BorderStyle { bsCornerTL = '+' , bsCornerTR = '+' , bsCornerBR = '+' , bsCornerBL = '+' , bsIntersectFull = '+' , bsIntersectL = '+' , bsIntersectR = '+' , bsIntersectT = '+' , bsIntersectB = '+' , bsHorizontal = '-' , bsVertical = '|' } -- |A unicode border style with real corner and intersection characters. unicode :: BorderStyle unicode = BorderStyle { bsCornerTL = '┌' , bsCornerTR = '┐' , bsCornerBR = '┘' , bsCornerBL = '└' , bsIntersectFull = '┼' , bsIntersectL = '├' , bsIntersectR = '┤' , bsIntersectT = '┬' , bsIntersectB = '┴' , bsHorizontal = '─' , bsVertical = '│' } -- |A unicode border style in a bold typeface. unicodeBold :: BorderStyle unicodeBold = BorderStyle { bsCornerTL = '┏' , bsCornerTR = '┓' , bsCornerBR = '┛' , bsCornerBL = '┗' , bsIntersectFull = '╋' , bsIntersectL = '┣' , bsIntersectR = '┫' , bsIntersectT = '┳' , bsIntersectB = '┻' , bsHorizontal = '━' , bsVertical = '┃' } -- |A unicode border style with rounded corners. unicodeRounded :: BorderStyle unicodeRounded = BorderStyle { bsCornerTL = '╭' , bsCornerTR = '╮' , bsCornerBR = '╯' , bsCornerBL = '╰' , bsIntersectFull = '┼' , bsIntersectL = '├' , bsIntersectR = '┤' , bsIntersectT = '┬' , bsIntersectB = '┴' , bsHorizontal = '─' , bsVertical = '│' }