diff --git a/McBitFont/Export.cs b/McBitFont/Export.cs index 4d4f351..73c8bc5 100644 --- a/McBitFont/Export.cs +++ b/McBitFont/Export.cs @@ -207,7 +207,7 @@ namespace McBitFont { output += " // Meta header\n" + " " + (packed ? "1" : "0") + ", // Is it a packed font?\n" + - " " + (mono ? mainForm.frames.First().width.ToString() : "0") + ", // Font width in pixels; 0 - variable width\n" + + " " + (mono || mainForm.frames.Count == 1 ? mainForm.frames.First().width.ToString() : "0") + ", // Font width in pixels; 0 - variable width\n" + " " + mainForm.frames.First().height.ToString() + ", // Font height in pixels\n" + " 0, // Font space (between symbols) in pixels\n" + " " + mainForm.frames.First().code.ToString() + ", // First character code\n" + @@ -353,7 +353,7 @@ namespace McBitFont { output += cbracket + ((i + idir == imax) && f.Equals(flast) ? "" : ",") + "\n"; } } - if (packed && (f.width * f.height / 8) % bits > 0) { + if (packed && (f.width * f.height) % bits > 0) { // post leftovers in last number // should we post a prefix to the number? diff --git a/McBitFont/Form1.Designer.cs b/McBitFont/Form1.Designer.cs index 72ca31b..d930070 100644 --- a/McBitFont/Form1.Designer.cs +++ b/McBitFont/Form1.Designer.cs @@ -64,6 +64,7 @@ openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); saveAsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + importTextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); importImageToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); exportToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -102,7 +103,6 @@ chkHexCodes = new System.Windows.Forms.CheckBox(); chkRectSelect = new System.Windows.Forms.CheckBox(); label3 = new System.Windows.Forms.Label(); - importTextToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)nudX).BeginInit(); ((System.ComponentModel.ISupportInitialize)nudY).BeginInit(); panel1.SuspendLayout(); @@ -535,7 +535,7 @@ newToolStripMenuItem.Name = "newToolStripMenuItem"; newToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+N"; newToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N; - newToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + newToolStripMenuItem.Size = new System.Drawing.Size(224, 22); newToolStripMenuItem.Text = "New"; newToolStripMenuItem.ToolTipText = "Create new project"; newToolStripMenuItem.Click += newToolStripMenuItem_Click; @@ -546,7 +546,7 @@ openToolStripMenuItem.Name = "openToolStripMenuItem"; openToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+O"; openToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O; - openToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + openToolStripMenuItem.Size = new System.Drawing.Size(224, 22); openToolStripMenuItem.Text = "Open"; openToolStripMenuItem.ToolTipText = "Open from file"; openToolStripMenuItem.Click += openToolStripMenuItem_Click; @@ -557,7 +557,7 @@ saveToolStripMenuItem.Name = "saveToolStripMenuItem"; saveToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+S"; saveToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S; - saveToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + saveToolStripMenuItem.Size = new System.Drawing.Size(224, 22); saveToolStripMenuItem.Text = "Save"; saveToolStripMenuItem.ToolTipText = "Save changes"; saveToolStripMenuItem.Click += saveToolStripMenuItem_Click_1; @@ -568,16 +568,24 @@ saveAsToolStripMenuItem.Name = "saveAsToolStripMenuItem"; saveAsToolStripMenuItem.ShortcutKeyDisplayString = "Ctrl+Shift+S"; saveAsToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.S; - saveAsToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + saveAsToolStripMenuItem.Size = new System.Drawing.Size(224, 22); saveAsToolStripMenuItem.Text = "Save as"; saveAsToolStripMenuItem.ToolTipText = "Save changes to another file"; saveAsToolStripMenuItem.Click += SaveToolStripMenuItem_Click; // + // importTextToolStripMenuItem1 + // + importTextToolStripMenuItem1.Image = Properties.Resources.folder_table; + importTextToolStripMenuItem1.Name = "importTextToolStripMenuItem1"; + importTextToolStripMenuItem1.Size = new System.Drawing.Size(224, 22); + importTextToolStripMenuItem1.Text = "Import text file (very limited)"; + importTextToolStripMenuItem1.Click += importTextToolStripMenuItem1_Click; + // // importImageToolStripMenuItem // importImageToolStripMenuItem.Image = Properties.Resources.z_folder_image; importImageToolStripMenuItem.Name = "importImageToolStripMenuItem"; - importImageToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + importImageToolStripMenuItem.Size = new System.Drawing.Size(224, 22); importImageToolStripMenuItem.Text = "Import image"; importImageToolStripMenuItem.ToolTipText = "Import image from a file"; importImageToolStripMenuItem.Click += importImageToolStripMenuItem_Click; @@ -588,7 +596,7 @@ exportToolStripMenuItem.Name = "exportToolStripMenuItem"; exportToolStripMenuItem.ShortcutKeyDisplayString = ""; exportToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E; - exportToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + exportToolStripMenuItem.Size = new System.Drawing.Size(224, 22); exportToolStripMenuItem.Text = "Export"; exportToolStripMenuItem.ToolTipText = "Configure and export data"; exportToolStripMenuItem.Click += button1_Click; @@ -599,7 +607,7 @@ exitToolStripMenuItem.Name = "exitToolStripMenuItem"; exitToolStripMenuItem.ShortcutKeyDisplayString = "Alt+X"; exitToolStripMenuItem.ShortcutKeys = System.Windows.Forms.Keys.Alt | System.Windows.Forms.Keys.X; - exitToolStripMenuItem.Size = new System.Drawing.Size(184, 22); + exitToolStripMenuItem.Size = new System.Drawing.Size(224, 22); exitToolStripMenuItem.Text = "Exit"; exitToolStripMenuItem.ToolTipText = "Quit application"; exitToolStripMenuItem.Click += exitToolStripMenuItem_Click; @@ -965,14 +973,6 @@ label3.TabIndex = 21; label3.Text = "Cursor:"; // - // importTextToolStripMenuItem1 - // - importTextToolStripMenuItem1.Image = Properties.Resources.folder_table; - importTextToolStripMenuItem1.Name = "importTextToolStripMenuItem1"; - importTextToolStripMenuItem1.Size = new System.Drawing.Size(184, 22); - importTextToolStripMenuItem1.Text = "Import text file"; - importTextToolStripMenuItem1.Click += importTextToolStripMenuItem1_Click; - // // MainForm // AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); diff --git a/McBitFont/Form1.cs b/McBitFont/Form1.cs index 4f97cd9..9221d0a 100644 --- a/McBitFont/Form1.cs +++ b/McBitFont/Form1.cs @@ -1265,7 +1265,9 @@ namespace McBitFont { if (line.Contains("uint31_t")) bits = 32; // Found 32 bit array } string s = line; - if (s.IndexOf("//") >= 0) s = s.Remove(s.IndexOf("//")); // Remove comments + if (s.Contains("//")) s = s[..s.IndexOf("//")]; // Remove comments + if (s.Contains('{')) s = s[(s.IndexOf('{') + 1)..]; // Remove everything before '{' + var words = s.Split(','); // split a line by commas string w; foreach (var word in words) { @@ -1274,14 +1276,15 @@ namespace McBitFont { w = word.Trim(); if (w.Length < 1) continue; - if (w.IndexOf("0x") >= 0) { // Check if value is written as hexadecimal - w = w.Remove(w.IndexOf("0x"), 2); - numBase = 16; - } - if (w.IndexOf("0b") >= 0) { // Check if value is written as binary + if (w.Contains("0b") && !w.Contains("0x")) { // Check if value is written as binary w = w.Remove(w.IndexOf("0b"), 2); numBase = 2; } + if (w.Contains("0x") ) { // Check if value is written as hexadecimal + w = w.Remove(w.IndexOf("0x"), 2); + numBase = 16; + } + try { // Try to convert a number from text data.Add(Convert.ToUInt32(w, numBase)); @@ -1305,21 +1308,52 @@ namespace McBitFont { miniList.Clear(); ilMiniatures.Images.Clear(); - FrameMiniature newf; + FrameMiniature newf = new(); int neww = width; - int curFrame = 0; - int frameNumIndex = 0; - for (int i = 0; i < data.Count; i++) { - if (frameNumIndex == 0) { - if (width == 0) { - neww = (int)data.ElementAt(i); - frameNumIndex++; - } + int curFrame = -1; + bool newFrame = true; + int i = 0, j = 0; + for (int b = 6; b < data.Count; b++) { + if (newFrame) { + newFrame = false; + curFrame++; + i = 0; j = 0; + if (width == 0) neww = (int)data[b]; newf = new(curFrame + first, neww, height); + if (width == 0 && neww != 0) continue; + } + // Fill frame data with current number + if (neww != 0) + for (int bit = 0; bit < bits; bit++) { + if (j >= height) { + j = 0; + i++; + if (!packed && bit != 0) break; + } + if (i >= neww) break; + newf.data[i, j] = (data[b] & (1 << bit)) > 0; + j++; + } + if (i >= neww || b == data.Count - 1 || (i == neww - 1 && j == height) || neww == 0) { + newFrame = true; + frames.Add(newf); + + var s = (last - first > 0) ? newf.code.ToString().PadLeft(3, '0') : "000"; + var sHex = (last - first > 0) ? 'x' + Convert.ToString(newf.code, 16).PadLeft(2, '0').ToUpper() : "0x0"; + var sss = (last - first > 0) ? decodeSymbol(newf.code) : "Single"; + ilMiniatures.Images.Add(s, (Image)GetMiniPictue(newf)); + miniList.Items.Add(s, (chkHexCodes.Checked ? sHex : s) + ' ' + sss, s); } - // TODO: fill frame.data with current byte - // increment NumIndex } + prjModified = true; + if (miniList.Items.Count > 0) miniList.Items[0].Selected = true; + f = frames[0]; + dotWidth = f.width; + dotHeight = f.height; + SetNewWH(); + + miniList.Refresh(); + dotPanel.Refresh(); } //MessageBox.Show(bits + "-font found. " + data.Count + " numbers (" + data.Count * bits / 8 + " bytes) total\n" + "Start code: " + data.ElementAt(4) + " End code: " + data.ElementAt(5)); } diff --git a/TODO.txt b/TODO.txt index ae9ef9c..cd2db92 100644 --- a/TODO.txt +++ b/TODO.txt @@ -17,7 +17,7 @@ V Specify starting code (extends the shift) V Ability to make monospaced font a variable width one V Undo/Redo for canvas changes V Image import from a file -- Import from a text array +V Import from a text array V Rectangle selection to mass-paint, shift and mirror pixels etc... V "Packed" fonts export V "Bytes total comment in export diff --git a/examples/tests/test16x16.mbfont b/examples/tests/test16x16.mbfont index 2a2ad2a..d725662 100644 Binary files a/examples/tests/test16x16.mbfont and b/examples/tests/test16x16.mbfont differ diff --git a/examples/tests/test16x16.txt b/examples/tests/test16x16.txt index a6e58eb..c4a6478 100644 --- a/examples/tests/test16x16.txt +++ b/examples/tests/test16x16.txt @@ -15,17 +15,18 @@ // Numbers per line: 1 Column per line // Font header map: -// packed; // Flag for packed font// width; // Font width in pixels (0 - variable width) +// packed; // Flag for packed font +// width; // Font width in pixels (0 - variable width) // height; // Font height in pixels // space; // Font space in pixels // first; // First character code // last; // Last character code -const uint8_t Untitled[] = { +const uint8_t test16x16[] = { // Meta header 0, // Is it a packed font? - 0, // Font width in pixels; 0 - variable width + 16, // Font width in pixels; 0 - variable width 16, // Font height in pixels 0, // Font space (between symbols) in pixels 0, // First character code @@ -33,7 +34,7 @@ const uint8_t Untitled[] = { // Data: 0xfc, 0x1f, 0x00, 0x30, - 0x0c, 0x60, + 0x0c, 0xe0, 0x06, 0x1c, 0x02, 0x36, 0x32, 0x23, @@ -44,7 +45,7 @@ const uint8_t Untitled[] = { 0x64, 0x20, 0x3c, 0x30, 0x00, 0x10, - 0x1e, 0x20, + 0x1f, 0x20, 0xf0, 0x3f, - 0x00, 0x00 + 0x00, 0x20 }; diff --git a/examples/tests/testfont_packed.txt b/examples/tests/testfont_packed.txt new file mode 100644 index 0000000..de1fad6 --- /dev/null +++ b/examples/tests/testfont_packed.txt @@ -0,0 +1,259 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 1264 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Hexadecimal +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Symbol per line + +// Font header map: +// packed; // Flag for packed font +// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t haxrcorp_4089_cyrillic_altgr[] = { + // Meta header + 1, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 10, // Font height in pixels + 0, // Font space (between symbols) in pixels + 32, // First character code + 255, // Last character code + // Data: + 0x03, 0x00, 0x00, 0x00, 0x00, // 32 --> + 0x01, 0xbe, 0x00, // 33 --> ! + 0x03, 0x0e, 0x00, 0xe0, 0x00, // 34 --> " + 0x05, 0x28, 0xf0, 0x81, 0x02, 0x1f, 0x28, 0x00, // 35 --> # + 0x05, 0x4c, 0x48, 0xf2, 0x9f, 0x24, 0x64, 0x00, // 36 --> $ + 0x07, 0x84, 0x28, 0x41, 0x02, 0x04, 0x48, 0x90, 0x22, 0x04, // 37 --> % + 0x06, 0x6c, 0x48, 0x22, 0x09, 0x2b, 0x40, 0xc0, 0x02, // 38 --> & + 0x01, 0x0e, 0x00, // 39 --> ' + 0x03, 0x7c, 0x08, 0x12, 0x10, // 40 --> ( + 0x03, 0x01, 0x09, 0xc2, 0x07, // 41 --> ) + 0x05, 0x14, 0x20, 0xe0, 0x03, 0x02, 0x14, 0x00, // 42 --> * + 0x05, 0x10, 0x40, 0xc0, 0x07, 0x04, 0x10, 0x00, // 43 --> + + 0x02, 0x00, 0x01, 0x03, // 44 --> , + 0x05, 0x10, 0x40, 0x00, 0x01, 0x04, 0x10, 0x00, // 45 --> - + 0x01, 0x80, 0x00, // 46 --> . + 0x07, 0x80, 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, // 47 --> / + 0x05, 0x7c, 0x88, 0x22, 0x89, 0x22, 0x7c, 0x00, // 48 --> 0 + 0x02, 0x04, 0xf8, 0x03, // 49 --> 1 + 0x05, 0x84, 0x08, 0x23, 0x8a, 0x24, 0x8c, 0x00, // 50 --> 2 + 0x05, 0x44, 0x08, 0x22, 0x89, 0x24, 0x6c, 0x00, // 51 --> 3 + 0x05, 0x30, 0xa0, 0x40, 0x82, 0x3f, 0x20, 0x00, // 52 --> 4 + 0x05, 0x4e, 0x28, 0xa2, 0x88, 0x22, 0x72, 0x00, // 53 --> 5 + 0x05, 0x7c, 0x48, 0x22, 0x89, 0x24, 0x64, 0x00, // 54 --> 6 + 0x05, 0x02, 0x08, 0x20, 0x8c, 0x0c, 0x0e, 0x00, // 55 --> 7 + 0x05, 0x6c, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 56 --> 8 + 0x05, 0x4c, 0x48, 0x22, 0x89, 0x24, 0x7c, 0x00, // 57 --> 9 + 0x01, 0x48, 0x00, // 58 --> : + 0x02, 0x00, 0x21, 0x03, // 59 --> ; + 0x03, 0x10, 0xa0, 0x40, 0x04, // 60 --> < + 0x05, 0x28, 0xa0, 0x80, 0x02, 0x0a, 0x28, 0x00, // 61 --> = + 0x03, 0x44, 0xa0, 0x00, 0x01, // 62 --> > + 0x05, 0x04, 0x08, 0x20, 0x8a, 0x04, 0x0c, 0x00, // 63 --> ? + 0x08, 0x7e, 0x04, 0x92, 0x49, 0x29, 0xa5, 0xf4, 0x12, 0x8a, 0x07, // 64 --> @ + 0x05, 0xfc, 0x48, 0x20, 0x81, 0x04, 0xfc, 0x00, // 65 --> A + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 66 --> B + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x44, 0x00, // 67 --> C + 0x05, 0xfe, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x00, // 68 --> D + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x82, 0x00, // 69 --> E + 0x05, 0xfe, 0x48, 0x20, 0x81, 0x04, 0x02, 0x00, // 70 --> F + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x24, 0x74, 0x00, // 71 --> G + 0x05, 0xfe, 0x40, 0x00, 0x01, 0x04, 0xfe, 0x00, // 72 --> H + 0x01, 0xfe, 0x00, // 73 --> I + 0x05, 0x40, 0x00, 0x02, 0x08, 0x20, 0x7e, 0x00, // 74 --> J + 0x05, 0xfe, 0x40, 0x80, 0x02, 0x11, 0x82, 0x00, // 75 --> K + 0x05, 0xfe, 0x00, 0x02, 0x08, 0x20, 0x80, 0x00, // 76 --> L + 0x07, 0xfe, 0x10, 0x80, 0x00, 0x04, 0x08, 0x10, 0xe0, 0x0f, // 77 --> M + 0x05, 0xfe, 0x20, 0x00, 0x01, 0x08, 0xfe, 0x00, // 78 --> N + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x00, // 79 --> O + 0x05, 0xfe, 0x48, 0x20, 0x81, 0x04, 0x0c, 0x00, // 80 --> P + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x01, // 81 --> Q + 0x05, 0xfe, 0x48, 0x20, 0x83, 0x14, 0x8c, 0x00, // 82 --> R + 0x05, 0x4c, 0x48, 0x22, 0x89, 0x24, 0x64, 0x00, // 83 --> S + 0x05, 0x02, 0x08, 0xe0, 0x8f, 0x00, 0x02, 0x00, // 84 --> T + 0x05, 0x7e, 0x00, 0x02, 0x08, 0x20, 0x7e, 0x00, // 85 --> U + 0x05, 0x0e, 0xc0, 0x00, 0x0c, 0x0c, 0x0e, 0x00, // 86 --> V + 0x07, 0x7e, 0x00, 0x02, 0x88, 0x1f, 0x80, 0x00, 0xe2, 0x07, // 87 --> W + 0x05, 0xc6, 0xa0, 0x00, 0x01, 0x0a, 0xc6, 0x00, // 88 --> X + 0x05, 0x06, 0x20, 0x00, 0x0f, 0x02, 0x06, 0x00, // 89 --> Y + 0x05, 0xc2, 0x88, 0x22, 0x89, 0x22, 0x86, 0x00, // 90 --> Z + 0x03, 0xff, 0x05, 0x14, 0x10, // 91 --> [ + 0x07, 0x02, 0x10, 0x80, 0x00, 0x04, 0x20, 0x00, 0x01, 0x08, // 92 --> \ + 0x03, 0x01, 0x05, 0xf4, 0x1f, // 93 --> ] + 0x05, 0x08, 0x10, 0x20, 0x00, 0x01, 0x08, 0x00, // 94 --> ^ + 0x05, 0x80, 0x00, 0x02, 0x08, 0x20, 0x80, 0x00, // 95 --> _ + 0x03, 0x02, 0x10, 0x80, 0x00, // 96 --> ` + 0x04, 0x70, 0x20, 0x82, 0x08, 0x3e, // 97 --> a + 0x04, 0xfe, 0x20, 0x82, 0x08, 0x1c, // 98 --> b + 0x04, 0x70, 0x20, 0x82, 0x08, 0x14, // 99 --> c + 0x04, 0x70, 0x20, 0x82, 0x88, 0x3f, // 100 --> d + 0x04, 0x70, 0xa0, 0x82, 0x0a, 0x0c, // 101 --> e + 0x02, 0xfc, 0x48, 0x00, // 102 --> f + 0x04, 0x70, 0x20, 0x8a, 0x28, 0x7e, // 103 --> g + 0x04, 0xfe, 0x20, 0x80, 0x00, 0x3c, // 104 --> h + 0x01, 0xfa, 0x00, // 105 --> i + 0x02, 0x00, 0xea, 0x07, // 106 --> j + 0x04, 0xfe, 0x80, 0x00, 0x05, 0x22, // 107 --> k + 0x01, 0xfe, 0x00, // 108 --> l + 0x07, 0xf8, 0x20, 0x80, 0x00, 0x3c, 0x08, 0x20, 0x00, 0x0f, // 109 --> m + 0x04, 0xf8, 0x20, 0x80, 0x00, 0x3c, // 110 --> n + 0x04, 0x70, 0x20, 0x82, 0x08, 0x1c, // 111 --> o + 0x04, 0xf8, 0x23, 0x82, 0x08, 0x1c, // 112 --> p + 0x04, 0x70, 0x20, 0x82, 0x08, 0xfe, // 113 --> q + 0x03, 0xf8, 0x20, 0x80, 0x00, // 114 --> r + 0x03, 0x90, 0xa0, 0x82, 0x04, // 115 --> s + 0x03, 0x08, 0xf8, 0x83, 0x00, // 116 --> t + 0x04, 0x78, 0x00, 0x02, 0x08, 0x3e, // 117 --> u + 0x04, 0x78, 0x00, 0x02, 0x08, 0x1e, // 118 --> v + 0x07, 0x78, 0x00, 0x02, 0x08, 0x1e, 0x80, 0x00, 0x82, 0x07, // 119 --> w + 0x04, 0xd8, 0x80, 0x00, 0x02, 0x36, // 120 --> x + 0x04, 0x78, 0x00, 0x0a, 0x28, 0x7e, // 121 --> y + 0x04, 0xc8, 0xa0, 0x82, 0x0a, 0x26, // 122 --> z + 0x03, 0x10, 0xb8, 0x13, 0x10, // 123 --> { + 0x01, 0xff, 0x01, // 124 --> | + 0x03, 0x01, 0xb9, 0x03, 0x01, // 125 --> } + 0x06, 0x10, 0x20, 0x80, 0x00, 0x04, 0x10, 0x20, 0x00, // 126 --> ~ + 0x00, // 127 -->  + 0x00, // 128 --> Ђ + 0x00, // 129 --> Ѓ + 0x00, // 130 --> ‚ + 0x00, // 131 --> ѓ + 0x00, // 132 --> „ + 0x00, // 133 --> … + 0x00, // 134 --> † + 0x00, // 135 --> ‡ + 0x00, // 136 --> € + 0x00, // 137 --> ‰ + 0x00, // 138 --> Љ + 0x00, // 139 --> ‹ + 0x00, // 140 --> Њ + 0x00, // 141 --> Ќ + 0x00, // 142 --> Ћ + 0x00, // 143 --> Џ + 0x00, // 144 --> ђ + 0x00, // 145 --> ‘ + 0x00, // 146 --> ’ + 0x00, // 147 --> “ + 0x00, // 148 --> ” + 0x04, 0x30, 0xe0, 0x81, 0x07, 0x0c, // 149 --> • + 0x00, // 150 --> – + 0x00, // 151 --> — + 0x00, // 152 --> ˜ + 0x00, // 153 --> ™ + 0x00, // 154 --> љ + 0x00, // 155 --> › + 0x00, // 156 --> њ + 0x00, // 157 --> ќ + 0x00, // 158 --> ћ + 0x00, // 159 --> џ + 0x00, // 160 -->   + 0x00, // 161 --> Ў + 0x00, // 162 --> ў + 0x00, // 163 --> Ј + 0x00, // 164 --> ¤ + 0x00, // 165 --> Ґ + 0x01, 0xef, 0x01, // 166 --> ¦ + 0x00, // 167 --> § + 0x00, // 168 --> Ё + 0x07, 0x7c, 0x08, 0xa2, 0x8b, 0x2a, 0xaa, 0x08, 0xc2, 0x07, // 169 --> © + 0x00, // 170 --> Є + 0x00, // 171 --> « + 0x00, // 172 --> ¬ + 0x00, // 173 --> ­ + 0x00, // 174 --> ® + 0x00, // 175 --> Ї + 0x04, 0x06, 0x24, 0x90, 0x80, 0x01, // 176 --> ° + 0x05, 0x88, 0x20, 0xe2, 0x0b, 0x22, 0x88, 0x00, // 177 --> ± + 0x04, 0x12, 0x64, 0x50, 0x81, 0x04, // 178 --> І + 0x00, // 179 --> і + 0x00, // 180 --> ґ + 0x00, // 181 --> µ + 0x00, // 182 --> ¶ + 0x00, // 183 --> · + 0x00, // 184 --> ё + 0x08, 0xfe, 0x20, 0x00, 0x01, 0x08, 0xfe, 0x90, 0xa0, 0x02, 0x09, // 185 --> № + 0x00, // 186 --> є + 0x00, // 187 --> » + 0x00, // 188 --> ј + 0x00, // 189 --> Ѕ + 0x00, // 190 --> ѕ + 0x00, // 191 --> ї + 0x05, 0xfc, 0x48, 0x20, 0x81, 0x04, 0xfc, 0x00, // 192 --> А + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x62, 0x00, // 193 --> Б + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 194 --> В + 0x05, 0xfe, 0x08, 0x20, 0x80, 0x00, 0x02, 0x00, // 195 --> Г + 0x07, 0x80, 0xf1, 0x23, 0x88, 0x20, 0x82, 0xf0, 0x03, 0x18, // 196 --> Д + 0x05, 0xfe, 0x48, 0x22, 0x89, 0x24, 0x82, 0x00, // 197 --> Е + 0x07, 0xee, 0x40, 0x00, 0x81, 0x3f, 0x10, 0x40, 0xe0, 0x0e, // 198 --> Ж + 0x05, 0x44, 0x48, 0x22, 0x89, 0x24, 0x6c, 0x00, // 199 --> З + 0x05, 0xfe, 0x80, 0x00, 0x01, 0x02, 0xfe, 0x00, // 200 --> И + 0x05, 0xfc, 0x84, 0x20, 0x41, 0x02, 0xfc, 0x00, // 201 --> Й + 0x05, 0xfe, 0x40, 0x80, 0x02, 0x11, 0x82, 0x00, // 202 --> К + 0x05, 0x80, 0xf0, 0x21, 0x80, 0x00, 0xfe, 0x00, // 203 --> Л + 0x07, 0xfe, 0x10, 0x80, 0x00, 0x04, 0x08, 0x10, 0xe0, 0x0f, // 204 --> М + 0x05, 0xfe, 0x40, 0x00, 0x01, 0x04, 0xfe, 0x00, // 205 --> Н + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x7c, 0x00, // 206 --> О + 0x05, 0xfe, 0x08, 0x20, 0x80, 0x00, 0xfe, 0x00, // 207 --> П + 0x05, 0xfe, 0x48, 0x20, 0x81, 0x04, 0x0c, 0x00, // 208 --> Р + 0x05, 0x7c, 0x08, 0x22, 0x88, 0x20, 0x44, 0x00, // 209 --> С + 0x05, 0x02, 0x08, 0xe0, 0x8f, 0x00, 0x02, 0x00, // 210 --> Т + 0x05, 0x4e, 0x40, 0x02, 0x09, 0x24, 0x7e, 0x00, // 211 --> У + 0x07, 0x7c, 0x08, 0x22, 0xc8, 0x7f, 0x82, 0x08, 0xc2, 0x07, // 212 --> Ф + 0x05, 0xc6, 0xa0, 0x00, 0x01, 0x0a, 0xc6, 0x00, // 213 --> Х + 0x06, 0xfe, 0x00, 0x02, 0x08, 0x20, 0xfe, 0x00, 0x06, // 214 --> Ц + 0x05, 0x0e, 0x40, 0x00, 0x01, 0x04, 0xfe, 0x00, // 215 --> Ч + 0x07, 0xfe, 0x00, 0x02, 0x88, 0x3f, 0x80, 0x00, 0xe2, 0x0f, // 216 --> Ш + 0x08, 0xfe, 0x00, 0x02, 0x88, 0x3f, 0x80, 0x00, 0xe2, 0x0f, 0x60, // 217 --> Щ + 0x07, 0x02, 0x08, 0xe0, 0x0f, 0x24, 0x90, 0x40, 0x02, 0x06, // 218 --> Ъ + 0x07, 0xfe, 0x40, 0x02, 0x09, 0x24, 0x60, 0x00, 0xe0, 0x0f, // 219 --> Ы + 0x05, 0xfe, 0x40, 0x02, 0x09, 0x24, 0x60, 0x00, // 220 --> Ь + 0x05, 0x44, 0x08, 0x22, 0x89, 0x24, 0x7c, 0x00, // 221 --> Э + 0x08, 0xfe, 0x40, 0x00, 0x01, 0x1f, 0x82, 0x08, 0x22, 0x08, 0x1f, // 222 --> Ю + 0x05, 0x8c, 0x48, 0x21, 0x83, 0x04, 0xfe, 0x00, // 223 --> Я + 0x04, 0x70, 0x20, 0x82, 0x08, 0x3e, // 224 --> а + 0x04, 0x7c, 0x28, 0xa2, 0x88, 0x1c, // 225 --> б + 0x04, 0xf8, 0xa0, 0x82, 0x0a, 0x14, // 226 --> в + 0x04, 0xf8, 0x20, 0x80, 0x00, 0x02, // 227 --> г + 0x06, 0x80, 0xc1, 0x83, 0x08, 0x22, 0xf0, 0x00, 0x06, // 228 --> д + 0x04, 0x70, 0xa0, 0x82, 0x0a, 0x0c, // 229 --> е + 0x07, 0xd8, 0x80, 0x00, 0x02, 0x3e, 0x20, 0x80, 0x80, 0x0d, // 230 --> ж + 0x04, 0x50, 0x20, 0x82, 0x0a, 0x14, // 231 --> з + 0x05, 0xf8, 0x00, 0x01, 0x02, 0x04, 0xf8, 0x00, // 232 --> и + 0x05, 0xf8, 0x04, 0x21, 0x42, 0x04, 0xf8, 0x00, // 233 --> й + 0x04, 0xf8, 0x80, 0x00, 0x05, 0x22, // 234 --> к + 0x04, 0x80, 0xc0, 0x81, 0x00, 0x3e, // 235 --> л + 0x05, 0xf8, 0x40, 0x00, 0x02, 0x04, 0xf8, 0x00, // 236 --> м + 0x04, 0xf8, 0x80, 0x00, 0x02, 0x3e, // 237 --> н + 0x04, 0x70, 0x20, 0x82, 0x08, 0x1c, // 238 --> о + 0x04, 0xf8, 0x20, 0x80, 0x00, 0x3e, // 239 --> п + 0x04, 0xf8, 0x23, 0x82, 0x08, 0x1c, // 240 --> р + 0x04, 0x70, 0x20, 0x82, 0x08, 0x14, // 241 --> с + 0x05, 0x08, 0x20, 0x80, 0x0f, 0x02, 0x08, 0x00, // 242 --> т + 0x04, 0x78, 0x00, 0x0a, 0x28, 0x7e, // 243 --> у + 0x07, 0x70, 0x20, 0x82, 0x88, 0xff, 0x88, 0x20, 0x02, 0x07, // 244 --> ф + 0x04, 0xd8, 0x80, 0x00, 0x02, 0x36, // 245 --> х + 0x05, 0xf8, 0x00, 0x02, 0x08, 0x3e, 0x80, 0x01, // 246 --> ц + 0x04, 0x18, 0x80, 0x00, 0x02, 0x3e, // 247 --> ч + 0x07, 0xf8, 0x00, 0x02, 0x08, 0x3e, 0x80, 0x00, 0x82, 0x0f, // 248 --> ш + 0x08, 0xf8, 0x00, 0x02, 0x08, 0x3e, 0x80, 0x00, 0x82, 0x0f, 0x60, // 249 --> щ + 0x05, 0x08, 0xe0, 0x03, 0x0a, 0x28, 0x40, 0x00, // 250 --> ъ + 0x06, 0xf8, 0x80, 0x02, 0x0a, 0x10, 0x00, 0xe0, 0x03, // 251 --> ы + 0x04, 0xf8, 0x80, 0x02, 0x0a, 0x10, // 252 --> ь + 0x04, 0x50, 0x20, 0x82, 0x0a, 0x1c, // 253 --> э + 0x06, 0xf8, 0x80, 0x00, 0x07, 0x22, 0x88, 0xc0, 0x01, // 254 --> ю + 0x04, 0x90, 0xa0, 0x81, 0x02, 0x3e // 255 --> я +}; diff --git a/examples/tests/testfont_packed_bin.txt b/examples/tests/testfont_packed_bin.txt new file mode 100644 index 0000000..c3ad287 --- /dev/null +++ b/examples/tests/testfont_packed_bin.txt @@ -0,0 +1,259 @@ +// File generated by McBitFont v2.0 +// made by Anton Mukhin (mcfly@mcflyer.ru) +// +// +// Bytes total: 1264 +// Scan order: Columns +// Horizontal direction: Left to Right +// Vertical direction: Top to Bottom + +// Bit order: LSB Top +// Numbers base: Binary +// Numbers size: 8 bit + +// Text format: 1D C array +// Numbers per line: 1 Symbol per line + +// Font header map: +// packed; // Flag for packed font +// width; // Font width in pixels (0 - variable width) +// height; // Font height in pixels +// space; // Font space in pixels +// first; // First character code +// last; // Last character code + + +const uint8_t haxrcorp_4089_cyrillic_altgr[] = { + // Meta header + 1, // Is it a packed font? + 0, // Font width in pixels; 0 - variable width + 10, // Font height in pixels + 0, // Font space (between symbols) in pixels + 32, // First character code + 255, // Last character code + // Data: + 0b00000011, 0b00000000, 0b00000000, 0b00000000, 0b00000000, // 32 --> + 0b00000001, 0b10111110, 0b00000000, // 33 --> ! + 0b00000011, 0b00001110, 0b00000000, 0b11100000, 0b00000000, // 34 --> " + 0b00000101, 0b00101000, 0b11110000, 0b10000001, 0b00000010, 0b00011111, 0b00101000, 0b00000000, // 35 --> # + 0b00000101, 0b01001100, 0b01001000, 0b11110010, 0b10011111, 0b00100100, 0b01100100, 0b00000000, // 36 --> $ + 0b00000111, 0b10000100, 0b00101000, 0b01000001, 0b00000010, 0b00000100, 0b01001000, 0b10010000, 0b00100010, 0b00000100, // 37 --> % + 0b00000110, 0b01101100, 0b01001000, 0b00100010, 0b00001001, 0b00101011, 0b01000000, 0b11000000, 0b00000010, // 38 --> & + 0b00000001, 0b00001110, 0b00000000, // 39 --> ' + 0b00000011, 0b01111100, 0b00001000, 0b00010010, 0b00010000, // 40 --> ( + 0b00000011, 0b00000001, 0b00001001, 0b11000010, 0b00000111, // 41 --> ) + 0b00000101, 0b00010100, 0b00100000, 0b11100000, 0b00000011, 0b00000010, 0b00010100, 0b00000000, // 42 --> * + 0b00000101, 0b00010000, 0b01000000, 0b11000000, 0b00000111, 0b00000100, 0b00010000, 0b00000000, // 43 --> + + 0b00000010, 0b00000000, 0b00000001, 0b00000011, // 44 --> , + 0b00000101, 0b00010000, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b00010000, 0b00000000, // 45 --> - + 0b00000001, 0b10000000, 0b00000000, // 46 --> . + 0b00000111, 0b10000000, 0b00000000, 0b00000001, 0b00000010, 0b00000100, 0b00001000, 0b00010000, 0b00100000, 0b00000000, // 47 --> / + 0b00000101, 0b01111100, 0b10001000, 0b00100010, 0b10001001, 0b00100010, 0b01111100, 0b00000000, // 48 --> 0 + 0b00000010, 0b00000100, 0b11111000, 0b00000011, // 49 --> 1 + 0b00000101, 0b10000100, 0b00001000, 0b00100011, 0b10001010, 0b00100100, 0b10001100, 0b00000000, // 50 --> 2 + 0b00000101, 0b01000100, 0b00001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 51 --> 3 + 0b00000101, 0b00110000, 0b10100000, 0b01000000, 0b10000010, 0b00111111, 0b00100000, 0b00000000, // 52 --> 4 + 0b00000101, 0b01001110, 0b00101000, 0b10100010, 0b10001000, 0b00100010, 0b01110010, 0b00000000, // 53 --> 5 + 0b00000101, 0b01111100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01100100, 0b00000000, // 54 --> 6 + 0b00000101, 0b00000010, 0b00001000, 0b00100000, 0b10001100, 0b00001100, 0b00001110, 0b00000000, // 55 --> 7 + 0b00000101, 0b01101100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 56 --> 8 + 0b00000101, 0b01001100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01111100, 0b00000000, // 57 --> 9 + 0b00000001, 0b01001000, 0b00000000, // 58 --> : + 0b00000010, 0b00000000, 0b00100001, 0b00000011, // 59 --> ; + 0b00000011, 0b00010000, 0b10100000, 0b01000000, 0b00000100, // 60 --> < + 0b00000101, 0b00101000, 0b10100000, 0b10000000, 0b00000010, 0b00001010, 0b00101000, 0b00000000, // 61 --> = + 0b00000011, 0b01000100, 0b10100000, 0b00000000, 0b00000001, // 62 --> > + 0b00000101, 0b00000100, 0b00001000, 0b00100000, 0b10001010, 0b00000100, 0b00001100, 0b00000000, // 63 --> ? + 0b00001000, 0b01111110, 0b00000100, 0b10010010, 0b01001001, 0b00101001, 0b10100101, 0b11110100, 0b00010010, 0b10001010, 0b00000111, // 64 --> @ + 0b00000101, 0b11111100, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b11111100, 0b00000000, // 65 --> A + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 66 --> B + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01000100, 0b00000000, // 67 --> C + 0b00000101, 0b11111110, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000000, // 68 --> D + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b10000010, 0b00000000, // 69 --> E + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b00000010, 0b00000000, // 70 --> F + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100100, 0b01110100, 0b00000000, // 71 --> G + 0b00000101, 0b11111110, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b11111110, 0b00000000, // 72 --> H + 0b00000001, 0b11111110, 0b00000000, // 73 --> I + 0b00000101, 0b01000000, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b01111110, 0b00000000, // 74 --> J + 0b00000101, 0b11111110, 0b01000000, 0b10000000, 0b00000010, 0b00010001, 0b10000010, 0b00000000, // 75 --> K + 0b00000101, 0b11111110, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b10000000, 0b00000000, // 76 --> L + 0b00000111, 0b11111110, 0b00010000, 0b10000000, 0b00000000, 0b00000100, 0b00001000, 0b00010000, 0b11100000, 0b00001111, // 77 --> M + 0b00000101, 0b11111110, 0b00100000, 0b00000000, 0b00000001, 0b00001000, 0b11111110, 0b00000000, // 78 --> N + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000000, // 79 --> O + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b00001100, 0b00000000, // 80 --> P + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000001, // 81 --> Q + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000011, 0b00010100, 0b10001100, 0b00000000, // 82 --> R + 0b00000101, 0b01001100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01100100, 0b00000000, // 83 --> S + 0b00000101, 0b00000010, 0b00001000, 0b11100000, 0b10001111, 0b00000000, 0b00000010, 0b00000000, // 84 --> T + 0b00000101, 0b01111110, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b01111110, 0b00000000, // 85 --> U + 0b00000101, 0b00001110, 0b11000000, 0b00000000, 0b00001100, 0b00001100, 0b00001110, 0b00000000, // 86 --> V + 0b00000111, 0b01111110, 0b00000000, 0b00000010, 0b10001000, 0b00011111, 0b10000000, 0b00000000, 0b11100010, 0b00000111, // 87 --> W + 0b00000101, 0b11000110, 0b10100000, 0b00000000, 0b00000001, 0b00001010, 0b11000110, 0b00000000, // 88 --> X + 0b00000101, 0b00000110, 0b00100000, 0b00000000, 0b00001111, 0b00000010, 0b00000110, 0b00000000, // 89 --> Y + 0b00000101, 0b11000010, 0b10001000, 0b00100010, 0b10001001, 0b00100010, 0b10000110, 0b00000000, // 90 --> Z + 0b00000011, 0b11111111, 0b00000101, 0b00010100, 0b00010000, // 91 --> [ + 0b00000111, 0b00000010, 0b00010000, 0b10000000, 0b00000000, 0b00000100, 0b00100000, 0b00000000, 0b00000001, 0b00001000, // 92 --> \ + 0b00000011, 0b00000001, 0b00000101, 0b11110100, 0b00011111, // 93 --> ] + 0b00000101, 0b00001000, 0b00010000, 0b00100000, 0b00000000, 0b00000001, 0b00001000, 0b00000000, // 94 --> ^ + 0b00000101, 0b10000000, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b10000000, 0b00000000, // 95 --> _ + 0b00000011, 0b00000010, 0b00010000, 0b10000000, 0b00000000, // 96 --> ` + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00111110, // 97 --> a + 0b00000100, 0b11111110, 0b00100000, 0b10000010, 0b00001000, 0b00011100, // 98 --> b + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00010100, // 99 --> c + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b10001000, 0b00111111, // 100 --> d + 0b00000100, 0b01110000, 0b10100000, 0b10000010, 0b00001010, 0b00001100, // 101 --> e + 0b00000010, 0b11111100, 0b01001000, 0b00000000, // 102 --> f + 0b00000100, 0b01110000, 0b00100000, 0b10001010, 0b00101000, 0b01111110, // 103 --> g + 0b00000100, 0b11111110, 0b00100000, 0b10000000, 0b00000000, 0b00111100, // 104 --> h + 0b00000001, 0b11111010, 0b00000000, // 105 --> i + 0b00000010, 0b00000000, 0b11101010, 0b00000111, // 106 --> j + 0b00000100, 0b11111110, 0b10000000, 0b00000000, 0b00000101, 0b00100010, // 107 --> k + 0b00000001, 0b11111110, 0b00000000, // 108 --> l + 0b00000111, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00111100, 0b00001000, 0b00100000, 0b00000000, 0b00001111, // 109 --> m + 0b00000100, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00111100, // 110 --> n + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00011100, // 111 --> o + 0b00000100, 0b11111000, 0b00100011, 0b10000010, 0b00001000, 0b00011100, // 112 --> p + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b11111110, // 113 --> q + 0b00000011, 0b11111000, 0b00100000, 0b10000000, 0b00000000, // 114 --> r + 0b00000011, 0b10010000, 0b10100000, 0b10000010, 0b00000100, // 115 --> s + 0b00000011, 0b00001000, 0b11111000, 0b10000011, 0b00000000, // 116 --> t + 0b00000100, 0b01111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, // 117 --> u + 0b00000100, 0b01111000, 0b00000000, 0b00000010, 0b00001000, 0b00011110, // 118 --> v + 0b00000111, 0b01111000, 0b00000000, 0b00000010, 0b00001000, 0b00011110, 0b10000000, 0b00000000, 0b10000010, 0b00000111, // 119 --> w + 0b00000100, 0b11011000, 0b10000000, 0b00000000, 0b00000010, 0b00110110, // 120 --> x + 0b00000100, 0b01111000, 0b00000000, 0b00001010, 0b00101000, 0b01111110, // 121 --> y + 0b00000100, 0b11001000, 0b10100000, 0b10000010, 0b00001010, 0b00100110, // 122 --> z + 0b00000011, 0b00010000, 0b10111000, 0b00010011, 0b00010000, // 123 --> { + 0b00000001, 0b11111111, 0b00000001, // 124 --> | + 0b00000011, 0b00000001, 0b10111001, 0b00000011, 0b00000001, // 125 --> } + 0b00000110, 0b00010000, 0b00100000, 0b10000000, 0b00000000, 0b00000100, 0b00010000, 0b00100000, 0b00000000, // 126 --> ~ + 0b00000000, // 127 -->  + 0b00000000, // 128 --> Ђ + 0b00000000, // 129 --> Ѓ + 0b00000000, // 130 --> ‚ + 0b00000000, // 131 --> ѓ + 0b00000000, // 132 --> „ + 0b00000000, // 133 --> … + 0b00000000, // 134 --> † + 0b00000000, // 135 --> ‡ + 0b00000000, // 136 --> € + 0b00000000, // 137 --> ‰ + 0b00000000, // 138 --> Љ + 0b00000000, // 139 --> ‹ + 0b00000000, // 140 --> Њ + 0b00000000, // 141 --> Ќ + 0b00000000, // 142 --> Ћ + 0b00000000, // 143 --> Џ + 0b00000000, // 144 --> ђ + 0b00000000, // 145 --> ‘ + 0b00000000, // 146 --> ’ + 0b00000000, // 147 --> “ + 0b00000000, // 148 --> ” + 0b00000100, 0b00110000, 0b11100000, 0b10000001, 0b00000111, 0b00001100, // 149 --> • + 0b00000000, // 150 --> – + 0b00000000, // 151 --> — + 0b00000000, // 152 --> ˜ + 0b00000000, // 153 --> ™ + 0b00000000, // 154 --> љ + 0b00000000, // 155 --> › + 0b00000000, // 156 --> њ + 0b00000000, // 157 --> ќ + 0b00000000, // 158 --> ћ + 0b00000000, // 159 --> џ + 0b00000000, // 160 -->   + 0b00000000, // 161 --> Ў + 0b00000000, // 162 --> ў + 0b00000000, // 163 --> Ј + 0b00000000, // 164 --> ¤ + 0b00000000, // 165 --> Ґ + 0b00000001, 0b11101111, 0b00000001, // 166 --> ¦ + 0b00000000, // 167 --> § + 0b00000000, // 168 --> Ё + 0b00000111, 0b01111100, 0b00001000, 0b10100010, 0b10001011, 0b00101010, 0b10101010, 0b00001000, 0b11000010, 0b00000111, // 169 --> © + 0b00000000, // 170 --> Є + 0b00000000, // 171 --> « + 0b00000000, // 172 --> ¬ + 0b00000000, // 173 --> ­ + 0b00000000, // 174 --> ® + 0b00000000, // 175 --> Ї + 0b00000100, 0b00000110, 0b00100100, 0b10010000, 0b10000000, 0b00000001, // 176 --> ° + 0b00000101, 0b10001000, 0b00100000, 0b11100010, 0b00001011, 0b00100010, 0b10001000, 0b00000000, // 177 --> ± + 0b00000100, 0b00010010, 0b01100100, 0b01010000, 0b10000001, 0b00000100, // 178 --> І + 0b00000000, // 179 --> і + 0b00000000, // 180 --> ґ + 0b00000000, // 181 --> µ + 0b00000000, // 182 --> ¶ + 0b00000000, // 183 --> · + 0b00000000, // 184 --> ё + 0b00001000, 0b11111110, 0b00100000, 0b00000000, 0b00000001, 0b00001000, 0b11111110, 0b10010000, 0b10100000, 0b00000010, 0b00001001, // 185 --> № + 0b00000000, // 186 --> є + 0b00000000, // 187 --> » + 0b00000000, // 188 --> ј + 0b00000000, // 189 --> Ѕ + 0b00000000, // 190 --> ѕ + 0b00000000, // 191 --> ї + 0b00000101, 0b11111100, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b11111100, 0b00000000, // 192 --> А + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01100010, 0b00000000, // 193 --> Б + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 194 --> В + 0b00000101, 0b11111110, 0b00001000, 0b00100000, 0b10000000, 0b00000000, 0b00000010, 0b00000000, // 195 --> Г + 0b00000111, 0b10000000, 0b11110001, 0b00100011, 0b10001000, 0b00100000, 0b10000010, 0b11110000, 0b00000011, 0b00011000, // 196 --> Д + 0b00000101, 0b11111110, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b10000010, 0b00000000, // 197 --> Е + 0b00000111, 0b11101110, 0b01000000, 0b00000000, 0b10000001, 0b00111111, 0b00010000, 0b01000000, 0b11100000, 0b00001110, // 198 --> Ж + 0b00000101, 0b01000100, 0b01001000, 0b00100010, 0b10001001, 0b00100100, 0b01101100, 0b00000000, // 199 --> З + 0b00000101, 0b11111110, 0b10000000, 0b00000000, 0b00000001, 0b00000010, 0b11111110, 0b00000000, // 200 --> И + 0b00000101, 0b11111100, 0b10000100, 0b00100000, 0b01000001, 0b00000010, 0b11111100, 0b00000000, // 201 --> Й + 0b00000101, 0b11111110, 0b01000000, 0b10000000, 0b00000010, 0b00010001, 0b10000010, 0b00000000, // 202 --> К + 0b00000101, 0b10000000, 0b11110000, 0b00100001, 0b10000000, 0b00000000, 0b11111110, 0b00000000, // 203 --> Л + 0b00000111, 0b11111110, 0b00010000, 0b10000000, 0b00000000, 0b00000100, 0b00001000, 0b00010000, 0b11100000, 0b00001111, // 204 --> М + 0b00000101, 0b11111110, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b11111110, 0b00000000, // 205 --> Н + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01111100, 0b00000000, // 206 --> О + 0b00000101, 0b11111110, 0b00001000, 0b00100000, 0b10000000, 0b00000000, 0b11111110, 0b00000000, // 207 --> П + 0b00000101, 0b11111110, 0b01001000, 0b00100000, 0b10000001, 0b00000100, 0b00001100, 0b00000000, // 208 --> Р + 0b00000101, 0b01111100, 0b00001000, 0b00100010, 0b10001000, 0b00100000, 0b01000100, 0b00000000, // 209 --> С + 0b00000101, 0b00000010, 0b00001000, 0b11100000, 0b10001111, 0b00000000, 0b00000010, 0b00000000, // 210 --> Т + 0b00000101, 0b01001110, 0b01000000, 0b00000010, 0b00001001, 0b00100100, 0b01111110, 0b00000000, // 211 --> У + 0b00000111, 0b01111100, 0b00001000, 0b00100010, 0b11001000, 0b01111111, 0b10000010, 0b00001000, 0b11000010, 0b00000111, // 212 --> Ф + 0b00000101, 0b11000110, 0b10100000, 0b00000000, 0b00000001, 0b00001010, 0b11000110, 0b00000000, // 213 --> Х + 0b00000110, 0b11111110, 0b00000000, 0b00000010, 0b00001000, 0b00100000, 0b11111110, 0b00000000, 0b00000110, // 214 --> Ц + 0b00000101, 0b00001110, 0b01000000, 0b00000000, 0b00000001, 0b00000100, 0b11111110, 0b00000000, // 215 --> Ч + 0b00000111, 0b11111110, 0b00000000, 0b00000010, 0b10001000, 0b00111111, 0b10000000, 0b00000000, 0b11100010, 0b00001111, // 216 --> Ш + 0b00001000, 0b11111110, 0b00000000, 0b00000010, 0b10001000, 0b00111111, 0b10000000, 0b00000000, 0b11100010, 0b00001111, 0b01100000, // 217 --> Щ + 0b00000111, 0b00000010, 0b00001000, 0b11100000, 0b00001111, 0b00100100, 0b10010000, 0b01000000, 0b00000010, 0b00000110, // 218 --> Ъ + 0b00000111, 0b11111110, 0b01000000, 0b00000010, 0b00001001, 0b00100100, 0b01100000, 0b00000000, 0b11100000, 0b00001111, // 219 --> Ы + 0b00000101, 0b11111110, 0b01000000, 0b00000010, 0b00001001, 0b00100100, 0b01100000, 0b00000000, // 220 --> Ь + 0b00000101, 0b01000100, 0b00001000, 0b00100010, 0b10001001, 0b00100100, 0b01111100, 0b00000000, // 221 --> Э + 0b00001000, 0b11111110, 0b01000000, 0b00000000, 0b00000001, 0b00011111, 0b10000010, 0b00001000, 0b00100010, 0b00001000, 0b00011111, // 222 --> Ю + 0b00000101, 0b10001100, 0b01001000, 0b00100001, 0b10000011, 0b00000100, 0b11111110, 0b00000000, // 223 --> Я + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00111110, // 224 --> а + 0b00000100, 0b01111100, 0b00101000, 0b10100010, 0b10001000, 0b00011100, // 225 --> б + 0b00000100, 0b11111000, 0b10100000, 0b10000010, 0b00001010, 0b00010100, // 226 --> в + 0b00000100, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00000010, // 227 --> г + 0b00000110, 0b10000000, 0b11000001, 0b10000011, 0b00001000, 0b00100010, 0b11110000, 0b00000000, 0b00000110, // 228 --> д + 0b00000100, 0b01110000, 0b10100000, 0b10000010, 0b00001010, 0b00001100, // 229 --> е + 0b00000111, 0b11011000, 0b10000000, 0b00000000, 0b00000010, 0b00111110, 0b00100000, 0b10000000, 0b10000000, 0b00001101, // 230 --> ж + 0b00000100, 0b01010000, 0b00100000, 0b10000010, 0b00001010, 0b00010100, // 231 --> з + 0b00000101, 0b11111000, 0b00000000, 0b00000001, 0b00000010, 0b00000100, 0b11111000, 0b00000000, // 232 --> и + 0b00000101, 0b11111000, 0b00000100, 0b00100001, 0b01000010, 0b00000100, 0b11111000, 0b00000000, // 233 --> й + 0b00000100, 0b11111000, 0b10000000, 0b00000000, 0b00000101, 0b00100010, // 234 --> к + 0b00000100, 0b10000000, 0b11000000, 0b10000001, 0b00000000, 0b00111110, // 235 --> л + 0b00000101, 0b11111000, 0b01000000, 0b00000000, 0b00000010, 0b00000100, 0b11111000, 0b00000000, // 236 --> м + 0b00000100, 0b11111000, 0b10000000, 0b00000000, 0b00000010, 0b00111110, // 237 --> н + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00011100, // 238 --> о + 0b00000100, 0b11111000, 0b00100000, 0b10000000, 0b00000000, 0b00111110, // 239 --> п + 0b00000100, 0b11111000, 0b00100011, 0b10000010, 0b00001000, 0b00011100, // 240 --> р + 0b00000100, 0b01110000, 0b00100000, 0b10000010, 0b00001000, 0b00010100, // 241 --> с + 0b00000101, 0b00001000, 0b00100000, 0b10000000, 0b00001111, 0b00000010, 0b00001000, 0b00000000, // 242 --> т + 0b00000100, 0b01111000, 0b00000000, 0b00001010, 0b00101000, 0b01111110, // 243 --> у + 0b00000111, 0b01110000, 0b00100000, 0b10000010, 0b10001000, 0b11111111, 0b10001000, 0b00100000, 0b00000010, 0b00000111, // 244 --> ф + 0b00000100, 0b11011000, 0b10000000, 0b00000000, 0b00000010, 0b00110110, // 245 --> х + 0b00000101, 0b11111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, 0b10000000, 0b00000001, // 246 --> ц + 0b00000100, 0b00011000, 0b10000000, 0b00000000, 0b00000010, 0b00111110, // 247 --> ч + 0b00000111, 0b11111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, 0b10000000, 0b00000000, 0b10000010, 0b00001111, // 248 --> ш + 0b00001000, 0b11111000, 0b00000000, 0b00000010, 0b00001000, 0b00111110, 0b10000000, 0b00000000, 0b10000010, 0b00001111, 0b01100000, // 249 --> щ + 0b00000101, 0b00001000, 0b11100000, 0b00000011, 0b00001010, 0b00101000, 0b01000000, 0b00000000, // 250 --> ъ + 0b00000110, 0b11111000, 0b10000000, 0b00000010, 0b00001010, 0b00010000, 0b00000000, 0b11100000, 0b00000011, // 251 --> ы + 0b00000100, 0b11111000, 0b10000000, 0b00000010, 0b00001010, 0b00010000, // 252 --> ь + 0b00000100, 0b01010000, 0b00100000, 0b10000010, 0b00001010, 0b00011100, // 253 --> э + 0b00000110, 0b11111000, 0b10000000, 0b00000000, 0b00000111, 0b00100010, 0b10001000, 0b11000000, 0b00000001, // 254 --> ю + 0b00000100, 0b10010000, 0b10100000, 0b10000001, 0b00000010, 0b00111110 // 255 --> я +};