Module: Dopairb::Font

Defined in:
lib/dopairb/font.rb

Overview

5-row bitmap font for the big banners.

Constant Summary collapse

HEIGHT =
5
RAW =
{
  "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" => [" ### ", "#   #", " ####", "    #", " ### "],
  "!" => ["#", "#", "#", " ", "#"],
  "?" => ["### ", "   #", " ## ", "    ", " #  "],
  "." => [" ", " ", " ", " ", "#"],
  "," => ["  ", "  ", "  ", " #", "# "],
  ":" => [" ", "#", " ", "#", " "],
  "'" => ["#", "#", " ", " ", " "],
  "+" => ["     ", "  #  ", "#####", "  #  ", "     "],
  "-" => ["    ", "    ", "####", "    ", "    "],
  "=" => ["    ", "####", "    ", "####", "    "],
  "x" => ["   ", "# #", " # ", "# #", "   "],
  "/" => ["    #", "   # ", "  #  ", " #   ", "#    "],
  ">" => ["#   ", " #  ", "  # ", " #  ", "#   "],
  "<" => ["   #", "  # ", " #  ", "  # ", "   #"],
  "^" => [" # ", "# #", "   ", "   ", "   "],
  "#" => [" # # ", "#####", " # # ", "#####", " # # "],
  "%" => ["#   #", "   # ", "  #  ", " #   ", "#   #"],
  "*" => ["     ", "# # #", " ### ", "# # #", "     "],
  " " => [" ", " ", " ", " ", " "],
}.freeze
GLYPHS =
RAW.transform_values { |rows| rows.map { |r| r.chars.map { |c| c == "#" } }.freeze }.freeze

Class Method Summary collapse

Class Method Details

.bitmap(text, spacing: 1) ⇒ Object

=> array of HEIGHT rows, each an array of booleans



74
75
76
77
78
79
80
81
82
83
84
# File 'lib/dopairb/font.rb', line 74

def bitmap(text, spacing: 1)
  rows = Array.new(HEIGHT) { [] }
  text.each_char.with_index do |ch, i|
    g = glyph(ch)
    HEIGHT.times do |y|
      rows[y].concat([false] * spacing) if i > 0
      rows[y].concat(g[y])
    end
  end
  rows
end

.glyph(ch) ⇒ Object



69
70
71
# File 'lib/dopairb/font.rb', line 69

def glyph(ch)
  GLYPHS[ch] || GLYPHS[ch.upcase] || GLYPHS["?"]
end

.width(text, scale: 1, spacing: 1) ⇒ Object



86
87
88
89
# File 'lib/dopairb/font.rb', line 86

def width(text, scale: 1, spacing: 1)
  return 0 if text.empty?
  (text.each_char.sum { |c| glyph(c)[0].size } + spacing * (text.size - 1)) * scale
end