#include "font.hpp"


void Font::get_glyph_max(unsigned& w, unsigned& h) const {
    w = max_w;
    h = max_h;
}


void Font::get_glyph(char c, const unsigned char*& buf, unsigned& w, unsigned& h) const {
    const font_char_t& font_char = font[toupper(c)];
    h = max_h;
    w = font_char.w;
    assert(w <= max_w);
    buf = font_char.buf;
}


Font::Font() { // TODO: load from file(s)
    static const unsigned char X = 255;
    static const font_char_t dummy = { 5, { X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X } }; // dummy char with max dimensions
    for (int i=0; i<256; ++i) {
        font[i] = dummy;
    }

    font[' '] = (font_char_t){ 2, { 0 } };
    font['-'] = (font_char_t){ 2, { 0, 0, 0, 0, X, X, 0 } };
    font['('] = (font_char_t){ 2, {
        0, X,
        X, 0,
        X, 0,
        X, 0,
        0, X,
    }};
    font[')'] = (font_char_t){ 2, {
        X, 0,
        0, X,
        0, X,
        0, X,
        X, 0,
    }};
    font['>'] = (font_char_t){ 3, {
        X, 0, 0,
        0, X, 0,
        0, 0, X,
        0, X, 0,
        X, 0, 0,
    }};
    font['@'] = (font_char_t){ 5, {
        X, X, X, X, X,
        X, 0, X, 0, X,
        X, 0, X, X, X,
        X, 0, 0, 0, 0,
        X, X, X, X, X,
    }};
    font['#'] = (font_char_t){ 5, {
        0, X, 0, X, 0,
        X, X, X, X, X,
        0, X, 0, X, 0,
        X, X, X, X, X,
        0, X, 0, X, 0,
    }};
    font[0xb0] = (font_char_t){ 3, { // '°'
        0, X, 0,
        X, 0, X,
        0, X, 0,
        0, 0, 0,
        0, 0, 0,
    }};
    font['A'] = (font_char_t){ 4, {
        X, X, X, X,
        X, 0, 0, X,
        X, X, X, X,
        X, 0, 0, X,
        X, 0, 0, X,
    }};
    font['B'] = (font_char_t){ 4, {
        X, X, X, 0,
        X, 0, 0, X,
        X, X, X, 0,
        X, 0, 0, X,
        X, X, X, 0,
    }};
    font['C'] = (font_char_t){ 4, {
        X, X, X, X,
        X, 0, 0, 0,
        X, 0, 0, 0,
        X, 0, 0, 0,
        X, X, X, X,
    }};
    font['0'] = (font_char_t){ 3, {
        0, X, 0,
        X, 0, X,
        X, 0, X,
        X, 0, X,
        0, X, 0,
    }};
    font['1'] = (font_char_t){ 2, {
        0, X,
        X, X,
        0, X,
        0, X,
        0, X,
    }};
    font['2'] = (font_char_t){ 3, {
        X, X, X,
        0, 0, X,
        X, X, X,
        X, 0, 0,
        X, X, X,
    }};
    font['3'] = (font_char_t){ 3, {
        X, X, X,
        0, 0, X,
        X, X, X,
        0, 0, X,
        X, X, X,
    }};
    font['4'] = (font_char_t){ 3, {
        X, 0, X,
        X, 0, X,
        X, X, X,
        0, 0, X,
        0, 0, X,
    }};
    font['5'] = (font_char_t){ 3, {
        X, X, X,
        X, 0, 0,
        X, X, X,
        0, 0, X,
        X, X, X,
    }};
    font['6'] = (font_char_t){ 3, {
        X, X, X,
        X, 0, 0,
        X, X, X,
        X, 0, X,
        X, X, X,
    }};
    font['7'] = (font_char_t){ 3, {
        X, X, X,
        0, 0, X,
        0, 0, X,
        0, 0, X,
        0, 0, X,
    }};
    font['8'] = (font_char_t){ 3, {
        X, X, X,
        X, 0, X,
        X, X, X,
        X, 0, X,
        X, X, X,
    }};
    font['9'] = (font_char_t){ 3, {
        X, X, X,
        X, 0, X,
        X, X, X,
        0, 0, X,
        X, X, X,
    }};
}