rainbow 0.4.0.0 → 0.34.2.2
raw patch · 11 files changed
Files
- LICENSE +1/−1
- README.md +20/−0
- System/Console/Rainbow.hs +0/−3511
- lib/Rainbow.hs +354/−0
- lib/Rainbow/Translate.hs +355/−0
- lib/Rainbow/Types.hs +239/−0
- rainbow.cabal +84/−31
- stack.yaml +32/−0
- tests/Rainbow/QuickCheck.hs +106/−0
- tests/rainbow-instances.hs +10/−0
- tests/rainbow-visual.hs +18/−0
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2013, Omari Norman+Copyright (c) 2013-2019 Omari Norman All rights reserved.
+ README.md view
@@ -0,0 +1,20 @@+# rainbow++rainbow helps you build colorful output for both 8- and 256-color+terminals. It works only on Unix-like operating systems. For more+information, please see the documentation in the main Rainbow+module.++rainbow is on Github:++http://www.github.com/massysett/rainbow++and Hackage:++http://hackage.haskell.org/package/rainbow++and Stackage:++https://www.stackage.org/package/rainbow++rainbow is licensed under the BSD license; see the LICENSE file.
− System/Console/Rainbow.hs
@@ -1,3511 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}--- | Handles colors and special effects for text. Internally this--- module uses the Haskell terminfo library, which links against the--- UNIX library of the same name, so it should work with a wide--- variety of UNIX terminals.------ The building block of Rainbow is the 'Chunk'. Each 'Chunk' comes with--- a 'TextSpec', which specifies how the text should look on 8-color--- and on 256-color terminals. The 'Chunk' is a full specification; that--- is, although 'Chunk's are typically printed one after the other, the--- appearance of one 'Chunk' does not affect the appearance of the next--- 'Chunk'.------ You have full freedom to specify different attributes and colors--- for 8 and 256 color terminals; for instance, you can have text--- appear red on an 8-color terminal but blue on a 256-color terminal.------ A 'Chunk' is a 'Monoid', so you can combine them using the usual--- monoid functions, including '<>'. You can create a 'Chunk' with--- text using 'fromString', but this library is much more usable if--- you enable the OverloadedStrings GHC extension:------ > {-# LANGUAGE OverloadedStrings #-}------ and all future examples assume you have enabled OverloadedStrings.------ Here are some basic examples:------ > putChunkLn $ "Some blue text" <> f_blue--- > putChunkLn $ "Blue on red background" <> f_blue <> b_red--- > putChunkLn $ "Blue on red, foreground bold" <> f_blue <> b_red <> bold------ But what makes Rainbow a little more interesting is that you can--- also specify output for 256-color terminals. To use these examples,--- be sure your TERM environment variable is set to something that--- supports 256 colors (like @xterm-256color@) before you start GHCi:------ > putChunkLn $ "Blue on 8-color terminal, red on 256-color terminal"--- > <> c8_f_blue <> c256_f_red------ If 'mappend' multiple chunks that change the same property, the--- rightmost one \"wins\":------ > putChunkLn $ "This will be blue" <> f_red <> f_blue------ This property comes in handy if you want to specify a default color--- for 8- and 256-color terminals, then a more specific shade for a--- 256-color terminal:------ > putChunkLn $ "Pink" <> f_red <> c256_f_201------ However, if you use 'mappend' to add additional 'Chunk's that have--- text, the text will be appended:------ > putChunkLn $ f_green <> "You will see this text "--- > <> "and this text too, but it will all be blue"--- > <> f_blue------ Although one chunk can have different colors on 8- and 256-color--- terminals, it cannot have different colors on the same--- terminal. That is, if you want to print some text in one color and--- some text in another color, make two chunks.--module System.Console.Rainbow (-- -- * Terminal definitions- Term(..)- , termFromEnv- , smartTermFromEnv-- -- * Chunks- , Chunk(..)-- -- * Printing chunks- , putChunks- , hPutChunks-- -- ** Printing one chunk at a time-- -- | These functions make it easy to print one chunk at a time. Each- -- function initializes the terminal once for each chunk, unlike the- -- list-oriented functions, which only initialize the terminal- -- once. (Initialization does not clear the screen; rather, it is a- -- process that the terminfo library requires.) Thus there might be- -- a performance penalty for using these functions to print large- -- numbers of chunks. Or, there might not be--I have not benchmarked- -- them.- --- -- These functions use the default terminal, obtained using- -- 'termFromEnv'.- , putChunk- , putChunkLn- , hPutChunk- , hPutChunkLn-- -- * Effects for both 8 and 256 color terminals-- -- | These 'Chunk's affect both 8 and 256 color terminals:- --- -- > putChunkLn $ "bold on 8 and 256 color terminals" <> bold- --- -- There are also 'Chunk's to turn an effect off, such as- -- 'boldOff'. Ordinarily you will not need these because each chunk- -- starts with no effects, so you only need to turn on the effects- -- you want. However the @off@ 'Chunk's are here if you need them.-- , bold, boldOff- , underline, underlineOff- , flash, flashOff- , inverse, inverseOff-- -- * Effects for 8-color terminals only-- -- | These 'Chunk's affect 8-color terminals only.- --- -- > putChunkLn $ "Bold on 8 color terminal only" <> bold8-- , bold8, bold8off- , underline8, underline8off- , flash8, flash8off- , inverse8, inverse8off-- -- * Effects for 256-color terminals only-- -- | These 'Chunk's affect 256-color terminals only.- --- -- > putChunkLn $ "Underlined on 256-color terminal, "- -- > <> "bold on 8-color terminal"- -- > <> underlined256 <> bold8-- , bold256, bold256off- , underline256, underline256off- , flash256, flash256off- , inverse256, inverse256off-- -- * Colors for both 8 and 256 color terminals-- -- | These 'Chunk's affect both 8 and 256 color- -- terminals.- --- -- > putChunkLn $ "Red on blue" <> f_red <> b_blue-- -- ** Foreground colors-- , f_default- , f_black- , f_red- , f_green- , f_yellow- , f_blue- , f_magenta- , f_cyan- , f_white-- -- ** Background colors-- , b_default- , b_black- , b_red- , b_green- , b_yellow- , b_blue- , b_magenta- , b_cyan- , b_white-- -- * Specific colors- -- ** 8 color foreground colors- , c8_f_default- , c8_f_black- , c8_f_red- , c8_f_green- , c8_f_yellow- , c8_f_blue- , c8_f_magenta- , c8_f_cyan- , c8_f_white-- -- ** 8 color background colors- , c8_b_default- , c8_b_black- , c8_b_red- , c8_b_green- , c8_b_yellow- , c8_b_blue- , c8_b_magenta- , c8_b_cyan- , c8_b_white-- -- ** 256 color foreground colors-- -- | The color names assume a palette similar to the default one- -- that xterm uses.- , c256_f_default- , c256_f_0- , c256_f_black- , c256_f_1- , c256_f_red- , c256_f_2- , c256_f_green- , c256_f_3- , c256_f_yellow- , c256_f_4- , c256_f_blue- , c256_f_5- , c256_f_magenta- , c256_f_6- , c256_f_cyan- , c256_f_7- , c256_f_white- , c256_f_8- , c256_f_grey- , c256_f_9- , c256_f_red_bright- , c256_f_10- , c256_f_green_bright- , c256_f_11- , c256_f_yellow_bright- , c256_f_12- , c256_f_blue_bright- , c256_f_13- , c256_f_magenta_bright- , c256_f_14- , c256_f_cyan_bright- , c256_f_15- , c256_f_white_bright- , c256_f_16- , c256_f_17- , c256_f_18- , c256_f_19- , c256_f_20- , c256_f_21- , c256_f_22- , c256_f_23- , c256_f_24- , c256_f_25- , c256_f_26- , c256_f_27- , c256_f_28- , c256_f_29- , c256_f_30- , c256_f_31- , c256_f_32- , c256_f_33- , c256_f_34- , c256_f_35- , c256_f_36- , c256_f_37- , c256_f_38- , c256_f_39- , c256_f_40- , c256_f_41- , c256_f_42- , c256_f_43- , c256_f_44- , c256_f_45- , c256_f_46- , c256_f_47- , c256_f_48- , c256_f_49- , c256_f_50- , c256_f_51- , c256_f_52- , c256_f_53- , c256_f_54- , c256_f_55- , c256_f_56- , c256_f_57- , c256_f_58- , c256_f_59- , c256_f_60- , c256_f_61- , c256_f_62- , c256_f_63- , c256_f_64- , c256_f_65- , c256_f_66- , c256_f_67- , c256_f_68- , c256_f_69- , c256_f_70- , c256_f_71- , c256_f_72- , c256_f_73- , c256_f_74- , c256_f_75- , c256_f_76- , c256_f_77- , c256_f_78- , c256_f_79- , c256_f_80- , c256_f_81- , c256_f_82- , c256_f_83- , c256_f_84- , c256_f_85- , c256_f_86- , c256_f_87- , c256_f_88- , c256_f_89- , c256_f_90- , c256_f_91- , c256_f_92- , c256_f_93- , c256_f_94- , c256_f_95- , c256_f_96- , c256_f_97- , c256_f_98- , c256_f_99- , c256_f_100- , c256_f_101- , c256_f_102- , c256_f_103- , c256_f_104- , c256_f_105- , c256_f_106- , c256_f_107- , c256_f_108- , c256_f_109- , c256_f_110- , c256_f_111- , c256_f_112- , c256_f_113- , c256_f_114- , c256_f_115- , c256_f_116- , c256_f_117- , c256_f_118- , c256_f_119- , c256_f_120- , c256_f_121- , c256_f_122- , c256_f_123- , c256_f_124- , c256_f_125- , c256_f_126- , c256_f_127- , c256_f_128- , c256_f_129- , c256_f_130- , c256_f_131- , c256_f_132- , c256_f_133- , c256_f_134- , c256_f_135- , c256_f_136- , c256_f_137- , c256_f_138- , c256_f_139- , c256_f_140- , c256_f_141- , c256_f_142- , c256_f_143- , c256_f_144- , c256_f_145- , c256_f_146- , c256_f_147- , c256_f_148- , c256_f_149- , c256_f_150- , c256_f_151- , c256_f_152- , c256_f_153- , c256_f_154- , c256_f_155- , c256_f_156- , c256_f_157- , c256_f_158- , c256_f_159- , c256_f_160- , c256_f_161- , c256_f_162- , c256_f_163- , c256_f_164- , c256_f_165- , c256_f_166- , c256_f_167- , c256_f_168- , c256_f_169- , c256_f_170- , c256_f_171- , c256_f_172- , c256_f_173- , c256_f_174- , c256_f_175- , c256_f_176- , c256_f_177- , c256_f_178- , c256_f_179- , c256_f_180- , c256_f_181- , c256_f_182- , c256_f_183- , c256_f_184- , c256_f_185- , c256_f_186- , c256_f_187- , c256_f_188- , c256_f_189- , c256_f_190- , c256_f_191- , c256_f_192- , c256_f_193- , c256_f_194- , c256_f_195- , c256_f_196- , c256_f_197- , c256_f_198- , c256_f_199- , c256_f_200- , c256_f_201- , c256_f_202- , c256_f_203- , c256_f_204- , c256_f_205- , c256_f_206- , c256_f_207- , c256_f_208- , c256_f_209- , c256_f_210- , c256_f_211- , c256_f_212- , c256_f_213- , c256_f_214- , c256_f_215- , c256_f_216- , c256_f_217- , c256_f_218- , c256_f_219- , c256_f_220- , c256_f_221- , c256_f_222- , c256_f_223- , c256_f_224- , c256_f_225- , c256_f_226- , c256_f_227- , c256_f_228- , c256_f_229- , c256_f_230- , c256_f_231- , c256_f_232- , c256_f_233- , c256_f_234- , c256_f_235- , c256_f_236- , c256_f_237- , c256_f_238- , c256_f_239- , c256_f_240- , c256_f_241- , c256_f_242- , c256_f_243- , c256_f_244- , c256_f_245- , c256_f_246- , c256_f_247- , c256_f_248- , c256_f_249- , c256_f_250- , c256_f_251- , c256_f_252- , c256_f_253- , c256_f_254- , c256_f_255-- -- ** 256 color background colors-- -- | The color names assume a palette similar to the default one- -- that xterm uses.- , c256_b_default- , c256_b_0- , c256_b_black- , c256_b_1- , c256_b_red- , c256_b_2- , c256_b_green- , c256_b_3- , c256_b_yellow- , c256_b_4- , c256_b_blue- , c256_b_5- , c256_b_magenta- , c256_b_6- , c256_b_cyan- , c256_b_7- , c256_b_white- , c256_b_8- , c256_b_grey- , c256_b_9- , c256_b_red_bright- , c256_b_10- , c256_b_green_bright- , c256_b_11- , c256_b_yellow_bright- , c256_b_12- , c256_b_blue_bright- , c256_b_13- , c256_b_magenta_bright- , c256_b_14- , c256_b_cyan_bright- , c256_b_15- , c256_b_white_bright- , c256_b_16- , c256_b_17- , c256_b_18- , c256_b_19- , c256_b_20- , c256_b_21- , c256_b_22- , c256_b_23- , c256_b_24- , c256_b_25- , c256_b_26- , c256_b_27- , c256_b_28- , c256_b_29- , c256_b_30- , c256_b_31- , c256_b_32- , c256_b_33- , c256_b_34- , c256_b_35- , c256_b_36- , c256_b_37- , c256_b_38- , c256_b_39- , c256_b_40- , c256_b_41- , c256_b_42- , c256_b_43- , c256_b_44- , c256_b_45- , c256_b_46- , c256_b_47- , c256_b_48- , c256_b_49- , c256_b_50- , c256_b_51- , c256_b_52- , c256_b_53- , c256_b_54- , c256_b_55- , c256_b_56- , c256_b_57- , c256_b_58- , c256_b_59- , c256_b_60- , c256_b_61- , c256_b_62- , c256_b_63- , c256_b_64- , c256_b_65- , c256_b_66- , c256_b_67- , c256_b_68- , c256_b_69- , c256_b_70- , c256_b_71- , c256_b_72- , c256_b_73- , c256_b_74- , c256_b_75- , c256_b_76- , c256_b_77- , c256_b_78- , c256_b_79- , c256_b_80- , c256_b_81- , c256_b_82- , c256_b_83- , c256_b_84- , c256_b_85- , c256_b_86- , c256_b_87- , c256_b_88- , c256_b_89- , c256_b_90- , c256_b_91- , c256_b_92- , c256_b_93- , c256_b_94- , c256_b_95- , c256_b_96- , c256_b_97- , c256_b_98- , c256_b_99- , c256_b_100- , c256_b_101- , c256_b_102- , c256_b_103- , c256_b_104- , c256_b_105- , c256_b_106- , c256_b_107- , c256_b_108- , c256_b_109- , c256_b_110- , c256_b_111- , c256_b_112- , c256_b_113- , c256_b_114- , c256_b_115- , c256_b_116- , c256_b_117- , c256_b_118- , c256_b_119- , c256_b_120- , c256_b_121- , c256_b_122- , c256_b_123- , c256_b_124- , c256_b_125- , c256_b_126- , c256_b_127- , c256_b_128- , c256_b_129- , c256_b_130- , c256_b_131- , c256_b_132- , c256_b_133- , c256_b_134- , c256_b_135- , c256_b_136- , c256_b_137- , c256_b_138- , c256_b_139- , c256_b_140- , c256_b_141- , c256_b_142- , c256_b_143- , c256_b_144- , c256_b_145- , c256_b_146- , c256_b_147- , c256_b_148- , c256_b_149- , c256_b_150- , c256_b_151- , c256_b_152- , c256_b_153- , c256_b_154- , c256_b_155- , c256_b_156- , c256_b_157- , c256_b_158- , c256_b_159- , c256_b_160- , c256_b_161- , c256_b_162- , c256_b_163- , c256_b_164- , c256_b_165- , c256_b_166- , c256_b_167- , c256_b_168- , c256_b_169- , c256_b_170- , c256_b_171- , c256_b_172- , c256_b_173- , c256_b_174- , c256_b_175- , c256_b_176- , c256_b_177- , c256_b_178- , c256_b_179- , c256_b_180- , c256_b_181- , c256_b_182- , c256_b_183- , c256_b_184- , c256_b_185- , c256_b_186- , c256_b_187- , c256_b_188- , c256_b_189- , c256_b_190- , c256_b_191- , c256_b_192- , c256_b_193- , c256_b_194- , c256_b_195- , c256_b_196- , c256_b_197- , c256_b_198- , c256_b_199- , c256_b_200- , c256_b_201- , c256_b_202- , c256_b_203- , c256_b_204- , c256_b_205- , c256_b_206- , c256_b_207- , c256_b_208- , c256_b_209- , c256_b_210- , c256_b_211- , c256_b_212- , c256_b_213- , c256_b_214- , c256_b_215- , c256_b_216- , c256_b_217- , c256_b_218- , c256_b_219- , c256_b_220- , c256_b_221- , c256_b_222- , c256_b_223- , c256_b_224- , c256_b_225- , c256_b_226- , c256_b_227- , c256_b_228- , c256_b_229- , c256_b_230- , c256_b_231- , c256_b_232- , c256_b_233- , c256_b_234- , c256_b_235- , c256_b_236- , c256_b_237- , c256_b_238- , c256_b_239- , c256_b_240- , c256_b_241- , c256_b_242- , c256_b_243- , c256_b_244- , c256_b_245- , c256_b_246- , c256_b_247- , c256_b_248- , c256_b_249- , c256_b_250- , c256_b_251- , c256_b_252- , c256_b_253- , c256_b_254- , c256_b_255-- -- * Re-exports- , M.Monoid(..)- , (<>)- , Str.IsString(..)--- -- * Create your own colors-- -- * Style, TextSpec, and Chunk innards-- -- | A style is a bundle of attributes that describes text- -- attributes, such as its color and whether it is bold.- --- -- Ordinarily you shouldn't need to use these types but they are- -- here in case they are useful; in particular, you can use them to- -- examine a Chunk's TextSpec to see what its characteristics are.- , StyleCommon(..)- , Style8(..)- , Style256(..)-- , TextSpec (..)-- -- * Basement-- -- | Ordinarily you will not need the things down here. Instead, the- -- definitions above will give you a 'Chunk' that will- -- create the effect or color you need.-- -- ** Wrappers for colors-- -- | Definitions are provided above that give you every possible- -- color; however, these constructors are exported in case you want- -- to make your own colors instead. Use at your own risk, as you can- -- create non-sensical colors with this (such as 256-color colors in- -- a 'Background8'.)- , Background8- , Background256- , Foreground8- , Foreground256-- -- ** Lenses- , scBold- , scUnderline- , scFlash- , scInverse- , foreground8- , background8- , common8- , foreground256- , background256- , common256- , textSpec- , text-- ) where----- # Imports--import Control.Lens-import qualified Data.String as Str-import Data.Monoid (Monoid, mempty, mconcat, (<>), Last(..))-import qualified Data.Monoid as M-import Data.Text (Text)-import Data.Maybe (fromMaybe)-import qualified Data.Text as X-import qualified System.Console.Terminfo as T-import System.IO as IO-import System.Environment as Env------- Terminal definitions------- | Which terminal definition to use.-data Term- = Dumb- -- ^ Using this terminal should always succeed. This suppresses all- -- colors. Uesful if output is not going to a TTY, or if you just do- -- not like colors.-- | TermName String- -- ^ Use the terminal with this given name. You might get this from- -- the TERM environment variable, or set it explicitly. A runtime- -- error will result if the terminfo database does not have a- -- definition for this terminal. If this terminal supports 256- -- colors, then 256 colors are used. If this terminal supports less- -- than 256 colors, but at least 8 colors, then 8 colors are- -- used. Otherwise, no colors are used.- deriving (Eq, Show)---- | Gets the terminal definition from the environment. If the--- environment does not have a TERM veriable, use 'Dumb'.-termFromEnv :: IO Term-termFromEnv = do- t <- Env.lookupEnv "TERM"- return $ maybe Dumb TermName t---- | Gets the terminal definition from the environment. If the first--- argument is True, the terminal is always obtained from the--- environment. If it is False, the terminal is only obtained from the--- environment if the given handle is not a terminal; otherwise, Dumb--- is returned.-smartTermFromEnv- :: Bool- -- ^ Use True if the user always wants to see colors, even if- -- standard output is not a terminal. Otherwise, use False.-- -> IO.Handle- -- ^ Check this handle to see if it is a terminal (typically you- -- will use stdout).-- -> IO Term-smartTermFromEnv alwaysColor h =- if alwaysColor- then termFromEnv- else do- isTerm <- IO.hIsTerminalDevice h- if isTerm- then termFromEnv- else return Dumb---- For Background8, Background256, Foreground8, Foreground256: the--- Last wraps a Maybe (Terminfo Color). If the inner Maybe is Nothing,--- use the default color.--type Background8 = Last (Maybe T.Color)-type Background256 = Last (Maybe T.Color)-type Foreground8 = Last (Maybe T.Color)-type Foreground256 = Last (Maybe T.Color)------- Styles------- | Style elements that apply in both 8 and 256 color--- terminals. However, the elements are described separately for 8 and--- 256 color terminals, so that the text appearance can change--- depending on how many colors a terminal has.-data StyleCommon = StyleCommon- { _scBold :: M.Last Bool- , _scUnderline :: M.Last Bool- , _scFlash :: M.Last Bool- , _scInverse :: M.Last Bool- } deriving (Show, Eq, Ord)--makeLenses ''StyleCommon--instance Monoid StyleCommon where- mempty = StyleCommon (Last Nothing) (Last Nothing)- (Last Nothing) (Last Nothing)- mappend (StyleCommon b1 u1 f1 i1) (StyleCommon b2 u2 f2 i2)- = StyleCommon (b1 <> b2) (u1 <> u2) (f1 <> f2) (i1 <> i2)---- | Describes text appearance (foreground and background colors, as--- well as other attributes such as bold) for an 8 color terminal.-data Style8 = Style8- { _foreground8 :: Foreground8- , _background8 :: Background8- , _common8 :: StyleCommon- } deriving (Show, Eq, Ord)--makeLenses ''Style8--instance Monoid Style8 where- mappend (Style8 fx bx cx) (Style8 fy by cy)- = Style8 (fx <> fy) (bx <> by) (cx <> cy)- mempty = Style8 mempty mempty mempty---- | Describes text appearance (foreground and background colors, as--- well as other attributes such as bold) for a 256 color terminal.-data Style256 = Style256- { _foreground256 :: Foreground256- , _background256 :: Background256- , _common256 :: StyleCommon- } deriving (Show, Eq, Ord)--makeLenses ''Style256--instance Monoid Style256 where- mappend (Style256 fx bx cx) (Style256 fy by cy)- = Style256 (fx <> fy) (bx <> by) (cx <> cy)- mempty = Style256 mempty mempty mempty------- TextSpec------- | The TextSpec bundles together the styles for the 8 and 256 color--- terminals, so that the text can be portrayed on any terminal.-data TextSpec = TextSpec- { _style8 :: Style8- , _style256 :: Style256- } deriving (Show, Eq, Ord)--makeLenses ''TextSpec--instance Monoid TextSpec where- mappend (TextSpec x1 x2) (TextSpec y1 y2)- = TextSpec (x1 <> y1) (x2 <> y2)- mempty = TextSpec mempty mempty------- Chunks------- | A chunk is some textual data coupled with a description of what--- color the text is, attributes like whether it is bold or--- underlined, etc. The chunk knows what foreground and background--- colors and what attributes to use for both an 8 color terminal and--- a 256 color terminal.--data Chunk = Chunk- { _textSpec :: TextSpec- , _text :: Text- } deriving (Eq, Show, Ord)--makeLenses ''Chunk--instance Str.IsString Chunk where- fromString s = Chunk mempty (X.pack s)--instance Monoid Chunk where- mempty = Chunk mempty mempty- mappend (Chunk s1 t1) (Chunk s2 t2) = Chunk (s1 <> s2) (t1 <> t2)---defaultColors :: T.Terminal -> T.TermOutput-defaultColors term =- fromMaybe mempty (T.getCapability term T.restoreDefaultColors)---commonAttrs :: T.Terminal -> StyleCommon -> T.TermOutput-commonAttrs t s =- let a = T.Attributes- { T.standoutAttr = False- , T.underlineAttr = fromMaybe False- $ s ^. scUnderline . unwrapped- , T.reverseAttr = fromMaybe False- $ s ^. scInverse . unwrapped- , T.blinkAttr = fromMaybe False- $ s ^. scFlash . unwrapped- , T.dimAttr = False- , T.boldAttr = fromMaybe False- $ s ^. scBold . unwrapped- , T.invisibleAttr = False- , T.protectedAttr = False- }- in case T.getCapability t (T.setAttributes) of- Nothing -> error $ "System.Console.Rainbow: commonAttrs: "- ++ "capability failed; should never happen"- Just f -> f a----- | Gets the right set of terminal codes to apply the desired--- highlighting, bold, underlining, etc. Be sure to apply the--- attributes first (bold, underlining, etc) and then the--- colors. Setting the colors first and then the attributes seems to--- reset the colors, giving blank output.-getTermCodes- :: T.Terminal- -> TextSpec- -> T.TermOutput-getTermCodes t ts = fromMaybe mempty $ do- cols <- T.getCapability t T.termColors- let TextSpec s8 s256 = ts- Style8 f8 b8 c8 = s8- Style256 f256 b256 c256 = s256- setFg <- T.getCapability t T.setForegroundColor- setBg <- T.getCapability t T.setBackgroundColor- (fg, bg, cm) <- case () of- _ | cols >= 256 -> Just $ ( f256 ^. unwrapped- , b256 ^. unwrapped- , c256)- | cols >= 8 -> Just ( f8 ^. unwrapped- , b8 ^. unwrapped- , c8)- | otherwise -> Nothing- let oFg = maybe mempty (maybe mempty setFg) fg- oBg = maybe mempty (maybe mempty setBg) bg- oCm = commonAttrs t cm- return $ mconcat [oCm, oFg, oBg]---hPrintChunk :: IO.Handle -> T.Terminal -> Chunk -> IO ()-hPrintChunk h t (Chunk ts x) =- T.hRunTermOutput h t- . mconcat- $ [defaultColors t, codes, txt]- where- codes = getTermCodes t ts- txt = T.termText . X.unpack $ x---- | Sends a list of chunks to the given handle for printing. Sets up--- the terminal (this only needs to be done once.) Lazily processes--- the list of Chunk. See 'putChunks' for notes on how many colors--- are used.-hPutChunks :: IO.Handle -> Term -> [Chunk] -> IO ()-hPutChunks h t cs = do- let setup = case t of- Dumb -> T.setupTerm "dumb"- TermName s -> T.setupTerm s- term <- setup- mapM_ (hPrintChunk h term) cs- T.hRunTermOutput h term (defaultColors term)- T.hRunTermOutput h term- $ case T.getCapability term T.allAttributesOff of- Nothing -> error $ "System.Console.Rainbow.putChunks: error: "- ++ "allAttributesOff failed"- Just s -> s---- | Sends a list of chunks to standard output for printing. Sets up--- the terminal (this only needs to be done once.) Lazily processes--- the list of Chunk.------ Which colors are used depends upon the 'Term'. If it is 'Dumb',--- then no colors are used on output. If the 'Term' is specified with--- 'TermName', the UNIX terminfo library is used to determine how many--- colors the terminal supports. If it supports at least 256 colors,--- then 256 colors are used. If it supports at least 8 colors but less--- than 256 colors, then 256 colors are used. Otherwise, no colors are--- used. A runtime error will occur if the 'TermName' is not found in--- the system terminal database.-putChunks :: Term -> [Chunk] -> IO ()-putChunks = hPutChunks IO.stdout---- | Print one chunk at a time, to a handle-hPutChunk :: IO.Handle -> Chunk -> IO ()-hPutChunk h c = do- t <- termFromEnv- hPutChunks h t [c]---- | Print one chunk at a time, to standard output-putChunk :: Chunk -> IO ()-putChunk = hPutChunk IO.stdout---- | Print one chunk at a time, to a handle, append a newline-hPutChunkLn :: IO.Handle -> Chunk -> IO ()-hPutChunkLn h c = hPutChunk h c >> IO.hPutStr h "\n"---- | Print one chunk at a time, to standard output, append a newline-putChunkLn :: Chunk -> IO ()-putChunkLn c = putChunk c >> putStr "\n"--bold8 :: Chunk-bold8 = mempty & textSpec . style8 . common8- . scBold . unwrapped .~ Just True--bold8off :: Chunk-bold8off = mempty & textSpec . style8 . common8- . scBold . unwrapped .~ Just False--underline8 :: Chunk-underline8 = mempty & textSpec . style8 . common8- . scUnderline . unwrapped .~ Just True--underline8off :: Chunk-underline8off = mempty & textSpec . style8 . common8- . scUnderline . unwrapped .~ Just False--flash8 :: Chunk-flash8 = mempty & textSpec . style8 . common8- . scFlash . unwrapped .~ Just True--flash8off :: Chunk-flash8off = mempty & textSpec . style8 . common8- . scFlash . unwrapped .~ Just False--inverse8 :: Chunk-inverse8 = mempty & textSpec . style8 . common8- . scInverse . unwrapped .~ Just True--inverse8off :: Chunk-inverse8off = mempty & textSpec . style8 . common8- . scInverse . unwrapped .~ Just False--underline256 :: Chunk-underline256 = mempty & textSpec . style256 . common256- . scUnderline . unwrapped .~ Just True--underline256off :: Chunk-underline256off = mempty & textSpec . style256 . common256- . scUnderline . unwrapped .~ Just False--bold256 :: Chunk-bold256 = mempty & textSpec . style256 . common256- . scBold . unwrapped .~ Just True--bold256off :: Chunk-bold256off = mempty & textSpec . style256 . common256- . scBold . unwrapped .~ Just False--inverse256 :: Chunk-inverse256 = mempty & textSpec . style256 . common256- . scInverse . unwrapped .~ Just True--inverse256off :: Chunk-inverse256off = mempty & textSpec . style256 . common256- . scInverse . unwrapped .~ Just False--flash256 :: Chunk-flash256 = mempty & textSpec . style256 . common256- . scFlash . unwrapped .~ Just True--flash256off :: Chunk-flash256off = mempty & textSpec . style256 . common256- . scFlash . unwrapped .~ Just False------- All-------- | Bold. What actually happens when you use Bold is going to depend--- on your terminal. For example, xterm allows you actually use a bold--- font for bold, if you have one. Otherwise, it might simulate bold--- by using overstriking. Another possibility is that your terminal--- might use a different color to indicate bold. For more details (at--- least for xterm), look at xterm (1) and search for @boldColors@.------ If your terminal uses a different color for bold, this allows an--- 8-color terminal to really have 16 colors.-bold :: Chunk-bold = bold8 <> bold256--boldOff :: Chunk-boldOff = bold8off <> bold256off--inverse :: Chunk-inverse = inverse8 <> inverse256--inverseOff :: Chunk-inverseOff = inverse8off <> inverse256off--flash :: Chunk-flash = flash8 <> flash256--flashOff :: Chunk-flashOff = flash8off <> flash256off--underline :: Chunk-underline = underline8 <> underline256--underlineOff :: Chunk-underlineOff = underline8off <> underline256off--f_default :: Chunk-f_default = c8_f_default <> c256_f_default--f_black :: Chunk-f_black = c8_f_black <> c256_f_black--f_red :: Chunk-f_red = c8_f_red <> c256_f_red--f_green :: Chunk-f_green = c8_f_green <> c256_f_green--f_yellow :: Chunk-f_yellow = c8_f_yellow <> c256_f_yellow--f_blue :: Chunk-f_blue = c8_f_blue <> c256_f_blue--f_magenta :: Chunk-f_magenta = c8_f_magenta <> c256_f_magenta--f_cyan :: Chunk-f_cyan = c8_f_cyan <> c256_f_cyan--f_white :: Chunk-f_white = c8_f_white <> c256_f_white--b_default :: Chunk-b_default = c8_b_default <> c256_b_default--b_black :: Chunk-b_black = c8_b_black <> c256_b_black--b_red :: Chunk-b_red = c8_b_red <> c256_b_red--b_green :: Chunk-b_green = c8_b_green <> c256_b_green--b_yellow :: Chunk-b_yellow = c8_b_yellow <> c256_b_yellow--b_blue :: Chunk-b_blue = c8_b_blue <> c256_b_blue--b_magenta :: Chunk-b_magenta = c8_b_magenta <> c256_b_magenta--b_cyan :: Chunk-b_cyan = c8_b_cyan <> c256_b_cyan--b_white :: Chunk-b_white = c8_b_white <> c256_b_white-------- Color basement-----c8_f_default :: Chunk-c8_f_default = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just Nothing)---c8_f_black :: Chunk-c8_f_black = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Black))--c8_f_red :: Chunk-c8_f_red = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Red))--c8_f_green :: Chunk-c8_f_green = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Green))--c8_f_yellow :: Chunk-c8_f_yellow = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Yellow))--c8_f_blue :: Chunk-c8_f_blue = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Blue))--c8_f_magenta :: Chunk-c8_f_magenta = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Magenta))--c8_f_cyan :: Chunk-c8_f_cyan = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.Cyan))--c8_f_white :: Chunk-c8_f_white = mempty & textSpec . style8 . foreground8- . unwrapped .~ (Just (Just T.White))---c8_b_default :: Chunk-c8_b_default = mempty & textSpec . style8 . background8- . unwrapped .~ (Just Nothing)--c8_b_black :: Chunk-c8_b_black = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Black))--c8_b_red :: Chunk-c8_b_red = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Red))--c8_b_green :: Chunk-c8_b_green = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Green))--c8_b_yellow :: Chunk-c8_b_yellow = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Yellow))--c8_b_blue :: Chunk-c8_b_blue = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Blue))--c8_b_magenta :: Chunk-c8_b_magenta = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Magenta))--c8_b_cyan :: Chunk-c8_b_cyan = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.Cyan))--c8_b_white :: Chunk-c8_b_white = mempty & textSpec . style8 . background8- . unwrapped .~ (Just (Just T.White))---c256_f_default :: Chunk-c256_f_default = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just Nothing)---c256_f_0 :: Chunk-c256_f_0 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 0)))--c256_f_black :: Chunk-c256_f_black = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 0)))--c256_f_1 :: Chunk-c256_f_1 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 1)))--c256_f_red :: Chunk-c256_f_red = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 1)))--c256_f_2 :: Chunk-c256_f_2 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 2)))--c256_f_green :: Chunk-c256_f_green = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 2)))--c256_f_3 :: Chunk-c256_f_3 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 3)))--c256_f_yellow :: Chunk-c256_f_yellow = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 3)))--c256_f_4 :: Chunk-c256_f_4 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 4)))--c256_f_blue :: Chunk-c256_f_blue = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 4)))--c256_f_5 :: Chunk-c256_f_5 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 5)))--c256_f_magenta :: Chunk-c256_f_magenta = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 5)))--c256_f_6 :: Chunk-c256_f_6 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 6)))--c256_f_cyan :: Chunk-c256_f_cyan = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 6)))--c256_f_7 :: Chunk-c256_f_7 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 7)))--c256_f_white :: Chunk-c256_f_white = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 7)))--c256_f_8 :: Chunk-c256_f_8 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 8)))--c256_f_grey :: Chunk-c256_f_grey = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 8)))--c256_f_9 :: Chunk-c256_f_9 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 9)))--c256_f_red_bright :: Chunk-c256_f_red_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 9)))--c256_f_10 :: Chunk-c256_f_10 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 10)))--c256_f_green_bright :: Chunk-c256_f_green_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 10)))--c256_f_11 :: Chunk-c256_f_11 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 11)))--c256_f_yellow_bright :: Chunk-c256_f_yellow_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 11)))--c256_f_12 :: Chunk-c256_f_12 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 12)))--c256_f_blue_bright :: Chunk-c256_f_blue_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 12)))--c256_f_13 :: Chunk-c256_f_13 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 13)))--c256_f_magenta_bright :: Chunk-c256_f_magenta_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 13)))--c256_f_14 :: Chunk-c256_f_14 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 14)))--c256_f_cyan_bright :: Chunk-c256_f_cyan_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 14)))--c256_f_15 :: Chunk-c256_f_15 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 15)))--c256_f_white_bright :: Chunk-c256_f_white_bright = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 15)))--c256_f_16 :: Chunk-c256_f_16 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 16)))--c256_f_17 :: Chunk-c256_f_17 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 17)))--c256_f_18 :: Chunk-c256_f_18 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 18)))--c256_f_19 :: Chunk-c256_f_19 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 19)))--c256_f_20 :: Chunk-c256_f_20 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 20)))--c256_f_21 :: Chunk-c256_f_21 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 21)))--c256_f_22 :: Chunk-c256_f_22 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 22)))--c256_f_23 :: Chunk-c256_f_23 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 23)))--c256_f_24 :: Chunk-c256_f_24 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 24)))--c256_f_25 :: Chunk-c256_f_25 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 25)))--c256_f_26 :: Chunk-c256_f_26 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 26)))--c256_f_27 :: Chunk-c256_f_27 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 27)))--c256_f_28 :: Chunk-c256_f_28 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 28)))--c256_f_29 :: Chunk-c256_f_29 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 29)))--c256_f_30 :: Chunk-c256_f_30 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 30)))--c256_f_31 :: Chunk-c256_f_31 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 31)))--c256_f_32 :: Chunk-c256_f_32 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 32)))--c256_f_33 :: Chunk-c256_f_33 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 33)))--c256_f_34 :: Chunk-c256_f_34 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 34)))--c256_f_35 :: Chunk-c256_f_35 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 35)))--c256_f_36 :: Chunk-c256_f_36 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 36)))--c256_f_37 :: Chunk-c256_f_37 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 37)))--c256_f_38 :: Chunk-c256_f_38 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 38)))--c256_f_39 :: Chunk-c256_f_39 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 39)))--c256_f_40 :: Chunk-c256_f_40 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 40)))--c256_f_41 :: Chunk-c256_f_41 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 41)))--c256_f_42 :: Chunk-c256_f_42 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 42)))--c256_f_43 :: Chunk-c256_f_43 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 43)))--c256_f_44 :: Chunk-c256_f_44 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 44)))--c256_f_45 :: Chunk-c256_f_45 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 45)))--c256_f_46 :: Chunk-c256_f_46 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 46)))--c256_f_47 :: Chunk-c256_f_47 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 47)))--c256_f_48 :: Chunk-c256_f_48 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 48)))--c256_f_49 :: Chunk-c256_f_49 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 49)))--c256_f_50 :: Chunk-c256_f_50 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 50)))--c256_f_51 :: Chunk-c256_f_51 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 51)))--c256_f_52 :: Chunk-c256_f_52 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 52)))--c256_f_53 :: Chunk-c256_f_53 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 53)))--c256_f_54 :: Chunk-c256_f_54 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 54)))--c256_f_55 :: Chunk-c256_f_55 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 55)))--c256_f_56 :: Chunk-c256_f_56 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 56)))--c256_f_57 :: Chunk-c256_f_57 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 57)))--c256_f_58 :: Chunk-c256_f_58 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 58)))--c256_f_59 :: Chunk-c256_f_59 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 59)))--c256_f_60 :: Chunk-c256_f_60 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 60)))--c256_f_61 :: Chunk-c256_f_61 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 61)))--c256_f_62 :: Chunk-c256_f_62 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 62)))--c256_f_63 :: Chunk-c256_f_63 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 63)))--c256_f_64 :: Chunk-c256_f_64 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 64)))--c256_f_65 :: Chunk-c256_f_65 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 65)))--c256_f_66 :: Chunk-c256_f_66 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 66)))--c256_f_67 :: Chunk-c256_f_67 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 67)))--c256_f_68 :: Chunk-c256_f_68 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 68)))--c256_f_69 :: Chunk-c256_f_69 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 69)))--c256_f_70 :: Chunk-c256_f_70 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 70)))--c256_f_71 :: Chunk-c256_f_71 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 71)))--c256_f_72 :: Chunk-c256_f_72 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 72)))--c256_f_73 :: Chunk-c256_f_73 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 73)))--c256_f_74 :: Chunk-c256_f_74 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 74)))--c256_f_75 :: Chunk-c256_f_75 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 75)))--c256_f_76 :: Chunk-c256_f_76 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 76)))--c256_f_77 :: Chunk-c256_f_77 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 77)))--c256_f_78 :: Chunk-c256_f_78 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 78)))--c256_f_79 :: Chunk-c256_f_79 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 79)))--c256_f_80 :: Chunk-c256_f_80 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 80)))--c256_f_81 :: Chunk-c256_f_81 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 81)))--c256_f_82 :: Chunk-c256_f_82 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 82)))--c256_f_83 :: Chunk-c256_f_83 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 83)))--c256_f_84 :: Chunk-c256_f_84 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 84)))--c256_f_85 :: Chunk-c256_f_85 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 85)))--c256_f_86 :: Chunk-c256_f_86 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 86)))--c256_f_87 :: Chunk-c256_f_87 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 87)))--c256_f_88 :: Chunk-c256_f_88 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 88)))--c256_f_89 :: Chunk-c256_f_89 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 89)))--c256_f_90 :: Chunk-c256_f_90 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 90)))--c256_f_91 :: Chunk-c256_f_91 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 91)))--c256_f_92 :: Chunk-c256_f_92 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 92)))--c256_f_93 :: Chunk-c256_f_93 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 93)))--c256_f_94 :: Chunk-c256_f_94 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 94)))--c256_f_95 :: Chunk-c256_f_95 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 95)))--c256_f_96 :: Chunk-c256_f_96 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 96)))--c256_f_97 :: Chunk-c256_f_97 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 97)))--c256_f_98 :: Chunk-c256_f_98 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 98)))--c256_f_99 :: Chunk-c256_f_99 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 99)))--c256_f_100 :: Chunk-c256_f_100 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 100)))--c256_f_101 :: Chunk-c256_f_101 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 101)))--c256_f_102 :: Chunk-c256_f_102 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 102)))--c256_f_103 :: Chunk-c256_f_103 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 103)))--c256_f_104 :: Chunk-c256_f_104 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 104)))--c256_f_105 :: Chunk-c256_f_105 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 105)))--c256_f_106 :: Chunk-c256_f_106 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 106)))--c256_f_107 :: Chunk-c256_f_107 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 107)))--c256_f_108 :: Chunk-c256_f_108 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 108)))--c256_f_109 :: Chunk-c256_f_109 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 109)))--c256_f_110 :: Chunk-c256_f_110 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 110)))--c256_f_111 :: Chunk-c256_f_111 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 111)))--c256_f_112 :: Chunk-c256_f_112 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 112)))--c256_f_113 :: Chunk-c256_f_113 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 113)))--c256_f_114 :: Chunk-c256_f_114 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 114)))--c256_f_115 :: Chunk-c256_f_115 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 115)))--c256_f_116 :: Chunk-c256_f_116 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 116)))--c256_f_117 :: Chunk-c256_f_117 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 117)))--c256_f_118 :: Chunk-c256_f_118 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 118)))--c256_f_119 :: Chunk-c256_f_119 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 119)))--c256_f_120 :: Chunk-c256_f_120 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 120)))--c256_f_121 :: Chunk-c256_f_121 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 121)))--c256_f_122 :: Chunk-c256_f_122 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 122)))--c256_f_123 :: Chunk-c256_f_123 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 123)))--c256_f_124 :: Chunk-c256_f_124 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 124)))--c256_f_125 :: Chunk-c256_f_125 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 125)))--c256_f_126 :: Chunk-c256_f_126 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 126)))--c256_f_127 :: Chunk-c256_f_127 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 127)))--c256_f_128 :: Chunk-c256_f_128 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 128)))--c256_f_129 :: Chunk-c256_f_129 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 129)))--c256_f_130 :: Chunk-c256_f_130 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 130)))--c256_f_131 :: Chunk-c256_f_131 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 131)))--c256_f_132 :: Chunk-c256_f_132 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 132)))--c256_f_133 :: Chunk-c256_f_133 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 133)))--c256_f_134 :: Chunk-c256_f_134 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 134)))--c256_f_135 :: Chunk-c256_f_135 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 135)))--c256_f_136 :: Chunk-c256_f_136 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 136)))--c256_f_137 :: Chunk-c256_f_137 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 137)))--c256_f_138 :: Chunk-c256_f_138 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 138)))--c256_f_139 :: Chunk-c256_f_139 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 139)))--c256_f_140 :: Chunk-c256_f_140 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 140)))--c256_f_141 :: Chunk-c256_f_141 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 141)))--c256_f_142 :: Chunk-c256_f_142 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 142)))--c256_f_143 :: Chunk-c256_f_143 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 143)))--c256_f_144 :: Chunk-c256_f_144 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 144)))--c256_f_145 :: Chunk-c256_f_145 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 145)))--c256_f_146 :: Chunk-c256_f_146 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 146)))--c256_f_147 :: Chunk-c256_f_147 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 147)))--c256_f_148 :: Chunk-c256_f_148 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 148)))--c256_f_149 :: Chunk-c256_f_149 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 149)))--c256_f_150 :: Chunk-c256_f_150 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 150)))--c256_f_151 :: Chunk-c256_f_151 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 151)))--c256_f_152 :: Chunk-c256_f_152 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 152)))--c256_f_153 :: Chunk-c256_f_153 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 153)))--c256_f_154 :: Chunk-c256_f_154 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 154)))--c256_f_155 :: Chunk-c256_f_155 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 155)))--c256_f_156 :: Chunk-c256_f_156 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 156)))--c256_f_157 :: Chunk-c256_f_157 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 157)))--c256_f_158 :: Chunk-c256_f_158 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 158)))--c256_f_159 :: Chunk-c256_f_159 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 159)))--c256_f_160 :: Chunk-c256_f_160 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 160)))--c256_f_161 :: Chunk-c256_f_161 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 161)))--c256_f_162 :: Chunk-c256_f_162 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 162)))--c256_f_163 :: Chunk-c256_f_163 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 163)))--c256_f_164 :: Chunk-c256_f_164 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 164)))--c256_f_165 :: Chunk-c256_f_165 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 165)))--c256_f_166 :: Chunk-c256_f_166 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 166)))--c256_f_167 :: Chunk-c256_f_167 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 167)))--c256_f_168 :: Chunk-c256_f_168 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 168)))--c256_f_169 :: Chunk-c256_f_169 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 169)))--c256_f_170 :: Chunk-c256_f_170 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 170)))--c256_f_171 :: Chunk-c256_f_171 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 171)))--c256_f_172 :: Chunk-c256_f_172 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 172)))--c256_f_173 :: Chunk-c256_f_173 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 173)))--c256_f_174 :: Chunk-c256_f_174 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 174)))--c256_f_175 :: Chunk-c256_f_175 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 175)))--c256_f_176 :: Chunk-c256_f_176 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 176)))--c256_f_177 :: Chunk-c256_f_177 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 177)))--c256_f_178 :: Chunk-c256_f_178 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 178)))--c256_f_179 :: Chunk-c256_f_179 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 179)))--c256_f_180 :: Chunk-c256_f_180 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 180)))--c256_f_181 :: Chunk-c256_f_181 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 181)))--c256_f_182 :: Chunk-c256_f_182 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 182)))--c256_f_183 :: Chunk-c256_f_183 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 183)))--c256_f_184 :: Chunk-c256_f_184 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 184)))--c256_f_185 :: Chunk-c256_f_185 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 185)))--c256_f_186 :: Chunk-c256_f_186 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 186)))--c256_f_187 :: Chunk-c256_f_187 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 187)))--c256_f_188 :: Chunk-c256_f_188 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 188)))--c256_f_189 :: Chunk-c256_f_189 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 189)))--c256_f_190 :: Chunk-c256_f_190 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 190)))--c256_f_191 :: Chunk-c256_f_191 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 191)))--c256_f_192 :: Chunk-c256_f_192 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 192)))--c256_f_193 :: Chunk-c256_f_193 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 193)))--c256_f_194 :: Chunk-c256_f_194 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 194)))--c256_f_195 :: Chunk-c256_f_195 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 195)))--c256_f_196 :: Chunk-c256_f_196 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 196)))--c256_f_197 :: Chunk-c256_f_197 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 197)))--c256_f_198 :: Chunk-c256_f_198 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 198)))--c256_f_199 :: Chunk-c256_f_199 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 199)))--c256_f_200 :: Chunk-c256_f_200 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 200)))--c256_f_201 :: Chunk-c256_f_201 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 201)))--c256_f_202 :: Chunk-c256_f_202 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 202)))--c256_f_203 :: Chunk-c256_f_203 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 203)))--c256_f_204 :: Chunk-c256_f_204 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 204)))--c256_f_205 :: Chunk-c256_f_205 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 205)))--c256_f_206 :: Chunk-c256_f_206 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 206)))--c256_f_207 :: Chunk-c256_f_207 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 207)))--c256_f_208 :: Chunk-c256_f_208 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 208)))--c256_f_209 :: Chunk-c256_f_209 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 209)))--c256_f_210 :: Chunk-c256_f_210 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 210)))--c256_f_211 :: Chunk-c256_f_211 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 211)))--c256_f_212 :: Chunk-c256_f_212 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 212)))--c256_f_213 :: Chunk-c256_f_213 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 213)))--c256_f_214 :: Chunk-c256_f_214 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 214)))--c256_f_215 :: Chunk-c256_f_215 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 215)))--c256_f_216 :: Chunk-c256_f_216 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 216)))--c256_f_217 :: Chunk-c256_f_217 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 217)))--c256_f_218 :: Chunk-c256_f_218 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 218)))--c256_f_219 :: Chunk-c256_f_219 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 219)))--c256_f_220 :: Chunk-c256_f_220 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 220)))--c256_f_221 :: Chunk-c256_f_221 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 221)))--c256_f_222 :: Chunk-c256_f_222 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 222)))--c256_f_223 :: Chunk-c256_f_223 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 223)))--c256_f_224 :: Chunk-c256_f_224 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 224)))--c256_f_225 :: Chunk-c256_f_225 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 225)))--c256_f_226 :: Chunk-c256_f_226 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 226)))--c256_f_227 :: Chunk-c256_f_227 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 227)))--c256_f_228 :: Chunk-c256_f_228 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 228)))--c256_f_229 :: Chunk-c256_f_229 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 229)))--c256_f_230 :: Chunk-c256_f_230 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 230)))--c256_f_231 :: Chunk-c256_f_231 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 231)))--c256_f_232 :: Chunk-c256_f_232 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 232)))--c256_f_233 :: Chunk-c256_f_233 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 233)))--c256_f_234 :: Chunk-c256_f_234 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 234)))--c256_f_235 :: Chunk-c256_f_235 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 235)))--c256_f_236 :: Chunk-c256_f_236 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 236)))--c256_f_237 :: Chunk-c256_f_237 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 237)))--c256_f_238 :: Chunk-c256_f_238 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 238)))--c256_f_239 :: Chunk-c256_f_239 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 239)))--c256_f_240 :: Chunk-c256_f_240 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 240)))--c256_f_241 :: Chunk-c256_f_241 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 241)))--c256_f_242 :: Chunk-c256_f_242 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 242)))--c256_f_243 :: Chunk-c256_f_243 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 243)))--c256_f_244 :: Chunk-c256_f_244 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 244)))--c256_f_245 :: Chunk-c256_f_245 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 245)))--c256_f_246 :: Chunk-c256_f_246 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 246)))--c256_f_247 :: Chunk-c256_f_247 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 247)))--c256_f_248 :: Chunk-c256_f_248 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 248)))--c256_f_249 :: Chunk-c256_f_249 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 249)))--c256_f_250 :: Chunk-c256_f_250 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 250)))--c256_f_251 :: Chunk-c256_f_251 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 251)))--c256_f_252 :: Chunk-c256_f_252 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 252)))--c256_f_253 :: Chunk-c256_f_253 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 253)))--c256_f_254 :: Chunk-c256_f_254 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 254)))--c256_f_255 :: Chunk-c256_f_255 = mempty & textSpec . style256 . foreground256- . unwrapped .~ (Just (Just (T.ColorNumber 255)))---c256_b_default :: Chunk-c256_b_default = mempty & textSpec . style256 . background256- . unwrapped .~ (Just Nothing)--c256_b_0 :: Chunk-c256_b_0 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 0)))--c256_b_black :: Chunk-c256_b_black = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 0)))--c256_b_1 :: Chunk-c256_b_1 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 1)))--c256_b_red :: Chunk-c256_b_red = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 1)))--c256_b_2 :: Chunk-c256_b_2 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 2)))--c256_b_green :: Chunk-c256_b_green = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 2)))--c256_b_3 :: Chunk-c256_b_3 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 3)))--c256_b_yellow :: Chunk-c256_b_yellow = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 3)))--c256_b_4 :: Chunk-c256_b_4 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 4)))--c256_b_blue :: Chunk-c256_b_blue = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 4)))--c256_b_5 :: Chunk-c256_b_5 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 5)))--c256_b_magenta :: Chunk-c256_b_magenta = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 5)))--c256_b_6 :: Chunk-c256_b_6 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 6)))--c256_b_cyan :: Chunk-c256_b_cyan = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 6)))--c256_b_7 :: Chunk-c256_b_7 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 7)))--c256_b_white :: Chunk-c256_b_white = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 7)))--c256_b_8 :: Chunk-c256_b_8 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 8)))--c256_b_grey :: Chunk-c256_b_grey = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 8)))--c256_b_9 :: Chunk-c256_b_9 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 9)))--c256_b_red_bright :: Chunk-c256_b_red_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 9)))--c256_b_10 :: Chunk-c256_b_10 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 10)))--c256_b_green_bright :: Chunk-c256_b_green_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 10)))--c256_b_11 :: Chunk-c256_b_11 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 11)))--c256_b_yellow_bright :: Chunk-c256_b_yellow_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 11)))--c256_b_12 :: Chunk-c256_b_12 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 12)))--c256_b_blue_bright :: Chunk-c256_b_blue_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 12)))--c256_b_13 :: Chunk-c256_b_13 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 13)))--c256_b_magenta_bright :: Chunk-c256_b_magenta_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 13)))--c256_b_14 :: Chunk-c256_b_14 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 14)))--c256_b_cyan_bright :: Chunk-c256_b_cyan_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 14)))--c256_b_15 :: Chunk-c256_b_15 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 15)))--c256_b_white_bright :: Chunk-c256_b_white_bright = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 15)))--c256_b_16 :: Chunk-c256_b_16 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 16)))--c256_b_17 :: Chunk-c256_b_17 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 17)))--c256_b_18 :: Chunk-c256_b_18 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 18)))--c256_b_19 :: Chunk-c256_b_19 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 19)))--c256_b_20 :: Chunk-c256_b_20 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 20)))--c256_b_21 :: Chunk-c256_b_21 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 21)))--c256_b_22 :: Chunk-c256_b_22 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 22)))--c256_b_23 :: Chunk-c256_b_23 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 23)))--c256_b_24 :: Chunk-c256_b_24 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 24)))--c256_b_25 :: Chunk-c256_b_25 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 25)))--c256_b_26 :: Chunk-c256_b_26 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 26)))--c256_b_27 :: Chunk-c256_b_27 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 27)))--c256_b_28 :: Chunk-c256_b_28 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 28)))--c256_b_29 :: Chunk-c256_b_29 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 29)))--c256_b_30 :: Chunk-c256_b_30 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 30)))--c256_b_31 :: Chunk-c256_b_31 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 31)))--c256_b_32 :: Chunk-c256_b_32 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 32)))--c256_b_33 :: Chunk-c256_b_33 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 33)))--c256_b_34 :: Chunk-c256_b_34 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 34)))--c256_b_35 :: Chunk-c256_b_35 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 35)))--c256_b_36 :: Chunk-c256_b_36 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 36)))--c256_b_37 :: Chunk-c256_b_37 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 37)))--c256_b_38 :: Chunk-c256_b_38 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 38)))--c256_b_39 :: Chunk-c256_b_39 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 39)))--c256_b_40 :: Chunk-c256_b_40 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 40)))--c256_b_41 :: Chunk-c256_b_41 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 41)))--c256_b_42 :: Chunk-c256_b_42 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 42)))--c256_b_43 :: Chunk-c256_b_43 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 43)))--c256_b_44 :: Chunk-c256_b_44 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 44)))--c256_b_45 :: Chunk-c256_b_45 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 45)))--c256_b_46 :: Chunk-c256_b_46 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 46)))--c256_b_47 :: Chunk-c256_b_47 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 47)))--c256_b_48 :: Chunk-c256_b_48 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 48)))--c256_b_49 :: Chunk-c256_b_49 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 49)))--c256_b_50 :: Chunk-c256_b_50 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 50)))--c256_b_51 :: Chunk-c256_b_51 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 51)))--c256_b_52 :: Chunk-c256_b_52 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 52)))--c256_b_53 :: Chunk-c256_b_53 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 53)))--c256_b_54 :: Chunk-c256_b_54 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 54)))--c256_b_55 :: Chunk-c256_b_55 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 55)))--c256_b_56 :: Chunk-c256_b_56 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 56)))--c256_b_57 :: Chunk-c256_b_57 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 57)))--c256_b_58 :: Chunk-c256_b_58 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 58)))--c256_b_59 :: Chunk-c256_b_59 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 59)))--c256_b_60 :: Chunk-c256_b_60 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 60)))--c256_b_61 :: Chunk-c256_b_61 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 61)))--c256_b_62 :: Chunk-c256_b_62 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 62)))--c256_b_63 :: Chunk-c256_b_63 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 63)))--c256_b_64 :: Chunk-c256_b_64 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 64)))--c256_b_65 :: Chunk-c256_b_65 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 65)))--c256_b_66 :: Chunk-c256_b_66 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 66)))--c256_b_67 :: Chunk-c256_b_67 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 67)))--c256_b_68 :: Chunk-c256_b_68 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 68)))--c256_b_69 :: Chunk-c256_b_69 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 69)))--c256_b_70 :: Chunk-c256_b_70 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 70)))--c256_b_71 :: Chunk-c256_b_71 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 71)))--c256_b_72 :: Chunk-c256_b_72 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 72)))--c256_b_73 :: Chunk-c256_b_73 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 73)))--c256_b_74 :: Chunk-c256_b_74 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 74)))--c256_b_75 :: Chunk-c256_b_75 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 75)))--c256_b_76 :: Chunk-c256_b_76 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 76)))--c256_b_77 :: Chunk-c256_b_77 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 77)))--c256_b_78 :: Chunk-c256_b_78 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 78)))--c256_b_79 :: Chunk-c256_b_79 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 79)))--c256_b_80 :: Chunk-c256_b_80 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 80)))--c256_b_81 :: Chunk-c256_b_81 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 81)))--c256_b_82 :: Chunk-c256_b_82 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 82)))--c256_b_83 :: Chunk-c256_b_83 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 83)))--c256_b_84 :: Chunk-c256_b_84 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 84)))--c256_b_85 :: Chunk-c256_b_85 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 85)))--c256_b_86 :: Chunk-c256_b_86 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 86)))--c256_b_87 :: Chunk-c256_b_87 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 87)))--c256_b_88 :: Chunk-c256_b_88 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 88)))--c256_b_89 :: Chunk-c256_b_89 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 89)))--c256_b_90 :: Chunk-c256_b_90 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 90)))--c256_b_91 :: Chunk-c256_b_91 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 91)))--c256_b_92 :: Chunk-c256_b_92 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 92)))--c256_b_93 :: Chunk-c256_b_93 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 93)))--c256_b_94 :: Chunk-c256_b_94 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 94)))--c256_b_95 :: Chunk-c256_b_95 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 95)))--c256_b_96 :: Chunk-c256_b_96 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 96)))--c256_b_97 :: Chunk-c256_b_97 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 97)))--c256_b_98 :: Chunk-c256_b_98 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 98)))--c256_b_99 :: Chunk-c256_b_99 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 99)))--c256_b_100 :: Chunk-c256_b_100 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 100)))--c256_b_101 :: Chunk-c256_b_101 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 101)))--c256_b_102 :: Chunk-c256_b_102 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 102)))--c256_b_103 :: Chunk-c256_b_103 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 103)))--c256_b_104 :: Chunk-c256_b_104 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 104)))--c256_b_105 :: Chunk-c256_b_105 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 105)))--c256_b_106 :: Chunk-c256_b_106 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 106)))--c256_b_107 :: Chunk-c256_b_107 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 107)))--c256_b_108 :: Chunk-c256_b_108 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 108)))--c256_b_109 :: Chunk-c256_b_109 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 109)))--c256_b_110 :: Chunk-c256_b_110 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 110)))--c256_b_111 :: Chunk-c256_b_111 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 111)))--c256_b_112 :: Chunk-c256_b_112 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 112)))--c256_b_113 :: Chunk-c256_b_113 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 113)))--c256_b_114 :: Chunk-c256_b_114 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 114)))--c256_b_115 :: Chunk-c256_b_115 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 115)))--c256_b_116 :: Chunk-c256_b_116 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 116)))--c256_b_117 :: Chunk-c256_b_117 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 117)))--c256_b_118 :: Chunk-c256_b_118 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 118)))--c256_b_119 :: Chunk-c256_b_119 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 119)))--c256_b_120 :: Chunk-c256_b_120 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 120)))--c256_b_121 :: Chunk-c256_b_121 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 121)))--c256_b_122 :: Chunk-c256_b_122 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 122)))--c256_b_123 :: Chunk-c256_b_123 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 123)))--c256_b_124 :: Chunk-c256_b_124 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 124)))--c256_b_125 :: Chunk-c256_b_125 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 125)))--c256_b_126 :: Chunk-c256_b_126 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 126)))--c256_b_127 :: Chunk-c256_b_127 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 127)))--c256_b_128 :: Chunk-c256_b_128 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 128)))--c256_b_129 :: Chunk-c256_b_129 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 129)))--c256_b_130 :: Chunk-c256_b_130 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 130)))--c256_b_131 :: Chunk-c256_b_131 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 131)))--c256_b_132 :: Chunk-c256_b_132 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 132)))--c256_b_133 :: Chunk-c256_b_133 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 133)))--c256_b_134 :: Chunk-c256_b_134 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 134)))--c256_b_135 :: Chunk-c256_b_135 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 135)))--c256_b_136 :: Chunk-c256_b_136 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 136)))--c256_b_137 :: Chunk-c256_b_137 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 137)))--c256_b_138 :: Chunk-c256_b_138 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 138)))--c256_b_139 :: Chunk-c256_b_139 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 139)))--c256_b_140 :: Chunk-c256_b_140 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 140)))--c256_b_141 :: Chunk-c256_b_141 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 141)))--c256_b_142 :: Chunk-c256_b_142 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 142)))--c256_b_143 :: Chunk-c256_b_143 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 143)))--c256_b_144 :: Chunk-c256_b_144 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 144)))--c256_b_145 :: Chunk-c256_b_145 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 145)))--c256_b_146 :: Chunk-c256_b_146 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 146)))--c256_b_147 :: Chunk-c256_b_147 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 147)))--c256_b_148 :: Chunk-c256_b_148 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 148)))--c256_b_149 :: Chunk-c256_b_149 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 149)))--c256_b_150 :: Chunk-c256_b_150 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 150)))--c256_b_151 :: Chunk-c256_b_151 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 151)))--c256_b_152 :: Chunk-c256_b_152 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 152)))--c256_b_153 :: Chunk-c256_b_153 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 153)))--c256_b_154 :: Chunk-c256_b_154 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 154)))--c256_b_155 :: Chunk-c256_b_155 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 155)))--c256_b_156 :: Chunk-c256_b_156 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 156)))--c256_b_157 :: Chunk-c256_b_157 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 157)))--c256_b_158 :: Chunk-c256_b_158 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 158)))--c256_b_159 :: Chunk-c256_b_159 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 159)))--c256_b_160 :: Chunk-c256_b_160 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 160)))--c256_b_161 :: Chunk-c256_b_161 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 161)))--c256_b_162 :: Chunk-c256_b_162 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 162)))--c256_b_163 :: Chunk-c256_b_163 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 163)))--c256_b_164 :: Chunk-c256_b_164 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 164)))--c256_b_165 :: Chunk-c256_b_165 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 165)))--c256_b_166 :: Chunk-c256_b_166 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 166)))--c256_b_167 :: Chunk-c256_b_167 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 167)))--c256_b_168 :: Chunk-c256_b_168 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 168)))--c256_b_169 :: Chunk-c256_b_169 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 169)))--c256_b_170 :: Chunk-c256_b_170 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 170)))--c256_b_171 :: Chunk-c256_b_171 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 171)))--c256_b_172 :: Chunk-c256_b_172 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 172)))--c256_b_173 :: Chunk-c256_b_173 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 173)))--c256_b_174 :: Chunk-c256_b_174 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 174)))--c256_b_175 :: Chunk-c256_b_175 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 175)))--c256_b_176 :: Chunk-c256_b_176 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 176)))--c256_b_177 :: Chunk-c256_b_177 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 177)))--c256_b_178 :: Chunk-c256_b_178 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 178)))--c256_b_179 :: Chunk-c256_b_179 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 179)))--c256_b_180 :: Chunk-c256_b_180 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 180)))--c256_b_181 :: Chunk-c256_b_181 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 181)))--c256_b_182 :: Chunk-c256_b_182 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 182)))--c256_b_183 :: Chunk-c256_b_183 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 183)))--c256_b_184 :: Chunk-c256_b_184 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 184)))--c256_b_185 :: Chunk-c256_b_185 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 185)))--c256_b_186 :: Chunk-c256_b_186 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 186)))--c256_b_187 :: Chunk-c256_b_187 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 187)))--c256_b_188 :: Chunk-c256_b_188 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 188)))--c256_b_189 :: Chunk-c256_b_189 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 189)))--c256_b_190 :: Chunk-c256_b_190 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 190)))--c256_b_191 :: Chunk-c256_b_191 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 191)))--c256_b_192 :: Chunk-c256_b_192 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 192)))--c256_b_193 :: Chunk-c256_b_193 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 193)))--c256_b_194 :: Chunk-c256_b_194 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 194)))--c256_b_195 :: Chunk-c256_b_195 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 195)))--c256_b_196 :: Chunk-c256_b_196 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 196)))--c256_b_197 :: Chunk-c256_b_197 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 197)))--c256_b_198 :: Chunk-c256_b_198 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 198)))--c256_b_199 :: Chunk-c256_b_199 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 199)))--c256_b_200 :: Chunk-c256_b_200 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 200)))--c256_b_201 :: Chunk-c256_b_201 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 201)))--c256_b_202 :: Chunk-c256_b_202 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 202)))--c256_b_203 :: Chunk-c256_b_203 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 203)))--c256_b_204 :: Chunk-c256_b_204 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 204)))--c256_b_205 :: Chunk-c256_b_205 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 205)))--c256_b_206 :: Chunk-c256_b_206 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 206)))--c256_b_207 :: Chunk-c256_b_207 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 207)))--c256_b_208 :: Chunk-c256_b_208 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 208)))--c256_b_209 :: Chunk-c256_b_209 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 209)))--c256_b_210 :: Chunk-c256_b_210 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 210)))--c256_b_211 :: Chunk-c256_b_211 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 211)))--c256_b_212 :: Chunk-c256_b_212 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 212)))--c256_b_213 :: Chunk-c256_b_213 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 213)))--c256_b_214 :: Chunk-c256_b_214 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 214)))--c256_b_215 :: Chunk-c256_b_215 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 215)))--c256_b_216 :: Chunk-c256_b_216 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 216)))--c256_b_217 :: Chunk-c256_b_217 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 217)))--c256_b_218 :: Chunk-c256_b_218 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 218)))--c256_b_219 :: Chunk-c256_b_219 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 219)))--c256_b_220 :: Chunk-c256_b_220 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 220)))--c256_b_221 :: Chunk-c256_b_221 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 221)))--c256_b_222 :: Chunk-c256_b_222 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 222)))--c256_b_223 :: Chunk-c256_b_223 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 223)))--c256_b_224 :: Chunk-c256_b_224 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 224)))--c256_b_225 :: Chunk-c256_b_225 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 225)))--c256_b_226 :: Chunk-c256_b_226 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 226)))--c256_b_227 :: Chunk-c256_b_227 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 227)))--c256_b_228 :: Chunk-c256_b_228 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 228)))--c256_b_229 :: Chunk-c256_b_229 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 229)))--c256_b_230 :: Chunk-c256_b_230 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 230)))--c256_b_231 :: Chunk-c256_b_231 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 231)))--c256_b_232 :: Chunk-c256_b_232 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 232)))--c256_b_233 :: Chunk-c256_b_233 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 233)))--c256_b_234 :: Chunk-c256_b_234 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 234)))--c256_b_235 :: Chunk-c256_b_235 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 235)))--c256_b_236 :: Chunk-c256_b_236 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 236)))--c256_b_237 :: Chunk-c256_b_237 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 237)))--c256_b_238 :: Chunk-c256_b_238 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 238)))--c256_b_239 :: Chunk-c256_b_239 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 239)))--c256_b_240 :: Chunk-c256_b_240 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 240)))--c256_b_241 :: Chunk-c256_b_241 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 241)))--c256_b_242 :: Chunk-c256_b_242 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 242)))--c256_b_243 :: Chunk-c256_b_243 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 243)))--c256_b_244 :: Chunk-c256_b_244 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 244)))--c256_b_245 :: Chunk-c256_b_245 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 245)))--c256_b_246 :: Chunk-c256_b_246 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 246)))--c256_b_247 :: Chunk-c256_b_247 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 247)))--c256_b_248 :: Chunk-c256_b_248 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 248)))--c256_b_249 :: Chunk-c256_b_249 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 249)))--c256_b_250 :: Chunk-c256_b_250 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 250)))--c256_b_251 :: Chunk-c256_b_251 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 251)))--c256_b_252 :: Chunk-c256_b_252 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 252)))--c256_b_253 :: Chunk-c256_b_253 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 253)))--c256_b_254 :: Chunk-c256_b_254 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 254)))--c256_b_255 :: Chunk-c256_b_255 = mempty & textSpec . style256 . background256- . unwrapped .~ (Just (Just (T.ColorNumber 255)))-
+ lib/Rainbow.hs view
@@ -0,0 +1,354 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE DeriveFunctor #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveTraversable #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-}++-- | Rainbow handles colors and special effects for text. The basic+-- building block of Rainbow is the 'Y.Chunk'. The 'Y.Chunk' contains+-- both text and formatting information such as colors, bold,+-- underlining, etc. 'Y.Chunk' is an instance of+-- 'Data.String.IsString' so you can create a 'Y.Chunk' using the+-- @OverloadedStrings@ extension. Such a chunk has the given text+-- and has no formatting.+--+-- When printed, each 'Y.Chunk' starts off with a clean slate, so if+-- you want special formatting such as any color, bold, etc, then you+-- must specify it for every 'Y.Chunk'. The appearance of one+-- 'Y.Chunk' does not affect the appearance of the next 'Y.Chunk'.+-- This makes it easy to reason about how a particular 'Y.Chunk' will+-- look.+--+-- Rainbow supports 256-color terminals. You have full freedom to+-- specify different attributes and colors for 8 and 256 color+-- terminals; for instance, you can have text appear red on an 8-color+-- terminal but blue on a 256-color terminal.+--+-- Here are some basic examples:+--+-- @+-- ghci> import Rainbow+-- ghci> import Data.Function ((&))+-- ghci> :set -XOverloadedStrings+-- ghci> 'T.putChunkLn' $ \"Some blue text\" '&' 'fore' 'blue'+-- ghci> 'T.putChunkLn' $ \"Blue on red background\"+-- '&' 'fore' 'blue' '&' 'back' 'red'+-- ghci> 'T.putChunkLn' $ \"Blue on red, foreground bold\"+-- '&' 'fore' 'blue' '&' 'back' 'red' '&' 'bold'+-- @+--+-- You can also specify output for 256-color terminals. To use these+-- examples, be sure your TERM environment variable is set to+-- something that supports 256 colors (like @xterm-256color@) before+-- you start GHCi.+--+-- @+-- ghci> 'T.putChunkLn' $ \"Blue on 8, bright green on 256\" '&'+-- 'fore' ('blue' '<>' 'brightGreen')+--+-- ghci> 'T.putChunkLn' $ \"Blue on 8, red on 256" '&'+-- 'fore' ('blue' '<>' 'only256' 'red')+-- @+--+-- Each 'Y.Chunk' affects the formatting only of that 'Y.Chunk'. So+-- to print things in different colors, make more than one 'Y.Chunk':+--+-- @+-- ghci> 'T.putChunksLn'+-- [ \"Roses\" '&' 'fore' 'red'+-- , \"Violets\" '&' 'fore' 'blue' ]+-- @+--+-- Most of the above examples use 'T.putChunkLn', but that function+-- may be inefficient if you are printing many 'Y.Chunk's. For+-- greater efficiency use functions under the heading \"Converting+-- multiple Chunk to ByteString\", including 'T.putChunksLn' and+-- 'T.putChunks'.+--+-- The functions in this module, "Rainbow", will likely be enough for+-- most uses, but for more flexibility you can use "Rainbow.Types".+-- Use of "Rainbow.Types" will require some familiarity with the+-- @lens@ library.+++module Rainbow+ (+ -- * Chunk+ Y.Chunk+ , Y.chunk++ -- * Formatting, all terminals++ -- | These combinators affect the way a 'Y.Chunk' is displayed on+ -- both 8- and 256-color terminals.+ , bold+ , faint+ , italic+ , underline+ , blink+ , inverse+ , invisible+ , strikeout++ -- * Colors+ , Y.Radiant+ , fore+ , back++ -- * Colors, all terminals++ -- | These 'Y.Radiant' affect the way a 'Y.Chunk' is displayed on+ -- both 8- and 256-color terminals.+ , black+ , red+ , green+ , yellow+ , blue+ , magenta+ , cyan+ , white++ -- * Colors, 256-color terminals only++ -- | These 'Y.Radiant' affect 256-color terminals only.+ , grey+ , brightRed+ , brightGreen+ , brightYellow+ , brightBlue+ , brightMagenta+ , brightCyan+ , brightWhite+ , color256+ , only256++ -- * Converting multiple 'Y.Chunk' to 'Data.ByteString.ByteString'++ -- | To print a 'Y.Chunk', you need to convert it to some+ -- 'Data.ByteString.ByteString's.+ --+ -- All these functions convert the 'Data.Text' to UTF-8+ -- 'Data.ByteString.ByteString's. Many of these functions return a+ -- difference list. Learn You a Haskell for Great Good has a great+ -- explanation of difference lists:+ --+ -- http://learnyouahaskell.com/for-a-few-monads-more+ --+ -- If you don't want to learn about difference lists, just stick+ -- with using 'T.chunksToByteStrings' and use+ -- 'T.byteStringMakerFromEnvironment' if you want to use the highest+ -- number of colors possible, or, to manually specify the number of+ -- colors, use 'T.chunksToByteStrings' with 'T.toByteStringsColors0',+ -- 'T.toByteStringsColors8', or 'T.toByteStringsColors256' as the first+ -- argument. 'T.chunksToByteStrings' has an example.+ --+ -- For output to handles or to standard output, just use+ -- 'T.hPutChunks' or 'T.putChunks'.+ , T.toByteStringsColors0+ , T.toByteStringsColors8+ , T.toByteStringsColors256+ , T.byteStringMakerFromEnvironment+ , T.byteStringMakerFromHandle+ , T.chunksToByteStrings++ -- * Writing multiple 'Y.Chunk' to a handle or to standard output+ , T.putChunks+ , T.hPutChunks+ , T.putChunksLn+ , T.hPutChunksLn++ -- * Quick and dirty functions for IO++ -- | For efficiency reasons you probably don't want to use these+ -- when printing large numbers of 'Y.Chunk', but they are handy for+ -- throwaway uses like experimenting in GHCi.+ , T.putChunk+ , T.putChunkLn++ -- * Notes on terminals+ -- $termNotes++ ) where++import qualified Rainbow.Translate as T+import qualified Rainbow.Types as Y+import Data.Word (Word8)+import Data.Function ((&))+import qualified Control.Lens as Lens+import Control.Lens ((.~))+import Data.Monoid (Monoid(mempty))++formatBoth :: Lens.Setter' Y.Format Bool -> Y.Chunk -> Y.Chunk+formatBoth get c = c & Y.scheme . Y.style8 . Y.format . get .~ True+ & Y.scheme . Y.style256 . Y.format . get .~ True++-- | Bold. What actually happens when you use Bold is going to depend+-- on your terminal. For example, xterm allows you actually use a bold+-- font for bold, if you have one. Otherwise, it might simulate bold+-- by using overstriking. Another possibility is that your terminal+-- might use a different color to indicate bold. For more details (at+-- least for xterm), look at xterm (1) and search for @boldColors@.+--+-- If your terminal uses a different color for bold, this allows an+-- 8-color terminal to really have 16 colors.+bold :: Y.Chunk -> Y.Chunk+bold = formatBoth Y.bold++faint :: Y.Chunk -> Y.Chunk+faint = formatBoth Y.faint++italic :: Y.Chunk -> Y.Chunk+italic = formatBoth Y.italic++underline :: Y.Chunk -> Y.Chunk+underline = formatBoth Y.underline++blink :: Y.Chunk -> Y.Chunk+blink = formatBoth Y.blink++inverse :: Y.Chunk -> Y.Chunk+inverse = formatBoth Y.inverse++invisible :: Y.Chunk -> Y.Chunk+invisible = formatBoth Y.invisible++strikeout :: Y.Chunk -> Y.Chunk+strikeout = formatBoth Y.strikeout++-- | Change the foreground color. Whether this affects 8-color+-- terminals, 256-color terminals, or both depends on the 'Y.Radiant'.+fore :: Y.Radiant -> Y.Chunk -> Y.Chunk+fore (Y.Radiant c8 c256) c = c & Y.scheme . Y.style8 . Y.fore .~ c8+ & Y.scheme . Y.style256 . Y.fore .~ c256++-- | Change the background color. Whether this affects 8-color+-- terminals, 256-color terminals, or both depends on the 'Y.Radiant'.+back :: Y.Radiant -> Y.Chunk -> Y.Chunk+back (Y.Radiant c8 c256) c = c & Y.scheme . Y.style8 . Y.back .~ c8+ & Y.scheme . Y.style256 . Y.back .~ c256++-- | Ensures that a 'Y.Radiant' affects only a 256-color terminal.+-- For instance, to make text that is blue on an 8-color terminal but+-- red on a 256-color terminal:+--+-- @+-- 'T.putChunkLn' $ \"Blue on 8, red on 256\" &+-- 'fore' ('blue' <> 'only256' 'red')+-- @+only256 :: Y.Radiant -> Y.Radiant+only256 (Y.Radiant _ c256) = Y.Radiant mempty c256++black :: Y.Radiant+black = Y.Radiant (Y.Color (Just Y.E0)) (Y.Color (Just 0))++red :: Y.Radiant+red = Y.Radiant (Y.Color (Just Y.E1)) (Y.Color (Just 1))++green :: Y.Radiant+green = Y.Radiant (Y.Color (Just Y.E2)) (Y.Color (Just 2))++yellow :: Y.Radiant+yellow = Y.Radiant (Y.Color (Just Y.E3)) (Y.Color (Just 3))++blue :: Y.Radiant+blue = Y.Radiant (Y.Color (Just Y.E4)) (Y.Color (Just 4))++magenta :: Y.Radiant+magenta = Y.Radiant (Y.Color (Just Y.E5)) (Y.Color (Just 5))++cyan :: Y.Radiant+cyan = Y.Radiant (Y.Color (Just Y.E6)) (Y.Color (Just 6))++white :: Y.Radiant+white = Y.Radiant (Y.Color (Just Y.E7)) (Y.Color (Just 7))++grey :: Y.Radiant+grey = color256 8++brightRed :: Y.Radiant+brightRed = color256 9++brightGreen :: Y.Radiant+brightGreen = color256 10++brightYellow :: Y.Radiant+brightYellow = color256 11++brightBlue :: Y.Radiant+brightBlue = color256 12++brightMagenta :: Y.Radiant+brightMagenta = color256 13++brightCyan :: Y.Radiant+brightCyan = color256 14++brightWhite :: Y.Radiant+brightWhite = color256 15++-- | A 'Y.Radiant' for any of the 256 colors available. Supply the+-- color number. Exactly which color you'll get for a given number+-- is dependent on the terminal; though there seem to be common+-- defaults, often the user can configure this however she likes.+-- The resulting 'Y.Radiant' will affect 256-color terminals only.+color256 :: Word8 -> Y.Radiant+color256 x = Y.Radiant (Y.Color Nothing) (Y.Color (Just x))+++{- $termNotes++Earlier versions of Rainbow used the Haskell terminfo library for+dealing with the terminal. Terminfo is available at++<https://hackage.haskell.org/package/terminfo>++Terminfo, in turn, uses the UNIX terminfo library. The biggest+advantage of using Terminfo is that it is compatible with a huge+variety of terminals. Many of these terminals are hardware models+that are gathering dust in an IBM warehouse somewhere, but even modern+software terminals might have quirks. Terminfo covers all those.++The disadvantage is that using Terminfo requires you to perform IO+whenever you need to format output for the terminal. Your only choice+when using Terminfo is to send output directly to the terminal, or to+a handle. This goes against typical Haskell practice, where we try to+write pure code whenever possible.++Perhaps surprisingly, there are times where you may want to format+output, but not immediately send it to the terminal. Maybe you want+to send it to a file instead, or maybe you want to use a Haskell+library like Pipes and stream it somewhere. Terminfo is a binding to+a Unix library that is not designed for this sort of thing. The+closest you could get using Terminfo would be to make a Handle that is+backed by a in-memory buffer. There is a package for that sort of+thing:++<http://hackage.haskell.org/package/knob>++but it seems like a nasty workaround. Or you can hijack stdout and+send that somewhere--again, nasty workaround.++So I decided to stop using Terminfo. That means Rainbow no longer+supports a menagerie of bizarre terminals. It instead just uses the+standard ISO 6429 / ECMA 48 terminal codes. These are the same codes+that are used by xterm, the OS X Terminal, the Linux console, or any+other reasonably modern software terminal. Realistically they are the+only terminals Rainbow would be used for.++The 256 color capability is not in ISO 6429, but it is widely supported.++Probably the most common so-called terminals in use today that do NOT+support the ISO 6429 codes are those that are not really terminals.+For instance, you might use an Emacs shell buffer. For those+situations just use 'T.toByteStringsColors0'.++I also decided to standardize on UTF-8 for the 'Data.Text.Text'+output. These days that seems reasonable.++Apparently it's difficult to get ISO 6429 support on Microsoft+Windows. Oh well.++-}
+ lib/Rainbow/Translate.hs view
@@ -0,0 +1,355 @@+{-# LANGUAGE FlexibleInstances #-}++-- | This module contains functions that convert a 'T.Chunk' into+-- 'ByteString's. Ordinarily everything you need from this module is+-- exported from "Rainbow".+module Rainbow.Translate where++import Control.Exception (try)+import Data.ByteString (ByteString)+import Data.List (intersperse)+import Data.Text (Text)+import Data.Word (Word8)+import qualified Data.ByteString as BS+import qualified Data.ByteString.Char8 as BS8+import qualified Data.Text.Encoding as X+import qualified Rainbow.Types as T+import qualified System.Console.Terminfo as Terminfo+import qualified System.IO as IO+++single :: Char -> [ByteString] -> [ByteString]+single c = ((BS8.singleton c):)++escape :: [ByteString] -> [ByteString]+escape = single '\x1B'++csi :: [ByteString] -> [ByteString]+csi = escape . single '['++sgr :: ([ByteString] -> [ByteString]) -> [ByteString] -> [ByteString]+sgr sq = csi . sq . single 'm'++params :: Show a => [a] -> [ByteString] -> [ByteString]+params cs = ((intersperse semi . map (BS8.pack . show) $ cs) ++)+ where+ semi = BS8.singleton ';'++sgrSingle :: Word -> [ByteString] -> [ByteString]+sgrSingle w = sgr $ params [w]++sgrDouble :: Word -> Word -> [ByteString] -> [ByteString]+sgrDouble x y = sgr $ params [x, y]++normalDefault :: [ByteString] -> [ByteString]+normalDefault = sgrSingle 0++bold :: [ByteString] -> [ByteString]+bold = sgrSingle 1++faint :: [ByteString] -> [ByteString]+faint = sgrSingle 2++italic :: [ByteString] -> [ByteString]+italic = sgrSingle 3++underline :: [ByteString] -> [ByteString]+underline = sgrSingle 4++blink :: [ByteString] -> [ByteString]+blink = sgrSingle 5++-- Yes, blink is 5, inverse is 7; 6 is skipped. In ISO 6429 6 blinks+-- at a different rate.++inverse :: [ByteString] -> [ByteString]+inverse = sgrSingle 7++invisible :: [ByteString] -> [ByteString]+invisible = sgrSingle 8++strikeout :: [ByteString] -> [ByteString]+strikeout = sgrSingle 9++foreBlack :: [ByteString] -> [ByteString]+foreBlack = sgrSingle 30++foreRed :: [ByteString] -> [ByteString]+foreRed = sgrSingle 31++foreGreen :: [ByteString] -> [ByteString]+foreGreen = sgrSingle 32++foreYellow :: [ByteString] -> [ByteString]+foreYellow = sgrSingle 33++foreBlue :: [ByteString] -> [ByteString]+foreBlue = sgrSingle 34++foreMagenta :: [ByteString] -> [ByteString]+foreMagenta = sgrSingle 35++foreCyan :: [ByteString] -> [ByteString]+foreCyan = sgrSingle 36++foreWhite :: [ByteString] -> [ByteString]+foreWhite = sgrSingle 37++-- code 3 8 is skipped++foreDefault :: [ByteString] -> [ByteString]+foreDefault = sgrSingle 39++backBlack :: [ByteString] -> [ByteString]+backBlack = sgrSingle 40++backRed :: [ByteString] -> [ByteString]+backRed = sgrSingle 41++backGreen :: [ByteString] -> [ByteString]+backGreen = sgrSingle 42++backYellow :: [ByteString] -> [ByteString]+backYellow = sgrSingle 43++backBlue :: [ByteString] -> [ByteString]+backBlue = sgrSingle 44++backMagenta :: [ByteString] -> [ByteString]+backMagenta = sgrSingle 45++backCyan :: [ByteString] -> [ByteString]+backCyan = sgrSingle 46++backWhite :: [ByteString] -> [ByteString]+backWhite = sgrSingle 47++-- code 4 8 is skipped++backDefault :: [ByteString] -> [ByteString]+backDefault = sgrSingle 49++fore256 :: Word8 -> [ByteString] -> [ByteString]+fore256 c = sgr $ params [38,5,c]++back256 :: Word8 -> [ByteString] -> [ByteString]+back256 c = sgr $ params [48,5,c]++foreColor8 :: T.Enum8 -> [ByteString] -> [ByteString]+foreColor8 e8 = case e8 of+ T.E0 -> foreBlack+ T.E1 -> foreRed+ T.E2 -> foreGreen+ T.E3 -> foreYellow+ T.E4 -> foreBlue+ T.E5 -> foreMagenta+ T.E6 -> foreCyan+ T.E7 -> foreWhite++backColor8 :: T.Enum8 -> [ByteString] -> [ByteString]+backColor8 e8 = case e8 of+ T.E0 -> backBlack+ T.E1 -> backRed+ T.E2 -> backGreen+ T.E3 -> backYellow+ T.E4 -> backBlue+ T.E5 -> backMagenta+ T.E6 -> backCyan+ T.E7 -> backWhite++renderFormat :: T.Format -> [ByteString] -> [ByteString]+renderFormat (T.Format bld fnt ita und bli ivr isb stk)+ = effect bold bld+ . effect faint fnt+ . effect italic ita+ . effect underline und+ . effect blink bli+ . effect inverse ivr+ . effect invisible isb+ . effect strikeout stk+ where+ effect on x = if x then on else id++renderStyle8 :: T.Style T.Enum8 -> [ByteString] -> [ByteString]+renderStyle8 (T.Style fore back format)+ = effect foreColor8 fore+ . effect backColor8 back+ . renderFormat format+ where+ effect on (T.Color may) = maybe id on may++renderStyle256 :: T.Style Word8 -> [ByteString] -> [ByteString]+renderStyle256 (T.Style fore back format)+ = effect fore256 fore+ . effect back256 back+ . renderFormat format+ where+ effect on (T.Color may) = maybe id on may++render :: Text -> [ByteString] -> [ByteString]+render x = (X.encodeUtf8 x :)++toByteStringsColors0+ :: T.Chunk+ -> [ByteString]+ -> [ByteString]+toByteStringsColors0 (T.Chunk _ yn) = render yn++toByteStringsColors8+ :: T.Chunk+ -> [ByteString]+ -> [ByteString]+toByteStringsColors8 (T.Chunk (T.Scheme s8 _) yn)+ = normalDefault+ . renderStyle8 s8+ . render yn+ . normalDefault++toByteStringsColors256+ :: T.Chunk+ -> [ByteString]+ -> [ByteString]+toByteStringsColors256 (T.Chunk (T.Scheme _ s256) yn)+ = normalDefault+ . renderStyle256 s256+ . render yn+ . normalDefault+++-- | Uses 'Terminfo.setupTermFromEnv' to obtain the terminal's color+-- capability. If this says there are at least 256 colors are+-- available, returns 'toByteStringsColors256'. Otherwise, if there+-- are at least 8 colors available, returns 'toByteStringsColors8'.+-- Otherwise, returns 'toByteStringsColors0'.+--+-- If the terminfo database could not be read (that is, if+-- 'System.Console.Terminfo.Base.SetupTermError' is returned), then return+-- 'toByteStringsColors0'.+byteStringMakerFromEnvironment+ :: IO (T.Chunk -> [ByteString] -> [ByteString])+byteStringMakerFromEnvironment = fmap g (try Terminfo.setupTermFromEnv)+ where+ g (Left e) = toByteStringsColors0+ where+ -- Previously this caught all IOException. Now it catches only SetupTermError.+ -- See+ -- https://github.com/commercialhaskell/stackage/issues/4994+ -- Hopefully this will fix this Stackage bug.+ _types = e :: Terminfo.SetupTermError+ g (Right terminal) =+ case Terminfo.getCapability terminal (Terminfo.tiGetNum "colors") of+ Nothing -> toByteStringsColors0+ Just c+ | c >= 256 -> toByteStringsColors256+ | c >= 8 -> toByteStringsColors8+ | otherwise -> toByteStringsColors0++-- | Like 'byteStringMakerFromEnvironment' but also consults a+-- provided 'IO.Handle'. If the 'IO.Handle' is not a terminal,+-- 'toByteStringsColors0' is returned. Otherwise, the value of+-- 'byteStringMakerFromEnvironment' is returned.+byteStringMakerFromHandle+ :: IO.Handle+ -> IO (T.Chunk -> [ByteString] -> [ByteString])+byteStringMakerFromHandle h = IO.hIsTerminalDevice h >>= f+ where+ f isTerm | isTerm = byteStringMakerFromEnvironment+ | otherwise = return toByteStringsColors0+ ++-- | Convert a list of 'T.Chunk' to a list of 'ByteString'. The+-- length of the returned list may be longer than the length of the+-- input list.+--+-- So, for example, to print a bunch of chunks to standard output+-- using 256 colors:+--+-- > module PrintMyChunks where+-- >+-- > import qualified Data.ByteString as BS+-- > import Rainbow+-- >+-- > myChunks :: [Chunk String]+-- > myChunks = [ chunk "Roses" & fore red, chunk "\n",+-- > chunk "Violets" & fore blue, chunk "\n" ]+-- >+-- > myPrintedChunks :: IO ()+-- > myPrintedChunks = mapM_ BS.putStr+-- > . chunksToByteStrings toByteStringsColors256+-- > $ myChunks+--+-- To use the highest number of colors that this terminal supports:+--+-- > myPrintedChunks' :: IO ()+-- > myPrintedChunks' = do+-- > printer <- byteStringMakerFromEnvironment+-- > mapM_ BS.putStr+-- > . chunksToByteStrings printer+-- > $ myChunks++chunksToByteStrings+ :: (T.Chunk -> [ByteString] -> [ByteString])+ -- ^ Function that converts 'T.Chunk' to 'ByteString'. This+ -- function, when applied to a 'T.Chunk', returns a difference list.+ -> [T.Chunk]+ -> [ByteString]+chunksToByteStrings mk = ($ []) . foldr (.) id . map mk++-- | Writes a list of chunks to the given 'IO.Handle'.+--+-- First uses 'byteStringMakerFromEnvironment' to determine how many+-- colors to use. Then creates a list of 'ByteString' using+-- 'chunksToByteStrings' and then writes them to the given 'IO.Handle'.+hPutChunks :: IO.Handle -> [T.Chunk] -> IO ()+hPutChunks h cks = do+ maker <- byteStringMakerFromEnvironment+ let bsList = chunksToByteStrings maker cks+ mapM_ (BS.hPut h) bsList++-- | Writes a list of chunks to the given 'IO.Handle', followed by a+-- newline character.+--+-- First uses 'byteStringMakerFromEnvironment' to determine how many+-- colors to use. Then creates a list of 'ByteString' using+-- 'chunksToByteStrings' and then writes them to the given 'IO.Handle'.+hPutChunksLn :: IO.Handle -> [T.Chunk] -> IO ()+hPutChunksLn h cks = do+ hPutChunks h cks+ IO.hPutStr h "\n"++-- | Writes a list of chunks to standard output.+--+-- First uses 'byteStringMakerFromEnvironment' to determine how many+-- colors to use. Then creates a list of 'ByteString' using+-- 'chunksToByteStrings' and then writes them to standard output.+putChunks :: [T.Chunk] -> IO ()+putChunks = hPutChunks IO.stdout++-- | Writes a list of chunks to standard output, followed by a+-- newline.+--+-- First uses 'byteStringMakerFromEnvironment' to determine how many+-- colors to use. Then creates a list of 'ByteString' using+-- 'chunksToByteStrings' and then writes them to standard output.+putChunksLn :: [T.Chunk] -> IO ()+putChunksLn cks = do+ putChunks cks+ IO.putStr "\n"++-- | Writes a 'T.Chunk' to standard output. Uses+-- 'byteStringMakerFromEnvironment' each time you apply it, so this+-- might be inefficient. You are better off using+-- 'chunksToByteStrings' and the functions in "Data.ByteString" to+-- print your 'T.Chunk's if you are printing a lot of them.+putChunk :: T.Chunk -> IO ()+putChunk ck = do+ mkr <- byteStringMakerFromEnvironment+ mapM_ BS.putStr . chunksToByteStrings mkr $ [ck]++-- | Writes a 'T.Chunk' to standard output, and appends a newline.+-- Uses 'byteStringMakerFromEnvironment' each time you apply it, so+-- this might be inefficient. You are better off using+-- 'chunksToByteStrings' and the functions in "Data.ByteString" to+-- print your 'T.Chunk's if you are printing a lot of them.+putChunkLn :: T.Chunk -> IO ()+putChunkLn ck = putChunk ck >> putStrLn ""
+ lib/Rainbow/Types.hs view
@@ -0,0 +1,239 @@+{-# LANGUAGE DeriveGeneric, DeriveDataTypeable, DeriveFunctor,+ DeriveTraversable, DeriveFoldable, TemplateHaskell #-}++-- | All the main types in Rainbow. Using this module you can specify+-- that you want different formatting for 8- and 256-color terminals.+-- Many of the names in this module conflict with the names in+-- "Rainbow", so it's probably best to @import@ this module+-- @qualified@.+module Rainbow.Types where++-- # Imports++import Control.Lens (makeLenses)+import Data.String (IsString(..))+import Data.Text (Text)+import qualified Data.Text as X+import Data.Traversable ()+import Data.Typeable (Typeable)+import Data.Word (Word8)+import GHC.Generics (Generic)++--+-- Colors+--++-- | A color; a 'Nothing' value means that the terminal's default+-- color is used. The type of the 'Maybe' generally will be an+-- 'Enum8' to represent one of 8 colors, or a 'Word8' to represent one+-- of 256 colors.+newtype Color a = Color (Maybe a)+ deriving (Eq, Show, Ord, Generic, Typeable, Functor, Foldable,+ Traversable)++instance Semigroup (Color a) where+ Color x <> Color y = case y of+ Just a -> Color (Just a)+ _ -> Color x++-- | Takes the last non-Nothing Color. 'mempty' is no color.+instance Monoid (Color a) where+ mempty = Color Nothing++-- | A simple enumeration for eight values. Represents eight colors.+data Enum8+ = E0+ | E1+ | E2+ | E3+ | E4+ | E5+ | E6+ | E7+ deriving (Eq, Ord, Show, Bounded, Enum, Generic, Typeable)++enum8toWord8 :: Enum8 -> Word8+enum8toWord8 e = case e of+ E0 -> 0+ E1 -> 1+ E2 -> 2+ E3 -> 3+ E4 -> 4+ E5 -> 5+ E6 -> 6+ E7 -> 7++black :: Enum8+black = E0++red :: Enum8+red = E1++green :: Enum8+green = E2++yellow :: Enum8+yellow = E3++blue :: Enum8+blue = E4++magenta :: Enum8+magenta = E5++cyan :: Enum8+cyan = E6++white :: Enum8+white = E7++grey :: Word8+grey = 8++brightRed :: Word8+brightRed = 9++brightGreen :: Word8+brightGreen = 10++brightYellow :: Word8+brightYellow = 11++brightBlue :: Word8+brightBlue = 12++brightMagenta :: Word8+brightMagenta = 13++brightCyan :: Word8+brightCyan = 14++brightWhite :: Word8+brightWhite = 15++--+-- Styles+--++-- | Text formatting such as bold, italic, etc.+data Format = Format+ { _bold :: Bool+ , _faint :: Bool+ , _italic :: Bool+ , _underline :: Bool+ , _blink :: Bool+ , _inverse :: Bool+ , _invisible :: Bool+ , _strikeout :: Bool+ } deriving (Show, Eq, Ord, Generic, Typeable)++makeLenses ''Format++instance Semigroup Format where+ (Format x0 x1 x2 x3 x4 x5 x6 x7) <> (Format y0 y1 y2 y3 y4 y5 y6 y7)+ = Format (x0 || y0) (x1 || y1) (x2 || y2) (x3 || y3) (x4 || y4)+ (x5 || y5) (x6 || y6) (x7 || y7)++-- | For each field, the resulting field is True if either field is+-- True. For 'mempty', every field is False.+instance Monoid Format where+ mempty = Format False False False False False False False False++-- | The foreground and background color, and the 'Format'. This+-- represents all colors and formatting attributes for either an 8- or+-- 256-color terminal.+data Style a = Style+ { _fore :: Color a+ , _back :: Color a+ , _format :: Format+ } deriving (Show, Eq, Ord, Generic, Typeable, Functor, Foldable,+ Traversable)++makeLenses ''Style++instance Semigroup (Style a) where+ (Style x0 x1 x2) <> (Style y0 y1 y2)+ = Style (x0 <> y0) (x1 <> y1) (x2 <> y2)++-- | Uses the underlying 'Monoid' instances for 'Color' and 'Format'.+instance Monoid (Style a) where+ mempty = Style mempty mempty mempty++--+-- Scheme+--++-- | Holds the 'Style' for both 8- and 256-color terminals.+data Scheme = Scheme+ { _style8 :: Style Enum8+ , _style256 :: Style Word8+ } deriving (Eq, Ord, Show, Generic, Typeable)++makeLenses ''Scheme++instance Semigroup Scheme where+ (Scheme x0 x1) <> (Scheme y0 y1) = Scheme (x0 <> y0) (x1 <> y1)++instance Monoid Scheme where+ mempty = Scheme mempty mempty++--+-- Chunks+--++-- | A chunk is some textual data coupled with a description of what+-- color the text is, attributes like whether it is bold or+-- underlined, etc. The chunk knows what foreground and background+-- colors and what attributes to use for both an 8 color terminal and+-- a 256 color terminal.++data Chunk = Chunk+ { _scheme :: Scheme+ , _yarn :: Text+ } deriving (Eq, Show, Ord, Generic, Typeable)++-- | Uses the underlying 'Semigroup' instances for both the+-- underlying 'Scheme' and the underlying 'Text'.+instance Semigroup Chunk where+ (Chunk x0 x1) <> (Chunk y0 y1)+ = Chunk (x0 <> y0) (x1 <> y1)++-- | Creates a 'Chunk' with no formatting and with the given text.+instance IsString Chunk where+ fromString = chunk . X.pack++-- | Uses the underlying 'Monoid' instances for the 'Scheme' and for+-- the underlying 'Text'. Therefore 'mempty' will have no+-- formatting, no colors, and no text.+instance Monoid Chunk where+ mempty = Chunk mempty mempty++-- | Creates a 'Chunk' with no formatting and with the given text.+-- A 'Chunk' is also an instance of 'Data.String.IsString' so you+-- can create them with the @OverloadedStrings@ extension. Such a+-- 'Chunk' has the text of the string and no formatting.+chunk :: Text -> Chunk+chunk = Chunk mempty++makeLenses ''Chunk+++-- | Stores colors that may affect 8-color terminals, 256-color+-- terminals, both, or neither.+data Radiant = Radiant+ { _color8 :: Color Enum8+ , _color256 :: Color Word8+ } deriving (Eq, Ord, Show, Typeable, Generic)++instance Semigroup Radiant where+ (Radiant x0 x1) <> (Radiant y0 y1) = Radiant (x0 <> y0) (x1 <> y1)++-- | Uses the underlying 'Monoid' instance for the 'Color's. Thus the+-- last non-'Nothing' 'Color' is used. This can be useful to specify+-- one color for 8-color terminals and a different color for 256-color+-- terminals.+instance Monoid Radiant where+ mempty = Radiant mempty mempty++makeLenses ''Radiant+
rainbow.cabal view
@@ -1,42 +1,95 @@-name: rainbow-version: 0.4.0.0-synopsis: Print text to terminal with colors and effects-description:- rainbow helps you print Text chunks to a terminal with colors and effects- such as bold, underlining, etc. You pair each Text with a description- of how it should appear. Rainbow works with both 8-color and 256-color- terminals.-- .+cabal-version: 1.12 - rainbow uses the terminfo package which, in turn, needs the full C- library for ncurses installed, including the development- headers. Before installing terminfo, you may need to install the- ncurses headers (for instance, on Debian systems, install the- libncurses5-dev package.)+-- This file has been generated from package.yaml by hpack version 0.31.2.+--+-- see: https://github.com/sol/hpack+--+-- hash: 837a60ee2540f28dc14f871885d041b7f60038586de137f1f3e495154992b4fe -homepage: http://github.com/massysett/rainbow-license: BSD3-license-file: LICENSE-author: Omari Norman-maintainer: omari@smileystation.com-copyright: 2013 Omari Norman-category: System-build-type: Simple-cabal-version: >=1.8+name: rainbow+version: 0.34.2.2+synopsis: Print text to terminal with colors and effects+description: Please see README.md+category: System+stability: Experimental+homepage: https://www.github.com/massysett/rainbow+bug-reports: https://www.github.com/massysett/rainbow/issues+author: Omari Norman+maintainer: omari@smileystation.com+copyright: Copyright 2013-2019 Omari Norman+license: BSD3+license-file: LICENSE+build-type: Simple+extra-source-files:+ README.md+ stack.yaml+x-curation: uncurated source-repository head- type: git- location: git://github.com/massysett/rainbow.git+ type: git+ location: https://github.com/massysett/rainbow library exposed-modules:- System.Console.Rainbow+ Rainbow+ Rainbow.Translate+ Rainbow.Types+ other-modules:+ Paths_rainbow+ hs-source-dirs:+ lib+ other-extensions: TemplateHaskell+ ghc-options: -Wall+ build-depends:+ base >=4.11 && <5+ , bytestring+ , lens+ , terminfo+ , text+ default-language: Haskell2010 +test-suite rainbow-instances+ type: exitcode-stdio-1.0+ main-is: rainbow-instances.hs+ other-modules:+ Rainbow+ Rainbow.Translate+ Rainbow.Types+ Rainbow.QuickCheck+ Paths_rainbow+ hs-source-dirs:+ lib+ tests+ other-extensions: TemplateHaskell+ ghc-options: -Wall build-depends:- base ==4.6.*- , lens ==3.9.*- , terminfo ==0.3.*- , text ==0.11.*+ QuickCheck+ , base >=4.11 && <5+ , bytestring+ , lens+ , terminfo+ , text+ default-language: Haskell2010 +test-suite rainbow-visual+ type: exitcode-stdio-1.0+ main-is: rainbow-visual.hs+ other-modules:+ Rainbow+ Rainbow.Translate+ Rainbow.Types+ Rainbow.QuickCheck+ Paths_rainbow+ hs-source-dirs:+ lib+ tests+ other-extensions: TemplateHaskell ghc-options: -Wall+ build-depends:+ QuickCheck+ , base >=4.11 && <5+ , bytestring+ , lens+ , terminfo+ , text+ default-language: Haskell2010
+ stack.yaml view
@@ -0,0 +1,32 @@+# For more information, see: https://github.com/commercialhaskell/stack/blob/release/doc/yaml_configuration.md++# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2)+resolver: lts-14.14++# Local packages, usually specified by relative directory name+packages:+- '.'++# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3)+extra-deps: []++# Override default flag values for local packages and extra-deps+flags: {}++# Extra package databases containing global packages+extra-package-dbs: []++# Control whether we use the GHC we find on the path+# system-ghc: true++# Require a specific version of stack, using version ranges+# require-stack-version: -any # Default+# require-stack-version: >= 0.1.4.0++# Override the architecture used by stack, especially useful on Windows+# arch: i386+# arch: x86_64++# Extra directories used by stack for building+# extra-include-dirs: [/path/to/dir]+# extra-lib-dirs: [/path/to/dir]
+ tests/Rainbow/QuickCheck.hs view
@@ -0,0 +1,106 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# LANGUAGE FlexibleInstances, DeriveGeneric, StandaloneDeriving #-}++-- | QuickCheck instances for all of Rainbow. Currently Rainbow does+-- not use these instances itself; they are only here for+-- cut-and-paste for other libraries that may need them. There is an+-- executable in Rainbow that is built solely to make sure this module+-- compiles without any errors.+--+-- To use these instances, just drop them into your own project+-- somewhere. They are not packaged as a library because there are+-- orphan instances.++module Rainbow.QuickCheck where++import qualified Data.Text as X+import Data.Typeable+import Rainbow.Types+import Test.QuickCheck++instance Arbitrary X.Text where+ arbitrary = fmap X.pack $ listOf genChar+ where+ genChar = elements ['a'..'z']+ shrink = fmap X.pack . shrink . X.unpack++instance CoArbitrary X.Text where+ coarbitrary = coarbitrary . X.unpack++instance (Typeable a, Arbitrary a) => Arbitrary (Color a) where+ arbitrary = Color <$> arbitrary+ shrink = genericShrink++instance CoArbitrary a => CoArbitrary (Color a) where+ coarbitrary (Color a) = coarbitrary a++varInt :: Int -> Gen b -> Gen b+varInt = variant++instance Arbitrary Enum8 where+ arbitrary = elements [E0, E1, E2, E3, E4, E5, E6, E7]+ shrink = genericShrink++instance CoArbitrary Enum8 where+ coarbitrary x = case x of+ E0 -> varInt 0+ E1 -> varInt 1+ E2 -> varInt 2+ E3 -> varInt 3+ E4 -> varInt 4+ E5 -> varInt 5+ E6 -> varInt 6+ E7 -> varInt 7++instance Arbitrary Format where+ arbitrary+ = Format <$> g <*> g <*> g <*> g <*> g <*> g <*> g <*> g+ where+ g = arbitrary+ shrink = genericShrink++instance CoArbitrary Format where+ coarbitrary (Format x0 x1 x2 x3 x4 x5 x6 x7)+ = coarbitrary x0+ . coarbitrary x1+ . coarbitrary x2+ . coarbitrary x3+ . coarbitrary x4+ . coarbitrary x5+ . coarbitrary x6+ . coarbitrary x7++instance (Arbitrary a, Typeable a) => Arbitrary (Style a) where+ arbitrary = Style <$> arbitrary <*> arbitrary <*> arbitrary+ shrink = genericShrink++instance CoArbitrary a => CoArbitrary (Style a) where+ coarbitrary (Style a b c)+ = coarbitrary a+ . coarbitrary b+ . coarbitrary c++instance Arbitrary Scheme where+ arbitrary = Scheme <$> arbitrary <*> arbitrary+ shrink = genericShrink++instance CoArbitrary Scheme where+ coarbitrary (Scheme a b) = coarbitrary a . coarbitrary b+++instance Arbitrary Chunk where+ arbitrary = Chunk <$> arbitrary <*> arbitrary+ shrink = genericShrink++instance CoArbitrary Chunk where+ coarbitrary (Chunk a b)+ = coarbitrary a+ . coarbitrary b++instance Arbitrary Radiant where+ arbitrary = Radiant <$> arbitrary <*> arbitrary+ shrink = genericShrink++instance CoArbitrary Radiant where+ coarbitrary (Radiant a b) = coarbitrary a . coarbitrary b+
+ tests/rainbow-instances.hs view
@@ -0,0 +1,10 @@+{-# OPTIONS_GHC -fno-warn-unused-imports #-}++-- | This program exists solely to import Rainbow.QuickCheck to make+-- sure it compiles.+module Main where++import Rainbow.QuickCheck++main :: IO ()+main = return ()
+ tests/rainbow-visual.hs view
@@ -0,0 +1,18 @@+{-# LANGUAGE OverloadedStrings #-}+module Main where++import Rainbow+import Data.Function ((&))++main :: IO ()+main = do+ putChunksLn+ [ "Red fore, green back " & fore red & back green+ , "Blue fore, magenta back" & fore blue & back magenta ]+ putChunksLn+ [ "Red, bold fore " & fore red & bold+ , "Red, underlined fore " & fore red & underline+ , "Cyan, italic fore" & fore cyan & italic+ ]+ putChunksLn+ [ "Light grey background on 256-color" & back (color256 254) ]