///|
/// 内置 5×7 点阵字体字形表。
///
/// 每个字符用 7 个字节表示 7 行,每字节低 5 位表示该行 5 个像素
/// (位 4 为最左像素,位 0 为最右像素)。支持子集:A-Z、0-9、
/// 空格以及常用符号 `. - : _ / + @ % #`;不支持字符返回 `None`(渲染为空白)。
fn glyph(c : Char) -> Array[Byte]? {
  match c {
    'A' => Some([b'\x0E', b'\x11', b'\x11', b'\x1F', b'\x11', b'\x11', b'\x11'])
    'B' => Some([b'\x1E', b'\x11', b'\x11', b'\x1E', b'\x11', b'\x11', b'\x1E'])
    'C' => Some([b'\x0E', b'\x11', b'\x10', b'\x10', b'\x10', b'\x11', b'\x0E'])
    'D' => Some([b'\x1C', b'\x12', b'\x11', b'\x11', b'\x11', b'\x12', b'\x1C'])
    'E' => Some([b'\x1F', b'\x10', b'\x10', b'\x1E', b'\x10', b'\x10', b'\x1F'])
    'F' => Some([b'\x1F', b'\x10', b'\x10', b'\x1E', b'\x10', b'\x10', b'\x10'])
    'G' => Some([b'\x0E', b'\x11', b'\x10', b'\x17', b'\x11', b'\x11', b'\x0F'])
    'H' => Some([b'\x11', b'\x11', b'\x11', b'\x1F', b'\x11', b'\x11', b'\x11'])
    'I' => Some([b'\x0E', b'\x04', b'\x04', b'\x04', b'\x04', b'\x04', b'\x0E'])
    'J' => Some([b'\x07', b'\x02', b'\x02', b'\x02', b'\x02', b'\x12', b'\x0C'])
    'K' => Some([b'\x11', b'\x12', b'\x14', b'\x18', b'\x14', b'\x12', b'\x11'])
    'L' => Some([b'\x10', b'\x10', b'\x10', b'\x10', b'\x10', b'\x10', b'\x1F'])
    'M' => Some([b'\x11', b'\x1B', b'\x15', b'\x15', b'\x11', b'\x11', b'\x11'])
    'N' => Some([b'\x11', b'\x19', b'\x15', b'\x13', b'\x11', b'\x11', b'\x11'])
    'O' => Some([b'\x0E', b'\x11', b'\x11', b'\x11', b'\x11', b'\x11', b'\x0E'])
    'P' => Some([b'\x1E', b'\x11', b'\x11', b'\x1E', b'\x10', b'\x10', b'\x10'])
    'Q' => Some([b'\x0E', b'\x11', b'\x11', b'\x11', b'\x15', b'\x12', b'\x0D'])
    'R' => Some([b'\x1E', b'\x11', b'\x11', b'\x1E', b'\x14', b'\x12', b'\x11'])
    'S' => Some([b'\x0F', b'\x10', b'\x10', b'\x0E', b'\x01', b'\x01', b'\x1E'])
    'T' => Some([b'\x1F', b'\x04', b'\x04', b'\x04', b'\x04', b'\x04', b'\x04'])
    'U' => Some([b'\x11', b'\x11', b'\x11', b'\x11', b'\x11', b'\x11', b'\x0E'])
    'V' => Some([b'\x11', b'\x11', b'\x11', b'\x11', b'\x11', b'\x0A', b'\x04'])
    'W' => Some([b'\x11', b'\x11', b'\x11', b'\x15', b'\x15', b'\x1B', b'\x11'])
    'X' => Some([b'\x11', b'\x11', b'\x0A', b'\x04', b'\x0A', b'\x11', b'\x11'])
    'Y' => Some([b'\x11', b'\x11', b'\x0A', b'\x04', b'\x04', b'\x04', b'\x04'])
    'Z' => Some([b'\x1F', b'\x01', b'\x02', b'\x04', b'\x08', b'\x10', b'\x1F'])
    '0' => Some([b'\x0E', b'\x11', b'\x13', b'\x15', b'\x19', b'\x11', b'\x0E'])
    '1' => Some([b'\x04', b'\x0C', b'\x04', b'\x04', b'\x04', b'\x04', b'\x0E'])
    '2' => Some([b'\x0E', b'\x11', b'\x01', b'\x02', b'\x04', b'\x08', b'\x1F'])
    '3' => Some([b'\x1E', b'\x01', b'\x01', b'\x0E', b'\x01', b'\x01', b'\x1E'])
    '4' => Some([b'\x02', b'\x06', b'\x0A', b'\x12', b'\x1F', b'\x02', b'\x02'])
    '5' => Some([b'\x1F', b'\x10', b'\x10', b'\x1E', b'\x01', b'\x01', b'\x1E'])
    '6' => Some([b'\x0E', b'\x10', b'\x10', b'\x1E', b'\x11', b'\x11', b'\x0E'])
    '7' => Some([b'\x1F', b'\x01', b'\x02', b'\x04', b'\x08', b'\x08', b'\x08'])
    '8' => Some([b'\x0E', b'\x11', b'\x11', b'\x0E', b'\x11', b'\x11', b'\x0E'])
    '9' => Some([b'\x0E', b'\x11', b'\x11', b'\x0F', b'\x01', b'\x01', b'\x0E'])
    ' ' => Some([b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00'])
    '.' => Some([b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x04'])
    '-' => Some([b'\x00', b'\x00', b'\x00', b'\x1F', b'\x00', b'\x00', b'\x00'])
    ':' => Some([b'\x00', b'\x04', b'\x04', b'\x00', b'\x04', b'\x04', b'\x00'])
    '_' => Some([b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x1F'])
    '/' => Some([b'\x01', b'\x02', b'\x02', b'\x04', b'\x08', b'\x08', b'\x10'])
    '+' => Some([b'\x00', b'\x04', b'\x04', b'\x1F', b'\x04', b'\x04', b'\x00'])
    '@' => Some([b'\x0E', b'\x11', b'\x17', b'\x15', b'\x17', b'\x10', b'\x0E'])
    '%' => Some([b'\x19', b'\x1A', b'\x02', b'\x04', b'\x08', b'\x0B', b'\x13'])
    '#' => Some([b'\x0A', b'\x0A', b'\x1F', b'\x0A', b'\x1F', b'\x0A', b'\x0A'])
    _ => None
  }
}