on master help sign in
Merge pull request #2 from jtdaugherty/master

sync

commite886dc0f83decd062020c39d027d01906c413922 authorWillem Van Onsem <3482343+KommuSoft@users.noreply.github.com> dateWed 17 Feb 2021, 07:43 (6 years ago) parent598b014309c0e4
10 files changed+336−249
src/Codec/Binary/UTF8/Debug.hs+1−2 src/Data/Terminfo/Eval.hs+3−3 src/Data/Terminfo/Parse.hs+3−3 src/Graphics/Vty/Attributes/Color240.hs+10−218 src/Graphics/Vty/Image/Internal.hs+1−1 src/Graphics/Vty/Input/Loop.hs+1−1 src/Graphics/Vty/PictureToSpans.hs+3−3 src/Graphics/Vty/Span.hs+2−2 test/VerifyColor240.hs+269 vty.cabal+43−16
src/Codec/Binary/UTF8/Debug.hs+1−2
@@ -14,5 +14,4 @@ utf8FromIso :: [Int] -> [Word8]
1414utf8FromIso = encode . map toEnum
1515
1616ppUtf8 :: [Int] -> IO ()
17−ppUtf8 = print . map (\f -> f "") . map showHex . utf8FromIso
18−
17+ppUtf8 = print . map (`showHex` "") . utf8FromIso
src/Data/Terminfo/Eval.hs+3−3
@@ -42,7 +42,7 @@ pop = do
4242
4343readParam :: Word -> Eval CapParam
4444readParam pn = do
45− !params <- get >>= return . evalParams
45+ !params <- evalParams <$> get
4646 return $! genericIndex params pn
4747
4848push :: CapParam -> Eval ()
@@ -64,11 +64,11 @@ writeCapExpr cap params =
6464 in snd $ runWriter (runStateT (writeCapOps (capOps cap)) s0)
6565
6666writeCapOps :: CapOps -> Eval ()
67−writeCapOps ops = mapM_ writeCapOp ops
67+writeCapOps = mapM_ writeCapOp
6868
6969writeCapOp :: CapOp -> Eval ()
7070writeCapOp (Bytes !offset !count) = do
71− !cap <- get >>= return . evalExpression
71+ !cap <- evalExpression <$> get
7272 let bytes = Vector.take count $ Vector.drop offset (capBytes cap)
7373 Vector.forM_ bytes $ tell.writeWord8
7474writeCapOp DecOut = do
src/Data/Terminfo/Parse.hs+3−3
@@ -128,7 +128,7 @@ paramEscapeParser = do
128128literalPercentParser :: CapParser BuildResults
129129literalPercentParser = do
130130 _ <- char '%'
131− startOffset <- getState >>= return . nextOffset
131+ startOffset <- nextOffset <$> getState
132132 incOffset 1
133133 return $ BuildResults 0 [Bytes startOffset 1] []
134134
@@ -154,7 +154,7 @@ incrementOpParser = do
154154pushOpParser :: CapParser BuildResults
155155pushOpParser = do
156156 _ <- char 'p'
157− paramN <- digit >>= return . (\d -> read [d])
157+ paramN <- read . pure <$> digit
158158 incOffset 2
159159 return $ BuildResults (fromEnum paramN) [PushParam $ paramN - 1] []
160160
@@ -299,7 +299,7 @@ compareOpParser
299299bytesOpParser :: CapParser BuildResults
300300bytesOpParser = do
301301 bytes <- many1 $ satisfy (/= '%')
302− startOffset <- getState >>= return . nextOffset
302+ startOffset <- nextOffset <$> getState
303303 let !c = length bytes
304304 !s <- getState
305305 let s' = s { nextOffset = startOffset + c }
src/Graphics/Vty/Attributes/Color240.hs+10−218
@@ -39,226 +39,18 @@ rgbColorToColor240 r g b
3939 | r == 218 && g == 218 && b == 218 = 237
4040 | r == 228 && g == 228 && b == 228 = 238
4141 | r == 238 && g == 238 && b == 238 = 239
42− | r <= 0 && g <= 0 && b <= 0 = 0
43− | r <= 0 && g <= 0 && b <= 95 = 1
44− | r <= 0 && g <= 0 && b <= 135 = 2
45− | r <= 0 && g <= 0 && b <= 175 = 3
46− | r <= 0 && g <= 0 && b <= 215 = 4
47− | r <= 0 && g <= 0 && b <= 255 = 5
48− | r <= 0 && g <= 95 && b <= 0 = 6
49− | r <= 0 && g <= 95 && b <= 95 = 7
50− | r <= 0 && g <= 95 && b <= 135 = 8
51− | r <= 0 && g <= 95 && b <= 175 = 9
52− | r <= 0 && g <= 95 && b <= 215 = 10
53− | r <= 0 && g <= 95 && b <= 255 = 11
54− | r <= 0 && g <= 135 && b <= 0 = 12
55− | r <= 0 && g <= 135 && b <= 95 = 13
56− | r <= 0 && g <= 135 && b <= 135 = 14
57− | r <= 0 && g <= 135 && b <= 175 = 15
58− | r <= 0 && g <= 135 && b <= 215 = 16
59− | r <= 0 && g <= 135 && b <= 255 = 17
60− | r <= 0 && g <= 175 && b <= 0 = 18
61− | r <= 0 && g <= 175 && b <= 95 = 19
62− | r <= 0 && g <= 175 && b <= 135 = 20
63− | r <= 0 && g <= 175 && b <= 175 = 21
64− | r <= 0 && g <= 175 && b <= 215 = 22
65− | r <= 0 && g <= 175 && b <= 255 = 23
66− | r <= 0 && g <= 215 && b <= 0 = 24
67− | r <= 0 && g <= 215 && b <= 95 = 25
68− | r <= 0 && g <= 215 && b <= 135 = 26
69− | r <= 0 && g <= 215 && b <= 175 = 27
70− | r <= 0 && g <= 215 && b <= 215 = 28
71− | r <= 0 && g <= 215 && b <= 255 = 29
72− | r <= 0 && g <= 255 && b <= 0 = 30
73− | r <= 0 && g <= 255 && b <= 95 = 31
74− | r <= 0 && g <= 255 && b <= 135 = 32
75− | r <= 0 && g <= 255 && b <= 175 = 33
76− | r <= 0 && g <= 255 && b <= 215 = 34
77− | r <= 0 && g <= 255 && b <= 255 = 35
78− | r <= 95 && g <= 0 && b <= 0 = 36
79− | r <= 95 && g <= 0 && b <= 95 = 37
80− | r <= 95 && g <= 0 && b <= 135 = 38
81− | r <= 95 && g <= 0 && b <= 175 = 39
82− | r <= 95 && g <= 0 && b <= 215 = 40
83− | r <= 95 && g <= 0 && b <= 255 = 41
84− | r <= 95 && g <= 95 && b <= 0 = 42
85− | r <= 95 && g <= 95 && b <= 95 = 43
86− | r <= 95 && g <= 95 && b <= 135 = 44
87− | r <= 95 && g <= 95 && b <= 175 = 45
88− | r <= 95 && g <= 95 && b <= 215 = 46
89− | r <= 95 && g <= 95 && b <= 255 = 47
90− | r <= 95 && g <= 135 && b <= 0 = 48
91− | r <= 95 && g <= 135 && b <= 95 = 49
92− | r <= 95 && g <= 135 && b <= 135 = 50
93− | r <= 95 && g <= 135 && b <= 175 = 51
94− | r <= 95 && g <= 135 && b <= 215 = 52
95− | r <= 95 && g <= 135 && b <= 255 = 53
96− | r <= 95 && g <= 175 && b <= 0 = 54
97− | r <= 95 && g <= 175 && b <= 95 = 55
98− | r <= 95 && g <= 175 && b <= 135 = 56
99− | r <= 95 && g <= 175 && b <= 175 = 57
100− | r <= 95 && g <= 175 && b <= 215 = 58
101− | r <= 95 && g <= 175 && b <= 255 = 59
102− | r <= 95 && g <= 215 && b <= 0 = 60
103− | r <= 95 && g <= 215 && b <= 95 = 61
104− | r <= 95 && g <= 215 && b <= 135 = 62
105− | r <= 95 && g <= 215 && b <= 175 = 63
106− | r <= 95 && g <= 215 && b <= 215 = 64
107− | r <= 95 && g <= 215 && b <= 255 = 65
108− | r <= 95 && g <= 255 && b <= 0 = 66
109− | r <= 95 && g <= 255 && b <= 95 = 67
110− | r <= 95 && g <= 255 && b <= 135 = 68
111− | r <= 95 && g <= 255 && b <= 175 = 69
112− | r <= 95 && g <= 255 && b <= 215 = 70
113− | r <= 95 && g <= 255 && b <= 255 = 71
114− | r <= 135 && g <= 0 && b <= 0 = 72
115− | r <= 135 && g <= 0 && b <= 95 = 73
116− | r <= 135 && g <= 0 && b <= 135 = 74
117− | r <= 135 && g <= 0 && b <= 175 = 75
118− | r <= 135 && g <= 0 && b <= 215 = 76
119− | r <= 135 && g <= 0 && b <= 255 = 77
120− | r <= 135 && g <= 95 && b <= 0 = 78
121− | r <= 135 && g <= 95 && b <= 95 = 79
122− | r <= 135 && g <= 95 && b <= 135 = 80
123− | r <= 135 && g <= 95 && b <= 175 = 81
124− | r <= 135 && g <= 95 && b <= 215 = 82
125− | r <= 135 && g <= 95 && b <= 255 = 83
126− | r <= 135 && g <= 135 && b <= 0 = 84
127− | r <= 135 && g <= 135 && b <= 95 = 85
128− | r <= 135 && g <= 135 && b <= 135 = 86
129− | r <= 135 && g <= 135 && b <= 175 = 87
130− | r <= 135 && g <= 135 && b <= 215 = 88
131− | r <= 135 && g <= 135 && b <= 255 = 89
132− | r <= 135 && g <= 175 && b <= 0 = 90
133− | r <= 135 && g <= 175 && b <= 95 = 91
134− | r <= 135 && g <= 175 && b <= 135 = 92
135− | r <= 135 && g <= 175 && b <= 175 = 93
136− | r <= 135 && g <= 175 && b <= 215 = 94
137− | r <= 135 && g <= 175 && b <= 255 = 95
138− | r <= 135 && g <= 215 && b <= 0 = 96
139− | r <= 135 && g <= 215 && b <= 95 = 97
140− | r <= 135 && g <= 215 && b <= 135 = 98
141− | r <= 135 && g <= 215 && b <= 175 = 99
142− | r <= 135 && g <= 215 && b <= 215 = 100
143− | r <= 135 && g <= 215 && b <= 255 = 101
144− | r <= 135 && g <= 255 && b <= 0 = 102
145− | r <= 135 && g <= 255 && b <= 95 = 103
146− | r <= 135 && g <= 255 && b <= 135 = 104
147− | r <= 135 && g <= 255 && b <= 175 = 105
148− | r <= 135 && g <= 255 && b <= 215 = 106
149− | r <= 135 && g <= 255 && b <= 255 = 107
150− | r <= 175 && g <= 0 && b <= 0 = 108
151− | r <= 175 && g <= 0 && b <= 95 = 109
152− | r <= 175 && g <= 0 && b <= 135 = 110
153− | r <= 175 && g <= 0 && b <= 175 = 111
154− | r <= 175 && g <= 0 && b <= 215 = 112
155− | r <= 175 && g <= 0 && b <= 255 = 113
156− | r <= 175 && g <= 95 && b <= 0 = 114
157− | r <= 175 && g <= 95 && b <= 95 = 115
158− | r <= 175 && g <= 95 && b <= 135 = 116
159− | r <= 175 && g <= 95 && b <= 175 = 117
160− | r <= 175 && g <= 95 && b <= 215 = 118
161− | r <= 175 && g <= 95 && b <= 255 = 119
162− | r <= 175 && g <= 135 && b <= 0 = 120
163− | r <= 175 && g <= 135 && b <= 95 = 121
164− | r <= 175 && g <= 135 && b <= 135 = 122
165− | r <= 175 && g <= 135 && b <= 175 = 123
166− | r <= 175 && g <= 135 && b <= 215 = 124
167− | r <= 175 && g <= 135 && b <= 255 = 125
168− | r <= 175 && g <= 175 && b <= 0 = 126
169− | r <= 175 && g <= 175 && b <= 95 = 127
170− | r <= 175 && g <= 175 && b <= 135 = 128
171− | r <= 175 && g <= 175 && b <= 175 = 129
172− | r <= 175 && g <= 175 && b <= 215 = 130
173− | r <= 175 && g <= 175 && b <= 255 = 131
174− | r <= 175 && g <= 215 && b <= 0 = 132
175− | r <= 175 && g <= 215 && b <= 95 = 133
176− | r <= 175 && g <= 215 && b <= 135 = 134
177− | r <= 175 && g <= 215 && b <= 175 = 135
178− | r <= 175 && g <= 215 && b <= 215 = 136
179− | r <= 175 && g <= 215 && b <= 255 = 137
180− | r <= 175 && g <= 255 && b <= 0 = 138
181− | r <= 175 && g <= 255 && b <= 95 = 139
182− | r <= 175 && g <= 255 && b <= 135 = 140
183− | r <= 175 && g <= 255 && b <= 175 = 141
184− | r <= 175 && g <= 255 && b <= 215 = 142
185− | r <= 175 && g <= 255 && b <= 255 = 143
186− | r <= 215 && g <= 0 && b <= 0 = 144
187− | r <= 215 && g <= 0 && b <= 95 = 145
188− | r <= 215 && g <= 0 && b <= 135 = 146
189− | r <= 215 && g <= 0 && b <= 175 = 147
190− | r <= 215 && g <= 0 && b <= 215 = 148
191− | r <= 215 && g <= 0 && b <= 255 = 149
192− | r <= 215 && g <= 95 && b <= 0 = 150
193− | r <= 215 && g <= 95 && b <= 95 = 151
194− | r <= 215 && g <= 95 && b <= 135 = 152
195− | r <= 215 && g <= 95 && b <= 175 = 153
196− | r <= 215 && g <= 95 && b <= 215 = 154
197− | r <= 215 && g <= 95 && b <= 255 = 155
198− | r <= 215 && g <= 135 && b <= 0 = 156
199− | r <= 215 && g <= 135 && b <= 95 = 157
200− | r <= 215 && g <= 135 && b <= 135 = 158
201− | r <= 215 && g <= 135 && b <= 175 = 159
202− | r <= 215 && g <= 135 && b <= 215 = 160
203− | r <= 215 && g <= 135 && b <= 255 = 161
204− | r <= 215 && g <= 175 && b <= 0 = 162
205− | r <= 215 && g <= 175 && b <= 95 = 163
206− | r <= 215 && g <= 175 && b <= 135 = 164
207− | r <= 215 && g <= 175 && b <= 175 = 165
208− | r <= 215 && g <= 175 && b <= 215 = 166
209− | r <= 215 && g <= 175 && b <= 255 = 167
210− | r <= 215 && g <= 215 && b <= 0 = 168
211− | r <= 215 && g <= 215 && b <= 95 = 169
212− | r <= 215 && g <= 215 && b <= 135 = 170
213− | r <= 215 && g <= 215 && b <= 175 = 171
214− | r <= 215 && g <= 215 && b <= 215 = 172
215− | r <= 215 && g <= 215 && b <= 255 = 173
216− | r <= 215 && g <= 255 && b <= 0 = 174
217− | r <= 215 && g <= 255 && b <= 95 = 175
218− | r <= 215 && g <= 255 && b <= 135 = 176
219− | r <= 215 && g <= 255 && b <= 175 = 177
220− | r <= 215 && g <= 255 && b <= 215 = 178
221− | r <= 215 && g <= 255 && b <= 255 = 179
222− | r <= 255 && g <= 0 && b <= 0 = 180
223− | r <= 255 && g <= 0 && b <= 95 = 181
224− | r <= 255 && g <= 0 && b <= 135 = 182
225− | r <= 255 && g <= 0 && b <= 175 = 183
226− | r <= 255 && g <= 0 && b <= 215 = 184
227− | r <= 255 && g <= 0 && b <= 255 = 185
228− | r <= 255 && g <= 95 && b <= 0 = 186
229− | r <= 255 && g <= 95 && b <= 95 = 187
230− | r <= 255 && g <= 95 && b <= 135 = 188
231− | r <= 255 && g <= 95 && b <= 175 = 189
232− | r <= 255 && g <= 95 && b <= 215 = 190
233− | r <= 255 && g <= 95 && b <= 255 = 191
234− | r <= 255 && g <= 135 && b <= 0 = 192
235− | r <= 255 && g <= 135 && b <= 95 = 193
236− | r <= 255 && g <= 135 && b <= 135 = 194
237− | r <= 255 && g <= 135 && b <= 175 = 195
238− | r <= 255 && g <= 135 && b <= 215 = 196
239− | r <= 255 && g <= 135 && b <= 255 = 197
240− | r <= 255 && g <= 175 && b <= 0 = 198
241− | r <= 255 && g <= 175 && b <= 95 = 199
242− | r <= 255 && g <= 175 && b <= 135 = 200
243− | r <= 255 && g <= 175 && b <= 175 = 201
244− | r <= 255 && g <= 175 && b <= 215 = 202
245− | r <= 255 && g <= 175 && b <= 255 = 203
246− | r <= 255 && g <= 215 && b <= 0 = 204
247− | r <= 255 && g <= 215 && b <= 95 = 205
248− | r <= 255 && g <= 215 && b <= 135 = 206
249− | r <= 255 && g <= 215 && b <= 175 = 207
250− | r <= 255 && g <= 215 && b <= 215 = 208
251− | r <= 255 && g <= 215 && b <= 255 = 209
252− | r <= 255 && g <= 255 && b <= 0 = 210
253− | r <= 255 && g <= 255 && b <= 95 = 211
254− | r <= 255 && g <= 255 && b <= 135 = 212
255− | r <= 255 && g <= 255 && b <= 175 = 213
256− | r <= 255 && g <= 255 && b <= 215 = 214
257− | r <= 255 && g <= 255 && b <= 255 = 215
258− | otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
42+ | otherwise = 36 * go r + 6 * go g + go b
43+ where go = simpleColor_ (error (printf "RGB color %d %d %d does not map to 240 palette."
25944 (fromIntegral r :: Int)
26045 (fromIntegral g :: Int)
261− (fromIntegral b :: Int))
46+ (fromIntegral b :: Int)))
47+
48+simpleColor_ :: Integral i => Word8 -> i -> Word8
49+simpleColor_ e c
50+ | c <= 0 = 0
51+ | c <= 95 = 1
52+ | c <= 255 = fromIntegral ((c-16) `div` 40)
53+ | otherwise = e
26254
26355-- | Create a RGB triple from a value in the Color240 set.
26456color240CodeToRGB :: Word8 -> Maybe (Int, Int, Int)
src/Graphics/Vty/Image/Internal.hs+1−1
@@ -146,7 +146,7 @@ data Image =
146146
147147-- | pretty print just the structure of an image.
148148ppImageStructure :: Image -> String
149−ppImageStructure inImg = go 0 inImg
149+ppImageStructure = go 0
150150 where
151151 go indent img = tab indent ++ pp indent img
152152 tab indent = concat $ replicate indent " "
src/Graphics/Vty/Input/Loop.hs+1−1
@@ -137,7 +137,7 @@ readFromDevice = do
137137 threadWaitRead fd
138138 bytesRead <- fdReadBuf fd bufferPtr (fromIntegral maxBytes)
139139 if bytesRead > 0
140− then fmap (map $ chr . fromIntegral) $ peekArray (fromIntegral bytesRead) bufferPtr
140+ then map (chr . fromIntegral) <$> peekArray (fromIntegral bytesRead) bufferPtr
141141 else return []
142142 when (not $ null stringRep) $ logMsg $ "input bytes: " ++ show stringRep
143143 return stringRep
src/Graphics/Vty/PictureToSpans.hs+3−3
@@ -81,7 +81,7 @@ combinedOpsForLayers :: Picture -> DisplayRegion -> ST s (MRowOps s)
8181combinedOpsForLayers pic r
8282 | regionWidth r == 0 || regionHeight r == 0 = MVector.new 0
8383 | otherwise = do
84− layerOps <- mapM (`buildSpans` layer) (picLayers pic)
84+ layerOps <- mapM (`buildSpans` r) (picLayers pic)
8585 case layerOps of
8686 [] -> fail "empty picture"
8787 [ops] -> substituteSkips (picBackground pic) ops
@@ -136,8 +136,8 @@ mergeUnder upper lower = do
136136 return upper
137137
138138mergeRowUnder :: SpanOps -> SpanOps -> SpanOps
139−mergeRowUnder upperRowOps lowerRowOps =
140− onUpperOp Vector.empty (Vector.head upperRowOps) (Vector.tail upperRowOps) lowerRowOps
139+mergeRowUnder upperRowOps =
140+ onUpperOp Vector.empty (Vector.head upperRowOps) (Vector.tail upperRowOps)
141141 where
142142 -- H: it will never be the case that we are out of upper ops
143143 -- before lower ops.
src/Graphics/Vty/Span.hs+2−2
@@ -52,7 +52,7 @@ dropOps :: Int -> SpanOps -> SpanOps
5252dropOps w = snd . splitOpsAt w
5353
5454splitOpsAt :: Int -> SpanOps -> (SpanOps, SpanOps)
55−splitOpsAt inW inOps = splitOpsAt' inW inOps
55+splitOpsAt = splitOpsAt'
5656 where
5757 splitOpsAt' 0 ops = (Vector.empty, ops)
5858 splitOpsAt' remainingColumns ops = case Vector.head ops of
@@ -103,7 +103,7 @@ displayOpsColumns ops
103103
104104-- | The number of rows the DisplayOps are defined for.
105105displayOpsRows :: DisplayOps -> Int
106−displayOpsRows ops = Vector.length ops
106+displayOpsRows = Vector.length
107107
108108affectedRegion :: DisplayOps -> DisplayRegion
109109affectedRegion ops = (displayOpsColumns ops, displayOpsRows ops)
test/VerifyColor240.hsnew file+269
@@ -0,0 +1,269 @@
1+module VerifyColor240 where
2+
3+import Data.Word(Word8)
4+import Verify
5+
6+import Graphics.Vty.Attributes.Color240(rgbColorToColor240)
7+
8+oldRgbColorToColor240 :: Integral i => i -> i -> i -> Word8
9+oldRgbColorToColor240 r g b
10+ | r < 0 && g < 0 && b < 0 = error "rgbColor with negative color component intensity"
11+ | r == 8 && g == 8 && b == 8 = 216
12+ | r == 18 && g == 18 && b == 18 = 217
13+ | r == 28 && g == 28 && b == 28 = 218
14+ | r == 38 && g == 38 && b == 38 = 219
15+ | r == 48 && g == 48 && b == 48 = 220
16+ | r == 58 && g == 58 && b == 58 = 221
17+ | r == 68 && g == 68 && b == 68 = 222
18+ | r == 78 && g == 78 && b == 78 = 223
19+ | r == 88 && g == 88 && b == 88 = 224
20+ | r == 98 && g == 98 && b == 98 = 225
21+ | r == 108 && g == 108 && b == 108 = 226
22+ | r == 118 && g == 118 && b == 118 = 227
23+ | r == 128 && g == 128 && b == 128 = 228
24+ | r == 138 && g == 138 && b == 138 = 229
25+ | r == 148 && g == 148 && b == 148 = 230
26+ | r == 158 && g == 158 && b == 158 = 231
27+ | r == 168 && g == 168 && b == 168 = 232
28+ | r == 178 && g == 178 && b == 178 = 233
29+ | r == 188 && g == 188 && b == 188 = 234
30+ | r == 198 && g == 198 && b == 198 = 235
31+ | r == 208 && g == 208 && b == 208 = 236
32+ | r == 218 && g == 218 && b == 218 = 237
33+ | r == 228 && g == 228 && b == 228 = 238
34+ | r == 238 && g == 238 && b == 238 = 239
35+ | r <= 0 && g <= 0 && b <= 0 = 0
36+ | r <= 0 && g <= 0 && b <= 95 = 1
37+ | r <= 0 && g <= 0 && b <= 135 = 2
38+ | r <= 0 && g <= 0 && b <= 175 = 3
39+ | r <= 0 && g <= 0 && b <= 215 = 4
40+ | r <= 0 && g <= 0 && b <= 255 = 5
41+ | r <= 0 && g <= 95 && b <= 0 = 6
42+ | r <= 0 && g <= 95 && b <= 95 = 7
43+ | r <= 0 && g <= 95 && b <= 135 = 8
44+ | r <= 0 && g <= 95 && b <= 175 = 9
45+ | r <= 0 && g <= 95 && b <= 215 = 10
46+ | r <= 0 && g <= 95 && b <= 255 = 11
47+ | r <= 0 && g <= 135 && b <= 0 = 12
48+ | r <= 0 && g <= 135 && b <= 95 = 13
49+ | r <= 0 && g <= 135 && b <= 135 = 14
50+ | r <= 0 && g <= 135 && b <= 175 = 15
51+ | r <= 0 && g <= 135 && b <= 215 = 16
52+ | r <= 0 && g <= 135 && b <= 255 = 17
53+ | r <= 0 && g <= 175 && b <= 0 = 18
54+ | r <= 0 && g <= 175 && b <= 95 = 19
55+ | r <= 0 && g <= 175 && b <= 135 = 20
56+ | r <= 0 && g <= 175 && b <= 175 = 21
57+ | r <= 0 && g <= 175 && b <= 215 = 22
58+ | r <= 0 && g <= 175 && b <= 255 = 23
59+ | r <= 0 && g <= 215 && b <= 0 = 24
60+ | r <= 0 && g <= 215 && b <= 95 = 25
61+ | r <= 0 && g <= 215 && b <= 135 = 26
62+ | r <= 0 && g <= 215 && b <= 175 = 27
63+ | r <= 0 && g <= 215 && b <= 215 = 28
64+ | r <= 0 && g <= 215 && b <= 255 = 29
65+ | r <= 0 && g <= 255 && b <= 0 = 30
66+ | r <= 0 && g <= 255 && b <= 95 = 31
67+ | r <= 0 && g <= 255 && b <= 135 = 32
68+ | r <= 0 && g <= 255 && b <= 175 = 33
69+ | r <= 0 && g <= 255 && b <= 215 = 34
70+ | r <= 0 && g <= 255 && b <= 255 = 35
71+ | r <= 95 && g <= 0 && b <= 0 = 36
72+ | r <= 95 && g <= 0 && b <= 95 = 37
73+ | r <= 95 && g <= 0 && b <= 135 = 38
74+ | r <= 95 && g <= 0 && b <= 175 = 39
75+ | r <= 95 && g <= 0 && b <= 215 = 40
76+ | r <= 95 && g <= 0 && b <= 255 = 41
77+ | r <= 95 && g <= 95 && b <= 0 = 42
78+ | r <= 95 && g <= 95 && b <= 95 = 43
79+ | r <= 95 && g <= 95 && b <= 135 = 44
80+ | r <= 95 && g <= 95 && b <= 175 = 45
81+ | r <= 95 && g <= 95 && b <= 215 = 46
82+ | r <= 95 && g <= 95 && b <= 255 = 47
83+ | r <= 95 && g <= 135 && b <= 0 = 48
84+ | r <= 95 && g <= 135 && b <= 95 = 49
85+ | r <= 95 && g <= 135 && b <= 135 = 50
86+ | r <= 95 && g <= 135 && b <= 175 = 51
87+ | r <= 95 && g <= 135 && b <= 215 = 52
88+ | r <= 95 && g <= 135 && b <= 255 = 53
89+ | r <= 95 && g <= 175 && b <= 0 = 54
90+ | r <= 95 && g <= 175 && b <= 95 = 55
91+ | r <= 95 && g <= 175 && b <= 135 = 56
92+ | r <= 95 && g <= 175 && b <= 175 = 57
93+ | r <= 95 && g <= 175 && b <= 215 = 58
94+ | r <= 95 && g <= 175 && b <= 255 = 59
95+ | r <= 95 && g <= 215 && b <= 0 = 60
96+ | r <= 95 && g <= 215 && b <= 95 = 61
97+ | r <= 95 && g <= 215 && b <= 135 = 62
98+ | r <= 95 && g <= 215 && b <= 175 = 63
99+ | r <= 95 && g <= 215 && b <= 215 = 64
100+ | r <= 95 && g <= 215 && b <= 255 = 65
101+ | r <= 95 && g <= 255 && b <= 0 = 66
102+ | r <= 95 && g <= 255 && b <= 95 = 67
103+ | r <= 95 && g <= 255 && b <= 135 = 68
104+ | r <= 95 && g <= 255 && b <= 175 = 69
105+ | r <= 95 && g <= 255 && b <= 215 = 70
106+ | r <= 95 && g <= 255 && b <= 255 = 71
107+ | r <= 135 && g <= 0 && b <= 0 = 72
108+ | r <= 135 && g <= 0 && b <= 95 = 73
109+ | r <= 135 && g <= 0 && b <= 135 = 74
110+ | r <= 135 && g <= 0 && b <= 175 = 75
111+ | r <= 135 && g <= 0 && b <= 215 = 76
112+ | r <= 135 && g <= 0 && b <= 255 = 77
113+ | r <= 135 && g <= 95 && b <= 0 = 78
114+ | r <= 135 && g <= 95 && b <= 95 = 79
115+ | r <= 135 && g <= 95 && b <= 135 = 80
116+ | r <= 135 && g <= 95 && b <= 175 = 81
117+ | r <= 135 && g <= 95 && b <= 215 = 82
118+ | r <= 135 && g <= 95 && b <= 255 = 83
119+ | r <= 135 && g <= 135 && b <= 0 = 84
120+ | r <= 135 && g <= 135 && b <= 95 = 85
121+ | r <= 135 && g <= 135 && b <= 135 = 86
122+ | r <= 135 && g <= 135 && b <= 175 = 87
123+ | r <= 135 && g <= 135 && b <= 215 = 88
124+ | r <= 135 && g <= 135 && b <= 255 = 89
125+ | r <= 135 && g <= 175 && b <= 0 = 90
126+ | r <= 135 && g <= 175 && b <= 95 = 91
127+ | r <= 135 && g <= 175 && b <= 135 = 92
128+ | r <= 135 && g <= 175 && b <= 175 = 93
129+ | r <= 135 && g <= 175 && b <= 215 = 94
130+ | r <= 135 && g <= 175 && b <= 255 = 95
131+ | r <= 135 && g <= 215 && b <= 0 = 96
132+ | r <= 135 && g <= 215 && b <= 95 = 97
133+ | r <= 135 && g <= 215 && b <= 135 = 98
134+ | r <= 135 && g <= 215 && b <= 175 = 99
135+ | r <= 135 && g <= 215 && b <= 215 = 100
136+ | r <= 135 && g <= 215 && b <= 255 = 101
137+ | r <= 135 && g <= 255 && b <= 0 = 102
138+ | r <= 135 && g <= 255 && b <= 95 = 103
139+ | r <= 135 && g <= 255 && b <= 135 = 104
140+ | r <= 135 && g <= 255 && b <= 175 = 105
141+ | r <= 135 && g <= 255 && b <= 215 = 106
142+ | r <= 135 && g <= 255 && b <= 255 = 107
143+ | r <= 175 && g <= 0 && b <= 0 = 108
144+ | r <= 175 && g <= 0 && b <= 95 = 109
145+ | r <= 175 && g <= 0 && b <= 135 = 110
146+ | r <= 175 && g <= 0 && b <= 175 = 111
147+ | r <= 175 && g <= 0 && b <= 215 = 112
148+ | r <= 175 && g <= 0 && b <= 255 = 113
149+ | r <= 175 && g <= 95 && b <= 0 = 114
150+ | r <= 175 && g <= 95 && b <= 95 = 115
151+ | r <= 175 && g <= 95 && b <= 135 = 116
152+ | r <= 175 && g <= 95 && b <= 175 = 117
153+ | r <= 175 && g <= 95 && b <= 215 = 118
154+ | r <= 175 && g <= 95 && b <= 255 = 119
155+ | r <= 175 && g <= 135 && b <= 0 = 120
156+ | r <= 175 && g <= 135 && b <= 95 = 121
157+ | r <= 175 && g <= 135 && b <= 135 = 122
158+ | r <= 175 && g <= 135 && b <= 175 = 123
159+ | r <= 175 && g <= 135 && b <= 215 = 124
160+ | r <= 175 && g <= 135 && b <= 255 = 125
161+ | r <= 175 && g <= 175 && b <= 0 = 126
162+ | r <= 175 && g <= 175 && b <= 95 = 127
163+ | r <= 175 && g <= 175 && b <= 135 = 128
164+ | r <= 175 && g <= 175 && b <= 175 = 129
165+ | r <= 175 && g <= 175 && b <= 215 = 130
166+ | r <= 175 && g <= 175 && b <= 255 = 131
167+ | r <= 175 && g <= 215 && b <= 0 = 132
168+ | r <= 175 && g <= 215 && b <= 95 = 133
169+ | r <= 175 && g <= 215 && b <= 135 = 134
170+ | r <= 175 && g <= 215 && b <= 175 = 135
171+ | r <= 175 && g <= 215 && b <= 215 = 136
172+ | r <= 175 && g <= 215 && b <= 255 = 137
173+ | r <= 175 && g <= 255 && b <= 0 = 138
174+ | r <= 175 && g <= 255 && b <= 95 = 139
175+ | r <= 175 && g <= 255 && b <= 135 = 140
176+ | r <= 175 && g <= 255 && b <= 175 = 141
177+ | r <= 175 && g <= 255 && b <= 215 = 142
178+ | r <= 175 && g <= 255 && b <= 255 = 143
179+ | r <= 215 && g <= 0 && b <= 0 = 144
180+ | r <= 215 && g <= 0 && b <= 95 = 145
181+ | r <= 215 && g <= 0 && b <= 135 = 146
182+ | r <= 215 && g <= 0 && b <= 175 = 147
183+ | r <= 215 && g <= 0 && b <= 215 = 148
184+ | r <= 215 && g <= 0 && b <= 255 = 149
185+ | r <= 215 && g <= 95 && b <= 0 = 150
186+ | r <= 215 && g <= 95 && b <= 95 = 151
187+ | r <= 215 && g <= 95 && b <= 135 = 152
188+ | r <= 215 && g <= 95 && b <= 175 = 153
189+ | r <= 215 && g <= 95 && b <= 215 = 154
190+ | r <= 215 && g <= 95 && b <= 255 = 155
191+ | r <= 215 && g <= 135 && b <= 0 = 156
192+ | r <= 215 && g <= 135 && b <= 95 = 157
193+ | r <= 215 && g <= 135 && b <= 135 = 158
194+ | r <= 215 && g <= 135 && b <= 175 = 159
195+ | r <= 215 && g <= 135 && b <= 215 = 160
196+ | r <= 215 && g <= 135 && b <= 255 = 161
197+ | r <= 215 && g <= 175 && b <= 0 = 162
198+ | r <= 215 && g <= 175 && b <= 95 = 163
199+ | r <= 215 && g <= 175 && b <= 135 = 164
200+ | r <= 215 && g <= 175 && b <= 175 = 165
201+ | r <= 215 && g <= 175 && b <= 215 = 166
202+ | r <= 215 && g <= 175 && b <= 255 = 167
203+ | r <= 215 && g <= 215 && b <= 0 = 168
204+ | r <= 215 && g <= 215 && b <= 95 = 169
205+ | r <= 215 && g <= 215 && b <= 135 = 170
206+ | r <= 215 && g <= 215 && b <= 175 = 171
207+ | r <= 215 && g <= 215 && b <= 215 = 172
208+ | r <= 215 && g <= 215 && b <= 255 = 173
209+ | r <= 215 && g <= 255 && b <= 0 = 174
210+ | r <= 215 && g <= 255 && b <= 95 = 175
211+ | r <= 215 && g <= 255 && b <= 135 = 176
212+ | r <= 215 && g <= 255 && b <= 175 = 177
213+ | r <= 215 && g <= 255 && b <= 215 = 178
214+ | r <= 215 && g <= 255 && b <= 255 = 179
215+ | r <= 255 && g <= 0 && b <= 0 = 180
216+ | r <= 255 && g <= 0 && b <= 95 = 181
217+ | r <= 255 && g <= 0 && b <= 135 = 182
218+ | r <= 255 && g <= 0 && b <= 175 = 183
219+ | r <= 255 && g <= 0 && b <= 215 = 184
220+ | r <= 255 && g <= 0 && b <= 255 = 185
221+ | r <= 255 && g <= 95 && b <= 0 = 186
222+ | r <= 255 && g <= 95 && b <= 95 = 187
223+ | r <= 255 && g <= 95 && b <= 135 = 188
224+ | r <= 255 && g <= 95 && b <= 175 = 189
225+ | r <= 255 && g <= 95 && b <= 215 = 190
226+ | r <= 255 && g <= 95 && b <= 255 = 191
227+ | r <= 255 && g <= 135 && b <= 0 = 192
228+ | r <= 255 && g <= 135 && b <= 95 = 193
229+ | r <= 255 && g <= 135 && b <= 135 = 194
230+ | r <= 255 && g <= 135 && b <= 175 = 195
231+ | r <= 255 && g <= 135 && b <= 215 = 196
232+ | r <= 255 && g <= 135 && b <= 255 = 197
233+ | r <= 255 && g <= 175 && b <= 0 = 198
234+ | r <= 255 && g <= 175 && b <= 95 = 199
235+ | r <= 255 && g <= 175 && b <= 135 = 200
236+ | r <= 255 && g <= 175 && b <= 175 = 201
237+ | r <= 255 && g <= 175 && b <= 215 = 202
238+ | r <= 255 && g <= 175 && b <= 255 = 203
239+ | r <= 255 && g <= 215 && b <= 0 = 204
240+ | r <= 255 && g <= 215 && b <= 95 = 205
241+ | r <= 255 && g <= 215 && b <= 135 = 206
242+ | r <= 255 && g <= 215 && b <= 175 = 207
243+ | r <= 255 && g <= 215 && b <= 215 = 208
244+ | r <= 255 && g <= 215 && b <= 255 = 209
245+ | r <= 255 && g <= 255 && b <= 0 = 210
246+ | r <= 255 && g <= 255 && b <= 95 = 211
247+ | r <= 255 && g <= 255 && b <= 135 = 212
248+ | r <= 255 && g <= 255 && b <= 175 = 213
249+ | r <= 255 && g <= 255 && b <= 215 = 214
250+ | r <= 255 && g <= 255 && b <= 255 = 215
251+ | otherwise = error (printf "RGB color %d %d %d does not map to 240 palette."
252+ (fromIntegral r :: Int)
253+ (fromIntegral g :: Int)
254+ (fromIntegral b :: Int))
255+
256+sameColor :: Int -> Int -> Int -> Bool
257+sameColor r g b = oldRgbColorToColor240 r g b == rgbColorToColor240 r g b
258+
259+genVal :: Gen Int
260+genVal = chooseInt (0, 255)
261+
262+sameColorCheck :: Property
263+sameColorCheck = forAll genVal (\r -> forAll genVal (\g -> forAll genVal (sameColor r g)))
264+
265+tests :: IO [Test]
266+tests = return
267+ [ verify "check rgbColorToColor240 optimization is correct" sameColorCheck
268+ ]
269+
vty.cabal+43−16
@@ -69,6 +69,7 @@ library
6969 exposed-modules: Graphics.Vty
7070 Graphics.Vty.Attributes
7171 Graphics.Vty.Attributes.Color
72+ Graphics.Vty.Attributes.Color240
7273 Graphics.Vty.Config
7374 Graphics.Vty.Error
7475 Graphics.Vty.Image
@@ -104,8 +105,7 @@ library
104105 Graphics.Vty.UnicodeWidthTable.Query
105106 Graphics.Vty.UnicodeWidthTable.Install
106107
107− other-modules: Graphics.Vty.Attributes.Color240
108− Graphics.Vty.Debug.Image
108+ other-modules: Graphics.Vty.Debug.Image
109109 Graphics.Vty.Input.Terminfo.ANSIVT
110110
111111 c-sources: cbits/gwinsz.c
@@ -189,7 +189,7 @@ test-suite verify-using-mock-terminal
189189 build-depends: vty,
190190 Cabal >= 1.20,
191191 QuickCheck >= 2.7,
192− random >= 1.0 && < 1.2,
192+ random >= 1.0 && < 1.3,
193193 base >= 4.8 && < 5,
194194 bytestring,
195195 containers,
@@ -222,7 +222,7 @@ test-suite verify-terminal
222222 build-depends: vty,
223223 Cabal >= 1.20,
224224 QuickCheck >= 2.7,
225− random >= 1.0 && < 1.2,
225+ random >= 1.0 && < 1.3,
226226 base >= 4.8 && < 5,
227227 bytestring,
228228 containers,
@@ -255,7 +255,7 @@ test-suite verify-display-attributes
255255 build-depends: vty,
256256 Cabal >= 1.20,
257257 QuickCheck >= 2.7,
258− random >= 1.0 && < 1.2,
258+ random >= 1.0 && < 1.3,
259259 base >= 4.8 && < 5,
260260 bytestring,
261261 containers,
@@ -281,7 +281,7 @@ test-suite verify-empty-image-props
281281 build-depends: vty,
282282 Cabal >= 1.20,
283283 QuickCheck >= 2.7,
284− random >= 1.0 && < 1.2,
284+ random >= 1.0 && < 1.3,
285285 base >= 4.8 && < 5,
286286 bytestring,
287287 containers,
@@ -308,7 +308,7 @@ test-suite verify-eval-terminfo-caps
308308 build-depends: vty,
309309 Cabal >= 1.20,
310310 QuickCheck >= 2.7,
311− random >= 1.0 && < 1.2,
311+ random >= 1.0 && < 1.3,
312312 base >= 4.8 && < 5,
313313 blaze-builder >= 0.3.3.2 && < 0.5,
314314 bytestring,
@@ -338,7 +338,7 @@ test-suite verify-image-ops
338338 build-depends: vty,
339339 Cabal >= 1.20,
340340 QuickCheck >= 2.7,
341− random >= 1.0 && < 1.2,
341+ random >= 1.0 && < 1.3,
342342 base >= 4.8 && < 5,
343343 bytestring,
344344 containers,
@@ -366,7 +366,7 @@ test-suite verify-image-trans
366366 build-depends: vty,
367367 Cabal >= 1.20,
368368 QuickCheck >= 2.7,
369− random >= 1.0 && < 1.2,
369+ random >= 1.0 && < 1.3,
370370 base >= 4.8 && < 5,
371371 bytestring,
372372 containers,
@@ -393,7 +393,7 @@ test-suite verify-inline
393393 build-depends: vty,
394394 Cabal >= 1.20,
395395 QuickCheck >= 2.7,
396− random >= 1.0 && < 1.2,
396+ random >= 1.0 && < 1.3,
397397 base >= 4.8 && < 5,
398398 bytestring,
399399 containers,
@@ -421,7 +421,7 @@ test-suite verify-parse-terminfo-caps
421421 build-depends: vty,
422422 Cabal >= 1.20,
423423 QuickCheck >= 2.7,
424− random >= 1.0 && < 1.2,
424+ random >= 1.0 && < 1.3,
425425 base >= 4.8 && < 5,
426426 bytestring,
427427 containers,
@@ -453,7 +453,7 @@ test-suite verify-simple-span-generation
453453 build-depends: vty,
454454 Cabal >= 1.20,
455455 QuickCheck >= 2.7,
456− random >= 1.0 && < 1.2,
456+ random >= 1.0 && < 1.3,
457457 base >= 4.8 && < 5,
458458 bytestring,
459459 containers,
@@ -485,7 +485,7 @@ test-suite verify-crop-span-generation
485485 build-depends: vty,
486486 Cabal >= 1.20,
487487 QuickCheck >= 2.7,
488− random >= 1.0 && < 1.2,
488+ random >= 1.0 && < 1.3,
489489 base >= 4.8 && < 5,
490490 bytestring,
491491 containers,
@@ -514,6 +514,32 @@ test-suite verify-layers-span-generation
514514 Verify.Graphics.Vty.Image
515515 Verify.Graphics.Vty.Span
516516
517+ build-depends: vty,
518+ Cabal >= 1.20,
519+ QuickCheck >= 2.7,
520+ random >= 1.0 && < 1.3,
521+ base >= 4.8 && < 5,
522+ bytestring,
523+ containers,
524+ deepseq >= 1.1 && < 1.5,
525+ mtl >= 1.1.1.0 && < 2.3,
526+ text >= 0.11.3,
527+ unix,
528+ utf8-string >= 0.3 && < 1.1,
529+ vector >= 0.7
530+
531+test-suite verify-color-mapping
532+ default-language: Haskell2010
533+ default-extensions: ScopedTypeVariables
534+
535+ type: detailed-0.9
536+
537+ hs-source-dirs: test
538+
539+ test-module: VerifyColor240
540+
541+ other-modules: Verify
542+
517543 build-depends: vty,
518544 Cabal >= 1.20,
519545 QuickCheck >= 2.7,
@@ -528,6 +554,7 @@ test-suite verify-layers-span-generation
528554 utf8-string >= 0.3 && < 1.1,
529555 vector >= 0.7
530556
557+
531558test-suite verify-utf8-width
532559 default-language: Haskell2010
533560 default-extensions: ScopedTypeVariables
@@ -543,7 +570,7 @@ test-suite verify-utf8-width
543570 build-depends: vty,
544571 Cabal >= 1.20,
545572 QuickCheck >= 2.7,
546− random >= 1.0 && < 1.2,
573+ random >= 1.0 && < 1.3,
547574 base >= 4.8 && < 5,
548575 bytestring,
549576 containers,
@@ -571,7 +598,7 @@ test-suite verify-using-mock-input
571598 quickcheck-assertions >= 0.1.1,
572599 test-framework == 0.8.*,
573600 test-framework-smallcheck == 0.2.*,
574− random >= 1.0 && < 1.2,
601+ random >= 1.0 && < 1.3,
575602 base >= 4.8 && < 5,
576603 bytestring,
577604 containers,
@@ -607,7 +634,7 @@ test-suite verify-config
607634 test-framework == 0.8.*,
608635 test-framework-smallcheck == 0.2.*,
609636 test-framework-hunit,
610− random >= 1.0 && < 1.2,
637+ random >= 1.0 && < 1.3,
611638 base >= 4.8 && < 5,
612639 bytestring,
613640 containers,