packages feed

terminal-3d-graphics-0.2.0.0: src/Terminal3D/BigText.hs

module Terminal3D.BigText where

import Data.Char

-- | Given a screen resolution in pixels, this will return an appropriate text size to use
getTextSize :: (Int, Int) -> Int
getTextSize (w, _) = quot w 1000

-- | Print big text at a given scale.
printBig :: Int -> String -> IO ()
printBig 0 msg = putStrLn msg
printBig scale msg = mapM_ putStrLn rows
  where
    chars      = map (glyph . toUpper) msg
    rows       = concatMap expandRow [0..6]
    expandRow r = replicate scale $ concatMap (\g -> expandCol (g !! r) ++ replicate scale ' ') chars
    expandCol = concatMap (replicate (scale * 2))

-- | Glyphs are 5 wide x 7 tall for better letter clarity.
glyph :: Char -> [String]
glyph c = case c of
  'A' -> ["  ▒  ",
          " ▒█▒ ",
          "▒█ █▒",
          "█████",
          "█░ ░█",
          "█   █",
          "▀   ▀"]

  'B' -> ["████ ",
          "█░ ░█",
          "█░ ░█",
          "████ ",
          "█░ ░█",
          "█░ ░█",
          "████ "]

  'C' -> [" ▒███",
          "▒█░  ",
          "█░   ",
          "█    ",
          "█░   ",
          "▒█░  ",
          " ▒███"]

  'D' -> ["████ ",
          "█░ ░█",
          "█   █",
          "█   █",
          "█   █",
          "█░ ░█",
          "████ "]

  'E' -> ["█████",
          "█░   ",
          "█░   ",
          "████ ",
          "█░   ",
          "█░   ",
          "█████"]

  'F' -> ["█████",
          "█░   ",
          "█░   ",
          "████ ",
          "█░   ",
          "█░   ",
          "█    "]

  'G' -> [" ▒███",
          "▒█░  ",
          "█░   ",
          "█  ██",
          "█  ░█",
          "▒█░░█",
          " ▒███"]

  'H' -> ["█   █",
          "█   █",
          "█   █",
          "█████",
          "█   █",
          "█   █",
          "█   █"]

  'I' -> ["█████",
          "  █  ",
          "  █  ",
          "  █  ",
          "  █  ",
          "  █  ",
          "█████"]

  'J' -> ["  ███",
          "   █ ",
          "   █ ",
          "   █ ",
          "█  █ ",
          "█ ░█ ",
          " ███ "]

  'K' -> ["█   █",
          "█  ▒█",
          "█ ▒█ ",
          "███  ",
          "█ ▒█ ",
          "█  ▒█",
          "█   █"]

  'L' -> ["█    ",
          "█    ",
          "█    ",
          "█    ",
          "█    ",
          "█░   ",
          "█████"]

  'M' -> ["█   █",
          "██ ██",
          "█▒█▒█",
          "█ █ █",
          "█   █",
          "█   █",
          "█   █"]

  'N' -> ["█   █",
          "██  █",
          "█▒  █",
          "█ █ █",
          "█  ▒█",
          "█  ██",
          "█   █"]

  'O' -> [" ███ ",
          "▒█ █▒",
          "█   █",
          "█   █",
          "█   █",
          "▒█ █▒",
          " ███ "]

  'P' -> ["████ ",
          "█░ ░█",
          "█░ ░█",
          "████ ",
          "█    ",
          "█    ",
          "█    "]

  'Q' -> [" ███ ",
          "▒█ █▒",
          "█   █",
          "█   █",
          "█ █ █",
          "▒█ ██",
          " ████"]

  'R' -> ["████ ",
          "█░ ░█",
          "█░ ░█",
          "████ ",
          "█ ▒  ",
          "█  ▒ ",
          "█   █"]

  'S' -> [" ████",
          "▒█   ",
          "▒█   ",
          " ███ ",
          "   █▒",
          "   █▒",
          "████ "]

  'T' -> ["█████",
          " ░█░ ",
          "  █  ",
          "  █  ",
          "  █  ",
          "  █  ",
          "  █  "]

  'U' -> ["█   █",
          "█   █",
          "█   █",
          "█   █",
          "█   █",
          "▒█ █▒",
          " ███ "]

  'V' -> ["█   █",
          "█   █",
          "█   █",
          "▒█ █▒",
          " █ █ ",
          " ▒█▒ ",
          "  █  "]

  'W' -> ["█   █",
          "█   █",
          "█   █",
          "█ █ █",
          "█▒█▒█",
          "██ ██",
          "█   █"]

  'X' -> ["█   █",
          " ▒ ▒ ",
          " ▒█▒ ",
          "  █  ",
          " ▒█▒ ",
          " ▒ ▒ ",
          "█   █"]

  'Y' -> ["█   █",
          " ▒ ▒ ",
          " ▒█▒ ",
          "  █  ",
          "  █  ",
          "  █  ",
          "  █  "]

  'Z' -> ["█████",
          "   ▒█",
          "  ▒█ ",
          " ░█░ ",
          " █▒  ",
          "█▒   ",
          "█████"]

  '0' -> [" ███ ",
          "▒█ █▒",
          "█  ██",
          "█ █ █",
          "██  █",
          "▒█ █▒",
          " ███ "]

  '1' -> ["  █  ",
          " ██  ",
          "░ █  ",
          "  █  ",
          "  █  ",
          "  █  ",
          "█████"]

  '2' -> [" ███ ",
          "▒█ █▒",
          "   ▒█",
          "  ██ ",
          " █▒  ",
          "▒█   ",
          "█████"]

  '3' -> ["████ ",
          "   ░█",
          "   ░█",
          " ███ ",
          "   ░█",
          "   ░█",
          "████ "]

  '4' -> ["█  █ ",
          "█  █ ",
          "█  █ ",
          "█████",
          "   █ ",
          "   █ ",
          "   █ "]

  '5' -> ["█████",
          "█░   ",
          "█░   ",
          "████ ",
          "   ░█",
          "   ░█",
          "████ "]

  '6' -> [" ███ ",
          "▒█   ",
          "█░   ",
          "████ ",
          "█   █",
          "▒█ █▒",
          " ███ "]

  '7' -> ["█████",
          "   ░█",
          "  ░█ ",
          "  █  ",
          " █░  ",
          " █   ",
          " █   "]

  '8' -> [" ███ ",
          "▒█ █▒",
          "▒█ █▒",
          " ███ ",
          "▒█ █▒",
          "▒█ █▒",
          " ███ "]

  '9' -> [" ███ ",
          "▒█ █▒",
          "█   █",
          " ████",
          "   ░█",
          "  ░█▒",
          " ███ "]

  ' ' -> ["     ",
          "     ",
          "     ",
          "     ",
          "     ",
          "     ",
          "     "]

  '!' -> ["  █  ",
          "  █  ",
          "  █  ",
          "  ▒  ",
          "     ",
          "  ░  ",
          "  █  "]

  '?' -> [" ███ ",
          "▒█ █▒",
          "   ░█",
          "  ▒█ ",
          "  █  ",
          "     ",
          "  █  "]

  '.' -> ["     ",
          "     ",
          "     ",
          "     ",
          "     ",
          "     ",
          "  █  "]

  ',' -> ["     ",
          "     ",
          "     ",
          "     ",
          "     ",
          "  ▒  ",
          " ▒   "]
  '-' -> ["     ",
          "     ",
          "     ",
          "█████",
          "     ",
          "     ",
          "     "]
  ':' -> ["     ",
          "  █  ",
          "  ▒  ",
          "     ",
          "  ▒  ",
          "  █  ",
          "     "]
  '/' -> ["    █",
          "   ▒█",
          "   █ ",
          "  █░ ",
          " █   ",
          "█▒   ",
          "█    "]
  _   -> ["█████",
          "█   █",
          "█ ? █",
          "█   █",
          "█████",
          "     ",
          "     "]