FTDI EVE: Cyrillic font, some minor fixes (#20517)
This commit is contained in:
1 parent
6ec4e744c0
commit
6af6a35d9d
22 files changed
+3314
-25
No files matched your search
@@ -1563,6 +1563,9 @@
|
|||||||
//#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾
|
//#define TOUCH_UI_UTF8_FRACTIONS // ¼ ½ ¾
|
||||||
//#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬
|
//#define TOUCH_UI_UTF8_SYMBOLS // µ ¶ ¦ § ¬
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Cyrillic character set, costs about 27KiB of flash
|
||||||
|
//#define TOUCH_UI_UTF8_CYRILLIC_CHARSET
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Use a smaller font when labels don't fit buttons
|
// Use a smaller font when labels don't fit buttons
|
||||||
|
|||||||
@@ -211,6 +211,14 @@ void CLCD::mem_write_32(uint32_t reg_address, uint32_t data) {
|
|||||||
spi_ftdi_deselect();
|
spi_ftdi_deselect();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fill area of len size with repeated data bytes
|
||||||
|
void CLCD::mem_write_fill(uint32_t reg_address, uint8_t data, uint16_t len) {
|
||||||
|
spi_ftdi_select();
|
||||||
|
spi_write_addr(reg_address);
|
||||||
|
while (len--) spi_write_8(data);
|
||||||
|
spi_ftdi_deselect();
|
||||||
|
}
|
||||||
|
|
||||||
/******************* FT800/810 Co-processor Commands *********************************/
|
/******************* FT800/810 Co-processor Commands *********************************/
|
||||||
|
|
||||||
#if FTDI_API_LEVEL == 800
|
#if FTDI_API_LEVEL == 800
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ class CLCD {
|
|||||||
static void mem_write_8 (uint32_t reg_address, uint8_t w_data);
|
static void mem_write_8 (uint32_t reg_address, uint8_t w_data);
|
||||||
static void mem_write_16 (uint32_t reg_address, uint16_t w_data);
|
static void mem_write_16 (uint32_t reg_address, uint16_t w_data);
|
||||||
static void mem_write_32 (uint32_t reg_address, uint32_t w_data);
|
static void mem_write_32 (uint32_t reg_address, uint32_t w_data);
|
||||||
|
static void mem_write_fill (uint32_t reg_address, uint8_t w_data, uint16_t len);
|
||||||
static void mem_write_bulk (uint32_t reg_address, const void *data, uint16_t len, uint8_t padding = 0);
|
static void mem_write_bulk (uint32_t reg_address, const void *data, uint16_t len, uint8_t padding = 0);
|
||||||
static void mem_write_pgm (uint32_t reg_address, const void *data, uint16_t len, uint8_t padding = 0);
|
static void mem_write_pgm (uint32_t reg_address, const void *data, uint16_t len, uint8_t padding = 0);
|
||||||
static void mem_write_bulk (uint32_t reg_address, progmem_str str, uint16_t len, uint8_t padding = 0);
|
static void mem_write_bulk (uint32_t reg_address, progmem_str str, uint16_t len, uint8_t padding = 0);
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
#include "unicode/unicode.h"
|
#include "unicode/unicode.h"
|
||||||
#include "unicode/standard_char_set.h"
|
#include "unicode/standard_char_set.h"
|
||||||
#include "unicode/western_char_set.h"
|
#include "unicode/western_char_set.h"
|
||||||
|
#include "unicode/cyrillic_char_set.h"
|
||||||
#include "unicode/font_bitmaps.h"
|
#include "unicode/font_bitmaps.h"
|
||||||
#include "rgb_t.h"
|
#include "rgb_t.h"
|
||||||
#include "bitmap_info.h"
|
#include "bitmap_info.h"
|
||||||
|
|||||||
@@ -37,11 +37,22 @@ namespace FTDI {
|
|||||||
// split and still allow the ellipsis to fit.
|
// split and still allow the ellipsis to fit.
|
||||||
int16_t lineWidth = 0;
|
int16_t lineWidth = 0;
|
||||||
char *breakPoint = str;
|
char *breakPoint = str;
|
||||||
|
#ifdef TOUCH_UI_USE_UTF8
|
||||||
|
char *tstr = str;
|
||||||
|
while (*tstr) {
|
||||||
|
breakPoint = tstr;
|
||||||
|
const utf8_char_t c = get_utf8_char_and_inc(tstr);
|
||||||
|
lineWidth += fm.get_char_width(c);
|
||||||
|
if (lineWidth + ellipsisWidth < w)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#else
|
||||||
for (char* c = str; *c; c++) {
|
for (char* c = str; *c; c++) {
|
||||||
lineWidth += fm.get_char_width(*c);
|
lineWidth += fm.get_char_width(*c);
|
||||||
if (lineWidth + ellipsisWidth < w)
|
if (lineWidth + ellipsisWidth < w)
|
||||||
breakPoint = c;
|
breakPoint = c;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (lineWidth > w) {
|
if (lineWidth > w) {
|
||||||
*breakPoint = '\0';
|
*breakPoint = '\0';
|
||||||
|
|||||||
+139
@@ -0,0 +1,139 @@
|
|||||||
|
/************************
|
||||||
|
* cyrillic_char_set.cpp *
|
||||||
|
************************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Written By Kirill Shashlov 2020 *
|
||||||
|
* Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||||
|
* *
|
||||||
|
* This program is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* To view a copy of the GNU General Public License, go to the following *
|
||||||
|
* location: <https://www.gnu.org/licenses/>. *
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "../ftdi_extended.h"
|
||||||
|
|
||||||
|
#if ALL(FTDI_EXTENDED, TOUCH_UI_USE_UTF8, TOUCH_UI_UTF8_CYRILLIC_CHARSET)
|
||||||
|
|
||||||
|
#include "cyrillic_char_set_bitmap_31.h"
|
||||||
|
|
||||||
|
#define NUM_ELEMENTS(a) (sizeof(a)/sizeof(a[0]))
|
||||||
|
|
||||||
|
#define UTF8(A) uint16_t(utf8(U##A))
|
||||||
|
|
||||||
|
using namespace FTDI;
|
||||||
|
|
||||||
|
constexpr static uint8_t cyrillic_font_handle = 6;
|
||||||
|
|
||||||
|
uint32_t FTDI::CyrillicCharSet::bitmap_addr;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load bitmap data into RAMG. This function is called once at the start
|
||||||
|
* of the program.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
*
|
||||||
|
* addr - Address in RAMG where the font data is written
|
||||||
|
*
|
||||||
|
* Returns: Last wrote address
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint32_t FTDI::CyrillicCharSet::load_data(uint32_t addr) {
|
||||||
|
if (addr % 4 != 0)
|
||||||
|
addr += 4 - (addr % 4);
|
||||||
|
|
||||||
|
// Load the alternative font metrics
|
||||||
|
CLCD::FontMetrics cyrillic_fm;
|
||||||
|
cyrillic_fm.ptr = addr + 148;
|
||||||
|
cyrillic_fm.format = L4;
|
||||||
|
cyrillic_fm.stride = 20;
|
||||||
|
cyrillic_fm.width = 40;
|
||||||
|
cyrillic_fm.height = 49;
|
||||||
|
LOOP_L_N(i, 127)
|
||||||
|
cyrillic_fm.char_widths[i] = 0;
|
||||||
|
|
||||||
|
// For cyrillic characters, copy the character widths from the widths tables
|
||||||
|
LOOP_L_N(i, NUM_ELEMENTS(cyrillic_font_widths)) {
|
||||||
|
cyrillic_fm.char_widths[i] = cyrillic_font_widths[i];
|
||||||
|
}
|
||||||
|
CLCD::mem_write_bulk(addr, &cyrillic_fm, 148);
|
||||||
|
|
||||||
|
// Decode the RLE data and load it into RAMG as a bitmap
|
||||||
|
uint32_t lastaddr = write_rle_data(addr + 148, cyrillic_font, sizeof(cyrillic_font));
|
||||||
|
|
||||||
|
bitmap_addr = addr;
|
||||||
|
|
||||||
|
return lastaddr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Populates the bitmap handles for the custom into the display list.
|
||||||
|
* This function is called once at the start of each display list.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
*
|
||||||
|
* cmd - Object used for writing to the FTDI chip command queue.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void FTDI::CyrillicCharSet::load_bitmaps(CommandProcessor& cmd) {
|
||||||
|
CLCD::FontMetrics cyrillic_fm;
|
||||||
|
cyrillic_fm.ptr = bitmap_addr + 148;
|
||||||
|
cyrillic_fm.format = L4;
|
||||||
|
cyrillic_fm.stride = 20;
|
||||||
|
cyrillic_fm.width = 40;
|
||||||
|
cyrillic_fm.height = 49;
|
||||||
|
set_font_bitmap(cmd, cyrillic_fm, cyrillic_font_handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Renders a character at location x and y. The x position is incremented
|
||||||
|
* by the width of the character.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
*
|
||||||
|
* cmd - If non-NULL the symbol is drawn to the screen.
|
||||||
|
* If NULL, only increment position for text measurement.
|
||||||
|
*
|
||||||
|
* x, y - The location at which to draw the character. On output,
|
||||||
|
* incremented to the location of the next character.
|
||||||
|
*
|
||||||
|
* fs - A scaling object used to scale the font. The display will
|
||||||
|
* already be configured to scale bitmaps, but positions
|
||||||
|
* must be scaled using fs.scale()
|
||||||
|
*
|
||||||
|
* c - The unicode code point to draw. If the renderer does not
|
||||||
|
* support the character, it should return false.
|
||||||
|
*
|
||||||
|
* Returns: Whether the character was supported.
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool FTDI::CyrillicCharSet::render_glyph(CommandProcessor* cmd, int &x, int &y, font_size_t fs, utf8_char_t c) {
|
||||||
|
// A supported character?
|
||||||
|
if ((c < UTF8('А') || c > UTF8('я')) && (c != UTF8('Ё')) && (c != UTF8('ё'))) return false;
|
||||||
|
|
||||||
|
uint8_t idx = (c == UTF8('Ё')) ? 64 :
|
||||||
|
(c == UTF8('ё')) ? 65 :
|
||||||
|
(c < UTF8('р')) ? c - UTF8('А') :
|
||||||
|
c - UTF8('р') + 48
|
||||||
|
;
|
||||||
|
|
||||||
|
uint8_t width = cyrillic_font_widths[idx];
|
||||||
|
|
||||||
|
// Draw the character
|
||||||
|
if (cmd) ext_vertex2ii(*cmd, x, y, cyrillic_font_handle, idx);
|
||||||
|
|
||||||
|
// Increment X to the next character position
|
||||||
|
x += fs.scale(width);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // FTDI_EXTENDED && TOUCH_UI_USE_UTF8 && TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||||
+32
@@ -0,0 +1,32 @@
|
|||||||
|
/**********************
|
||||||
|
* cyrillic_char_set.h *
|
||||||
|
**********************/
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Written By Kirill Shashlov 2020 *
|
||||||
|
* Marcio Teixeira 2019 - Aleph Objects, Inc. *
|
||||||
|
* *
|
||||||
|
* This program is free software: you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
* This program is distributed in the hope that it will be useful, *
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||||
|
* GNU General Public License for more details. *
|
||||||
|
* *
|
||||||
|
* To view a copy of the GNU General Public License, go to the following *
|
||||||
|
* location: <https://www.gnu.org/licenses/>. *
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
namespace FTDI {
|
||||||
|
class CyrillicCharSet {
|
||||||
|
private:
|
||||||
|
static uint32_t bitmap_addr;
|
||||||
|
public:
|
||||||
|
static uint32_t load_data(uint32_t addr);
|
||||||
|
static void load_bitmaps(CommandProcessor&);
|
||||||
|
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
||||||
|
};
|
||||||
|
}
|
||||||
+2529
File diff suppressed because it is too large.
Load diff
+4
-2
@@ -25,12 +25,14 @@
|
|||||||
|
|
||||||
namespace FTDI {
|
namespace FTDI {
|
||||||
|
|
||||||
void write_rle_data(uint16_t addr, const uint8_t *data, size_t n) {
|
uint32_t write_rle_data(uint32_t addr, const uint8_t *data, size_t n) {
|
||||||
for (; n >= 2; n -= 2) {
|
for (; n >= 2; n -= 2) {
|
||||||
uint8_t count = pgm_read_byte(data++);
|
uint8_t count = pgm_read_byte(data++);
|
||||||
uint8_t value = pgm_read_byte(data++);
|
uint8_t value = pgm_read_byte(data++);
|
||||||
while (count--) CLCD::mem_write_8(addr++, value);
|
CLCD::mem_write_fill(addr, value, count);
|
||||||
|
addr += count;
|
||||||
}
|
}
|
||||||
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle) {
|
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle) {
|
||||||
|
|||||||
+1
-1
@@ -24,7 +24,7 @@
|
|||||||
class CommandProcessor;
|
class CommandProcessor;
|
||||||
|
|
||||||
namespace FTDI {
|
namespace FTDI {
|
||||||
void write_rle_data(uint16_t addr, const uint8_t *data, size_t n);
|
uint32_t write_rle_data(uint32_t addr, const uint8_t *data, size_t n);
|
||||||
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle);
|
void set_font_bitmap(CommandProcessor& cmd, CLCD::FontMetrics &fm, uint8_t handle);
|
||||||
void ext_vertex2ii(CommandProcessor &cmd, int x, int y, uint8_t handle, uint8_t cell);
|
void ext_vertex2ii(CommandProcessor &cmd, int x, int y, uint8_t handle, uint8_t cell);
|
||||||
}
|
}
|
||||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
+535
@@ -0,0 +1,535 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="40"
|
||||||
|
height="3234"
|
||||||
|
viewBox="0 0 10.583333 855.66248"
|
||||||
|
version="1.1"
|
||||||
|
id="svg8"
|
||||||
|
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||||
|
sodipodi:docname="cyrillic_char_set_bitmap_31.svg"
|
||||||
|
inkscape:export-filename="C:\Users\kiril\Documents\PlatformIO\Marlin\Marlin\src\lcd\extui\lib\ftdi_eve_touch_ui\ftdi_eve_lib\extended\unicode\font_bitmaps\cyrillic_char_set_bitmap_31.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96">
|
||||||
|
<defs
|
||||||
|
id="defs2" />
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#666666"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="1"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="1.4142136"
|
||||||
|
inkscape:cx="376.00796"
|
||||||
|
inkscape:cy="-222.93717"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
units="px"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1021"
|
||||||
|
inkscape:window-x="-7"
|
||||||
|
inkscape:window-y="-7"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:document-rotation="0"
|
||||||
|
fit-margin-top="0"
|
||||||
|
fit-margin-left="0"
|
||||||
|
fit-margin-right="0"
|
||||||
|
fit-margin-bottom="0"
|
||||||
|
inkscape:snap-nodes="false"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
showguides="false">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid94"
|
||||||
|
spacingx="11.1125"
|
||||||
|
spacingy="12.964583"
|
||||||
|
originx="3.0055911e-10"
|
||||||
|
originy="0" />
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid110"
|
||||||
|
snapvisiblegridlinesonly="false"
|
||||||
|
spacingx="52.916666"
|
||||||
|
spacingy="12.964583"
|
||||||
|
color="#ff6400"
|
||||||
|
opacity="1"
|
||||||
|
originx="3.0055911e-10"
|
||||||
|
originy="-2.6458333"
|
||||||
|
empcolor="#ff6400"
|
||||||
|
empopacity="1" />
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid112"
|
||||||
|
snapvisiblegridlinesonly="true"
|
||||||
|
enabled="true"
|
||||||
|
originx="3.0055911e-10"
|
||||||
|
spacingx="52.916665"
|
||||||
|
spacingy="12.964583"
|
||||||
|
color="#ff6400"
|
||||||
|
opacity="1"
|
||||||
|
empcolor="#ff6400"
|
||||||
|
empopacity="1"
|
||||||
|
originy="2.3812499" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<metadata
|
||||||
|
id="metadata5">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(0,264.81684)">
|
||||||
|
<image
|
||||||
|
y="-947.59998"
|
||||||
|
x="-1.7763568e-15"
|
||||||
|
id="image4606"
|
||||||
|
xlink:href="data:image/png;base64,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 9GGkVFW1wU+RT7aUjLorBrm0hehgaTLine truncated
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
height="1244.6"
|
||||||
|
width="9.5249996"
|
||||||
|
style="display:none" />
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#fd0000;fill-opacity:0.635071;stroke:none;stroke-width:0.264583;stroke-opacity:1"
|
||||||
|
x="-2.5308407e-06"
|
||||||
|
y="-873.23492"
|
||||||
|
id="text4630"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
x="-2.5308407e-06"
|
||||||
|
y="-873.23492"
|
||||||
|
id="tspan4634"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.5819px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#fd0000;fill-opacity:0.635071;stroke:none;stroke-width:0.264583;stroke-opacity:1" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;line-height:13.0757px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.221634"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-256.69623"
|
||||||
|
id="text4642"
|
||||||
|
inkscape:export-xdpi="91.400002"
|
||||||
|
inkscape:export-ydpi="91.400002"
|
||||||
|
transform="scale(1.008509,0.9915628)"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan94"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-256.69623"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">А</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan96"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-243.62054"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Б</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan98"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-230.54485"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">В</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan100"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-217.46915"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Г</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan102"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-204.39345"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Д</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan104"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-191.31775"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Е</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan106"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-178.24205"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ж</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan108"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-165.16635"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">З</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan110"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-152.09065"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">И</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan112"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-139.01495"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Й</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan114"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-125.93924"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">К</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan116"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-112.86354"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Л</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan118"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-99.787842"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">М</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan120"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-86.712143"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Н</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan122"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-73.636444"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">О</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan124"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-60.560741"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">П</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan126"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-47.485043"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Р</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan128"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-34.409344"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">С</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan130"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-21.333645"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Т</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan132"
|
||||||
|
x="-0.109361"
|
||||||
|
y="-8.2579451"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">У</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan134"
|
||||||
|
x="-0.109361"
|
||||||
|
y="4.8177543"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ф</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan136"
|
||||||
|
x="-0.109361"
|
||||||
|
y="17.893454"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Х</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan138"
|
||||||
|
x="-0.109361"
|
||||||
|
y="30.969154"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ц</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan140"
|
||||||
|
x="-0.109361"
|
||||||
|
y="44.044853"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ч</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan142"
|
||||||
|
x="-0.109361"
|
||||||
|
y="57.120552"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ш</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan144"
|
||||||
|
x="-0.109361"
|
||||||
|
y="70.196251"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Щ</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan146"
|
||||||
|
x="-0.109361"
|
||||||
|
y="83.27195"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ь</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan148"
|
||||||
|
x="-0.109361"
|
||||||
|
y="96.347649"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ы</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan150"
|
||||||
|
x="-0.109361"
|
||||||
|
y="109.42335"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ъ</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan152"
|
||||||
|
x="-0.109361"
|
||||||
|
y="122.49905"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Э</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan154"
|
||||||
|
x="-0.109361"
|
||||||
|
y="135.57474"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ю</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan156"
|
||||||
|
x="-0.109361"
|
||||||
|
y="148.65044"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Я</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan158"
|
||||||
|
x="-0.109361"
|
||||||
|
y="161.72614"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">а</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan160"
|
||||||
|
x="-0.109361"
|
||||||
|
y="174.80183"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">б</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan162"
|
||||||
|
x="-0.109361"
|
||||||
|
y="187.87755"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">в</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan164"
|
||||||
|
x="-0.109361"
|
||||||
|
y="200.95325"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">г</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan166"
|
||||||
|
x="-0.109361"
|
||||||
|
y="214.02895"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">д</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan168"
|
||||||
|
x="-0.109361"
|
||||||
|
y="227.10464"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">е</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan170"
|
||||||
|
x="-0.109361"
|
||||||
|
y="240.18034"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ж</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan172"
|
||||||
|
x="-0.109361"
|
||||||
|
y="253.25604"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">з</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan174"
|
||||||
|
x="-0.109361"
|
||||||
|
y="266.33176"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">и</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan176"
|
||||||
|
x="-0.109361"
|
||||||
|
y="279.40744"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">й</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan178"
|
||||||
|
x="-0.109361"
|
||||||
|
y="292.48315"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">к</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan180"
|
||||||
|
x="-0.109361"
|
||||||
|
y="305.55884"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">л</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan182"
|
||||||
|
x="-0.109361"
|
||||||
|
y="318.63455"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">м</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan184"
|
||||||
|
x="-0.109361"
|
||||||
|
y="331.71027"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">н</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan186"
|
||||||
|
x="-0.109361"
|
||||||
|
y="344.78595"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">о</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan188"
|
||||||
|
x="-0.109361"
|
||||||
|
y="357.86166"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">п</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan190"
|
||||||
|
x="-0.109361"
|
||||||
|
y="370.93735"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">р</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan192"
|
||||||
|
x="-0.109361"
|
||||||
|
y="384.01306"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">с</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan194"
|
||||||
|
x="-0.109361"
|
||||||
|
y="397.08875"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">т</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan196"
|
||||||
|
x="-0.109361"
|
||||||
|
y="410.16446"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">у</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan198"
|
||||||
|
x="-0.109361"
|
||||||
|
y="423.24014"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ф</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan200"
|
||||||
|
x="-0.109361"
|
||||||
|
y="436.31586"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">х</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan202"
|
||||||
|
x="-0.109361"
|
||||||
|
y="449.39154"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ц</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan204"
|
||||||
|
x="-0.109361"
|
||||||
|
y="462.46725"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ч</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan206"
|
||||||
|
x="-0.109361"
|
||||||
|
y="475.54294"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ш</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan208"
|
||||||
|
x="-0.109361"
|
||||||
|
y="488.61865"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">щ</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan210"
|
||||||
|
x="-0.109361"
|
||||||
|
y="501.69434"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ь</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan212"
|
||||||
|
x="-0.109361"
|
||||||
|
y="514.77002"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ы</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan214"
|
||||||
|
x="-0.109361"
|
||||||
|
y="527.8457"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ъ</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan216"
|
||||||
|
x="-0.109361"
|
||||||
|
y="540.92139"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">э</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan218"
|
||||||
|
x="-0.109361"
|
||||||
|
y="553.99713"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ю</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan220"
|
||||||
|
x="-0.109361"
|
||||||
|
y="567.07281"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">я</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan222"
|
||||||
|
x="-0.109361"
|
||||||
|
y="580.1485"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">Ё</tspan><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan224"
|
||||||
|
x="-0.109361"
|
||||||
|
y="593.22418"
|
||||||
|
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:10.9361px;font-family:FreeSans;-inkscape-font-specification:'FreeSans, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;stroke-width:0.221634">ё</tspan></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="0"
|
||||||
|
y="-1286.5312"
|
||||||
|
id="text5550"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan5548"
|
||||||
|
x="0"
|
||||||
|
y="-1286.5312"
|
||||||
|
style="stroke-width:0.264583" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="0"
|
||||||
|
y="-1286.5312"
|
||||||
|
id="text8872"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan8870"
|
||||||
|
x="0"
|
||||||
|
y="-1286.5312"
|
||||||
|
style="stroke-width:0.264583" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="0"
|
||||||
|
y="-1269.8625"
|
||||||
|
id="text8876"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan8874"
|
||||||
|
x="0"
|
||||||
|
y="-1269.8625"
|
||||||
|
style="stroke-width:0.264583" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="0"
|
||||||
|
y="196.98749"
|
||||||
|
id="text4641"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4639"
|
||||||
|
x="0"
|
||||||
|
y="196.98749"
|
||||||
|
style="stroke-width:0.264583" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="0"
|
||||||
|
y="230.325"
|
||||||
|
id="text4649"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4647"
|
||||||
|
x="0"
|
||||||
|
y="230.325"
|
||||||
|
style="stroke-width:0.264583" /></text>
|
||||||
|
<text
|
||||||
|
xml:space="preserve"
|
||||||
|
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
|
||||||
|
x="0"
|
||||||
|
y="10.456248"
|
||||||
|
id="text4532"><tspan
|
||||||
|
sodipodi:role="line"
|
||||||
|
id="tspan4530"
|
||||||
|
x="0"
|
||||||
|
y="10.456248"
|
||||||
|
style="stroke-width:0.264583" /></text>
|
||||||
|
<image
|
||||||
|
sodipodi:absref="C:\Users\kiril\Documents\PlatformIO\Marlin\Marlin\src\lcd\extui\lib\ftdi_eve_touch_ui\ftdi_eve_lib\extended\unicode\font_bitmaps\romfont_31.pbm"
|
||||||
|
xlink:href="romfont_31.pbm"
|
||||||
|
width="9.5249996"
|
||||||
|
height="1244.6"
|
||||||
|
preserveAspectRatio="none"
|
||||||
|
id="image106"
|
||||||
|
x="13.229167"
|
||||||
|
y="-264.81683" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 51 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
+2
-1
@@ -48,7 +48,8 @@
|
|||||||
* addr - Address in RAMG where the font data is written
|
* addr - Address in RAMG where the font data is written
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void FTDI::StandardCharSet::load_data(uint32_t) {
|
uint32_t FTDI::StandardCharSet::load_data(uint32_t addr) {
|
||||||
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ namespace FTDI {
|
|||||||
class StandardCharSet {
|
class StandardCharSet {
|
||||||
public:
|
public:
|
||||||
static uint8_t std_char_width(char);
|
static uint8_t std_char_width(char);
|
||||||
static void load_data(uint32_t addr);
|
static uint32_t load_data(uint32_t addr);
|
||||||
static void load_bitmaps(CommandProcessor&);
|
static void load_bitmaps(CommandProcessor&);
|
||||||
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
||||||
};
|
};
|
||||||
|
|||||||
+23
-4
@@ -73,6 +73,13 @@
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
utf8_char_t FTDI::get_utf8_char_and_inc(char *&c) {
|
||||||
|
utf8_char_t val = *(uint8_t*)c++;
|
||||||
|
while ((*c & 0xC0) == 0x80)
|
||||||
|
val = (val << 8) | *(uint8_t*)c++;
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to draw and/or measure a UTF8 string
|
* Helper function to draw and/or measure a UTF8 string
|
||||||
*
|
*
|
||||||
@@ -92,6 +99,9 @@
|
|||||||
const int start_x = x;
|
const int start_x = x;
|
||||||
while (*str) {
|
while (*str) {
|
||||||
const utf8_char_t c = get_utf8_char_and_inc(str);
|
const utf8_char_t c = get_utf8_char_and_inc(str);
|
||||||
|
#ifdef TOUCH_UI_UTF8_CYRILLIC_CHARSET
|
||||||
|
CyrillicCharSet::render_glyph(cmd, x, y, fs, c) ||
|
||||||
|
#endif
|
||||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||||
WesternCharSet::render_glyph(cmd, x, y, fs, c) ||
|
WesternCharSet::render_glyph(cmd, x, y, fs, c) ||
|
||||||
#endif
|
#endif
|
||||||
@@ -108,11 +118,14 @@
|
|||||||
* addr - Address in RAMG where the font data is written
|
* addr - Address in RAMG where the font data is written
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void FTDI::load_utf8_data(uint16_t addr) {
|
void FTDI::load_utf8_data(uint32_t addr) {
|
||||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
#ifdef TOUCH_UI_UTF8_CYRILLIC_CHARSET
|
||||||
WesternCharSet::load_data(addr);
|
addr = CyrillicCharSet::load_data(addr);
|
||||||
#endif
|
#endif
|
||||||
StandardCharSet::load_data(addr);
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||||
|
addr = WesternCharSet::load_data(addr);
|
||||||
|
#endif
|
||||||
|
addr = StandardCharSet::load_data(addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -125,6 +138,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void FTDI::load_utf8_bitmaps(CommandProcessor &cmd) {
|
void FTDI::load_utf8_bitmaps(CommandProcessor &cmd) {
|
||||||
|
#ifdef TOUCH_UI_UTF8_CYRILLIC_CHARSET
|
||||||
|
CyrillicCharSet::load_bitmaps(cmd);
|
||||||
|
#endif
|
||||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||||
WesternCharSet::load_bitmaps(cmd);
|
WesternCharSet::load_bitmaps(cmd);
|
||||||
#endif
|
#endif
|
||||||
@@ -145,6 +161,9 @@
|
|||||||
|
|
||||||
uint16_t FTDI::get_utf8_char_width(utf8_char_t c, font_size_t fs) {
|
uint16_t FTDI::get_utf8_char_width(utf8_char_t c, font_size_t fs) {
|
||||||
int x = 0, y = 0;
|
int x = 0, y = 0;
|
||||||
|
#ifdef TOUCH_UI_UTF8_CYRILLIC_CHARSET
|
||||||
|
CyrillicCharSet::render_glyph(nullptr, x, y, fs, c) ||
|
||||||
|
#endif
|
||||||
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
#ifdef TOUCH_UI_UTF8_WESTERN_CHARSET
|
||||||
WesternCharSet::render_glyph(nullptr, x, y, fs, c) ||
|
WesternCharSet::render_glyph(nullptr, x, y, fs, c) ||
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -47,19 +47,20 @@ namespace FTDI {
|
|||||||
* pointer to the next character */
|
* pointer to the next character */
|
||||||
|
|
||||||
utf8_char_t get_utf8_char_and_inc(const char *&c);
|
utf8_char_t get_utf8_char_and_inc(const char *&c);
|
||||||
|
utf8_char_t get_utf8_char_and_inc(char *&c);
|
||||||
|
|
||||||
/* Returns the next character in a UTF8 string, without incrementing */
|
/* Returns the next character in a UTF8 string, without incrementing */
|
||||||
|
|
||||||
inline utf8_char_t get_utf8_char(const char *c) {return get_utf8_char_and_inc(c);}
|
inline utf8_char_t get_utf8_char(const char *c) {return get_utf8_char_and_inc(c);}
|
||||||
|
|
||||||
void load_utf8_data(uint16_t addr);
|
void load_utf8_data(uint32_t addr);
|
||||||
#else
|
#else
|
||||||
typedef char utf8_char_t;
|
typedef char utf8_char_t;
|
||||||
|
|
||||||
inline utf8_char_t get_utf8_char_and_inc(const char *&c) {return *c++;}
|
inline utf8_char_t get_utf8_char_and_inc(const char *&c) {return *c++;}
|
||||||
inline utf8_char_t get_utf8_char(const char *c) {return *c;}
|
inline utf8_char_t get_utf8_char(const char *c) {return *c;}
|
||||||
|
|
||||||
inline void load_utf8_data(uint16_t) {}
|
inline void load_utf8_data(uint32_t) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void load_utf8_bitmaps(CommandProcessor& cmd);
|
void load_utf8_bitmaps(CommandProcessor& cmd);
|
||||||
|
|||||||
+10
-5
@@ -32,7 +32,7 @@
|
|||||||
constexpr static uint8_t std_font = 31;
|
constexpr static uint8_t std_font = 31;
|
||||||
constexpr static uint8_t alt_font = 1;
|
constexpr static uint8_t alt_font = 1;
|
||||||
|
|
||||||
static uint32_t bitmap_addr;
|
uint32_t FTDI::WesternCharSet::bitmap_addr;
|
||||||
|
|
||||||
/* Glyphs in the WesternCharSet bitmap */
|
/* Glyphs in the WesternCharSet bitmap */
|
||||||
|
|
||||||
@@ -286,7 +286,7 @@
|
|||||||
#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN)
|
#if ENABLED(TOUCH_UI_UTF8_SCANDINAVIAN)
|
||||||
{UTF8('þ'), 0 , SML_THORN, 25 },
|
{UTF8('þ'), 0 , SML_THORN, 25 },
|
||||||
#endif
|
#endif
|
||||||
{UTF8('ÿ'), 'y', DIAERESIS, mid_y}
|
{UTF8('ÿ'), 'y', DIAERESIS, mid_y},
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(UTF8('¡') == 0xC2A1, "Incorrect encoding for character");
|
static_assert(UTF8('¡') == 0xC2A1, "Incorrect encoding for character");
|
||||||
@@ -331,7 +331,10 @@
|
|||||||
* addr - Address in RAMG where the font data is written
|
* addr - Address in RAMG where the font data is written
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void FTDI::WesternCharSet::load_data(uint32_t addr) {
|
uint32_t FTDI::WesternCharSet::load_data(uint32_t addr) {
|
||||||
|
if (addr % 4 != 0)
|
||||||
|
addr += 4 - (addr % 4);
|
||||||
|
|
||||||
// Load the alternative font metrics
|
// Load the alternative font metrics
|
||||||
CLCD::FontMetrics alt_fm;
|
CLCD::FontMetrics alt_fm;
|
||||||
alt_fm.ptr = addr + 148;
|
alt_fm.ptr = addr + 148;
|
||||||
@@ -352,9 +355,11 @@
|
|||||||
CLCD::mem_write_bulk(addr, &alt_fm, 148);
|
CLCD::mem_write_bulk(addr, &alt_fm, 148);
|
||||||
|
|
||||||
// Decode the RLE data and load it into RAMG as a bitmap
|
// Decode the RLE data and load it into RAMG as a bitmap
|
||||||
write_rle_data(addr + 148, font, sizeof(font));
|
uint32_t lastaddr = write_rle_data(addr + 148, font, sizeof(font));
|
||||||
|
|
||||||
bitmap_addr = addr;
|
bitmap_addr = addr;
|
||||||
|
|
||||||
|
return lastaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -394,7 +399,7 @@
|
|||||||
*
|
*
|
||||||
* c - The unicode code point to draw. If the renderer does not
|
* c - The unicode code point to draw. If the renderer does not
|
||||||
* support the character, it should return false.
|
* support the character, it should return false.
|
||||||
|
*
|
||||||
* Returns: Whether the character was supported.
|
* Returns: Whether the character was supported.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -21,8 +21,10 @@
|
|||||||
|
|
||||||
namespace FTDI {
|
namespace FTDI {
|
||||||
class WesternCharSet {
|
class WesternCharSet {
|
||||||
|
private:
|
||||||
|
static uint32_t bitmap_addr;
|
||||||
public:
|
public:
|
||||||
static void load_data(uint32_t addr);
|
static uint32_t load_data(uint32_t addr);
|
||||||
static void load_bitmaps(CommandProcessor&);
|
static void load_bitmaps(CommandProcessor&);
|
||||||
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
static bool render_glyph(CommandProcessor*, int &x, int &y, font_size_t, utf8_char_t);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -49,19 +49,19 @@ class WriteSource:
|
|||||||
|
|
||||||
def convert_to_4bpp(self, data, chunk_size = 0):
|
def convert_to_4bpp(self, data, chunk_size = 0):
|
||||||
# Invert the image
|
# Invert the image
|
||||||
data = map(lambda i: 255 - i, data)
|
data = list(map(lambda i: 255 - i, data))
|
||||||
# Quanitize 8-bit values into 4-bits
|
# Quanitize 8-bit values into 4-bits
|
||||||
data = map(lambda i: i >> 4, data)
|
data = list(map(lambda i: i >> 4, data))
|
||||||
# Make sure there is an even number of elements
|
# Make sure there is an even number of elements
|
||||||
if (len(data) & 1) == 1:
|
if (len(data) & 1) == 1:
|
||||||
result.append(0)
|
data.append(0)
|
||||||
# Combine each two adjacent values into one
|
# Combine each two adjacent values into one
|
||||||
i = iter(data)
|
i = iter(data)
|
||||||
data = map(lambda a, b: a << 4 | b, i ,i)
|
data = list(map(lambda a, b: a << 4 | b, i ,i))
|
||||||
# Pack the data
|
# Pack the data
|
||||||
data = pack_rle(data)
|
data = pack_rle(data)
|
||||||
# Convert values into hex strings
|
# Convert values into hex strings
|
||||||
return map(lambda a: "0x" + format(a, '02x'), data)
|
return list(map(lambda a: "0x" + format(a, '02x'), data))
|
||||||
|
|
||||||
def end_row(self, y):
|
def end_row(self, y):
|
||||||
# Pad each row into even number of values
|
# Pad each row into even number of values
|
||||||
|
|||||||
@@ -1016,7 +1016,7 @@ namespace ExtUI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const char* FileList::filename() {
|
const char* FileList::filename() {
|
||||||
return IFSD(card.longFilename[0] ? card.longFilename : card.filename, "");
|
return IFSD(card.longest_filename(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* FileList::shortFilename() {
|
const char* FileList::shortFilename() {
|
||||||
|
|||||||
@@ -1077,7 +1077,7 @@ int8_t SdBaseFile::readDir(dir_t* dir, char* longFilename) {
|
|||||||
|
|
||||||
// If we have a longFilename buffer, mark it as invalid.
|
// If we have a longFilename buffer, mark it as invalid.
|
||||||
// If a long filename is found it will be filled automatically.
|
// If a long filename is found it will be filled automatically.
|
||||||
if (longFilename) longFilename[0] = '\0';
|
if (longFilename) { longFilename[0] = '\0'; longFilename[1] = '\0'; }
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|
||||||
@@ -1089,7 +1089,7 @@ int8_t SdBaseFile::readDir(dir_t* dir, char* longFilename) {
|
|||||||
|
|
||||||
// skip deleted entry and entry for . and ..
|
// skip deleted entry and entry for . and ..
|
||||||
if (dir->name[0] == DIR_NAME_DELETED || dir->name[0] == '.') {
|
if (dir->name[0] == DIR_NAME_DELETED || dir->name[0] == '.') {
|
||||||
if (longFilename) longFilename[0] = '\0'; // Invalidate erased file long name, if any
|
if (longFilename) { longFilename[0] = '\0'; longFilename[1] = '\0'; } // Invalidate erased file long name, if any
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user