systemless 0.1.127

High-Level Emulation for classic Macintosh applications
Documentation
// SPDX-License-Identifier: OFL-1.1
// Copyright (c) 2026 Ben Letchford. Bitmap glyph artwork under the SIL
// Open Font License 1.1 (see OFL.txt at the crate root). Reserved Font
// Name "Systemless".
//! Ironbark 18 — our own serif display face at 18px (systemless compatibility
//! face for New York 18). Metrics (advance, origin_x, x-height 10 / cap
//! height 14, side-bearings) are conformed to the original New York 18 strike
//! so text lays out identically; the pixels are our own hand-drawn serif
//! letterforms — a heavy 2px-stroke display weight with bracketed slab
//! serifs. Every pixel was authored by us, not lifted from a font binary.

use super::{data_len, decode_data, decode_glyphs, DecodedFace, GlyphSrc};
use crate::g;
use crate::quickdraw::fonts::{FontMetrics, Glyph};

pub const NEWYORK_18_METRICS: FontMetrics =
    FontMetrics { ascent: 17, descent: 4, wid_max: 20, leading: 2 };

pub const NEWYORK_18_SRC: &[GlyphSrc] = &[
    g!(6, (6, -1), ), // ' '
    g!(6, (2, -14), // '!'
        "##" "##" "##" "##" "##" "##" "##" "##" "##" "##" ".." ".." "##"
    ),
    g!(10, (3, -14), // '"'
        "##.##" "##.##" "##.##" "##.##"
    ),
    g!(12, (2, -13), // '#'
        ".##.##." ".##.##." "#######" ".##.##." "#######" ".##.##." ".##.##."
    ),
    g!(12, (3, -14), // '$'
        "..##.." ".#####" "##.##." "##.##." ".####." "..#.##" "..#.##" "#####." "..##.."
    ),
    g!(16, (2, -14), // '%'
        "###..##" "###.##." "...##.." "..##..#" ".##..##" "##..###" "....###"
    ),
    g!(16, (1, -14), // '&'
        ".####...." "##..##..." "##..##..." ".####...." ".###....#" "##.##..##" "##..##.##" "##...####" ".####..##"
    ),
    g!(6, (2, -14), // '\''
        "##" "##" "##" "##"
    ),
    g!(8, (2, -14), // '('
        "..#" ".##" "##." "##." "##." "##." "##." "##." "##." "##." "##." ".##" "..#"
    ),
    g!(8, (2, -14), // ')'
        "#.." "##." ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" "##." "#.."
    ),
    g!(8, (0, -14), // '*'
        "##.##.##" ".##.##.." "..####.." "########" "..####.."
    ),
    g!(12, (2, -11), // '+'
        "...##..." "...##..." "...##..." "########" "########" "...##..." "...##..." "...##..."
    ),
    g!(6, (2, -3), // ','
        ".##" ".##" ".##" "##."
    ),
    g!(10, (1, -6), // '-'
        "########" "########"
    ),
    g!(6, (2, -2), // '.'
        "##" "##"
    ),
    g!(10, (1, -14), // '/'
        ".....##" ".....##" "....##." "....##." "...##.." "...##.." "..##..." "..##..." ".##...." ".##...." "##....." "##....."
    ),
    g!(12, (2, -14), // '0'
        "..####..." ".##..##.." ".##..##.." "##....##." "##...###." "##..##.#." "##.##..#." "###.#..#." "###.#..#." "##......#" "##....##." "##....##." ".##..##.." "..####..."
    ),
    g!(12, (4, -14), // '1'
        "..##.." ".###.." ".###.." "####.." "..##.." "..##.." "..##.." "..##.." "..##.." "..##.." "..##.." "..##.." "..##.." "######"
    ),
    g!(12, (2, -14), // '2'
        "..####.." ".##..##." ".##..##." "##....##" "......##" ".....##." "....##.." "...##..." "...##..." "..##...." ".##....." "##......" "########" "########"
    ),
    g!(12, (2, -14), // '3'
        "..####..." ".##..##.." ".##..##.." "##....##." "......##." "......##." "....###.." "....###.." "....###.." ".......##" "##....##." "##....##." ".##..##.." "..####..."
    ),
    g!(12, (1, -14), // '4'
        ".....##." "....###." "....###." "...####." "..##.##." ".##..##." "##...##." "########" "########" "########" ".....##." ".....##." ".....##." ".....##."
    ),
    g!(12, (1, -14), // '5'
        "########" "########" "########" "##......" "##......" "##......" "######.." ".....##." ".....##." "......##" "##....##" "##....##" ".##..##." "..####.."
    ),
    g!(12, (2, -14), // '6'
        "..####.." ".##..##." ".##..##." "##......" "##......" "##......" "##.####." "###..##." "###..##." "##....##" "##....##" "##....##" ".##..##." "..####.."
    ),
    g!(12, (1, -14), // '7'
        "########" "########" "########" ".....##." "....##.." "...#####" "...#####" "...#####" "...##..." "..##...." "..##...." "..##...." ".##....." ".##....."
    ),
    g!(12, (1, -14), // '8'
        "..####.." ".##..##." ".##..##." "##....##" ".##..##." ".##..##." "..####.." ".##..##." ".##..##." "##....##" "##....##" "##....##" ".##..##." "..####.."
    ),
    g!(12, (1, -14), // '9'
        "..####.." ".##..##." ".##..##." "##....##" "##....##" "##....##" ".##..###" "..####.#" "..####.#" ".......#" "......##" "......##" "....###." ".####..."
    ),
    g!(6, (2, -10), // ':'
        "##" ".." ".." ".." ".." "##"
    ),
    g!(6, (2, -10), // ';'
        ".##" "..." "..." "..." ".##" ".##" "##."
    ),
    g!(8, (1, -11), // '<'
        "....##" "...##." "..##.." ".##..." "##...." ".##..." "..##.." "...##." "....##"
    ),
    g!(10, (1, -11), // '='
        "########" "########" "........" "########" "########"
    ),
    g!(8, (2, -11), // '>'
        "##...." ".##..." "..##.." "...##." "....##" "...##." "..##.." ".##..." "##...."
    ),
    g!(10, (2, -14), // '?'
        "..####.." ".##..##." "##....##" ".....##." "....##.." "...##..." "...##..." "........" "...##..." "...##..."
    ),
    g!(16, (3, -13), // '@'
        ".######..." "##....##.." "##.####.##" "##.##.##.#" "##.####..." "##........" ".######..."
    ),
    g!(16, (1, -14), // 'A'
        "....##...." "....##...." "...####..." "...####..." "..##.##..." "..##.##..." ".##...##.." ".########." ".########." "##.....##." "##.....##." "##......##" "##......##" "####..####"
    ),
    g!(12, (1, -14), // 'B'
        "#######..." ".##...##.." ".##...##.." ".##....##." ".##....##." ".##...##.." ".#######.." ".##...##.." ".##...##.." ".##....##." ".##....##." ".##....##." ".##...##.." "#######..."
    ),
    g!(12, (2, -14), // 'C'
        "..#####." ".##...##" ".##...##" "##....##" "##......" "##......" "##......" "##......" "##......" "##......" "##......" "##....##" ".##...##" "..#####."
    ),
    g!(14, (1, -14), // 'D'
        "########..." ".##....##.." ".##....##.." ".##.....##." ".##......##" ".##......##" ".##......##" ".##......##" ".##......##" ".##......##" ".##......##" ".##.....##." ".##....##.." "########..."
    ),
    g!(12, (1, -14), // 'E'
        "#########" "#########" "#########" ".##......" ".##......" ".##......" ".######.." ".######.." ".######.." ".##......" ".##......" ".##......" "#########" "#########"
    ),
    g!(12, (1, -14), // 'F'
        "#########" "#########" "#########" ".##......" ".##......" ".##......" ".######.." ".######.." ".######.." ".##......" ".##......" ".##......" ".##......" ".##......"
    ),
    g!(12, (1, -14), // 'G'
        "..#####." ".##...##" ".##...##" "##....##" "##......" "##......" "##......" "##..####" "##..####" "##....##" "##....##" ".##...##" "..#####." "....####"
    ),
    g!(14, (1, -14), // 'H'
        "####..####" ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".########." ".########." ".########." ".##....##." ".##....##." ".##....##." ".##....##." "####..####"
    ),
    g!(8, (2, -14), // 'I'
        "####" ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." "####"
    ),
    g!(10, (1, -14), // 'J'
        "..####" "...##." "...##." "...##." "...##." "...##." "...##." "...##." "...##." "...##." "##.##." "##.##." "##.##." ".###.."
    ),
    g!(14, (1, -14), // 'K'
        "####..###." ".##..###.." ".##..###.." ".##.###..." ".#####...." ".####....." ".####....." ".#####...." ".##.###..." ".##..###.." ".##..###.." ".##...###." ".##....###" "####...###"
    ),
    g!(12, (1, -14), // 'L'
        ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" ".##......" "#########" "#########"
    ),
    g!(16, (1, -14), // 'M'
        "###....###" "####..####" "####..####" "##.####.##" "##.####.##" "##..##..##" "##..##..##" "##......##" "##......##" "##......##" "##......##" "##......##" "##......##" "####..####"
    ),
    g!(14, (1, -14), // 'N'
        "###....###" "####...##." "####...##." "##.##..##." "##.##..##." "##..##.##." "##..##.##." "##...####." "##...####." "##...####." "##....###." "##....###." "##.....##." "###....##."
    ),
    g!(14, (1, -14), // 'O'
        "..#####..." ".##...##.." ".##...##.." "##.....##." "##......##" "##......##" "##......##" "##......##" "##......##" "##......##" "##......##" "##.....##." ".##...##.." "..#####..."
    ),
    g!(12, (1, -14), // 'P'
        "########.." ".##....##." ".##....##." ".##.....##" ".##.....##" ".##....##." ".########." ".##......." ".##......." ".##......." ".##......." ".##......." ".##......." "####......"
    ),
    g!(14, (1, -14), // 'Q'
        "..#####..." ".##...##.." ".##...##.." "##.....##." "##......##" "##......##" "##......##" "##......##" "##......##" "##....##.#" "##....##.#" ".##..##.##" "..#####.##" "......####"
    ),
    g!(12, (1, -14), // 'R'
        "########.." ".##....##." ".##....##." ".##....##." ".##....##." ".##...##.." ".##...##.." ".#######.." ".##.###..." ".##..###.." ".##..###.." ".##...###." ".##....##." "####...###"
    ),
    g!(10, (1, -14), // 'S'
        ".######" "##....#" "##....#" "##....." "###...." "###...." ".####.." "..####." "..####." "....###" "#....##" "#....##" "##....#" ".######"
    ),
    g!(12, (1, -14), // 'T'
        "#########" "#########" "#########" "##.##.##." "...##...." "...##...." "...##...." "...##...." "...##...." "...##...." "...##...." "...##...." "...##...." "..#####.."
    ),
    g!(14, (1, -14), // 'U'
        "####..####" ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".##....##." ".###..###." "..######.." "...####..."
    ),
    g!(14, (1, -14), // 'V'
        "####..####" ".##....##." ".##....##." ".##....##." "..##..##.." "..##..##.." "..##..##.." "..##..##.." "...####..." "...####..." "...####..." "...####..." "....##...." "....##...."
    ),
    g!(18, (0, -14), // 'W'
        "####..##..####" ".##...##...##." ".##...##...##." ".##..####..##." "..##.####.##.." "..##.####.##.." "..##.#..#.##.." "..####..####.." "..####..####.." "...##....##..." "...##....##..." "...##....##..." "...##....##..." "....#....#...."
    ),
    g!(12, (1, -14), // 'X'
        "####..####" ".##....##." ".##....##." "..##..##.." "...####..." "...####..." "....##...." "....##...." "....##...." "...####..." "..##..##.." "..##..##.." ".##....##." "####..####"
    ),
    g!(12, (1, -14), // 'Y'
        "####..####" ".##....##." ".##....##." "..##..##.." "...####..." "...####..." "....##...." "....##...." "....##...." "....##...." "....##...." "....##...." "....##...." "...####..."
    ),
    g!(10, (1, -14), // 'Z'
        "########" "########" "########" ".....##." "....##.." "....##.." "...##..." "..##...." "..##...." ".##....." "##......" "##......" "########" "########"
    ),
    g!(6, (2, -15), // '['
        "###" "###" "##." "##." "##." "##." "##." "##." "##." "##." "##." "##." "##." "##." "###" "###"
    ),
    g!(10, (1, -14), // '\\'
        "##....." "##....." ".##...." ".##...." "..##..." "..##..." "...##.." "...##.." "....##." "....##." ".....##" ".....##"
    ),
    g!(6, (2, -15), // ']'
        "###" "###" ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" ".##" "###" "###"
    ),
    g!(8, (2, -14), // '^'
        "..##.." ".####." "##..##"
    ),
    g!(12, (0, 3), // '_'
        "##########" "##########"
    ),
    g!(6, (1, -15), // '`'
        "##." ".##"
    ),
    g!(10, (1, -10), // 'a'
        ".#####..." "##...##.." "#....##.." "....###.." "..##.##.." ".##..##.." "##...##.." "##..###.." "##..###.." ".###..##."
    ),
    g!(12, (1, -14), // 'b'
        "##......." "##......." "##......." "##......." "##.###..." "###..##.." "##....##." "##....##." "##....##." "##....##." "##....##." "##....##." "###..##.." "##.###..."
    ),
    g!(10, (1, -10), // 'c'
        ".#####." "##...##" "##...##" "##....#" "##....." "##....." "##....." "##....#" ".##...#" "..#####"
    ),
    g!(12, (1, -14), // 'd'
        "......##" "......##" "......##" "......##" "..###.##" ".##..###" "##....##" "##....##" "##....##" "##....##" "##....##" "##....##" ".##..###" "..###.##"
    ),
    g!(10, (1, -10), // 'e'
        "..####.." ".##..##." ".##..##." "##....##" "########" "##......" "##......" "##.....#" ".##...#." "..####.."
    ),
    g!(8, (1, -14), // 'f'
        "..###" ".##.." ".##.." ".##.." "####." "####." ".##.." ".##.." ".##.." ".##.." ".##.." ".##.." ".##.." "####."
    ),
    g!(10, (1, -10), // 'g'
        "..###.##" ".##..###" ".##..###" "##....##" "##....##" "##....##" ".##..###" "..###.##" "......##" "......##" "##....##" ".##..##." "..####.."
    ),
    g!(12, (1, -14), // 'h'
        "##........" "##........" "##........" "##........" "##.###...." "###..##..." "##....##.." "##....##.." "##....##.." "##....##.." "##....##.." "##....##.." "##....##.." "####..####"
    ),
    g!(8, (2, -14), // 'i'
        "##.." "##.." "##.." "...." "...." "##.." "##.." "##.." "##.." "##.." "##.." "##.." "##.." "####"
    ),
    g!(6, (1, -14), // 'j'
        "..##." "..##." "..##." "....." "....." "..##." "..##." "..##." "..##." "..##." "..##." "..##." "..##." "..##." "..##." "..##." "##.##" ".###."
    ),
    g!(12, (1, -14), // 'k'
        "##......." "##......." "##......." "##......." "##...###." "##..###.." "##.###..." "#####...." "#####...." "#####...." "##.###..." "##..###.." "##...###." "##....###"
    ),
    g!(8, (2, -14), // 'l'
        "###." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." ".##." "####"
    ),
    g!(16, (1, -10), // 'm'
        "##.###..###." "###..##.##.." "##...####..#" "##....##...#" "##....##...#" "##....##...#" "##....##...#" "##....##...#" "##....##...#" "####..####.#"
    ),
    g!(12, (1, -10), // 'n'
        "##.###...." "###..##..." "##....##.." "##....##.." "##....##.." "##....##.." "##....##.." "##....##.." "##....##.." "####..####"
    ),
    g!(10, (1, -10), // 'o'
        "..####.." ".##..##." "##....##" "##....##" "##....##" "##....##" "##....##" "##....##" ".##..##." "..####.."
    ),
    g!(12, (1, -10), // 'p'
        "##.###..." "###..##.." "###..##.." "##....##." "##....##." "##....##." "##....##." "###..##.." "##.###..." "##......." "##......." "##......." "####....."
    ),
    g!(12, (1, -10), // 'q'
        "..###.##" ".##..###" ".##..###" "##....##" "##....##" "##....##" "##....##" ".##..###" "..###.##" "......##" "......##" "......##" "....####"
    ),
    g!(10, (1, -10), // 'r'
        "##.###." "###..##" "###..##" "###...." "##....." "##....." "##....." "##....." "##....." "####..."
    ),
    g!(10, (1, -10), // 's'
        ".#####." "##...##" "##...##" "##....." "###...." ".####.." "..####." "....###" "##...##" ".#####."
    ),
    g!(8, (1, -14), // 't'
        ".##.." ".##.." ".##.." ".##.." "####." "####." ".##.." ".##.." ".##.." ".##.." ".##.." ".##.#" "..###" "...##"
    ),
    g!(12, (1, -10), // 'u'
        "##....##." "##....##." "##....##." "##....##." "##....##." "##....##." "##....##." "##...###." ".##.###.#" "..###.#.."
    ),
    g!(10, (0, -10), // 'v'
        "####..####" ".##....##." ".##....##." "..##..##.." "..##..##.." "..##..##.." "...####..." "...####..." "...####..." "....##...."
    ),
    g!(14, (0, -10), // 'w'
        "####..##..####" ".##...##...##." ".##...##...##." ".##..####..##." ".##..####..##." "..##.####.##.." "..####..####.." "..####..####.." "...##....##..." "...##....##..."
    ),
    g!(12, (1, -10), // 'x'
        "####..####" ".##....##." ".##....##." "..##..##.." "...####..." "....##...." "...####..." "..##..##.." ".##....##." "####..####"
    ),
    g!(12, (0, -10), // 'y'
        "####..####" ".##....##." ".##....##." "..##..##.." "..##..##.." "..##..##.." "...####..." "...####..." "....##...." "....##...." "....##...." "...##....." "..###....."
    ),
    g!(10, (1, -10), // 'z'
        "########" "########" "########" ".....##." "....##.." "...##..." "..##...." ".##....." "########" "########"
    ),
    g!(8, (1, -15), // '{'
        "..##" ".##." ".##." ".##." "##.." ".##." ".##." ".##." ".##." "..##"
    ),
    g!(4, (1, -15), // '|'
        "##" "##" "##" "##" "##" "##" "##" "##" "##" "##" "##" "##" "##" "##" "##"
    ),
    g!(8, (1, -15), // '}'
        "##.." ".##." ".##." ".##." "..##" ".##." ".##." ".##." ".##." "##.."
    ),
    g!(8, (1, -7), // '~'
        ".##...#" "#..###."
    ),
];

const LEN: usize = data_len(NEWYORK_18_SRC);
pub const NEWYORK_18_GLYPHS: [Glyph; 95] = decode_glyphs(NEWYORK_18_SRC);
pub const NEWYORK_18_DATA: [u8; LEN] = decode_data(NEWYORK_18_SRC);

#[allow(dead_code)]
pub const FACE: DecodedFace = DecodedFace {
    metrics: NEWYORK_18_METRICS,
    glyphs: &NEWYORK_18_GLYPHS,
    data: &NEWYORK_18_DATA,
};