Сделан русский текст

This commit is contained in:
2026-08-08 11:15:20 +03:00
parent c952c165f8
commit 70fe3566b4
9 changed files with 300 additions and 69 deletions

View File

@@ -0,0 +1,57 @@
#pragma once
#include <Arduino.h>
// Compact 5x7 uppercase Cyrillic font. Lowercase UTF-8 letters are deliberately
// rendered with the same uppercase glyphs: at 5x7 pixels this is considerably
// clearer than trying to preserve lowercase shapes.
namespace CyrillicFont {
constexpr uint8_t WIDTH = 5;
constexpr uint8_t HEIGHT = 7;
constexpr uint8_t ADVANCE = 6;
// Rows are stored top-to-bottom; the low five bits are pixels left-to-right.
const uint8_t GLYPHS[][HEIGHT] PROGMEM = {
{0x0E, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11}, // А
{0x1F, 0x10, 0x10, 0x1E, 0x11, 0x11, 0x1E}, // Б
{0x1E, 0x11, 0x11, 0x1E, 0x11, 0x11, 0x1E}, // В
{0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10}, // Г
{0x0E, 0x0A, 0x0A, 0x0A, 0x11, 0x1F, 0x11}, // Д
{0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x1F}, // Е
{0x15, 0x15, 0x0E, 0x04, 0x0E, 0x15, 0x15}, // Ж
{0x0E, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0E}, // З
{0x11, 0x13, 0x15, 0x15, 0x19, 0x11, 0x11}, // И
{0x0A, 0x11, 0x13, 0x15, 0x19, 0x11, 0x11}, // Й
{0x11, 0x12, 0x14, 0x18, 0x14, 0x12, 0x11}, // К
{0x07, 0x09, 0x09, 0x09, 0x11, 0x11, 0x11}, // Л
{0x11, 0x1B, 0x15, 0x15, 0x11, 0x11, 0x11}, // М
{0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11}, // Н
{0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E}, // О
{0x1F, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, // П
{0x1E, 0x11, 0x11, 0x1E, 0x10, 0x10, 0x10}, // Р
{0x0F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x0F}, // С
{0x1F, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04}, // Т
{0x11, 0x11, 0x11, 0x0F, 0x01, 0x11, 0x0E}, // У
{0x04, 0x0E, 0x15, 0x15, 0x0E, 0x04, 0x04}, // Ф
{0x11, 0x11, 0x0A, 0x04, 0x0A, 0x11, 0x11}, // Х
{0x12, 0x12, 0x12, 0x12, 0x12, 0x1E, 0x01}, // Ц
{0x11, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x01}, // Ч
{0x15, 0x15, 0x15, 0x15, 0x15, 0x15, 0x1F}, // Ш
{0x15, 0x15, 0x15, 0x15, 0x15, 0x1E, 0x01}, // Щ
{0x18, 0x08, 0x08, 0x0E, 0x09, 0x09, 0x0E}, // Ъ
{0x11, 0x11, 0x11, 0x1D, 0x15, 0x15, 0x1D}, // Ы
{0x10, 0x10, 0x10, 0x1E, 0x11, 0x11, 0x1E}, // Ь
{0x0E, 0x11, 0x01, 0x07, 0x01, 0x11, 0x0E}, // Э
{0x12, 0x15, 0x15, 0x1D, 0x15, 0x15, 0x12}, // Ю
{0x0F, 0x11, 0x11, 0x0F, 0x05, 0x09, 0x11} // Я
};
inline const uint8_t *glyph(uint32_t codepoint) {
if (codepoint >= 0x0430U && codepoint <= 0x044FU) codepoint -= 0x20U;
if (codepoint == 0x0401U || codepoint == 0x0451U) codepoint = 0x0415U; // Ё -> Е
if (codepoint < 0x0410U || codepoint > 0x042FU) return nullptr;
return GLYPHS[codepoint - 0x0410U];
}
} // namespace CyrillicFont