module Termtab.Graphics.KittyPlacement (
placeholderChar,
rowColumnDiacritics,
placeholderRows,
foregroundIdSGR,
) where
import Data.Bits (shiftR, (.&.))
placeholderChar :: Char
placeholderChar :: Char
placeholderChar = Char
'\x10EEEE'
rowColumnDiacritics :: [Char]
rowColumnDiacritics :: String
rowColumnDiacritics =
(Int -> Char) -> [Int] -> String
forall a b. (a -> b) -> [a] -> [b]
map
Int -> Char
forall a. Enum a => Int -> a
toEnum
[ Int
0x0305
, Int
0x030D
, Int
0x030E
, Int
0x0310
, Int
0x0312
, Int
0x033D
, Int
0x033E
, Int
0x033F
, Int
0x0346
, Int
0x034A
, Int
0x034B
, Int
0x034C
, Int
0x0350
, Int
0x0351
, Int
0x0352
, Int
0x0357
, Int
0x035B
, Int
0x0363
, Int
0x0364
, Int
0x0365
, Int
0x0366
, Int
0x0367
, Int
0x0368
, Int
0x0369
, Int
0x036A
, Int
0x036B
, Int
0x036C
, Int
0x036D
, Int
0x036E
, Int
0x036F
, Int
0x0483
, Int
0x0484
]
diacritic :: Int -> Char
diacritic :: Int -> Char
diacritic Int
n = String
rowColumnDiacritics String -> Int -> Char
forall a. HasCallStack => [a] -> Int -> a
!! Int
n
placeholderRows :: Int -> Int -> [String]
placeholderRows :: Int -> Int -> [String]
placeholderRows Int
cols Int
rows =
[Int -> String
placeholderRow Int
r | Int
r <- [Int
0 .. Int
rows Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1]]
where
placeholderRow :: Int -> String
placeholderRow Int
r =
[Char
placeholderChar, Int -> Char
diacritic Int
r, Int -> Char
diacritic Int
0]
String -> String -> String
forall a. [a] -> [a] -> [a]
++ Int -> Char -> String
forall a. Int -> a -> [a]
replicate (Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
0 (Int
cols Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)) Char
placeholderChar
foregroundIdSGR :: Int -> String
foregroundIdSGR :: Int -> String
foregroundIdSGR Int
i =
let r :: Int
r = (Int
i Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR` Int
16) Int -> Int -> Int
forall a. Bits a => a -> a -> a
.&. Int
0xFF
g :: Int
g = (Int
i Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR` Int
8) Int -> Int -> Int
forall a. Bits a => a -> a -> a
.&. Int
0xFF
b :: Int
b = Int
i Int -> Int -> Int
forall a. Bits a => a -> a -> a
.&. Int
0xFF
in String
"\ESC[38;2;" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
r String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
";" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
g String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
";" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Int -> String
forall a. Show a => a -> String
show Int
b String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"m"