1 /** 2 * Adapted from 3 * https://raw.githubusercontent.com/dhepper/font8x8/master/font8x8_basic.h 4 * 5 * License: 6 * Public Domain. 7 */ 8 9 module ae.utils.graphics.fonts.font8x8; 10 11 /** 12 * 8x8 monochrome bitmap fonts for rendering 13 * Author: Daniel Hepper <daniel@hepper.net> 14 * 15 * License: Public Domain 16 * 17 * Based on: 18 * // Summary: font8x8.h 19 * // 8x8 monochrome bitmap fonts for rendering 20 * // 21 * // Author: 22 * // Marcel Sondaar 23 * // International Business Machines (public domain VGA fonts) 24 * // 25 * // License: 26 * // Public Domain 27 * 28 * Fetched from: http://dimensionalrift.homelinux.net/combuster/mos3/?p=viewsource&file=/modules/gfx/font8_8.asm 29 **/ 30 31 // Constant: font8x8_basic 32 // Contains an 8x8 font map for unicode points U+0000 - U+007F (basic latin) 33 immutable ubyte[8][128] font8x8_basic = [ 34 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0000 (nul) 35 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0001 36 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0002 37 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0003 38 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0004 39 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0005 40 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0006 41 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0007 42 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0008 43 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0009 44 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+000A 45 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+000B 46 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+000C 47 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+000D 48 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+000E 49 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+000F 50 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0010 51 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0011 52 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0012 53 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0013 54 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0014 55 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0015 56 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0016 57 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0017 58 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0018 59 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0019 60 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+001A 61 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+001B 62 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+001C 63 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+001D 64 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+001E 65 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+001F 66 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0020 (space) 67 [ 0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00], // U+0021 (!) 68 [ 0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0022 (") 69 [ 0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00], // U+0023 (#) 70 [ 0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00], // U+0024 ($) 71 [ 0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00], // U+0025 (%) 72 [ 0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00], // U+0026 (&) 73 [ 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0027 (') 74 [ 0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00], // U+0028 (() 75 [ 0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00], // U+0029 ()) 76 [ 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00], // U+002A (*) 77 [ 0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00], // U+002B (+) 78 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06], // U+002C (,) 79 [ 0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00], // U+002D (-) 80 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00], // U+002E (.) 81 [ 0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00], // U+002F (/) 82 [ 0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00], // U+0030 (0) 83 [ 0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00], // U+0031 (1) 84 [ 0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00], // U+0032 (2) 85 [ 0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00], // U+0033 (3) 86 [ 0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00], // U+0034 (4) 87 [ 0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00], // U+0035 (5) 88 [ 0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00], // U+0036 (6) 89 [ 0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00], // U+0037 (7) 90 [ 0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00], // U+0038 (8) 91 [ 0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00], // U+0039 (9) 92 [ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00], // U+003A (:) 93 [ 0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06], // U+003B (//) 94 [ 0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00], // U+003C (<) 95 [ 0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00], // U+003D (=) 96 [ 0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00], // U+003E (>) 97 [ 0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00], // U+003F (?) 98 [ 0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00], // U+0040 (@) 99 [ 0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00], // U+0041 (A) 100 [ 0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00], // U+0042 (B) 101 [ 0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00], // U+0043 (C) 102 [ 0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00], // U+0044 (D) 103 [ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00], // U+0045 (E) 104 [ 0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00], // U+0046 (F) 105 [ 0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00], // U+0047 (G) 106 [ 0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00], // U+0048 (H) 107 [ 0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], // U+0049 (I) 108 [ 0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00], // U+004A (J) 109 [ 0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00], // U+004B (K) 110 [ 0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00], // U+004C (L) 111 [ 0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00], // U+004D (M) 112 [ 0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00], // U+004E (N) 113 [ 0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00], // U+004F (O) 114 [ 0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00], // U+0050 (P) 115 [ 0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00], // U+0051 (Q) 116 [ 0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00], // U+0052 (R) 117 [ 0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00], // U+0053 (S) 118 [ 0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], // U+0054 (T) 119 [ 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00], // U+0055 (U) 120 [ 0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00], // U+0056 (V) 121 [ 0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00], // U+0057 (W) 122 [ 0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00], // U+0058 (X) 123 [ 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00], // U+0059 (Y) 124 [ 0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00], // U+005A (Z) 125 [ 0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00], // U+005B ([) 126 [ 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00], // U+005C (\) 127 [ 0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00], // U+005D (]) 128 [ 0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00], // U+005E (^) 129 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF], // U+005F (_) 130 [ 0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00], // U+0060 (`) 131 [ 0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00], // U+0061 (a) 132 [ 0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00], // U+0062 (b) 133 [ 0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00], // U+0063 (c) 134 [ 0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00], // U+0064 (d) 135 [ 0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00], // U+0065 (e) 136 [ 0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00], // U+0066 (f) 137 [ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F], // U+0067 (g) 138 [ 0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00], // U+0068 (h) 139 [ 0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], // U+0069 (i) 140 [ 0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E], // U+006A (j) 141 [ 0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00], // U+006B (k) 142 [ 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00], // U+006C (l) 143 [ 0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00], // U+006D (m) 144 [ 0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00], // U+006E (n) 145 [ 0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00], // U+006F (o) 146 [ 0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F], // U+0070 (p) 147 [ 0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78], // U+0071 (q) 148 [ 0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00], // U+0072 (r) 149 [ 0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00], // U+0073 (s) 150 [ 0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00], // U+0074 (t) 151 [ 0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00], // U+0075 (u) 152 [ 0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00], // U+0076 (v) 153 [ 0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00], // U+0077 (w) 154 [ 0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00], // U+0078 (x) 155 [ 0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F], // U+0079 (y) 156 [ 0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00], // U+007A (z) 157 [ 0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00], // U+007B ([) 158 [ 0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00], // U+007C (|) 159 [ 0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00], // U+007D (]) 160 [ 0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], // U+007E (~) 161 [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] // U+007F 162 ]; 163 164 struct Font8x8 165 { 166 struct Glyph 167 { 168 enum width = 8; 169 const(ubyte)[] rows; 170 } 171 172 static: 173 enum height = 8; 174 enum maxWidth = Glyph.width; 175 enum maxGlyph = 0x80; 176 bool hasGlyph(dchar c) nothrow @nogc { return c < font8x8_basic.length; } 177 Glyph getGlyph(dchar c) nothrow @nogc { return Glyph(font8x8_basic[c][]); } 178 } 179 180 immutable Font8x8 font8x8;