diff options
Diffstat (limited to 'app/Pretty.hs')
| -rw-r--r-- | app/Pretty.hs | 85 |
1 files changed, 44 insertions, 41 deletions
diff --git a/app/Pretty.hs b/app/Pretty.hs index 8101fb7..b55cf8a 100644 --- a/app/Pretty.hs +++ b/app/Pretty.hs @@ -16,8 +16,10 @@ module Pretty where import Control.DeepSeq +import Data.List.Split import GHC.Generics (Generic) import Pretty.Color +import Text.Printf data Doc = Col [Doc] @@ -57,54 +59,55 @@ diagram :: Int -> a -> Diagram a diagram = Diagram instance Pretty (Diagram [Float]) where - pretty (Diagram ((2 *) -> n) (take n -> xs)) = Col (map chart (discretize xs')) + pretty (Diagram n (take n -> xs)) = + Col (map (\c -> colorize c (Lit Nothing (plot c))) (mapFirst tail (chunksOf 2 (map discretize (0 : xs'))))) where xs' = replicate (n - length xs) 0 ++ xs - chart :: (Int, Int) -> Doc - chart n = colorize n (pretty (chart' n)) - - chart' (0, 0) = '⠀' - chart' (0, 1) = '⢀' - chart' (0, 2) = '⢠' - chart' (0, 3) = '⢰' - chart' (0, 4) = '⢸' - chart' (1, 0) = '⡀' - chart' (1, 1) = '⣀' - chart' (1, 2) = '⣠' - chart' (1, 3) = '⣰' - chart' (1, 4) = '⣸' - chart' (2, 0) = '⡄' - chart' (2, 1) = '⣄' - chart' (2, 2) = '⣤' - chart' (2, 3) = '⣴' - chart' (2, 4) = '⣼' - chart' (3, 0) = '⡆' - chart' (3, 1) = '⣆' - chart' (3, 2) = '⣦' - chart' (3, 3) = '⣶' - chart' (3, 4) = '⣾' - chart' (4, 0) = '⡇' - chart' (4, 1) = '⣇' - chart' (4, 2) = '⣧' - chart' (4, 3) = '⣷' - chart' (4, 4) = '⣿' - chart' x = error (show x) - - colorize (n, m) = colorize' (max n m) - - colorize' 0 = colorDull Green + mapFirst f (x : xs) = f x : xs + + plot [n, m] = chart (max 1 n, max 1 m) + plot [m] = chart (0, max 1 m) + + colorize [n, m] = colorize' (max n m) + colorize [m] = colorize' m + + colorize' 0 = color Black colorize' 1 = color Green colorize' 2 = colorDull Yellow colorize' 3 = color Yellow colorize' 4 = color Red - colorize' x = error (show x) - - discretize :: [Float] -> [(Int, Int)] - discretize [] = [] - discretize (_ : []) = [] - discretize (x1 : x2 : xs) = - (round (x1 * 4), round (x2 * 4)) : discretize xs + colorize' x = error (printf "Pretty.pretty.colorize': %d" x) + + chart (0, 0) = " " + chart (0, 1) = "⢀" + chart (0, 2) = "⢠" + chart (0, 3) = "⢰" + chart (0, 4) = "⢸" + chart (1, 0) = "⡀" + chart (1, 1) = "⣀" + chart (1, 2) = "⣠" + chart (1, 3) = "⣰" + chart (1, 4) = "⣸" + chart (2, 0) = "⡄" + chart (2, 1) = "⣄" + chart (2, 2) = "⣤" + chart (2, 3) = "⣴" + chart (2, 4) = "⣼" + chart (3, 0) = "⡆" + chart (3, 1) = "⣆" + chart (3, 2) = "⣦" + chart (3, 3) = "⣶" + chart (3, 4) = "⣾" + chart (4, 0) = "⡇" + chart (4, 1) = "⣇" + chart (4, 2) = "⣧" + chart (4, 3) = "⣷" + chart (4, 4) = "⣿" + chart x = error (printf "Pretty.pretty.chart: %x" (show x)) + + discretize :: Float -> Int + discretize x = round (x * 4) color :: Color -> Doc -> Doc color c = color' (Vivid, c) |
