-------------------------------------------------------------------------------- module Hable.Style.Unicode ( UnicodeStyle(..) , unicodeCharset , maybeUnicodeCharset ) where -------------------------------------------------------------------------------- import Hable.BoxChar -------------------------------------------------------------------------------- -- | This module uses a style data type supporting normal, double and thick -- lines. data UnicodeStyle = Normal | Double | Thick deriving Show -------------------------------------------------------------------------------- -- | 'charset'. Unfortunately, there is not a Unicode box character for all -- possible values of @'BoxChar' 'Unicode'@. In case of such an input, an error -- is thrown. -- -- If you'd prefer an alternative behavior in that case, use 'maybeUnicodeCharset'. -- -- An example output: -- -- >>> putStr (hable myConfig myTable) -- ╒══════════════════════╤════════════════════════════════════════════════╕ -- │ Name │ Hable │ -- ╞══════════════════════╪════════════════════════════════════════════════╡ -- │ Synopsis │ customizable pretty printer library for tables │ -- │ License │ Public Domain / Unlicense │ -- └──────────────────────┴────────────────────────────────────────────────┘ unicodeCharset :: BoxChar UnicodeStyle -> String unicodeCharset bxChr = maybe (error "Unknown BoxChar.") id (maybeUnicodeCharset bxChr) -------------------------------------------------------------------------------- -- | Maybe returns a character representing the given 'BoxChar' with Unicode -- box characters. maybeUnicodeCharset :: BoxChar UnicodeStyle -> Maybe String maybeUnicodeCharset (Bar Normal) = Just "│" maybeUnicodeCharset (Bar Thick ) = Just "┃" maybeUnicodeCharset (Bar Double) = Just "║" maybeUnicodeCharset (Dash Normal) = Just "─" maybeUnicodeCharset (Dash Thick ) = Just "━" maybeUnicodeCharset (Dash Double) = Just "═" maybeUnicodeCharset (Angled HLeft Normal VBottom Normal) = Just "┐" maybeUnicodeCharset (Angled HLeft Normal VBottom Thick ) = Just "┑" maybeUnicodeCharset (Angled HLeft Normal VBottom Double) = Just "╕" maybeUnicodeCharset (Angled HLeft Thick VBottom Normal) = Just "┑" maybeUnicodeCharset (Angled HLeft Thick VBottom Thick ) = Just "┓" --ybeUnicodeCharset (Angled HLeft Thick VBottom Double) = Just "·" maybeUnicodeCharset (Angled HLeft Double VBottom Normal) = Just "╖" --ybeUnicodeCharset (Angled HLeft Double VBottom Thick ) = Just "·" maybeUnicodeCharset (Angled HLeft Double VBottom Double) = Just "╗" maybeUnicodeCharset (Angled HLeft Normal VTop Normal) = Just "┘" maybeUnicodeCharset (Angled HLeft Normal VTop Thick ) = Just "┙" maybeUnicodeCharset (Angled HLeft Normal VTop Double) = Just "╛" maybeUnicodeCharset (Angled HLeft Thick VTop Normal) = Just "┚" maybeUnicodeCharset (Angled HLeft Thick VTop Thick ) = Just "┛" --ybeUnicodeCharset (Angled HLeft Thick VTop Double) = Just "·" maybeUnicodeCharset (Angled HLeft Double VTop Normal) = Just "╜" --ybeUnicodeCharset (Angled HLeft Double VTop Thick ) = Just "·" maybeUnicodeCharset (Angled HLeft Double VTop Double) = Just "╝" maybeUnicodeCharset (Angled HRight Normal VBottom Normal) = Just "┌" maybeUnicodeCharset (Angled HRight Thick VBottom Normal) = Just "┎" maybeUnicodeCharset (Angled HRight Double VBottom Normal) = Just "╓" maybeUnicodeCharset (Angled HRight Normal VBottom Thick ) = Just "┍" maybeUnicodeCharset (Angled HRight Thick VBottom Thick ) = Just "┏" --ybeUnicodeCharset (Angled HRight Double VBottom Thick ) = Just "·" maybeUnicodeCharset (Angled HRight Normal VBottom Double) = Just "╒" --ybeUnicodeCharset (Angled HRight Thick VBottom Double) = Just "·" maybeUnicodeCharset (Angled HRight Double VBottom Double) = Just "╔" maybeUnicodeCharset (Angled HRight Normal VTop Normal) = Just "└" maybeUnicodeCharset (Angled HRight Normal VTop Thick ) = Just "┕" maybeUnicodeCharset (Angled HRight Normal VTop Double) = Just "╘" maybeUnicodeCharset (Angled HRight Thick VTop Normal) = Just "┖" maybeUnicodeCharset (Angled HRight Thick VTop Thick ) = Just "┗" --ybeUnicodeCharset (Angled HRight Thick VTop Double) = Just "·" maybeUnicodeCharset (Angled HRight Double VTop Normal) = Just "╙" --ybeUnicodeCharset (Angled HRight Double VTop Thick ) = Just "·" maybeUnicodeCharset (Angled HRight Double VTop Double) = Just "╚" maybeUnicodeCharset (Angled HCenter Normal VBottom Normal) = Just "┬" maybeUnicodeCharset (Angled HCenter Normal VBottom Thick ) = Just "┯" maybeUnicodeCharset (Angled HCenter Normal VBottom Double) = Just "╤" maybeUnicodeCharset (Angled HCenter Thick VBottom Normal) = Just "┰" maybeUnicodeCharset (Angled HCenter Thick VBottom Thick ) = Just "┳" --ybeUnicodeCharset (Angled HCenter Thick VBottom Double) = Just "·" maybeUnicodeCharset (Angled HCenter Double VBottom Normal) = Just "╥" --ybeUnicodeCharset (Angled HCenter Double VBottom Thick ) = Just "·" maybeUnicodeCharset (Angled HCenter Double VBottom Double) = Just "╦" maybeUnicodeCharset (Angled HLeft Normal VCenter Normal) = Just "┤" maybeUnicodeCharset (Angled HLeft Normal VCenter Thick ) = Just "┥" maybeUnicodeCharset (Angled HLeft Normal VCenter Double) = Just "╡" maybeUnicodeCharset (Angled HLeft Thick VCenter Normal) = Just "┨" maybeUnicodeCharset (Angled HLeft Thick VCenter Thick ) = Just "┫" --ybeUnicodeCharset (Angled HLeft Thick VCenter Double) = Just "·" maybeUnicodeCharset (Angled HLeft Double VCenter Normal) = Just "╢" --ybeUnicodeCharset (Angled HLeft Double VCenter Thick ) = Just "·" maybeUnicodeCharset (Angled HLeft Double VCenter Double) = Just "╣" maybeUnicodeCharset (Angled HCenter Normal VTop Normal) = Just "┴" maybeUnicodeCharset (Angled HCenter Normal VTop Thick ) = Just "┷" maybeUnicodeCharset (Angled HCenter Normal VTop Double) = Just "╧" maybeUnicodeCharset (Angled HCenter Thick VTop Normal) = Just "┸" maybeUnicodeCharset (Angled HCenter Thick VTop Thick ) = Just "┻" --ybeUnicodeCharset (Angled HCenter Thick VTop Double) = Just "·" maybeUnicodeCharset (Angled HCenter Double VTop Normal) = Just "╧" --ybeUnicodeCharset (Angled HCenter Double VTop Thick ) = Just "·" maybeUnicodeCharset (Angled HCenter Double VTop Double) = Just "╩" maybeUnicodeCharset (Angled HRight Normal VCenter Normal) = Just "├" maybeUnicodeCharset (Angled HRight Thick VCenter Normal) = Just "┠" maybeUnicodeCharset (Angled HRight Double VCenter Normal) = Just "╟" maybeUnicodeCharset (Angled HRight Normal VCenter Thick ) = Just "┝" maybeUnicodeCharset (Angled HRight Thick VCenter Thick ) = Just "┣" --ybeUnicodeCharset (Angled HRight Double VCenter Thick ) = Just "·" maybeUnicodeCharset (Angled HRight Normal VCenter Double) = Just "╞" --ybeUnicodeCharset (Angled HRight Thick VCenter Double) = Just "·" maybeUnicodeCharset (Angled HRight Double VCenter Double) = Just "╠" maybeUnicodeCharset (Angled HCenter Normal VCenter Normal) = Just "┼" maybeUnicodeCharset (Angled HCenter Normal VCenter Thick ) = Just "┿" maybeUnicodeCharset (Angled HCenter Normal VCenter Double) = Just "╪" maybeUnicodeCharset (Angled HCenter Thick VCenter Normal) = Just "╂" maybeUnicodeCharset (Angled HCenter Thick VCenter Thick ) = Just "╋" --ybeUnicodeCharset (Angled HCenter Thick VCenter Double) = Just "·" maybeUnicodeCharset (Angled HCenter Double VCenter Normal) = Just "╫" --ybeUnicodeCharset (Angled HCenter Double VCenter Thick ) = Just "·" maybeUnicodeCharset (Angled HCenter Double VCenter Double) = Just "╬" maybeUnicodeCharset _ = Nothing