init
This commit is contained in:
commit
2c2202e60d
2491 files changed
+1295990
No files matched your search
@@ -0,0 +1 @@
|
||||
63
|
||||
@@ -0,0 +1,38 @@
|
||||
32
|
||||
44
|
||||
45
|
||||
46
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
63
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
72
|
||||
73
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
82
|
||||
84
|
||||
85
|
||||
86
|
||||
88
|
||||
97
|
||||
120
|
||||
122
|
||||
@@ -0,0 +1,23 @@
|
||||
43
|
||||
45
|
||||
48
|
||||
49
|
||||
50
|
||||
63
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
72
|
||||
73
|
||||
76
|
||||
78
|
||||
79
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
90
|
||||
@@ -0,0 +1 @@
|
||||
{"typographies":[["Default","arial.ttf",20,4],["Large","arial.ttf",40,4],["Small","arial.ttf",10,4]],"generate_font_format":"0"}
|
||||
@@ -0,0 +1 @@
|
||||
{"typographies":[["Default","arial.ttf",20,4],["Large","arial.ttf",40,4],["Small","arial.ttf",10,4]],"generate_font_format":"0"}
|
||||
@@ -0,0 +1 @@
|
||||
{"cache_size":4096}
|
||||
@@ -0,0 +1 @@
|
||||
{"cache_size":4096}
|
||||
@@ -0,0 +1,2 @@
|
||||
AH:0 BA:1 FC:63 EC:0 FF:0 CF:1 FU:0 ZB:0
|
||||
63
|
||||
@@ -0,0 +1,39 @@
|
||||
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0 ZB:0
|
||||
32
|
||||
44
|
||||
45
|
||||
46
|
||||
48
|
||||
49
|
||||
50
|
||||
51
|
||||
52
|
||||
53
|
||||
54
|
||||
55
|
||||
56
|
||||
57
|
||||
58
|
||||
63
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
70
|
||||
72
|
||||
73
|
||||
75
|
||||
76
|
||||
77
|
||||
78
|
||||
79
|
||||
80
|
||||
82
|
||||
84
|
||||
85
|
||||
86
|
||||
88
|
||||
97
|
||||
120
|
||||
122
|
||||
@@ -0,0 +1,24 @@
|
||||
AH:0 BA:1 FC:63 EC:0 FF:0 CF:0 FU:0 ZB:0
|
||||
43
|
||||
45
|
||||
48
|
||||
49
|
||||
50
|
||||
63
|
||||
65
|
||||
66
|
||||
67
|
||||
68
|
||||
69
|
||||
72
|
||||
73
|
||||
76
|
||||
78
|
||||
79
|
||||
81
|
||||
82
|
||||
83
|
||||
84
|
||||
85
|
||||
86
|
||||
90
|
||||
@@ -0,0 +1 @@
|
||||
{"max_floats":0,"max_commands":0,"max_font":""}
|
||||
@@ -0,0 +1,44 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_APPLICATIONFONTPROVIDER_HPP
|
||||
#define TOUCHGFX_APPLICATIONFONTPROVIDER_HPP
|
||||
|
||||
#include <touchgfx/FontManager.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
class FlashDataReader;
|
||||
}
|
||||
|
||||
struct Typography
|
||||
{
|
||||
static const touchgfx::FontId DEFAULT = 0;
|
||||
static const touchgfx::FontId LARGE = 1;
|
||||
static const touchgfx::FontId SMALL = 2;
|
||||
};
|
||||
|
||||
struct TypographyFontIndex
|
||||
{
|
||||
static const touchgfx::FontId DEFAULT = 0; // arial_20_4bpp
|
||||
static const touchgfx::FontId LARGE = 1; // arial_40_4bpp
|
||||
static const touchgfx::FontId SMALL = 2; // arial_10_4bpp
|
||||
static const uint16_t NUMBER_OF_FONTS = 3;
|
||||
};
|
||||
|
||||
class ApplicationFontProvider : public touchgfx::FontProvider
|
||||
{
|
||||
public:
|
||||
virtual touchgfx::Font* getFont(touchgfx::FontId typography);
|
||||
|
||||
static void setFlashReader(touchgfx::FlashDataReader* /*flashReader*/)
|
||||
{
|
||||
}
|
||||
|
||||
static touchgfx::FlashDataReader* getFlashReader()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // TOUCHGFX_APPLICATIONFONTPROVIDER_HPP
|
||||
@@ -0,0 +1,93 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_CACHEDFONT_HPP
|
||||
#define TOUCHGFX_CACHEDFONT_HPP
|
||||
|
||||
#include <fonts/FontCache.hpp>
|
||||
#include <fonts/GeneratedFont.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
class CachedFont : public GeneratedFont
|
||||
{
|
||||
public:
|
||||
CachedFont(const struct touchgfx::BinaryFontData* data, FontId id, FontCache* _cache, const GeneratedFont* _flashFont)
|
||||
: GeneratedFont(0, // GlyphNode*
|
||||
data->numberOfGlyphs,
|
||||
data->fontHeight,
|
||||
data->baseline,
|
||||
data->pixAboveTop,
|
||||
data->pixBelowBottom,
|
||||
data->bitsPerPixel,
|
||||
data->byteAlignRow,
|
||||
data->maxLeft,
|
||||
data->maxRight,
|
||||
0, // glyphDataPointer
|
||||
0, // Kerning table not used for cached font
|
||||
data->fallbackChar,
|
||||
data->ellipsisChar,
|
||||
0, // lsubTablePointer
|
||||
0), // contextualFormsPointer
|
||||
fontId(id),
|
||||
cache(_cache),
|
||||
flashFont(_flashFont)
|
||||
{
|
||||
}
|
||||
|
||||
CachedFont()
|
||||
: GeneratedFont()
|
||||
{
|
||||
}
|
||||
|
||||
using GeneratedFont::getGlyph;
|
||||
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
|
||||
|
||||
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
|
||||
|
||||
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
|
||||
|
||||
void setFontCache(FontCache& cache);
|
||||
|
||||
FontId getFontId() const
|
||||
{
|
||||
return fontId;
|
||||
}
|
||||
|
||||
virtual const uint16_t* getGSUBTable() const
|
||||
{
|
||||
if (gsubTable != 0)
|
||||
{
|
||||
return gsubTable;
|
||||
}
|
||||
return flashFont->getGSUBTable();
|
||||
}
|
||||
|
||||
virtual void setGSUBTable(const uint16_t* table)
|
||||
{
|
||||
gsubTable = table;
|
||||
}
|
||||
|
||||
virtual const FontContextualFormsTable* getContextualFormsTable() const
|
||||
{
|
||||
if (arabicTable != 0)
|
||||
{
|
||||
return arabicTable;
|
||||
}
|
||||
return flashFont->getContextualFormsTable();
|
||||
}
|
||||
|
||||
virtual void setContextualFormsTable(const FontContextualFormsTable* table)
|
||||
{
|
||||
arabicTable = table;
|
||||
}
|
||||
|
||||
private:
|
||||
FontId fontId;
|
||||
FontCache* cache;
|
||||
const GeneratedFont* flashFont;
|
||||
};
|
||||
} // namespace touchgfx
|
||||
|
||||
#endif // TOUCHGFX_CACHEDFONT_HPP
|
||||
@@ -0,0 +1,42 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_COMPRESSEDFONTCACHE_HPP
|
||||
#define TOUCHGFX_COMPRESSEDFONTCACHE_HPP
|
||||
|
||||
#include <touchgfx/hal/Types.hpp>
|
||||
#include <touchgfx/Font.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
class CompressedFontCache
|
||||
{
|
||||
public:
|
||||
static void clearCache();
|
||||
static const uint8_t* hasCachedGlyph(const GlyphNode* glyphNode);
|
||||
static void unableToCache(const GlyphNode* glyphNode, int byteSize);
|
||||
static const uint8_t* cacheGlyph(const GlyphNode* glyph, const uint8_t* compressedData);
|
||||
static int usedMemory()
|
||||
{
|
||||
return pixelsTop - (uint8_t*)bitmapFontCache + glyphsAllocated * sizeof(BitmapFontCacheKey);
|
||||
}
|
||||
|
||||
static int cacheClearCounter;
|
||||
private:
|
||||
static uint8_t* decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData);
|
||||
|
||||
struct BitmapFontCacheKey
|
||||
{
|
||||
const void* glyphNode;
|
||||
const uint8_t* pixels;
|
||||
};
|
||||
|
||||
static const int cacheSizeBytes = 4096;
|
||||
static const int cacheWords = (cacheSizeBytes + 3) / 4;
|
||||
static uint32_t bitmapFontCache[cacheWords];
|
||||
static uint8_t* pixelsTop;
|
||||
static int glyphsAllocated;
|
||||
};
|
||||
} // namespace touchgfx
|
||||
|
||||
#endif // TOUCHGFX_COMPRESSEDFONTCACHE_HPP
|
||||
@@ -0,0 +1,46 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_COMPRESSEDUNMAPPEDFONTCACHE_HPP
|
||||
#define TOUCHGFX_COMPRESSEDUNMAPPEDFONTCACHE_HPP
|
||||
|
||||
#include <touchgfx/hal/FlashDataReader.hpp>
|
||||
#include <touchgfx/hal/Types.hpp>
|
||||
#include <touchgfx/Font.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
class CompressedUnmappedFontCache
|
||||
{
|
||||
public:
|
||||
static void clearCache();
|
||||
static const GlyphNode* hasCachedGlyphNode(const GlyphNode* glyphNode);
|
||||
static const GlyphNode* hasCachedGlyphData(const GlyphNode* glyphNode, const uint8_t*& pixelData);
|
||||
static void unableToCache(const GlyphNode* glyphNode, int byteSize);
|
||||
static GlyphNode* cacheGlyphNode(const GlyphNode* glyph);
|
||||
static const uint8_t* cacheGlyphData(const GlyphNode* glyph, const uint8_t* compressedData, touchgfx::FlashDataReader* reader);
|
||||
static int usedMemory()
|
||||
{
|
||||
return pixelsTop - (uint8_t*)bitmapFontCache + glyphsAllocated * sizeof(BitmapFontCacheKey);
|
||||
}
|
||||
|
||||
static int cacheClearCounter;
|
||||
private:
|
||||
static uint8_t* decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData, touchgfx::FlashDataReader* reader);
|
||||
|
||||
struct BitmapFontCacheKey
|
||||
{
|
||||
const void* glyphNodeSrc;
|
||||
GlyphNode glyphNodeCopy;
|
||||
const uint8_t* pixels;
|
||||
};
|
||||
|
||||
static const int cacheSizeBytes = 4096;
|
||||
static const int cacheWords = (cacheSizeBytes + 3) / 4;
|
||||
static uint32_t bitmapFontCache[cacheWords];
|
||||
static uint8_t* pixelsTop;
|
||||
static int glyphsAllocated;
|
||||
};
|
||||
} // namespace touchgfx
|
||||
|
||||
#endif // TOUCHGFX_COMPRESSEDUNMAPPEDFONTCACHE_HPP
|
||||
@@ -0,0 +1,112 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_FONTCACHE_HPP
|
||||
#define TOUCHGFX_FONTCACHE_HPP
|
||||
|
||||
#include <touchgfx/Font.hpp>
|
||||
#include <touchgfx/TypedText.hpp>
|
||||
#include <fonts/ApplicationFontProvider.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
class CachedFont;
|
||||
|
||||
class FontDataReader
|
||||
{
|
||||
public:
|
||||
virtual ~FontDataReader()
|
||||
{
|
||||
}
|
||||
|
||||
virtual void open() = 0;
|
||||
virtual void close() = 0;
|
||||
virtual void setPosition(uint32_t position) = 0;
|
||||
virtual void readData(void* out, uint32_t numberOfBytes) = 0;
|
||||
};
|
||||
|
||||
class FontCache
|
||||
{
|
||||
public:
|
||||
FontCache();
|
||||
void setReader(FontDataReader* reader);
|
||||
void clear(bool keepGsubOrContextTable = false);
|
||||
void setMemory(uint8_t* memory, uint32_t size);
|
||||
void initializeCachedFont(TypedText t, CachedFont* font, bool loadGsubOrContextTable = false);
|
||||
bool cacheString(TypedText t, const Unicode::UnicodeChar* string);
|
||||
bool cacheLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string);
|
||||
|
||||
const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, FontId font) const;
|
||||
|
||||
uint32_t getMemoryUsage()
|
||||
{
|
||||
return memorySize - (gsubStart - top);
|
||||
}
|
||||
|
||||
void open();
|
||||
void close();
|
||||
|
||||
static inline const uint8_t* getPixelData(const GlyphNode* glyph)
|
||||
{
|
||||
return ((const uint8_t*)glyph) + SizeGlyphNode + sizeof(void*);
|
||||
}
|
||||
|
||||
static inline bool isCached(const GlyphNode* g)
|
||||
{
|
||||
return g->dataOffset == 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
private:
|
||||
static const uint32_t SizeGlyphNode = 16;
|
||||
|
||||
bool contains(Unicode::UnicodeChar unicode, FontId font) const;
|
||||
void insert(Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory);
|
||||
uint8_t* copyGlyph(uint8_t* top, Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory);
|
||||
|
||||
void cacheData(GlyphNode* first);
|
||||
bool cacheSortedString(TypedText t);
|
||||
bool createSortedString(const Unicode::UnicodeChar* string);
|
||||
bool createSortedLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string, ...);
|
||||
bool sortSortedString(int n);
|
||||
|
||||
void setPosition(uint32_t position);
|
||||
void readData(void* out, uint32_t numberOfBytes);
|
||||
|
||||
uint32_t getGlyphSize(const GlyphNode* gn)
|
||||
{
|
||||
if (byteAlignRow)
|
||||
{
|
||||
// Round up line width to byte boundary and multiply by height
|
||||
return (gn->width() * bpp + 7) / 8 * gn->height();
|
||||
}
|
||||
// Calculate number of pixels and round up to byte bounday
|
||||
return (gn->width() * gn->height() * bpp + 7) / 8;
|
||||
}
|
||||
|
||||
struct
|
||||
{
|
||||
uint8_t* first; // First GlyphNode, glyph in cache;
|
||||
uint8_t* last; // Last GlyphNode, glyph in cache;
|
||||
} fontTable[MAX(TypographyFontIndex::NUMBER_OF_FONTS, 1)];
|
||||
|
||||
uint32_t memorySize;
|
||||
uint8_t* memory; // Start of memory
|
||||
uint8_t* top; // First unused byte
|
||||
uint8_t* gsubStart; // First address of GSUB tables, allocated in the end of the cache
|
||||
|
||||
FontDataReader* reader;
|
||||
|
||||
Unicode::UnicodeChar* sortedString;
|
||||
// Must be bigger than BinaryFontData
|
||||
static const uint32_t MAX_BUFFER_SIZE = 64;
|
||||
char buffer[MAX_BUFFER_SIZE];
|
||||
uint32_t glyphDataOffset;
|
||||
uint16_t numGlyphs;
|
||||
uint16_t currentFileGlyphNumber;
|
||||
uint8_t bpp;
|
||||
uint8_t byteAlignRow;
|
||||
GlyphNode currentFileGlyphNode;
|
||||
};
|
||||
} // namespace touchgfx
|
||||
|
||||
#endif // TOUCHGFX_FONTCACHE_HPP
|
||||
@@ -0,0 +1,227 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_GENERATEDFONT_HPP
|
||||
#define TOUCHGFX_GENERATEDFONT_HPP
|
||||
|
||||
#include <touchgfx/ConstFont.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
class GeneratedFont : public ConstFont
|
||||
{
|
||||
public:
|
||||
GeneratedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable);
|
||||
|
||||
using ConstFont::getGlyph;
|
||||
|
||||
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
|
||||
|
||||
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
|
||||
|
||||
virtual const uint16_t* getGSUBTable() const
|
||||
{
|
||||
return gsubTable;
|
||||
}
|
||||
|
||||
virtual const FontContextualFormsTable* getContextualFormsTable() const
|
||||
{
|
||||
return arabicTable;
|
||||
}
|
||||
|
||||
protected:
|
||||
GeneratedFont()
|
||||
: ConstFont(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), glyphData(0), kerningData(0), gsubTable(0), arabicTable(0)
|
||||
{
|
||||
}
|
||||
|
||||
const void* glyphData; ///< The glyphs
|
||||
const KerningNode* kerningData; ///< The kerning
|
||||
const uint16_t* gsubTable; ///< The GSUB tables
|
||||
|
||||
const FontContextualFormsTable* arabicTable; ///< Contextual forms
|
||||
};
|
||||
|
||||
class FusedFont : public GeneratedFont
|
||||
{
|
||||
public:
|
||||
FusedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable, GlyphNode& fontFusedNode)
|
||||
: GeneratedFont(glyphs, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow,
|
||||
maxLeft, maxRight, glyphDataInternalFlash, kerningList, fallbackChar, ellipsisChar,
|
||||
gsubData, formsTable), fusedNode(fontFusedNode)
|
||||
{ }
|
||||
|
||||
using GeneratedFont::getGlyph;
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
|
||||
private:
|
||||
GlyphNode& fusedNode;
|
||||
};
|
||||
|
||||
struct VectorFontNode
|
||||
{
|
||||
uint32_t dataOffset; ///< The index to the data of this glyph in words
|
||||
Unicode::UnicodeChar unicode; ///< The Unicode of this glyph.
|
||||
uint16_t width; ///< Width of the actual glyph data
|
||||
uint16_t height; ///< Height of the actual glyph data
|
||||
int16_t top; ///< Vertical offset from baseline of the glyph
|
||||
int16_t left; ///< Horizontal offset from the left of the glyph
|
||||
uint16_t advance; ///< Width of the glyph (including space to the left and right)
|
||||
uint16_t kerningTablePos; ///< Where are the kerning information for this glyph stored in the kerning table
|
||||
uint8_t kerningTableSize; ///< How many entries are there in the kerning table (following kerningTablePos) for this glyph
|
||||
};
|
||||
|
||||
struct VectorKerningNode
|
||||
{
|
||||
Unicode::UnicodeChar unicodePrevChar; ///< The Unicode for the first character in the kerning pair
|
||||
int16_t distance; ///< The kerning distance
|
||||
};
|
||||
|
||||
struct VectorFontData
|
||||
{
|
||||
uint16_t numberOfGlyphs;
|
||||
uint16_t baselineHeight;
|
||||
uint16_t maxLeft;
|
||||
uint16_t maxRight;
|
||||
uint16_t maxAboveTop;
|
||||
uint16_t maxBelowBottom;
|
||||
const Unicode::UnicodeChar fallbackChar;
|
||||
const Unicode::UnicodeChar ellipsisChar;
|
||||
};
|
||||
|
||||
class GeneratedVectorFont : public Font
|
||||
{
|
||||
public:
|
||||
GeneratedVectorFont(uint16_t baseline, float scale, const VectorFontNode* vectorGlyphs, const VectorFontData& fontData,
|
||||
const uint16_t* const* glyphData, const VectorKerningNode* kerningTable,
|
||||
const uint16_t* const gsubData, const FontContextualFormsTable* formsTable);
|
||||
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const;
|
||||
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
|
||||
|
||||
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
|
||||
|
||||
virtual bool isVectorBasedFont() const { return true; }
|
||||
|
||||
virtual float getScaleFactor() const { return scaleFactor; }
|
||||
|
||||
virtual const uint16_t* getGSUBTable() const { return gsubTable; }
|
||||
|
||||
virtual const FontContextualFormsTable* getContextualFormsTable() const { return arabicTable; }
|
||||
private:
|
||||
|
||||
const VectorFontNode* find(Unicode::UnicodeChar unicode) const;
|
||||
const GlyphNode* getGlyphNode(const VectorFontNode* node) const;
|
||||
|
||||
float scaleFactor;
|
||||
const VectorFontNode* vectorNodes;
|
||||
const uint16_t* const* vectorTable;
|
||||
const VectorKerningNode* kerningTable;
|
||||
const uint16_t* gsubTable;
|
||||
const FontContextualFormsTable* arabicTable;
|
||||
uint16_t numberOfGlyphs;
|
||||
|
||||
static GlyphNode glyphNode;
|
||||
};
|
||||
|
||||
struct BinaryFontData
|
||||
{
|
||||
uint32_t fontIndex; // The font index (as used by TypedTextDatabase)
|
||||
uint32_t sizeOfFontData; // Size of the complete BinaryFont
|
||||
uint32_t offsetToTable; // GlyphNode[]
|
||||
uint32_t offsetToKerning; // KerningNode[]
|
||||
uint32_t offsetToGlyphs; // uint8_t[]
|
||||
uint32_t offsetToGSUB; // uint16_t[]
|
||||
uint32_t offsetToArabicTable; // FontContextualFormsTable
|
||||
uint16_t numberOfGlyphs; // Number of glyphs in Table and Glyphs
|
||||
uint16_t fontHeight; // Font height
|
||||
uint16_t baseline; // Distance to baseline
|
||||
uint8_t pixAboveTop; // Max pixels above top
|
||||
uint8_t pixBelowBottom; // Max pixels below bottom
|
||||
uint8_t bitsPerPixel; // Bpp
|
||||
uint8_t byteAlignRow; // A4/A2/A1
|
||||
uint8_t maxLeft; // The maximum a glyph extends to the left
|
||||
uint8_t maxRight; // The maximum a glyph extends to the right
|
||||
Unicode::UnicodeChar fallbackChar; // Fallback Character for the font
|
||||
Unicode::UnicodeChar ellipsisChar; // Ellipsis Character for the font
|
||||
};
|
||||
|
||||
class BinaryFont : public GeneratedFont
|
||||
{
|
||||
public:
|
||||
BinaryFont(const struct touchgfx::BinaryFontData* data)
|
||||
: GeneratedFont((const GlyphNode*)((const uint8_t*)data + data->offsetToTable),
|
||||
data->numberOfGlyphs,
|
||||
data->fontHeight,
|
||||
data->baseline,
|
||||
data->pixAboveTop,
|
||||
data->pixBelowBottom,
|
||||
data->bitsPerPixel,
|
||||
data->byteAlignRow,
|
||||
data->maxLeft,
|
||||
data->maxRight,
|
||||
0,
|
||||
(const KerningNode*)((const uint8_t*)data + data->offsetToKerning),
|
||||
data->fallbackChar,
|
||||
data->ellipsisChar,
|
||||
(data->offsetToGSUB == 0) ? 0 : (const uint16_t*)((const uint8_t*)data + data->offsetToGSUB),
|
||||
0),
|
||||
glyphData((const uint8_t*)data + data->offsetToGlyphs)
|
||||
{
|
||||
if (data->offsetToArabicTable > 0)
|
||||
{
|
||||
setupContextualTable(data);
|
||||
}
|
||||
}
|
||||
|
||||
BinaryFont()
|
||||
: GeneratedFont()
|
||||
{
|
||||
}
|
||||
|
||||
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const
|
||||
{
|
||||
const uint8_t* data = (const uint8_t*)glyphData;
|
||||
return &(data[glyph->dataOffset]);
|
||||
}
|
||||
|
||||
protected:
|
||||
const uint8_t* glyphData;
|
||||
FontContextualFormsTable contextualForms;
|
||||
|
||||
private:
|
||||
typedef const Unicode::UnicodeChar (*array5ptr)[5];
|
||||
typedef const Unicode::UnicodeChar (*array4ptr)[4];
|
||||
|
||||
void setupContextualTable(const struct touchgfx::BinaryFontData* data)
|
||||
{
|
||||
const uint16_t* const base = (const uint16_t*)(((const uint8_t*)data) + data->offsetToArabicTable);
|
||||
// First elements in binary font are offsets to arrays in 16bit words
|
||||
contextualForms.contextualForms4Long = (array5ptr)(base + base[0]);
|
||||
contextualForms.contextualForms3Long = (array5ptr)(base + base[1]);
|
||||
contextualForms.contextualForms2Long = (array5ptr)(base + base[2]);
|
||||
contextualForms.contextualForms0621_063a = (array4ptr)(base + base[3]);
|
||||
contextualForms.contextualForms0641_064a = (array4ptr)(base + base[4]);
|
||||
contextualForms.contextualForms06XX = (array5ptr)(base + base[5]);
|
||||
contextualForms.contextualForms4LongSize = base[6];
|
||||
contextualForms.contextualForms3LongSize = base[7];
|
||||
contextualForms.contextualForms2LongSize = base[8];
|
||||
contextualForms.contextualForms06XXSize = base[9];
|
||||
arabicTable = &contextualForms;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class CompressedMappedFont : public GeneratedFont
|
||||
{
|
||||
public:
|
||||
CompressedMappedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable);
|
||||
|
||||
using GeneratedFont::getGlyph;
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const;
|
||||
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
|
||||
};
|
||||
|
||||
} // namespace touchgfx
|
||||
|
||||
#endif // TOUCHGFX_GENERATEDFONT_HPP
|
||||
@@ -0,0 +1,137 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#ifndef TOUCHGFX_UNMAPPEDDATAFONT_HPP
|
||||
#define TOUCHGFX_UNMAPPEDDATAFONT_HPP
|
||||
|
||||
#include <touchgfx/Font.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
/**
|
||||
* An UnmappedDataFont has both glyph table and glyph data placed in a
|
||||
* flash which does not support random access read (indirect
|
||||
* access). A unicode table is located in a flash with random read
|
||||
* access (direct access).
|
||||
*
|
||||
* @see Font, ConstFont
|
||||
*/
|
||||
class UnmappedDataFont : public Font
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Construct the UnmappedDataFont.
|
||||
*
|
||||
* @param glyphs The array of glyphs known to this font (indirect).
|
||||
* @param unicodes The array of unicodes known to this font (direct).
|
||||
* @param numGlyphs The number of glyphs in list.
|
||||
* @param height The height in pixels of the highest character in this font.
|
||||
* @param baseline The height of the baseline in pixels.
|
||||
* @param pixBelowBottom The maximum number of pixels that can be drawn below the
|
||||
* bottom in this font.
|
||||
* @param bitsPerPixel The number of bits per pixel in this font.
|
||||
* @param byteAlignRow Are glyphs encoded using A4 format
|
||||
* @param maxLeft The maximum a character extends to the left.
|
||||
* @param maxRight The maximum a character extends to the right.
|
||||
* @param glyphDataList Pointer to pointers the glyph data for the font (indirect).
|
||||
* @param kerningList pointer to the kerning data for the font (direct).
|
||||
* @param fallbackChar The fallback character for the typography in case no glyph is
|
||||
* available.
|
||||
* @param ellipsisChar The ellipsis character used for truncating long texts.
|
||||
* @param gsubTable Pointer to GSUB table (direct).
|
||||
*/
|
||||
UnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodes, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable);
|
||||
|
||||
using Font::getGlyph;
|
||||
|
||||
/**
|
||||
* Gets the glyph data associated with the specified Unicode. The
|
||||
GlyphNode is allocated in the buffer passed to the constructor.
|
||||
*
|
||||
* Please note that in case of Thai letters and Arabic letters
|
||||
* where diacritics can be placed relative to the previous
|
||||
* character(s), please use TextProvider::getNextLigature()
|
||||
* instead as it will create a temporary GlyphNode that will be
|
||||
* adjusted with respect to X/Y position.
|
||||
*
|
||||
* @param unicode The character to look up.
|
||||
* @param pixelData Pointer to the pixel data for the glyph if the glyph is
|
||||
* found. This is set by this method.
|
||||
* @param [out] bitsPerPixel Reference where to place the number of bits per pixel.
|
||||
*
|
||||
* @return A pointer to the glyph node or null if the glyph was not found.
|
||||
*/
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
|
||||
|
||||
/**
|
||||
* Obtains the address to the pixel data for the specified glyph.
|
||||
*
|
||||
* @param glyph The glyph to get the pixels data of.
|
||||
*
|
||||
* @return The address of the pixel data of the glyph.
|
||||
*/
|
||||
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
|
||||
|
||||
/**
|
||||
* Gets the kerning distance between two characters.
|
||||
*
|
||||
* @param prevChar The unicode value of the previous character.
|
||||
* @param glyph the glyph object for the current character.
|
||||
*
|
||||
* @return The kerning distance between prevChar and glyph char.
|
||||
*/
|
||||
virtual int8_t getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const;
|
||||
|
||||
/**
|
||||
* Gets GSUB table.
|
||||
*
|
||||
* @return The GSUB table or null if font has GSUB no table
|
||||
*/
|
||||
virtual const uint16_t* getGSUBTable() const
|
||||
{
|
||||
return gsubTable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the contextual forms table used in arabic fonts.
|
||||
*
|
||||
* @return The FontContextualFormsTable or null if the font has no table.
|
||||
*/
|
||||
virtual const FontContextualFormsTable* getContextualFormsTable() const
|
||||
{
|
||||
return arabicTable;
|
||||
}
|
||||
|
||||
protected:
|
||||
UnmappedDataFont()
|
||||
: Font(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), glyphList(0), unicodes(0), glyphDataList(0), kerningData(0), gsubTable(0)
|
||||
{
|
||||
}
|
||||
|
||||
int lookupUnicode(uint16_t unicode) const;
|
||||
|
||||
const GlyphNode* glyphList; ///< The list of glyphs
|
||||
uint16_t listSize; ///< The size of the list of glyphs
|
||||
const uint16_t* unicodes; ///< LookupTable with all unicodes in this font
|
||||
const void* glyphDataList; ///< The glyphs (list of pointers)
|
||||
const KerningNode* kerningData; ///< The kerning
|
||||
const uint16_t* gsubTable; ///< The GSUB tables
|
||||
|
||||
const FontContextualFormsTable* arabicTable; ///< Contextual forms
|
||||
|
||||
static GlyphNode glyphNodeBuffer; ///< Buffer for GlyphNodes read from unmapped flash
|
||||
};
|
||||
|
||||
class CompressedUnmappedDataFont : public UnmappedDataFont
|
||||
{
|
||||
public:
|
||||
CompressedUnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodes, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable);
|
||||
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode) const;
|
||||
virtual const GlyphNode* getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const;
|
||||
virtual const uint8_t* getPixelData(const GlyphNode* glyph) const;
|
||||
};
|
||||
|
||||
} // namespace touchgfx
|
||||
|
||||
#endif // TOUCHGFX_UNMAPPEDDATAFONT_HPP
|
||||
@@ -0,0 +1,24 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <fonts/ApplicationFontProvider.hpp>
|
||||
#include <fonts/GeneratedFont.hpp>
|
||||
#include <texts/TypedTextDatabase.hpp>
|
||||
|
||||
touchgfx::Font* ApplicationFontProvider::getFont(touchgfx::FontId typography)
|
||||
{
|
||||
switch (typography)
|
||||
{
|
||||
case Typography::DEFAULT:
|
||||
// arial_20_4bpp
|
||||
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[0]);
|
||||
case Typography::LARGE:
|
||||
// arial_40_4bpp
|
||||
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[1]);
|
||||
case Typography::SMALL:
|
||||
// arial_10_4bpp
|
||||
return const_cast<touchgfx::Font*>(TypedTextDatabase::getFonts()[2]);
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <fonts/CachedFont.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
const uint8_t* CachedFont::getPixelData(const GlyphNode* glyph) const
|
||||
{
|
||||
// If glyph is cached, then data is present just after the GlyphNode
|
||||
if (FontCache::isCached(glyph))
|
||||
{
|
||||
const uint8_t* data = FontCache::getPixelData(glyph);
|
||||
return data;
|
||||
}
|
||||
return flashFont->getPixelData(glyph);
|
||||
}
|
||||
|
||||
const GlyphNode* CachedFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
|
||||
{
|
||||
// Look first in internal flash font
|
||||
const GlyphNode* n = flashFont->find(unicode);
|
||||
|
||||
if ((n == 0) && (cache != 0))
|
||||
{
|
||||
// Now look in FontCache table
|
||||
n = cache->getGlyph(unicode, fontId);
|
||||
}
|
||||
|
||||
// Revert to normal behaviour if still not found
|
||||
if (n == 0 && unicode != 0 && unicode != '\n')
|
||||
{
|
||||
Unicode::UnicodeChar fallbackChar = flashFont->getFallbackChar();
|
||||
n = flashFont->find(fallbackChar);
|
||||
if (n == 0)
|
||||
{
|
||||
n = cache->getGlyph(fallbackChar, fontId);
|
||||
}
|
||||
}
|
||||
|
||||
if (n != 0)
|
||||
{
|
||||
pixelData = getPixelData(n);
|
||||
bitsPerPixel = getBitsPerPixel();
|
||||
return n;
|
||||
}
|
||||
return (const GlyphNode*)0;
|
||||
}
|
||||
|
||||
int8_t CachedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
|
||||
{
|
||||
// Kerning is not supported by Font Caching
|
||||
return 0;
|
||||
}
|
||||
} // namespace touchgfx
|
||||
@@ -0,0 +1,183 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <fonts/CompressedFontCache.hpp>
|
||||
#include <touchgfx/hal/HAL.hpp>
|
||||
#include <touchgfx/hal/Paint.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
LOCATION_PRAGMA_32("TouchGFX_CompressedFontCache")
|
||||
uint32_t CompressedFontCache::bitmapFontCache[cacheWords] LOCATION_ATTRIBUTE_32("TouchGFX_CompressedFontCache");
|
||||
uint8_t* CompressedFontCache::pixelsTop = (uint8_t*)CompressedFontCache::bitmapFontCache;
|
||||
int CompressedFontCache::glyphsAllocated = 0;
|
||||
int CompressedFontCache::cacheClearCounter = 0;
|
||||
|
||||
namespace
|
||||
{
|
||||
/* Read nibbles from a compressed data array */
|
||||
struct NibReader
|
||||
{
|
||||
NibReader(const uint8_t* buffer)
|
||||
: buffer(buffer), byteIndex(0), low(true)
|
||||
{}
|
||||
|
||||
const uint8_t* buffer;
|
||||
int byteIndex;
|
||||
bool low;
|
||||
uint8_t getNext()
|
||||
{
|
||||
if (low)
|
||||
{
|
||||
const uint8_t val = buffer[byteIndex] & 0xF;
|
||||
low = false;
|
||||
return val;
|
||||
}
|
||||
const uint8_t val = buffer[byteIndex] >> 4;
|
||||
low = true;
|
||||
byteIndex++;
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
struct NibWriter
|
||||
{
|
||||
NibWriter(uint8_t* buffer, int size)
|
||||
: buffer(buffer), bufferEnd(buffer + size), low(true) {}
|
||||
|
||||
uint8_t* buffer;
|
||||
uint8_t* bufferEnd;
|
||||
int low;
|
||||
void put(uint8_t v)
|
||||
{
|
||||
if (low)
|
||||
{
|
||||
*buffer = v;
|
||||
low = false;
|
||||
return;
|
||||
}
|
||||
*buffer |= (v << 4);
|
||||
buffer++;
|
||||
low = true;
|
||||
}
|
||||
bool eof() { return buffer >= bufferEnd; }
|
||||
};
|
||||
} // anonymous namespace
|
||||
|
||||
uint8_t* CompressedFontCache::decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData)
|
||||
{
|
||||
const int byteSize = (glyphNode->width() + 1) / 2 * glyphNode->height();
|
||||
NibWriter writer(pixelsTop, byteSize);
|
||||
NibReader reader(compressedData);
|
||||
uint8_t* const pixelsEnd = pixelsTop + byteSize;
|
||||
const int algorithm = glyphNode->dataOffset >> 30;
|
||||
if (algorithm == 1)
|
||||
{
|
||||
// RLE1
|
||||
while (!writer.eof())
|
||||
{
|
||||
const uint8_t value = reader.getNext();
|
||||
if (value == 0)
|
||||
{
|
||||
int zeroCount = reader.getNext();
|
||||
while (zeroCount)
|
||||
{
|
||||
writer.put(0);
|
||||
zeroCount--;
|
||||
}
|
||||
}
|
||||
writer.put(value);
|
||||
}
|
||||
}
|
||||
else if (algorithm == 2)
|
||||
{
|
||||
// RLE2
|
||||
while (!writer.eof())
|
||||
{
|
||||
const uint8_t value = reader.getNext();
|
||||
if (value == 0 || value == 0xF)
|
||||
{
|
||||
int count = reader.getNext();
|
||||
while (count)
|
||||
{
|
||||
writer.put(value);
|
||||
count--;
|
||||
}
|
||||
}
|
||||
writer.put(value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Uncompressed
|
||||
while (pixelsTop < pixelsEnd)
|
||||
{
|
||||
*pixelsTop++ = *compressedData++;
|
||||
}
|
||||
}
|
||||
|
||||
return pixelsEnd;
|
||||
}
|
||||
|
||||
void CompressedFontCache::clearCache()
|
||||
{
|
||||
// Wait for DMA2D/GPU2D to finish drawing
|
||||
HAL::getInstance()->lockUnlockFrameBuffer();
|
||||
glyphsAllocated = 0;
|
||||
cacheClearCounter++;
|
||||
pixelsTop = (uint8_t*)bitmapFontCache;
|
||||
}
|
||||
|
||||
void CompressedFontCache::unableToCache(const GlyphNode* glyphNode, int byteSize)
|
||||
{
|
||||
while(1);
|
||||
}
|
||||
|
||||
const uint8_t* CompressedFontCache::hasCachedGlyph(const GlyphNode* glyphNode)
|
||||
{
|
||||
const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords];
|
||||
const BitmapFontCacheKey* first = end - glyphsAllocated;
|
||||
while (first < end)
|
||||
{
|
||||
if (first->glyphNode == glyphNode)
|
||||
{
|
||||
return first->pixels;
|
||||
}
|
||||
first++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const uint8_t* CompressedFontCache::cacheGlyph(const GlyphNode* glyph, const uint8_t* compressedData)
|
||||
{
|
||||
const int byteSize = (glyph->width() + 1) / 2 * glyph->height();
|
||||
if (byteSize + 8 > cacheSizeBytes)
|
||||
{
|
||||
unableToCache(glyph, byteSize);
|
||||
return 0;
|
||||
}
|
||||
const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords];
|
||||
if (pixelsTop + byteSize + 8 > (const uint8_t*)&end[-glyphsAllocated])
|
||||
{
|
||||
// Unable to fit glyph in data, clear cache
|
||||
clearCache();
|
||||
}
|
||||
|
||||
const uint8_t* glyphData = pixelsTop;
|
||||
pixelsTop = decompressGlyph(pixelsTop, glyph, compressedData);
|
||||
|
||||
// Flush the cache lines, must be 32byte aligned
|
||||
uint8_t* rowStart = reinterpret_cast<uint8_t*>(reinterpret_cast<uintptr_t>(glyphData) & ~0x1F);
|
||||
int alignmentOffset = glyphData - rowStart;
|
||||
paint::flushLine((uint32_t*)rowStart, byteSize + alignmentOffset);
|
||||
paint::invalidateTextureCache();
|
||||
|
||||
glyphsAllocated++;
|
||||
|
||||
BitmapFontCacheKey* key = const_cast<BitmapFontCacheKey*>(end - glyphsAllocated);
|
||||
key->glyphNode = glyph;
|
||||
key->pixels = glyphData;
|
||||
|
||||
return glyphData;
|
||||
}
|
||||
} // namespace touchgfx
|
||||
@@ -0,0 +1,263 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <fonts/CompressedUnmappedFontCache.hpp>
|
||||
#include <touchgfx/hal/HAL.hpp>
|
||||
#include <touchgfx/hal/Paint.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
LOCATION_PRAGMA_32("TouchGFX_CompressedUnmappedFontCache")
|
||||
uint32_t CompressedUnmappedFontCache::bitmapFontCache[cacheWords] LOCATION_ATTRIBUTE_32("TouchGFX_CompressedUnmappedFontCache");
|
||||
uint8_t* CompressedUnmappedFontCache::pixelsTop = (uint8_t*)CompressedUnmappedFontCache::bitmapFontCache;
|
||||
int CompressedUnmappedFontCache::glyphsAllocated = 0;
|
||||
int CompressedUnmappedFontCache::cacheClearCounter = 0;
|
||||
|
||||
namespace
|
||||
{
|
||||
/* Read nibbles from compressed data in unmapped flash. Must read through reader object */
|
||||
struct NibUnmapReader
|
||||
{
|
||||
NibUnmapReader(const uint8_t* srcAddress, touchgfx::FlashDataReader* reader)
|
||||
: address(srcAddress), reader(reader), byteIndex(0), low(true)
|
||||
{
|
||||
address += bufferSize;
|
||||
reader->copyData(srcAddress, buffer, sizeof(buffer));
|
||||
}
|
||||
|
||||
const uint8_t* address; //next reading address
|
||||
touchgfx::FlashDataReader* reader;
|
||||
static const int bufferSize = 16;
|
||||
uint8_t buffer[bufferSize];
|
||||
uint8_t value;
|
||||
int byteIndex;
|
||||
bool low;
|
||||
uint8_t getNext()
|
||||
{
|
||||
if (low)
|
||||
{
|
||||
value = buffer[byteIndex];
|
||||
const uint8_t val = value & 0xF;
|
||||
low = false;
|
||||
return val;
|
||||
}
|
||||
const uint8_t val = value >> 4;
|
||||
low = true;
|
||||
if (byteIndex == bufferSize - 1)
|
||||
{
|
||||
reader->copyData(address, buffer, bufferSize);
|
||||
address += bufferSize;
|
||||
byteIndex = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
byteIndex++;
|
||||
}
|
||||
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
struct NibWriter
|
||||
{
|
||||
NibWriter(uint8_t* buffer, int size)
|
||||
: buffer(buffer), bufferEnd(buffer + size), low(true) {}
|
||||
|
||||
uint8_t* buffer;
|
||||
uint8_t* bufferEnd;
|
||||
int low;
|
||||
void put(uint8_t v)
|
||||
{
|
||||
if (low)
|
||||
{
|
||||
*buffer = v;
|
||||
low = false;
|
||||
return;
|
||||
}
|
||||
*buffer |= (v << 4);
|
||||
buffer++;
|
||||
low = true;
|
||||
}
|
||||
bool eof() { return buffer >= bufferEnd; }
|
||||
};
|
||||
} // anonymous namespace
|
||||
|
||||
uint8_t* CompressedUnmappedFontCache::decompressGlyph(uint8_t* pixelsTop, const GlyphNode* glyphNode, const uint8_t* compressedData, touchgfx::FlashDataReader* flashReader)
|
||||
{
|
||||
const int byteSize = (glyphNode->width() + 1) / 2 * glyphNode->height();
|
||||
NibWriter writer(pixelsTop, byteSize);
|
||||
NibUnmapReader reader(compressedData, flashReader);
|
||||
uint8_t* const pixelsEnd = pixelsTop + byteSize;
|
||||
const int algorithm = glyphNode->dataOffset >> 30;
|
||||
if (algorithm == 1)
|
||||
{
|
||||
// RLE1
|
||||
while (!writer.eof())
|
||||
{
|
||||
const uint8_t value = reader.getNext();
|
||||
if (value == 0)
|
||||
{
|
||||
int zeroCount = reader.getNext();
|
||||
while (zeroCount)
|
||||
{
|
||||
writer.put(0);
|
||||
zeroCount--;
|
||||
}
|
||||
}
|
||||
writer.put(value);
|
||||
}
|
||||
}
|
||||
else if (algorithm == 2)
|
||||
{
|
||||
// RLE2
|
||||
while (!writer.eof())
|
||||
{
|
||||
const uint8_t value = reader.getNext();
|
||||
if (value == 0 || value == 0xF)
|
||||
{
|
||||
int count = reader.getNext();
|
||||
while (count)
|
||||
{
|
||||
writer.put(value);
|
||||
count--;
|
||||
}
|
||||
}
|
||||
writer.put(value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Uncompressed
|
||||
flashReader->copyData(compressedData, pixelsTop, byteSize);
|
||||
}
|
||||
|
||||
return pixelsEnd;
|
||||
}
|
||||
|
||||
void CompressedUnmappedFontCache::clearCache()
|
||||
{
|
||||
// Wait for DMA2D/GPU2D to finish drawing
|
||||
HAL::getInstance()->lockUnlockFrameBuffer();
|
||||
glyphsAllocated = 0;
|
||||
cacheClearCounter++;
|
||||
pixelsTop = (uint8_t*)bitmapFontCache;
|
||||
}
|
||||
|
||||
void CompressedUnmappedFontCache::unableToCache(const GlyphNode* glyphNode, int byteSize)
|
||||
{
|
||||
while(1);
|
||||
}
|
||||
|
||||
const GlyphNode* CompressedUnmappedFontCache::hasCachedGlyphNode(const GlyphNode* glyphNode)
|
||||
{
|
||||
const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords];
|
||||
const BitmapFontCacheKey* first = end - glyphsAllocated;
|
||||
while (first < end)
|
||||
{
|
||||
if (first->glyphNodeSrc == glyphNode)
|
||||
{
|
||||
return &first->glyphNodeCopy;
|
||||
}
|
||||
first++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const GlyphNode* CompressedUnmappedFontCache::hasCachedGlyphData(const GlyphNode* glyphNode, const uint8_t*& pixelData)
|
||||
{
|
||||
const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords];
|
||||
const BitmapFontCacheKey* first = end - glyphsAllocated;
|
||||
while (first < end)
|
||||
{
|
||||
if (first->glyphNodeSrc == glyphNode)
|
||||
{
|
||||
//Pixel data can be zero!
|
||||
pixelData = first->pixels;
|
||||
return &first->glyphNodeCopy;
|
||||
}
|
||||
first++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
GlyphNode* CompressedUnmappedFontCache::cacheGlyphNode(const GlyphNode* glyph)
|
||||
{
|
||||
const BitmapFontCacheKey* end = (const BitmapFontCacheKey*)&bitmapFontCache[cacheWords];
|
||||
if (pixelsTop + sizeof(BitmapFontCacheKey) > (const uint8_t*)&end[-glyphsAllocated])
|
||||
{
|
||||
// Unable to fit GlyphNode in data, clear cache
|
||||
clearCache();
|
||||
}
|
||||
|
||||
glyphsAllocated++;
|
||||
BitmapFontCacheKey* key = const_cast<BitmapFontCacheKey*>(end - glyphsAllocated);
|
||||
key->glyphNodeSrc = glyph;
|
||||
key->pixels = 0;
|
||||
|
||||
return &key->glyphNodeCopy;
|
||||
}
|
||||
|
||||
const uint8_t* CompressedUnmappedFontCache::cacheGlyphData(const GlyphNode* glyph, const uint8_t* compressedData, touchgfx::FlashDataReader* reader)
|
||||
{
|
||||
// Search keys for glyph
|
||||
BitmapFontCacheKey* end = (BitmapFontCacheKey*)&bitmapFontCache[cacheWords];
|
||||
BitmapFontCacheKey* it = end - glyphsAllocated;
|
||||
while (it < end)
|
||||
{
|
||||
if (it->glyphNodeSrc == glyph)
|
||||
{
|
||||
break;
|
||||
}
|
||||
it++;
|
||||
}
|
||||
|
||||
if (it == end)
|
||||
{
|
||||
// broken invariant!
|
||||
return 0;
|
||||
}
|
||||
|
||||
const int byteSize = (it->glyphNodeCopy.width() + 1) / 2 * it->glyphNodeCopy.height();
|
||||
// Check if pixels can fit in cache
|
||||
if (pixelsTop + byteSize > (const uint8_t*)&end[-glyphsAllocated])
|
||||
{
|
||||
// Can it fit in a clean cache?
|
||||
if (byteSize + sizeof(BitmapFontCacheKey) > cacheSizeBytes)
|
||||
{
|
||||
unableToCache(glyph, byteSize);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Unable to fit pixel in data, must clear cache
|
||||
|
||||
// Save address of GlyphNode in cache
|
||||
const GlyphNode* cachedGn = &it->glyphNodeCopy;
|
||||
|
||||
// Now clear (reset pointer)
|
||||
clearCache();
|
||||
|
||||
// Insert glyph node again
|
||||
glyphsAllocated++;
|
||||
it = const_cast<BitmapFontCacheKey*>(end - 1);
|
||||
it->glyphNodeSrc = glyph;
|
||||
it->pixels = 0;
|
||||
// Copy GlyphNode content from previous position in cache
|
||||
it->glyphNodeCopy = *cachedGn;
|
||||
}
|
||||
|
||||
//Now decompress data
|
||||
const uint8_t* glyphData = pixelsTop;
|
||||
pixelsTop = decompressGlyph(pixelsTop, &it->glyphNodeCopy, compressedData, reader);
|
||||
|
||||
// Flush the cache lines, must be 32byte aligned
|
||||
uint8_t* rowStart = reinterpret_cast<uint8_t*>(reinterpret_cast<uintptr_t>(glyphData) & ~0x1F);
|
||||
int alignmentOffset = glyphData - rowStart;
|
||||
paint::flushLine((uint32_t*)rowStart, byteSize + alignmentOffset);
|
||||
paint::invalidateTextureCache();
|
||||
|
||||
it->pixels = glyphData;
|
||||
|
||||
return glyphData;
|
||||
}
|
||||
|
||||
} // namespace touchgfx
|
||||
@@ -0,0 +1,424 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <cstring>
|
||||
#include <touchgfx/TextProvider.hpp>
|
||||
#include <touchgfx/Utils.hpp>
|
||||
#include <fonts/CachedFont.hpp>
|
||||
#include <fonts/FontCache.hpp>
|
||||
#include <texts/TypedTextDatabase.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
FontCache::FontCache()
|
||||
: memorySize(0), memory(0), top(0), gsubStart(0), reader(0)
|
||||
{
|
||||
}
|
||||
|
||||
void FontCache::clear(bool keepGsubOrContextTable /* = false */)
|
||||
{
|
||||
memset(fontTable, 0, sizeof(fontTable));
|
||||
|
||||
// Top is beginning of memory, no glyphs are cached yet
|
||||
top = memory;
|
||||
|
||||
if (!keepGsubOrContextTable)
|
||||
{
|
||||
// gsubStart points to end of memory (nothing loaded yet)
|
||||
gsubStart = memory + memorySize;
|
||||
|
||||
// Round down to 32bit address
|
||||
gsubStart = (uint8_t*)((uintptr_t)gsubStart & ~(sizeof(void*) - 1));
|
||||
}
|
||||
}
|
||||
|
||||
void FontCache::setMemory(uint8_t* _memory, uint32_t size)
|
||||
{
|
||||
memory = _memory;
|
||||
memorySize = size;
|
||||
|
||||
clear();
|
||||
}
|
||||
|
||||
void FontCache::setReader(FontDataReader* _reader)
|
||||
{
|
||||
reader = _reader;
|
||||
}
|
||||
|
||||
const GlyphNode* FontCache::getGlyph(Unicode::UnicodeChar unicode, FontId font) const
|
||||
{
|
||||
GlyphNode* g = (GlyphNode*)fontTable[font].first;
|
||||
while (g)
|
||||
{
|
||||
if (g->unicode == unicode)
|
||||
{
|
||||
return g;
|
||||
}
|
||||
GlyphNode** next = (GlyphNode**)((uint8_t*)g + SizeGlyphNode);
|
||||
g = *next;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void FontCache::open()
|
||||
{
|
||||
if (reader)
|
||||
{
|
||||
reader->open();
|
||||
}
|
||||
}
|
||||
|
||||
void FontCache::close()
|
||||
{
|
||||
if (reader)
|
||||
{
|
||||
reader->close();
|
||||
}
|
||||
}
|
||||
|
||||
void FontCache::initializeCachedFont(TypedText t, CachedFont* font, bool loadGsubOrContextTable /*= false*/)
|
||||
{
|
||||
// Get font index from typed text
|
||||
FontId fontId = t.getFontId();
|
||||
// Reset to start of file
|
||||
open();
|
||||
setPosition(0);
|
||||
|
||||
assert(sizeof(touchgfx::BinaryFontData) < MAX_BUFFER_SIZE);
|
||||
readData(buffer, sizeof(touchgfx::BinaryFontData));
|
||||
const struct touchgfx::BinaryFontData* binaryFontData = reinterpret_cast<const struct touchgfx::BinaryFontData*>(buffer);
|
||||
|
||||
const Font** flashFonts = TypedTextDatabase::getFonts();
|
||||
const GeneratedFont* flashFont = static_cast<const GeneratedFont*>(flashFonts[fontId]);
|
||||
*font = CachedFont(reinterpret_cast<const struct touchgfx::BinaryFontData*>(buffer), fontId, this, flashFont);
|
||||
|
||||
if (loadGsubOrContextTable && (binaryFontData->offsetToGSUB != 0))
|
||||
{
|
||||
setPosition(binaryFontData->offsetToGSUB);
|
||||
|
||||
const uint32_t sizeOfGSUB = (binaryFontData->offsetToArabicTable != 0 ? binaryFontData->offsetToArabicTable : binaryFontData->sizeOfFontData) - binaryFontData->offsetToGSUB;
|
||||
|
||||
if (top + sizeOfGSUB < gsubStart) // Room for this GSUB table
|
||||
{
|
||||
// Round down to aligned address
|
||||
uint8_t* const gsubPosition = (uint8_t*)((uintptr_t)(gsubStart - sizeOfGSUB) & ~(sizeof(void*) - 1));
|
||||
readData(gsubPosition, sizeOfGSUB);
|
||||
font->setGSUBTable(reinterpret_cast<uint16_t*>(gsubPosition));
|
||||
gsubStart = gsubPosition;
|
||||
}
|
||||
else
|
||||
{
|
||||
font->setGSUBTable(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (loadGsubOrContextTable && (binaryFontData->offsetToArabicTable != 0))
|
||||
{
|
||||
setPosition(binaryFontData->offsetToArabicTable);
|
||||
|
||||
const uint32_t sizeTableData = binaryFontData->sizeOfFontData - binaryFontData->offsetToArabicTable;
|
||||
|
||||
if (top + sizeTableData + sizeof(FontContextualFormsTable) < gsubStart) // Room for the ContextualFormsTables
|
||||
{
|
||||
// Allocate FontContextualFormsTable first
|
||||
gsubStart -= sizeof(FontContextualFormsTable);
|
||||
// Round down to 32bit address
|
||||
gsubStart = (uint8_t*)((uintptr_t)gsubStart & ~(sizeof(void*) - 1));
|
||||
|
||||
FontContextualFormsTable* table = (FontContextualFormsTable*)gsubStart;
|
||||
font->setContextualFormsTable(table);
|
||||
gsubStart -= sizeTableData;
|
||||
readData(gsubStart, sizeTableData);
|
||||
|
||||
// Set pointers in table
|
||||
const uint16_t* const base = (const uint16_t*)gsubStart;
|
||||
// First elements in binary font are offsets to arrays in 16bit words
|
||||
table->contextualForms4Long = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[0]);
|
||||
table->contextualForms3Long = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[1]);
|
||||
table->contextualForms2Long = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[2]);
|
||||
table->contextualForms0621_063a = (FontContextualFormsTable::arrayOf4UnicodesPtr)(base + base[3]);
|
||||
table->contextualForms0641_064a = (FontContextualFormsTable::arrayOf4UnicodesPtr)(base + base[4]);
|
||||
table->contextualForms06XX = (FontContextualFormsTable::arrayOf5UnicodesPtr)(base + base[5]);
|
||||
table->contextualForms4LongSize = base[6];
|
||||
table->contextualForms3LongSize = base[7];
|
||||
table->contextualForms2LongSize = base[8];
|
||||
table->contextualForms06XXSize = base[9];
|
||||
}
|
||||
else
|
||||
{
|
||||
font->setContextualFormsTable(0);
|
||||
}
|
||||
}
|
||||
|
||||
close();
|
||||
}
|
||||
|
||||
bool FontCache::cacheString(TypedText t, const Unicode::UnicodeChar* string)
|
||||
{
|
||||
open();
|
||||
if (!createSortedString(string))
|
||||
{
|
||||
close();
|
||||
return false;
|
||||
}
|
||||
const bool result = cacheSortedString(t);
|
||||
close();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool FontCache::cacheLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string)
|
||||
{
|
||||
open();
|
||||
if (!createSortedLigatures(font, t, string, 0, 0))
|
||||
{
|
||||
close();
|
||||
return false;
|
||||
}
|
||||
const bool result = cacheSortedString(t);
|
||||
close();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool FontCache::cacheSortedString(TypedText t)
|
||||
{
|
||||
setPosition(8); // Skip font index and size
|
||||
uint32_t glyphNodeOffset;
|
||||
uint32_t dummy;
|
||||
readData(&glyphNodeOffset, sizeof(uint32_t)); // offsetToTable
|
||||
readData(&dummy, sizeof(uint32_t)); // offsetToKerning
|
||||
readData(&glyphDataOffset, sizeof(uint32_t)); // offsetToGlyphs
|
||||
readData(&dummy, sizeof(uint32_t)); // offsetToGlyphs
|
||||
readData(&dummy, sizeof(uint32_t)); // offsetToArabicTable
|
||||
readData(&numGlyphs, sizeof(uint16_t)); // numberOfGlyphs
|
||||
|
||||
FontId fontId = t.getFontId(); // Get font index from typed text
|
||||
bpp = t.getFont()->getBitsPerPixel(); // Get BPP from standard font
|
||||
byteAlignRow = t.getFont()->getByteAlignRow(); // Get ByteAlign from font
|
||||
|
||||
setPosition(glyphNodeOffset); // Go to glyph nodes for font
|
||||
currentFileGlyphNumber = 0;
|
||||
currentFileGlyphNode.unicode = 0; // Force reading of first glyph
|
||||
|
||||
const Unicode::UnicodeChar* string = sortedString;
|
||||
Unicode::UnicodeChar last = 0;
|
||||
GlyphNode* firstNewGlyph = 0;
|
||||
bool outOfMemory = false;
|
||||
while (*string)
|
||||
{
|
||||
Unicode::UnicodeChar ch = *string;
|
||||
if (ch != last)
|
||||
{
|
||||
if (!contains(ch, fontId))
|
||||
{
|
||||
insert(ch, fontId, outOfMemory);
|
||||
if (outOfMemory)
|
||||
{
|
||||
break;
|
||||
}
|
||||
if (firstNewGlyph == 0)
|
||||
{
|
||||
firstNewGlyph = (GlyphNode*)fontTable[fontId].last;
|
||||
}
|
||||
}
|
||||
}
|
||||
last = ch;
|
||||
string++;
|
||||
}
|
||||
|
||||
cacheData(firstNewGlyph);
|
||||
return !outOfMemory;
|
||||
}
|
||||
|
||||
bool FontCache::contains(Unicode::UnicodeChar unicode, FontId font) const
|
||||
{
|
||||
GlyphNode* g = (GlyphNode*)fontTable[font].first;
|
||||
while (g)
|
||||
{
|
||||
if (g->unicode == unicode)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
GlyphNode** next = (GlyphNode**)((uint8_t*)g + SizeGlyphNode);
|
||||
g = *next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void FontCache::insert(Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory)
|
||||
{
|
||||
// Insert new glyphnode and glyph after last for font.
|
||||
uint8_t* oldTop = top;
|
||||
top = copyGlyph(top, unicode, font, outOfMemory);
|
||||
|
||||
if (top == oldTop)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (fontTable[font].last == 0)
|
||||
{
|
||||
// First glyph
|
||||
fontTable[font].first = oldTop;
|
||||
fontTable[font].last = oldTop;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Set next pointer of old last glyph
|
||||
uint8_t** old_next = (uint8_t**)(fontTable[font].last + SizeGlyphNode);
|
||||
*old_next = oldTop;
|
||||
|
||||
// Save new glyph as last glyph
|
||||
fontTable[font].last = oldTop;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t* FontCache::copyGlyph(uint8_t* top, Unicode::UnicodeChar unicode, FontId font, bool& outOfMemory)
|
||||
{
|
||||
while (currentFileGlyphNumber < numGlyphs && currentFileGlyphNode.unicode < unicode)
|
||||
{
|
||||
readData(¤tFileGlyphNode, sizeof(GlyphNode));
|
||||
currentFileGlyphNumber++;
|
||||
}
|
||||
if (currentFileGlyphNode.unicode != unicode)
|
||||
{
|
||||
// GlyphNode not found
|
||||
return top;
|
||||
}
|
||||
|
||||
// GlyphNode found
|
||||
uint32_t glyphSize = getGlyphSize(¤tFileGlyphNode);
|
||||
const int alignment = sizeof(void*);
|
||||
glyphSize = (glyphSize + (alignment - 1)) & ~(alignment - 1);
|
||||
uint32_t requiredMem = SizeGlyphNode + sizeof(void*) + glyphSize; // GlyphNode + next ptr + glyph
|
||||
|
||||
// Is space available before sortedString
|
||||
if (top + requiredMem > (uint8_t*)sortedString)
|
||||
{
|
||||
outOfMemory = true;
|
||||
return top;
|
||||
}
|
||||
|
||||
*(GlyphNode*)top = currentFileGlyphNode;
|
||||
|
||||
// Clear next pointer
|
||||
uint8_t** next = (uint8_t**)(top + SizeGlyphNode);
|
||||
*next = 0;
|
||||
top += requiredMem;
|
||||
return top;
|
||||
}
|
||||
|
||||
void FontCache::cacheData(GlyphNode* first)
|
||||
{
|
||||
GlyphNode* gn = first;
|
||||
while (gn)
|
||||
{
|
||||
uint8_t* p = (uint8_t*)gn;
|
||||
if (gn->dataOffset != 0xFFFFFFFF)
|
||||
{
|
||||
p += SizeGlyphNode;
|
||||
// Next pointer
|
||||
p += sizeof(void*);
|
||||
|
||||
// Seek and copy
|
||||
setPosition(glyphDataOffset + gn->dataOffset);
|
||||
readData(p, getGlyphSize(gn));
|
||||
|
||||
// Mark glyphNode as cached
|
||||
gn->dataOffset = 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
GlyphNode** next = (GlyphNode**)((uint8_t*)gn + SizeGlyphNode);
|
||||
gn = *next;
|
||||
}
|
||||
}
|
||||
|
||||
bool FontCache::createSortedString(const Unicode::UnicodeChar* string)
|
||||
{
|
||||
int length = Unicode::strlen(string);
|
||||
// Sorted string is allocated at end of buffer
|
||||
sortedString = (Unicode::UnicodeChar*)(gsubStart - (length + 1) * 2);
|
||||
if ((uint8_t*)sortedString < top)
|
||||
{
|
||||
// Unable to allocate string buffer in end of memory
|
||||
return false;
|
||||
}
|
||||
int n = 0;
|
||||
Unicode::UnicodeChar* uc = sortedString;
|
||||
while (*string)
|
||||
{
|
||||
*uc++ = *string++;
|
||||
n++;
|
||||
}
|
||||
*uc = 0;
|
||||
return sortSortedString(n);
|
||||
}
|
||||
|
||||
bool FontCache::createSortedLigatures(CachedFont* font, TypedText t, const Unicode::UnicodeChar* string, ...)
|
||||
{
|
||||
va_list pArg;
|
||||
va_start(pArg, string);
|
||||
TextProvider tp;
|
||||
tp.initialize(string, pArg, font->getGSUBTable(), font->getContextualFormsTable());
|
||||
va_end(pArg);
|
||||
Unicode::UnicodeChar ligature;
|
||||
sortedString = (Unicode::UnicodeChar*)(gsubStart);
|
||||
if ((uint8_t*)(sortedString - 1) < top)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
*--sortedString = 0;
|
||||
int n = 0;
|
||||
while ((ligature = tp.getNextLigature(t.getTextDirection())) != 0)
|
||||
{
|
||||
if ((uint8_t*)(sortedString - 1) < top)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
*--sortedString = ligature;
|
||||
n++;
|
||||
}
|
||||
return sortSortedString(n);
|
||||
}
|
||||
|
||||
bool FontCache::sortSortedString(int n)
|
||||
{
|
||||
Unicode::UnicodeChar* uc = sortedString;
|
||||
for (int i = 0; i < n - 1; i++)
|
||||
{
|
||||
bool swapped = false;
|
||||
for (int j = 0; j < n - i - 1; j++)
|
||||
{
|
||||
if (uc[j] > uc[j + 1])
|
||||
{
|
||||
Unicode::UnicodeChar temp = uc[j];
|
||||
uc[j] = uc[j + 1];
|
||||
uc[j + 1] = temp;
|
||||
swapped = true;
|
||||
}
|
||||
}
|
||||
|
||||
// If no two elements were swapped by inner loop, then break
|
||||
if (!swapped)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void FontCache::setPosition(uint32_t position)
|
||||
{
|
||||
if (reader)
|
||||
{
|
||||
reader->setPosition(position);
|
||||
}
|
||||
}
|
||||
|
||||
void FontCache::readData(void* out, uint32_t numberOfBytes)
|
||||
{
|
||||
if (reader)
|
||||
{
|
||||
reader->readData(out, numberOfBytes);
|
||||
}
|
||||
}
|
||||
} // namespace touchgfx
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <touchgfx/hal/Types.hpp>
|
||||
|
||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t unicodes_arial_10_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
|
||||
// Unicode: [0x003F, question]
|
||||
0xA0, 0xBB, 0x05, 0x86, 0x10, 0x0D, 0x00, 0x20, 0x0D, 0x00, 0xC2, 0x03, 0x00, 0x49, 0x00, 0x00,
|
||||
0x13, 0x00, 0x00, 0x4B, 0x00
|
||||
};
|
||||
@@ -0,0 +1,243 @@
|
||||
#include <touchgfx/hal/Types.hpp>
|
||||
|
||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t unicodes_arial_20_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
|
||||
// Unicode: [0x0020, space]
|
||||
// (Has no glyph data)
|
||||
// Unicode: [0x002C, comma]
|
||||
0x10, 0x01, 0xF3, 0x0C, 0xF3, 0x0C, 0x40, 0x0B, 0x90, 0x08, 0xA2, 0x01,
|
||||
// Unicode: [0x002D, hyphen]
|
||||
0xC4, 0xCC, 0xCC, 0xF5, 0xFF, 0xFF,
|
||||
// Unicode: [0x002E, period]
|
||||
0x10, 0x01, 0xF3, 0x0C, 0xF3, 0x0C,
|
||||
// Unicode: [0x0030, zero]
|
||||
0x00, 0x70, 0xFD, 0x7D, 0x00, 0x00, 0x00, 0xFA, 0x8B, 0xFC, 0x0A, 0x00, 0x40, 0xAF, 0x00, 0xA0,
|
||||
0x4F, 0x00, 0xA0, 0x2F, 0x00, 0x20, 0xAF, 0x00, 0xE0, 0x0D, 0x00, 0x00, 0xED, 0x00, 0xF1, 0x0B,
|
||||
0x00, 0x00, 0xFB, 0x01, 0xF2, 0x0A, 0x00, 0x00, 0xFA, 0x02, 0xF2, 0x0A, 0x00, 0x00, 0xFA, 0x02,
|
||||
0xF2, 0x0A, 0x00, 0x00, 0xFA, 0x02, 0xF1, 0x0B, 0x00, 0x00, 0xFB, 0x01, 0xE0, 0x0D, 0x00, 0x00,
|
||||
0xDD, 0x00, 0xA0, 0x2F, 0x00, 0x20, 0xAF, 0x00, 0x50, 0x9F, 0x00, 0xA0, 0x4F, 0x00, 0x00, 0xFA,
|
||||
0x8C, 0xFC, 0x0A, 0x00, 0x00, 0x80, 0xFD, 0x7D, 0x00, 0x00,
|
||||
// Unicode: [0x0031, one]
|
||||
0x00, 0x10, 0x7E, 0x00, 0xB0, 0x7F, 0x10, 0xFC, 0x7F, 0xE6, 0xBF, 0x7F, 0xDC, 0x54, 0x7F, 0x04,
|
||||
0x50, 0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50,
|
||||
0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50, 0x7F, 0x00, 0x50, 0x7F,
|
||||
// Unicode: [0x0032, two]
|
||||
0x00, 0x91, 0xFD, 0xAE, 0x02, 0x00, 0x20, 0xFD, 0x8B, 0xFB, 0x2E, 0x00, 0x90, 0x7F, 0x00, 0x60,
|
||||
0xAF, 0x00, 0xE0, 0x0E, 0x00, 0x00, 0xFD, 0x00, 0x60, 0x06, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
|
||||
0x00, 0x20, 0xCF, 0x00, 0x00, 0x00, 0x00, 0xB0, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x90, 0xCF, 0x01, 0x00, 0x00, 0x10, 0xFB, 0x1B, 0x00, 0x00, 0x00, 0xC1, 0xAF, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFC, 0x08, 0x00, 0x00, 0x00, 0x80, 0x9F, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xCF,
|
||||
0xBB, 0xBB, 0xBB, 0x01, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0x01,
|
||||
// Unicode: [0x0033, three]
|
||||
0x00, 0x91, 0xED, 0x7C, 0x00, 0x00, 0x10, 0xFD, 0x8A, 0xFC, 0x0A, 0x00, 0x90, 0x6F, 0x00, 0xA0,
|
||||
0x4F, 0x00, 0xA0, 0x0C, 0x00, 0x50, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5F, 0x00, 0x00, 0x00,
|
||||
0x31, 0xF8, 0x0C, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0x02, 0x00, 0x00, 0x00, 0x54, 0xE7, 0x4E, 0x00,
|
||||
0x00, 0x00, 0x00, 0x40, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x02, 0x61, 0x05, 0x00, 0x00,
|
||||
0xFB, 0x03, 0xF0, 0x0D, 0x00, 0x00, 0xFD, 0x01, 0xA0, 0x7F, 0x00, 0x80, 0xAF, 0x00, 0x20, 0xFD,
|
||||
0x8B, 0xFC, 0x1D, 0x00, 0x00, 0x91, 0xFE, 0x8D, 0x01, 0x00,
|
||||
// Unicode: [0x0034, four]
|
||||
0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x30, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xC0, 0xFF,
|
||||
0x03, 0x00, 0x00, 0x00, 0xF8, 0xFB, 0x03, 0x00, 0x00, 0x30, 0x8F, 0xF8, 0x03, 0x00, 0x00, 0xC0,
|
||||
0x0D, 0xF8, 0x03, 0x00, 0x00, 0xF7, 0x04, 0xF8, 0x03, 0x00, 0x20, 0x9F, 0x00, 0xF8, 0x03, 0x00,
|
||||
0xB0, 0x1D, 0x00, 0xF8, 0x03, 0x00, 0xF6, 0x05, 0x00, 0xF8, 0x03, 0x00, 0xFB, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x02, 0xA8, 0xAA, 0xAA, 0xFD, 0xAB, 0x02, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00,
|
||||
// Unicode: [0x0035, five]
|
||||
0x00, 0xF8, 0xFF, 0xFF, 0xAF, 0x00, 0x00, 0xFB, 0xBB, 0xBB, 0x7B, 0x00, 0x00, 0xCE, 0x00, 0x00,
|
||||
0x00, 0x00, 0x10, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x70, 0x7F,
|
||||
0xEB, 0xAE, 0x02, 0x00, 0x90, 0xFF, 0xAC, 0xFD, 0x3E, 0x00, 0xA0, 0x4E, 0x00, 0x70, 0xCF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF9, 0x04, 0x20, 0x03, 0x00, 0x00,
|
||||
0xFA, 0x04, 0xF1, 0x0D, 0x00, 0x00, 0xFD, 0x01, 0xB0, 0x6F, 0x00, 0x70, 0x9F, 0x00, 0x20, 0xFE,
|
||||
0x8B, 0xFB, 0x1D, 0x00, 0x00, 0x92, 0xFE, 0x8D, 0x01, 0x00,
|
||||
// Unicode: [0x0036, six]
|
||||
0x00, 0x50, 0xEC, 0xAE, 0x02, 0x00, 0x00, 0xF8, 0x8D, 0xFA, 0x2E, 0x00, 0x30, 0xBF, 0x01, 0x50,
|
||||
0xAF, 0x00, 0x90, 0x2F, 0x00, 0x00, 0x89, 0x00, 0xE0, 0x0C, 0x00, 0x00, 0x00, 0x00, 0xF1, 0x29,
|
||||
0xEA, 0xAE, 0x02, 0x00, 0xF3, 0xEA, 0xAD, 0xFC, 0x2E, 0x00, 0xF3, 0xAF, 0x00, 0x70, 0xBF, 0x00,
|
||||
0xF3, 0x1F, 0x00, 0x00, 0xFD, 0x01, 0xF2, 0x0D, 0x00, 0x00, 0xFA, 0x03, 0xF0, 0x0D, 0x00, 0x00,
|
||||
0xFA, 0x02, 0xC0, 0x2F, 0x00, 0x00, 0xED, 0x00, 0x60, 0xAF, 0x00, 0x60, 0x9F, 0x00, 0x00, 0xFA,
|
||||
0x8C, 0xFB, 0x1D, 0x00, 0x00, 0x70, 0xFC, 0x9D, 0x01, 0x00,
|
||||
// Unicode: [0x0037, seven]
|
||||
0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xB1, 0xBB, 0xBB, 0xCB, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x90,
|
||||
0x6F, 0x00, 0x00, 0x00, 0x00, 0xF4, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xFD, 0x02, 0x00, 0x00, 0x00,
|
||||
0x60, 0x8F, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x09, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFB, 0x03, 0x00, 0x00, 0x00, 0x10, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x50, 0x8F, 0x00,
|
||||
0x00, 0x00, 0x00, 0x80, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
||||
0x0E, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x0C, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0038, eight]
|
||||
0x00, 0x81, 0xFD, 0x9D, 0x01, 0x00, 0x00, 0xFC, 0x8B, 0xFB, 0x1C, 0x00, 0x60, 0x9F, 0x00, 0x90,
|
||||
0x6F, 0x00, 0x90, 0x4F, 0x00, 0x30, 0x9F, 0x00, 0x80, 0x6F, 0x00, 0x50, 0x8F, 0x00, 0x20, 0xEE,
|
||||
0x36, 0xE6, 0x2D, 0x00, 0x00, 0xD3, 0xFF, 0xDF, 0x02, 0x00, 0x10, 0xFB, 0x68, 0xF8, 0x2D, 0x00,
|
||||
0xA0, 0x4F, 0x00, 0x40, 0xCF, 0x00, 0xF1, 0x0C, 0x00, 0x00, 0xFB, 0x02, 0xF2, 0x0A, 0x00, 0x00,
|
||||
0xF9, 0x03, 0xF1, 0x0C, 0x00, 0x00, 0xFB, 0x02, 0xB0, 0x6F, 0x00, 0x50, 0xBF, 0x00, 0x20, 0xFE,
|
||||
0x8B, 0xFB, 0x2E, 0x00, 0x00, 0x92, 0xFD, 0x9E, 0x02, 0x00,
|
||||
// Unicode: [0x0039, nine]
|
||||
0x00, 0x91, 0xEE, 0x6C, 0x00, 0x00, 0x20, 0xFD, 0x9C, 0xFB, 0x0A, 0x00, 0xA0, 0x8F, 0x00, 0x80,
|
||||
0x5F, 0x00, 0xF0, 0x0E, 0x00, 0x00, 0xCE, 0x00, 0xF2, 0x0B, 0x00, 0x00, 0xFB, 0x01, 0xF2, 0x0B,
|
||||
0x00, 0x00, 0xFC, 0x03, 0xE0, 0x2E, 0x00, 0x20, 0xFF, 0x03, 0x80, 0xCF, 0x13, 0xC3, 0xFE, 0x04,
|
||||
0x00, 0xFA, 0xFF, 0xBF, 0xF8, 0x03, 0x00, 0x40, 0x88, 0x05, 0xF9, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0xEC, 0x00, 0xA0, 0x0C, 0x00, 0x20, 0xAF, 0x00, 0x80, 0x5F, 0x00, 0xC1, 0x3F, 0x00, 0x10, 0xFE,
|
||||
0x89, 0xFD, 0x07, 0x00, 0x00, 0xA2, 0xEE, 0x5C, 0x00, 0x00,
|
||||
// Unicode: [0x003A, colon]
|
||||
0xF3, 0x0C, 0xF3, 0x0C, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x01, 0xF3, 0x0C, 0xF3, 0x0C,
|
||||
// Unicode: [0x003F, question]
|
||||
0x20, 0xD9, 0xEF, 0x2A, 0x00, 0xD1, 0xBF, 0xB8, 0xEF, 0x03, 0xF9, 0x08, 0x00, 0xF6, 0x0C, 0xEE,
|
||||
0x00, 0x00, 0xC0, 0x1F, 0x55, 0x00, 0x00, 0xB0, 0x1F, 0x00, 0x00, 0x00, 0xF3, 0x0C, 0x00, 0x00,
|
||||
0x30, 0xEE, 0x03, 0x00, 0x00, 0xE3, 0x4E, 0x00, 0x00, 0x00, 0xFD, 0x04, 0x00, 0x00, 0x40, 0x9F,
|
||||
0x00, 0x00, 0x00, 0x60, 0x5F, 0x00, 0x00, 0x00, 0x20, 0x25, 0x00, 0x00, 0x00, 0x10, 0x11, 0x00,
|
||||
0x00, 0x00, 0x80, 0x8F, 0x00, 0x00, 0x00, 0x80, 0x8F, 0x00, 0x00,
|
||||
// Unicode: [0x0041, A]
|
||||
0x00, 0x00, 0xB0, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFE, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0xF7, 0xF7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xEC, 0xE1, 0x0D, 0x00, 0x00, 0x00, 0x30, 0xAF, 0x90,
|
||||
0x4F, 0x00, 0x00, 0x00, 0x80, 0x5F, 0x40, 0xAF, 0x00, 0x00, 0x00, 0xE0, 0x0E, 0x00, 0xFE, 0x01,
|
||||
0x00, 0x00, 0xF4, 0x09, 0x00, 0xF9, 0x07, 0x00, 0x00, 0xFA, 0x04, 0x00, 0xF3, 0x0D, 0x00, 0x10,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x60, 0xCF, 0x99, 0x99, 0xB9, 0x9F, 0x00, 0xB0, 0x4F, 0x00,
|
||||
0x00, 0x20, 0xEF, 0x01, 0xF2, 0x0D, 0x00, 0x00, 0x00, 0xFB, 0x06, 0xF7, 0x08, 0x00, 0x00, 0x00,
|
||||
0xF5, 0x0C, 0xFD, 0x02, 0x00, 0x00, 0x00, 0xE0, 0x3F,
|
||||
// Unicode: [0x0042, B]
|
||||
0xF8, 0xFF, 0xFF, 0xCE, 0x07, 0x00, 0xF8, 0xBD, 0xBB, 0xFC, 0xBF, 0x00, 0xF8, 0x05, 0x00, 0x10,
|
||||
0xFC, 0x04, 0xF8, 0x05, 0x00, 0x00, 0xF5, 0x08, 0xF8, 0x05, 0x00, 0x00, 0xF5, 0x07, 0xF8, 0x05,
|
||||
0x00, 0x10, 0xEC, 0x02, 0xF8, 0xBD, 0xBB, 0xFC, 0x4E, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x9F, 0x00,
|
||||
0xF8, 0x05, 0x00, 0x31, 0xFB, 0x0A, 0xF8, 0x05, 0x00, 0x00, 0xE0, 0x2F, 0xF8, 0x05, 0x00, 0x00,
|
||||
0xB0, 0x4F, 0xF8, 0x05, 0x00, 0x00, 0xD0, 0x3F, 0xF8, 0x05, 0x00, 0x00, 0xF7, 0x0D, 0xF8, 0xBD,
|
||||
0xBB, 0xEC, 0xFF, 0x04, 0xF8, 0xFF, 0xFF, 0xDF, 0x3A, 0x00,
|
||||
// Unicode: [0x0043, C]
|
||||
0x00, 0x30, 0xD9, 0xEE, 0x6B, 0x00, 0x00, 0x00, 0xF8, 0xDF, 0xCB, 0xFF, 0x0B, 0x00, 0x80, 0xCF,
|
||||
0x03, 0x00, 0xC2, 0x9F, 0x00, 0xF2, 0x1E, 0x00, 0x00, 0x10, 0xFE, 0x01, 0xF8, 0x07, 0x00, 0x00,
|
||||
0x00, 0x76, 0x02, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
|
||||
0x03, 0x00, 0x00, 0x00, 0x21, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x07, 0xF2, 0x1E, 0x00,
|
||||
0x00, 0x20, 0xFE, 0x03, 0x80, 0xDF, 0x03, 0x00, 0xC3, 0x9F, 0x00, 0x00, 0xF9, 0xCF, 0xCB, 0xFF,
|
||||
0x1B, 0x00, 0x00, 0x40, 0xDA, 0xEF, 0x6B, 0x00, 0x00,
|
||||
// Unicode: [0x0044, D]
|
||||
0xF7, 0xFF, 0xFF, 0xDE, 0x29, 0x00, 0x00, 0xF7, 0xBD, 0xBB, 0xEC, 0xFF, 0x05, 0x00, 0xF7, 0x07,
|
||||
0x00, 0x00, 0xF7, 0x2E, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x80, 0x9F, 0x00, 0xF7, 0x07, 0x00, 0x00,
|
||||
0x10, 0xEE, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x00, 0xFB, 0x03, 0xF7, 0x07, 0x00, 0x00, 0x00, 0xF9,
|
||||
0x05, 0xF7, 0x07, 0x00, 0x00, 0x00, 0xF9, 0x05, 0xF7, 0x07, 0x00, 0x00, 0x00, 0xFA, 0x05, 0xF7,
|
||||
0x07, 0x00, 0x00, 0x00, 0xFC, 0x03, 0xF7, 0x07, 0x00, 0x00, 0x10, 0xEF, 0x00, 0xF7, 0x07, 0x00,
|
||||
0x00, 0x80, 0x9F, 0x00, 0xF7, 0x07, 0x00, 0x00, 0xF7, 0x2E, 0x00, 0xF7, 0xBD, 0xBB, 0xEC, 0xFF,
|
||||
0x04, 0x00, 0xF7, 0xFF, 0xFF, 0xDE, 0x29, 0x00, 0x00,
|
||||
// Unicode: [0x0045, E]
|
||||
0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x0E, 0xF6, 0xBD, 0xBB, 0xBB, 0xBB, 0x0B, 0xF6, 0x07, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF6, 0xBD, 0xBB, 0xBB, 0xBB, 0x04, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x06,
|
||||
0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x07, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xBD,
|
||||
0xBB, 0xBB, 0xBB, 0x3B, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x4F,
|
||||
// Unicode: [0x0046, F]
|
||||
0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0xF5, 0xBD, 0xBB, 0xBB, 0xBB, 0x03, 0xF5, 0x08, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x08,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF5, 0xBD, 0xBB, 0xBB, 0x3B, 0x00, 0xF5, 0xFF, 0xFF, 0xFF, 0x4F, 0x00,
|
||||
0xF5, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x00, 0x00, 0xF5, 0x08,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0048, H]
|
||||
0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00,
|
||||
0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08,
|
||||
0x00, 0x00, 0x10, 0xCF, 0xF6, 0xBD, 0xBB, 0xBB, 0xCB, 0xCF, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF,
|
||||
0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00,
|
||||
0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08,
|
||||
0x00, 0x00, 0x10, 0xCF, 0xF6, 0x08, 0x00, 0x00, 0x10, 0xCF,
|
||||
// Unicode: [0x0049, I]
|
||||
0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C,
|
||||
0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C, 0xF2, 0x0C,
|
||||
// Unicode: [0x004B, K]
|
||||
0xF8, 0x05, 0x00, 0x00, 0xD2, 0x8F, 0x00, 0xF8, 0x05, 0x00, 0x20, 0xFD, 0x08, 0x00, 0xF8, 0x05,
|
||||
0x00, 0xD1, 0x8F, 0x00, 0x00, 0xF8, 0x05, 0x10, 0xFC, 0x09, 0x00, 0x00, 0xF8, 0x05, 0xC1, 0x9F,
|
||||
0x00, 0x00, 0x00, 0xF8, 0x15, 0xFB, 0x09, 0x00, 0x00, 0x00, 0xF8, 0xB6, 0xFF, 0x05, 0x00, 0x00,
|
||||
0x00, 0xF8, 0xFE, 0xFB, 0x2E, 0x00, 0x00, 0x00, 0xF8, 0x9F, 0x90, 0xBF, 0x00, 0x00, 0x00, 0xF8,
|
||||
0x0A, 0x10, 0xFD, 0x07, 0x00, 0x00, 0xF8, 0x05, 0x00, 0xF3, 0x2F, 0x00, 0x00, 0xF8, 0x05, 0x00,
|
||||
0x80, 0xCF, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x10, 0xFD, 0x08, 0x00, 0xF8, 0x05, 0x00, 0x00, 0xF3,
|
||||
0x4F, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x80, 0xDF, 0x01,
|
||||
// Unicode: [0x004C, L]
|
||||
0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8,
|
||||
0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05,
|
||||
0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00,
|
||||
0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00, 0x00, 0xF8, 0x05, 0x00, 0x00,
|
||||
0x00, 0xF8, 0xBD, 0xBB, 0xBB, 0x5B, 0xF8, 0xFF, 0xFF, 0xFF, 0x6F,
|
||||
// Unicode: [0x004D, M]
|
||||
0xF8, 0x8F, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x02, 0xF8, 0xCF, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x02,
|
||||
0xF8, 0xFE, 0x02, 0x00, 0x00, 0xF3, 0xFE, 0x02, 0xF8, 0xF9, 0x07, 0x00, 0x00, 0xE8, 0xFB, 0x02,
|
||||
0xF8, 0xE5, 0x0C, 0x00, 0x00, 0xAD, 0xFA, 0x02, 0xF8, 0x95, 0x1F, 0x00, 0x30, 0x5F, 0xFA, 0x02,
|
||||
0xF8, 0x55, 0x6F, 0x00, 0x80, 0x0E, 0xFA, 0x02, 0xF8, 0x05, 0xBE, 0x00, 0xD0, 0x0A, 0xFA, 0x02,
|
||||
0xF8, 0x05, 0xFA, 0x01, 0xF3, 0x05, 0xFA, 0x02, 0xF8, 0x05, 0xF5, 0x05, 0xE8, 0x00, 0xFA, 0x02,
|
||||
0xF8, 0x05, 0xE1, 0x0A, 0xAD, 0x00, 0xFA, 0x02, 0xF8, 0x05, 0xA0, 0x3E, 0x5F, 0x00, 0xFA, 0x02,
|
||||
0xF8, 0x05, 0x50, 0xCF, 0x1E, 0x00, 0xFA, 0x02, 0xF8, 0x05, 0x10, 0xFF, 0x0A, 0x00, 0xFA, 0x02,
|
||||
0xF8, 0x05, 0x00, 0xFB, 0x05, 0x00, 0xFA, 0x02,
|
||||
// Unicode: [0x004E, N]
|
||||
0xF7, 0x0C, 0x00, 0x00, 0x00, 0xCF, 0xF7, 0x6F, 0x00, 0x00, 0x00, 0xCF, 0xF7, 0xEF, 0x02, 0x00,
|
||||
0x00, 0xCF, 0xF7, 0xFC, 0x0A, 0x00, 0x00, 0xCF, 0xF7, 0xC5, 0x5F, 0x00, 0x00, 0xCF, 0xF7, 0x35,
|
||||
0xEF, 0x01, 0x00, 0xCF, 0xF7, 0x05, 0xF8, 0x09, 0x00, 0xCF, 0xF7, 0x05, 0xD1, 0x4F, 0x00, 0xCF,
|
||||
0xF7, 0x05, 0x40, 0xDF, 0x00, 0xCF, 0xF7, 0x05, 0x00, 0xFA, 0x08, 0xCF, 0xF7, 0x05, 0x00, 0xE1,
|
||||
0x3F, 0xCF, 0xF7, 0x05, 0x00, 0x60, 0xCF, 0xCF, 0xF7, 0x05, 0x00, 0x00, 0xFB, 0xCF, 0xF7, 0x05,
|
||||
0x00, 0x00, 0xE2, 0xCF, 0xF7, 0x05, 0x00, 0x00, 0x70, 0xCF,
|
||||
// Unicode: [0x004F, O]
|
||||
0x00, 0x30, 0xD9, 0xEF, 0x6C, 0x01, 0x00, 0x00, 0xF7, 0xDF, 0xCB, 0xFE, 0x3D, 0x00, 0x70, 0xDF,
|
||||
0x04, 0x00, 0x81, 0xEF, 0x02, 0xF2, 0x2E, 0x00, 0x00, 0x00, 0xF8, 0x0A, 0xF8, 0x07, 0x00, 0x00,
|
||||
0x00, 0xD0, 0x2F, 0xFC, 0x02, 0x00, 0x00, 0x00, 0x80, 0x6F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x60,
|
||||
0x8F, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x50, 0x9F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x60, 0x8F, 0xFC,
|
||||
0x02, 0x00, 0x00, 0x00, 0x80, 0x6F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0xD0, 0x2F, 0xE2, 0x2E, 0x00,
|
||||
0x00, 0x00, 0xF7, 0x0B, 0x60, 0xDF, 0x04, 0x00, 0x81, 0xEF, 0x02, 0x00, 0xF6, 0xDF, 0xBB, 0xFE,
|
||||
0x3D, 0x00, 0x00, 0x20, 0xD9, 0xEE, 0x6C, 0x01, 0x00,
|
||||
// Unicode: [0x0050, P]
|
||||
0xF7, 0xFF, 0xFF, 0xEF, 0x5B, 0x00, 0xF7, 0xBD, 0xBB, 0xDB, 0xFF, 0x07, 0xF7, 0x07, 0x00, 0x00,
|
||||
0xF4, 0x1F, 0xF7, 0x07, 0x00, 0x00, 0xA0, 0x6F, 0xF7, 0x07, 0x00, 0x00, 0x80, 0x7F, 0xF7, 0x07,
|
||||
0x00, 0x00, 0xA0, 0x5F, 0xF7, 0x07, 0x00, 0x00, 0xF5, 0x1E, 0xF7, 0xBD, 0xBB, 0xDC, 0xFF, 0x06,
|
||||
0xF7, 0xFF, 0xFF, 0xEF, 0x4A, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x07, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF7, 0x07, 0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0052, R]
|
||||
0xF6, 0xFF, 0xFF, 0xEF, 0xAD, 0x02, 0x00, 0xF6, 0xAC, 0xAA, 0xBA, 0xFE, 0x2E, 0x00, 0xF6, 0x07,
|
||||
0x00, 0x00, 0xA0, 0xAF, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x10, 0xEF, 0x00, 0xF6, 0x07, 0x00, 0x00,
|
||||
0x00, 0xFF, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x40, 0xCF, 0x00, 0xF6, 0x07, 0x00, 0x10, 0xD5, 0x6F,
|
||||
0x00, 0xF6, 0xFF, 0xFF, 0xFF, 0xFF, 0x08, 0x00, 0xF6, 0xBD, 0xCB, 0xFF, 0x29, 0x00, 0x00, 0xF6,
|
||||
0x07, 0x00, 0xD2, 0x5F, 0x00, 0x00, 0xF6, 0x07, 0x00, 0x30, 0xFF, 0x04, 0x00, 0xF6, 0x07, 0x00,
|
||||
0x00, 0xF7, 0x1D, 0x00, 0xF6, 0x07, 0x00, 0x00, 0xC0, 0x9F, 0x00, 0xF6, 0x07, 0x00, 0x00, 0x30,
|
||||
0xFF, 0x03, 0xF6, 0x07, 0x00, 0x00, 0x00, 0xF8, 0x0D,
|
||||
// Unicode: [0x0054, T]
|
||||
0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0xB6, 0xBB, 0xEB, 0xCF, 0xBB, 0x9B, 0x00, 0x00, 0xC0, 0x1F,
|
||||
0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00,
|
||||
0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00,
|
||||
0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F,
|
||||
0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00,
|
||||
0xC0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00,
|
||||
// Unicode: [0x0055, U]
|
||||
0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x07, 0x00, 0x00,
|
||||
0x10, 0xCF, 0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x07,
|
||||
0x00, 0x00, 0x10, 0xCF, 0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF, 0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF,
|
||||
0xF6, 0x07, 0x00, 0x00, 0x10, 0xCF, 0xF5, 0x08, 0x00, 0x00, 0x20, 0xCF, 0xF4, 0x09, 0x00, 0x00,
|
||||
0x40, 0xAF, 0xF1, 0x1D, 0x00, 0x00, 0x80, 0x7F, 0xB0, 0xAF, 0x01, 0x00, 0xE5, 0x2F, 0x20, 0xFD,
|
||||
0xCF, 0xEC, 0xFF, 0x06, 0x00, 0x81, 0xEC, 0xDF, 0x3A, 0x00,
|
||||
// Unicode: [0x0056, V]
|
||||
0xFB, 0x05, 0x00, 0x00, 0x00, 0xE0, 0x1E, 0xF5, 0x0A, 0x00, 0x00, 0x00, 0xF4, 0x09, 0xE1, 0x1E,
|
||||
0x00, 0x00, 0x00, 0xFA, 0x04, 0x90, 0x5F, 0x00, 0x00, 0x10, 0xDE, 0x00, 0x40, 0xAF, 0x00, 0x00,
|
||||
0x50, 0x8F, 0x00, 0x00, 0xFD, 0x01, 0x00, 0xB0, 0x2F, 0x00, 0x00, 0xF8, 0x05, 0x00, 0xF1, 0x0B,
|
||||
0x00, 0x00, 0xF2, 0x0B, 0x00, 0xF6, 0x06, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0xEB, 0x01, 0x00, 0x00,
|
||||
0x60, 0x6F, 0x20, 0xAF, 0x00, 0x00, 0x00, 0x10, 0xBF, 0x70, 0x4F, 0x00, 0x00, 0x00, 0x00, 0xFA,
|
||||
0xC1, 0x0D, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xF7, 0x08, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFE, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x80, 0xBF, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0058, X]
|
||||
0xD1, 0x5F, 0x00, 0x00, 0x00, 0xF9, 0x07, 0x40, 0xEF, 0x01, 0x00, 0x50, 0xBF, 0x00, 0x00, 0xF8,
|
||||
0x0A, 0x00, 0xE2, 0x2E, 0x00, 0x00, 0xD0, 0x5F, 0x00, 0xFB, 0x05, 0x00, 0x00, 0x30, 0xEF, 0x71,
|
||||
0x9F, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFB, 0x1D, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x03, 0x00,
|
||||
0x00, 0x00, 0x00, 0x90, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFE, 0x0C, 0x00, 0x00, 0x00,
|
||||
0x10, 0xFE, 0xC2, 0x7F, 0x00, 0x00, 0x00, 0xB0, 0x7F, 0x30, 0xFF, 0x03, 0x00, 0x00, 0xF6, 0x0B,
|
||||
0x00, 0xF7, 0x0C, 0x00, 0x30, 0xEF, 0x02, 0x00, 0xC0, 0x8F, 0x00, 0xC0, 0x6F, 0x00, 0x00, 0x20,
|
||||
0xFF, 0x03, 0xF8, 0x0B, 0x00, 0x00, 0x00, 0xF7, 0x0D,
|
||||
// Unicode: [0x0061, a]
|
||||
0x00, 0xA3, 0xFD, 0xBE, 0x05, 0x00, 0x30, 0xEE, 0x8A, 0xFA, 0x4F, 0x00, 0xB0, 0x3F, 0x00, 0x50,
|
||||
0x9F, 0x00, 0x50, 0x06, 0x00, 0x10, 0xBF, 0x00, 0x00, 0x10, 0x64, 0xC8, 0xBF, 0x00, 0x20, 0xFA,
|
||||
0xFF, 0xAD, 0xBF, 0x00, 0xD0, 0x9F, 0x14, 0x10, 0xBF, 0x00, 0xF3, 0x0B, 0x00, 0x40, 0xBF, 0x00,
|
||||
0xF3, 0x0B, 0x00, 0xC1, 0xBF, 0x00, 0xC0, 0xBF, 0x87, 0xED, 0xCE, 0x00, 0x20, 0xD9, 0xDE, 0x2A,
|
||||
0xFA, 0x02,
|
||||
// Unicode: [0x0078, x]
|
||||
0xF4, 0x1D, 0x00, 0xC0, 0x4F, 0x90, 0x8F, 0x00, 0xF8, 0x08, 0x10, 0xFD, 0x33, 0xCF, 0x00, 0x00,
|
||||
0xF4, 0xDB, 0x3F, 0x00, 0x00, 0x90, 0xFF, 0x07, 0x00, 0x00, 0x40, 0xFF, 0x04, 0x00, 0x00, 0xD0,
|
||||
0xEE, 0x0D, 0x00, 0x00, 0xF8, 0x77, 0x8F, 0x00, 0x30, 0xCF, 0x00, 0xFD, 0x03, 0xD0, 0x3F, 0x00,
|
||||
0xF4, 0x0D, 0xF8, 0x09, 0x00, 0x90, 0x8F,
|
||||
// Unicode: [0x007A, z]
|
||||
0xF3, 0xFF, 0xFF, 0xFF, 0x4F, 0x71, 0x77, 0x77, 0xF8, 0x1E, 0x00, 0x00, 0x10, 0xFC, 0x04, 0x00,
|
||||
0x00, 0xA0, 0x6F, 0x00, 0x00, 0x00, 0xF8, 0x0A, 0x00, 0x00, 0x50, 0xCF, 0x00, 0x00, 0x00, 0xE3,
|
||||
0x2E, 0x00, 0x00, 0x10, 0xFD, 0x04, 0x00, 0x00, 0xB0, 0x6F, 0x00, 0x00, 0x00, 0xF7, 0x8D, 0x88,
|
||||
0x88, 0x58, 0xF9, 0xFF, 0xFF, 0xFF, 0x9F
|
||||
};
|
||||
@@ -0,0 +1,471 @@
|
||||
#include <touchgfx/hal/Types.hpp>
|
||||
|
||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t unicodes_arial_40_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE = {
|
||||
// Unicode: [0x002B, plus]
|
||||
0x00, 0x00, 0x00, 0x00, 0xBB, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x2F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0x43, 0x44,
|
||||
0x44, 0x44, 0xFF, 0x7F, 0x44, 0x44, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x002D, hyphen]
|
||||
0x86, 0x88, 0x88, 0x88, 0x88, 0x18, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFB, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x1F, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
|
||||
// Unicode: [0x0030, zero]
|
||||
0x00, 0x00, 0x00, 0xA5, 0xED, 0xDE, 0x4A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x2C, 0x00, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0xEF, 0xFE, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0xD1,
|
||||
0xFF, 0x8F, 0x02, 0x20, 0xFA, 0xFF, 0x1D, 0x00, 0x00, 0xF8, 0xFF, 0x06, 0x00, 0x00, 0x70, 0xFF,
|
||||
0x7F, 0x00, 0x10, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xEF, 0x01, 0x60, 0xFF, 0x4F, 0x00,
|
||||
0x00, 0x00, 0x00, 0xF3, 0xFF, 0x05, 0xA0, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0A,
|
||||
0xD0, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x0D, 0xF1, 0xFF, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x80, 0xFF, 0x1F, 0xF3, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0x3F, 0xF4, 0xFF,
|
||||
0x05, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x4F, 0xF5, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x50,
|
||||
0xFF, 0x4F, 0xF5, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x5F, 0xF5, 0xFF, 0x04, 0x00,
|
||||
0x00, 0x00, 0x00, 0x40, 0xFF, 0x5F, 0xF5, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x4F,
|
||||
0xF4, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x4F, 0xF3, 0xFF, 0x06, 0x00, 0x00, 0x00,
|
||||
0x00, 0x60, 0xFF, 0x2F, 0xF1, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F, 0xD0, 0xFF,
|
||||
0x0A, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x0D, 0xA0, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
||||
0xFF, 0x0A, 0x60, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x06, 0x10, 0xFE, 0xAF, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFA, 0xEF, 0x01, 0x00, 0xF9, 0xFF, 0x07, 0x00, 0x00, 0x70, 0xFF, 0x8F, 0x00,
|
||||
0x00, 0xD1, 0xFF, 0x9F, 0x02, 0x20, 0xF9, 0xFF, 0x1D, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0xEF, 0xFE,
|
||||
0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0xC3, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xA5, 0xED, 0xDF, 0x5A, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0031, one]
|
||||
0x00, 0x00, 0x00, 0x00, 0xFA, 0x0E, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0xF4,
|
||||
0xFF, 0x0E, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0x0E, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x0E, 0x00, 0xB3,
|
||||
0xFF, 0xFF, 0xFF, 0x0E, 0x92, 0xFF, 0xFF, 0xBD, 0xFF, 0x0E, 0xFA, 0xFF, 0xAF, 0x91, 0xFF, 0x0E,
|
||||
0xFA, 0xDF, 0x04, 0x90, 0xFF, 0x0E, 0xDA, 0x06, 0x00, 0x90, 0xFF, 0x0E, 0x02, 0x00, 0x00, 0x90,
|
||||
0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00,
|
||||
0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E,
|
||||
0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90,
|
||||
0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00,
|
||||
0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E,
|
||||
0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90,
|
||||
0xFF, 0x0E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0E,
|
||||
// Unicode: [0x0032, two]
|
||||
0x00, 0x00, 0x10, 0xB7, 0xED, 0xEF, 0x8C, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xAF, 0x01, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xEF, 0xFE, 0xFF, 0xFF, 0x1D, 0x00, 0x00, 0xF9,
|
||||
0xFF, 0x6E, 0x01, 0x10, 0xD5, 0xFF, 0xCF, 0x00, 0x30, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x10, 0xFC,
|
||||
0xFF, 0x05, 0x80, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0B, 0xD0, 0xFF, 0x0C, 0x00,
|
||||
0x00, 0x00, 0x00, 0xA0, 0xFF, 0x0F, 0xF1, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x1F,
|
||||
0x20, 0x54, 0x03, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xD0, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x08, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF,
|
||||
0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xA0, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0x2D, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF,
|
||||
0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x90, 0xFF, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x4E, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xA0, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x1C,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xDF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xC0, 0xFF, 0x8F, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x15, 0xF4, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x2F, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F, 0xFB, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2F,
|
||||
// Unicode: [0x003F, question]
|
||||
0x00, 0x00, 0x10, 0xB7, 0xED, 0xDF, 0x8B, 0x02, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xAF, 0x01, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0xEF, 0xFE, 0xFF, 0xFF, 0x2D, 0x00, 0x00, 0xF9,
|
||||
0xFF, 0x7E, 0x01, 0x10, 0xD6, 0xFF, 0xDF, 0x01, 0x30, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x10, 0xFC,
|
||||
0xFF, 0x08, 0x90, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0x0E, 0xE0, 0xFF, 0x0D, 0x00,
|
||||
0x00, 0x00, 0x00, 0x90, 0xFF, 0x2F, 0xF2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0x3F,
|
||||
0x10, 0x43, 0x02, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0x2F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xC0, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x07, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF,
|
||||
0x2D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0xDF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xFB, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xBF, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
|
||||
0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFB, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x9F, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0041, A]
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFA, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF,
|
||||
0xEB, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x97, 0xFF,
|
||||
0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x33, 0xFF, 0x5F, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xDF, 0x00, 0xFD, 0xBF, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0x8F, 0x00, 0xF7, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x60, 0xFF, 0x2F, 0x00, 0xF1, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xC0, 0xFF, 0x0B, 0x00, 0xA0, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3,
|
||||
0xFF, 0x06, 0x00, 0x40, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xEF, 0x01,
|
||||
0x00, 0x00, 0xFD, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0x9F, 0x00, 0x00, 0x00,
|
||||
0xF7, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF2, 0xFF,
|
||||
0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x2F, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x06, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x8F, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0x1E, 0x11, 0x11,
|
||||
0x11, 0x11, 0x11, 0xB1, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x60, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,
|
||||
0xFE, 0xEF, 0x01, 0x00, 0x00, 0xFD, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF,
|
||||
0x06, 0x00, 0x40, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0D, 0x00,
|
||||
0xA0, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x4F, 0x00, 0xF1, 0xFF,
|
||||
0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xAF, 0x00, 0xF7, 0xFF, 0x07, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xFF, 0x02, 0xFD, 0xFF, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x08,
|
||||
// Unicode: [0x0042, B]
|
||||
0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x9C, 0x04, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x4F, 0x00, 0x00, 0xF1, 0xFF, 0x5C, 0x55, 0x55, 0x55, 0x76, 0xFA, 0xFF, 0xEF, 0x02, 0x00,
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFC, 0xFF, 0x09, 0x00, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0E, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xB0, 0xFF, 0x2F, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF, 0x2F, 0x00,
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x0E, 0x00, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0x09, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x20,
|
||||
0xFC, 0xFF, 0x02, 0x00, 0xF1, 0xFF, 0x5C, 0x55, 0x55, 0x55, 0x76, 0xFA, 0xFF, 0x5F, 0x00, 0x00,
|
||||
0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x17, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xDF, 0x03, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x10, 0x74, 0xFE, 0xFF, 0x2E, 0x00,
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0xBF, 0x00, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0x02, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x06, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x08,
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x07, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x05, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0xFF, 0xFF, 0x01, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0xFF, 0xAF, 0x00,
|
||||
0xF1, 0xFF, 0x5C, 0x55, 0x55, 0x55, 0x65, 0xC8, 0xFF, 0xFF, 0x2E, 0x00, 0xF1, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x04, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x3C, 0x00, 0x00, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xAD, 0x38, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0043, C]
|
||||
0x00, 0x00, 0x00, 0x00, 0x73, 0xDA, 0xFE, 0xDE, 0x7A, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xC5, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x01, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00, 0x00, 0x20, 0xFD, 0xFF, 0xDF, 0x69, 0x44, 0x74, 0xFB,
|
||||
0xFF, 0xFF, 0x05, 0x00, 0x00, 0xD1, 0xFF, 0xEF, 0x06, 0x00, 0x00, 0x00, 0x30, 0xFC, 0xFF, 0x2E,
|
||||
0x00, 0x00, 0xFB, 0xFF, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xBF, 0x00, 0x50, 0xFF,
|
||||
0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0x04, 0xC0, 0xFF, 0x5F, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x09, 0xF3, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xA1, 0x47, 0x01, 0xF7, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFA, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD,
|
||||
0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFE, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFC, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x04,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xA0, 0x8C, 0x15, 0xF1, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xE0, 0xFF, 0x2F, 0xB0, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF,
|
||||
0x0B, 0x40, 0xFF, 0xEF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFE, 0xFF, 0x05, 0x00, 0xFB,
|
||||
0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xCF, 0x00, 0x00, 0xE2, 0xFF, 0xEF, 0x05,
|
||||
0x00, 0x00, 0x00, 0x40, 0xFD, 0xFF, 0x2E, 0x00, 0x00, 0x30, 0xFE, 0xFF, 0xDF, 0x58, 0x34, 0x75,
|
||||
0xFC, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0xD3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0xE8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x10, 0x95, 0xEC, 0xFE, 0xDE, 0x6A, 0x01, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0044, D]
|
||||
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCE, 0x7A, 0x02, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x5E, 0x00, 0x00, 0xFE, 0xEF, 0x55, 0x55, 0x55, 0x65, 0x97, 0xFD, 0xFF, 0xFF, 0x05, 0x00,
|
||||
0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFD, 0xFF, 0x3F, 0x00, 0xFE, 0xDF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xC1, 0xFF, 0xCF, 0x00, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0xFE, 0xFF, 0x05, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x0B,
|
||||
0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x1F, 0xFE, 0xDF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0x5F, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x60, 0xFF, 0x8F, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x9F,
|
||||
0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xBF, 0xFE, 0xDF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xBF, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x30, 0xFF, 0xBF, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xAF,
|
||||
0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x9F, 0xFE, 0xDF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x7F, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xB0, 0xFF, 0x3F, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0E,
|
||||
0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x09, 0xFE, 0xDF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0x03, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xC1, 0xFF, 0xAF, 0x00, 0xFE, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFD, 0xFF, 0x2E, 0x00,
|
||||
0xFE, 0xEF, 0x55, 0x55, 0x55, 0x65, 0xA7, 0xFD, 0xFF, 0xFF, 0x04, 0x00, 0xFE, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4E, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x9F, 0x02, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xCE, 0x69, 0x01, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0045, E]
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0D, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x0D, 0xFC, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x05, 0xFC, 0xEF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0x55, 0x45, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0xFC,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xCF, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xFC, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xEF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0x55, 0x35, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFC, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x8F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x8F,
|
||||
// Unicode: [0x0048, H]
|
||||
0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A,
|
||||
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFC, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0A, 0xFC, 0xFF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
|
||||
0x55, 0xF6, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
// Unicode: [0x0049, I]
|
||||
0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4,
|
||||
0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF,
|
||||
0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08,
|
||||
0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4,
|
||||
0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF, 0x08, 0xF4, 0xFF,
|
||||
0x08, 0xF4, 0xFF, 0x08,
|
||||
// Unicode: [0x004C, L]
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF,
|
||||
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF,
|
||||
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF,
|
||||
0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xF1, 0xFF, 0x5C, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x04, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x0C, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0xF1, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C,
|
||||
// Unicode: [0x004E, N]
|
||||
0xFE, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xFF, 0x1D, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09,
|
||||
0xFE, 0xFF, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xFF, 0xFF, 0xAF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xBF, 0xFE, 0xFF, 0x06, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0xF4, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09,
|
||||
0xFE, 0xAF, 0x90, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x10, 0xFD,
|
||||
0xFF, 0x06, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0xF4, 0xFF, 0x2E, 0x00, 0x00,
|
||||
0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x80, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x09,
|
||||
0xFE, 0xAF, 0x00, 0x00, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00,
|
||||
0xF3, 0xFF, 0x3F, 0x00, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x80, 0xFF, 0xCF, 0x00,
|
||||
0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x08, 0x00, 0xF0, 0xFF, 0x09,
|
||||
0xFE, 0xAF, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x3F, 0x00, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00,
|
||||
0x00, 0x70, 0xFF, 0xDF, 0x01, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF,
|
||||
0x09, 0xF0, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0x4F, 0xF0, 0xFF, 0x09,
|
||||
0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xDF, 0xF1, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFA, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2,
|
||||
0xFF, 0xFF, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0xFF, 0x09,
|
||||
0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x50, 0xFF, 0xFF, 0x09, 0xFE, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x09,
|
||||
// Unicode: [0x004F, O]
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0xA6, 0xEC, 0xEF, 0xBD, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x30, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1,
|
||||
0xFF, 0xFF, 0xBF, 0x57, 0x44, 0x96, 0xFE, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF,
|
||||
0x9F, 0x02, 0x00, 0x00, 0x00, 0x71, 0xFE, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x90, 0xFF, 0xEF, 0x04,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0xCF, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x3E, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0xFA, 0xFF, 0x06, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x0E, 0x00, 0x20, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xB0, 0xFF, 0x6F, 0x00, 0x60, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x50, 0xFF, 0xAF, 0x00, 0xA0, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0xFF, 0xEF, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xFC, 0xFF, 0x02, 0xE0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFA, 0xFF, 0x03, 0xF0, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9,
|
||||
0xFF, 0x04, 0xF1, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF,
|
||||
0x04, 0xF0, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0x03,
|
||||
0xD0, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x02, 0xB0,
|
||||
0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xEF, 0x00, 0x70, 0xFF,
|
||||
0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0x20, 0xFF, 0xDF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0x6F, 0x00, 0x00, 0xFB, 0xFF, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x1E, 0x00, 0x00, 0xF3, 0xFF, 0x3F, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFD, 0xFF, 0x07, 0x00, 0x00, 0x90, 0xFF, 0xEF, 0x04, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xC2, 0xFF, 0xDF, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x8F, 0x01, 0x00,
|
||||
0x00, 0x00, 0x60, 0xFE, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xFF, 0xFF, 0xAE, 0x46, 0x43,
|
||||
0x96, 0xFE, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x2B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xA7, 0xED, 0xEF, 0xBD, 0x37, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0051, Q]
|
||||
0x00, 0x00, 0x00, 0x00, 0x30, 0xB8, 0xED, 0xEF, 0xAD, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x50, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x20, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE3,
|
||||
0xFF, 0xFF, 0xAE, 0x56, 0x54, 0xA7, 0xFF, 0xFF, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF,
|
||||
0x7E, 0x01, 0x00, 0x00, 0x00, 0x91, 0xFF, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xCF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x1D, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0x04, 0x00, 0x00, 0xFD, 0xFF, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x0B, 0x00, 0x50, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0xA0, 0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x80, 0xFF, 0x7F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x30, 0xFF, 0xBF, 0x00, 0xF1, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xFF, 0xEF, 0x00, 0xF3, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFD, 0xFF, 0x00, 0xF4, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC,
|
||||
0xFF, 0x01, 0xF4, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF,
|
||||
0x01, 0xF3, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01,
|
||||
0xF1, 0xFF, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xEF, 0x00, 0xE0,
|
||||
0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xBF, 0x00, 0xA0, 0xFF,
|
||||
0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x8F, 0x00, 0x50, 0xFF, 0xBF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x3F, 0x00, 0x00, 0xFD, 0xFF, 0x04,
|
||||
0x00, 0x00, 0x00, 0xC0, 0x7C, 0x01, 0x00, 0xF7, 0xFF, 0x0C, 0x00, 0x00, 0xF6, 0xFF, 0x1D, 0x00,
|
||||
0x00, 0x00, 0xF2, 0xFF, 0x6E, 0x40, 0xFE, 0xFF, 0x04, 0x00, 0x00, 0xC0, 0xFF, 0xDF, 0x02, 0x00,
|
||||
0x00, 0xD4, 0xFF, 0xFF, 0xEB, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x20, 0xFD, 0xFF, 0x7E, 0x00, 0x00,
|
||||
0x00, 0xB3, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0xD2, 0xFF, 0xFF, 0x9E, 0x46, 0x43,
|
||||
0xA6, 0xFF, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFB, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x6E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0x6A, 0xFE, 0xFF, 0x6D, 0x01, 0x00, 0x00, 0x00, 0x00, 0x30, 0xB8, 0xED, 0xEF, 0xAD, 0x26, 0x00,
|
||||
0xB2, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xD5, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x75, 0x00,
|
||||
// Unicode: [0x0052, R]
|
||||
0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0x9B, 0x04, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x3E, 0x00, 0x00, 0xFD, 0xEF, 0x22, 0x22, 0x22, 0x22, 0x32, 0x64, 0xFB,
|
||||
0xFF, 0xDF, 0x00, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFE, 0xFF, 0x06,
|
||||
0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x0B, 0x00, 0xFD, 0xEF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0E, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x0F, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF1, 0xFF, 0x0E, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF,
|
||||
0x0B, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x05, 0x00, 0xFD,
|
||||
0xEF, 0x00, 0x00, 0x00, 0x00, 0x10, 0x52, 0xFA, 0xFF, 0xBF, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x8E, 0x01, 0x00, 0x00, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0x6A, 0x01,
|
||||
0x00, 0x00, 0x00, 0xFD, 0xEF, 0x44, 0x44, 0x44, 0xC6, 0xFF, 0xCF, 0x03, 0x00, 0x00, 0x00, 0x00,
|
||||
0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xEF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x60, 0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF,
|
||||
0xDF, 0x01, 0x00, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xFF, 0xFF, 0x09, 0x00,
|
||||
0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x4F, 0x00, 0x00, 0xFD, 0xEF,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0xDF, 0x00, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x08, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x3F, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0xFF,
|
||||
0xCF, 0x00, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0xFF, 0x06, 0xFD,
|
||||
0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0x2E,
|
||||
// Unicode: [0x0053, S]
|
||||
0x00, 0x00, 0x00, 0x41, 0xC9, 0xED, 0xDE, 0x9C, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFE,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0x19, 0x00, 0x00, 0x00, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xDF, 0x03, 0x00, 0x00, 0xB0, 0xFF, 0xFF, 0x8C, 0x56, 0x65, 0xC8, 0xFF, 0xFF, 0x2E, 0x00,
|
||||
0x00, 0xF6, 0xFF, 0x4E, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xFF, 0xAF, 0x00, 0x00, 0xFC, 0xFF, 0x03,
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0x03, 0x00, 0xFF, 0xAF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF7, 0xFF, 0x07, 0x10, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xFF, 0x0A,
|
||||
0x00, 0xFE, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x45, 0x02, 0x00, 0xFB, 0xFF, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0xCF, 0x16, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0xFF, 0xFF, 0x8C, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0x9D, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xD8,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x73, 0xEB, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0xEA, 0xFF, 0xFF, 0xCF, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0xFF, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xE4, 0xFF, 0x2F, 0x41, 0x75, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x70, 0xFF, 0x6F, 0xF2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0x8F,
|
||||
0xE0, 0xFF, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0x8F, 0xB0, 0xFF, 0x6F, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0x6F, 0x50, 0xFF, 0xEF, 0x04, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xE2, 0xFF, 0x1F, 0x00, 0xFB, 0xFF, 0x9F, 0x02, 0x00, 0x00, 0x00, 0x60, 0xFE, 0xFF, 0x09,
|
||||
0x00, 0xD1, 0xFF, 0xFF, 0xDF, 0x79, 0x66, 0xA7, 0xFE, 0xFF, 0xCF, 0x01, 0x00, 0x20, 0xFC, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x70, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xB8, 0xED, 0xFF, 0xCE, 0x59, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0054, T]
|
||||
0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xF1, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xF1, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xAF, 0x50, 0x55, 0x55, 0x55, 0x55, 0xFB, 0xFF, 0x57, 0x55, 0x55, 0x55, 0x35,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF9, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0055, U]
|
||||
0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF2, 0xFF, 0x0A, 0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A,
|
||||
0xFD, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x0A, 0xFC, 0xFF, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFF, 0x09, 0xFB, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF4, 0xFF, 0x08, 0xF9, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x06,
|
||||
0xF7, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xFF, 0x04, 0xF3, 0xFF, 0x0D, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xFF, 0x01, 0xD0, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xB0, 0xFF, 0xAF, 0x00, 0x60, 0xFF, 0xFF, 0x2A, 0x00, 0x00, 0x00, 0x30, 0xFB, 0xFF, 0x3F, 0x00,
|
||||
0x00, 0xFB, 0xFF, 0xFF, 0x8B, 0x67, 0x97, 0xFC, 0xFF, 0xFF, 0x07, 0x00, 0x00, 0xB1, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xE6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xCF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0xEC, 0xFE, 0xDE, 0x8B, 0x03, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x0056, V]
|
||||
0xFA, 0xFF, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF, 0x03, 0xF4, 0xFF,
|
||||
0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0xCF, 0x00, 0xD0, 0xFF, 0x3F, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0x6F, 0x00, 0x70, 0xFF, 0x8F, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0x1E, 0x00, 0x10, 0xFF, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xF3, 0xFF, 0x09, 0x00, 0x00, 0xFA, 0xFF, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xF9, 0xFF, 0x03, 0x00, 0x00, 0xF4, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xCF,
|
||||
0x00, 0x00, 0x00, 0xD0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0xFF, 0x6F, 0x00, 0x00,
|
||||
0x00, 0x70, 0xFF, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0x1E, 0x00, 0x00, 0x00, 0x10,
|
||||
0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF2, 0xFF, 0x09, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF,
|
||||
0x02, 0x00, 0x00, 0x00, 0x00, 0xF7, 0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x07, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFD, 0xCF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0xFF, 0x0D, 0x00, 0x00, 0x00,
|
||||
0x40, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0xA0, 0xFF,
|
||||
0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xFF, 0x9F, 0x00, 0x00, 0x00, 0xE1, 0xFF, 0x08, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xEF, 0x00, 0x00, 0x00, 0xF6, 0xFF, 0x02, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xF4, 0xFF, 0x05, 0x00, 0x00, 0xFC, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xD0, 0xFF, 0x0A, 0x00, 0x20, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
|
||||
0xFF, 0x1F, 0x00, 0x80, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0x6F,
|
||||
0x00, 0xE0, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFB, 0xCF, 0x00, 0xF4,
|
||||
0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x02, 0xF9, 0xBF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0x07, 0xFE, 0x5F, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0x5C, 0xFF, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x20, 0xFF, 0xBF, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0xFB, 0xFF, 0xFF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0xF5, 0xFF, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
|
||||
0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Unicode: [0x005A, Z]
|
||||
0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x53, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xFD, 0xFF, 0x0C,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
|
||||
0xFF, 0xFF, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF4, 0xFF, 0x8F, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xFE, 0xFF, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0xC1, 0xFF, 0xCF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFA, 0xFF,
|
||||
0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x03, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0xF5, 0xFF, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x30, 0xFE, 0xFF, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD1, 0xFF, 0xAF, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x90, 0xFF, 0xEF, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7,
|
||||
0xFF, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0xFF, 0x06, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE2, 0xFF, 0x8F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0xFD, 0xFF, 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB0, 0xFF, 0xDF,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x2E, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x60, 0xFF, 0xEF, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0xF2, 0xFF, 0xAF, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x25, 0xF3, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xFF, 0x7F, 0xF3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F
|
||||
};
|
||||
@@ -0,0 +1,310 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <fonts/GeneratedFont.hpp>
|
||||
#include <fonts/CompressedFontCache.hpp>
|
||||
#include <math.h>
|
||||
#include <stddef.h>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
GeneratedFont::GeneratedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable)
|
||||
: ConstFont(glyphs, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, fallbackChar, ellipsisChar),
|
||||
glyphData(glyphDataInternalFlash),
|
||||
kerningData(kerningList),
|
||||
gsubTable(gsubData),
|
||||
arabicTable(formsTable)
|
||||
{
|
||||
}
|
||||
|
||||
const uint8_t* GeneratedFont::getPixelData(const GlyphNode* glyph) const
|
||||
{
|
||||
// Read dataOffset as 16bit, as it may be unaligned
|
||||
volatile const uint16_t* dataOffset = (const uint16_t*)((const uint8_t*)glyph + offsetof(GlyphNode, dataOffset));
|
||||
uint32_t offset = dataOffset[0];
|
||||
offset |= dataOffset[1] << 16;
|
||||
|
||||
const uint8_t* const* table = (const uint8_t* const*)glyphData;
|
||||
const uint8_t* pixels = table[glyph->unicode / 2048];
|
||||
return pixels + offset;
|
||||
}
|
||||
|
||||
int8_t GeneratedFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
|
||||
{
|
||||
if (!glyph || glyph->kerningTableSize == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const KerningNode* kerndata = kerningData + glyph->kerningTablePos();
|
||||
for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++)
|
||||
{
|
||||
if (prevChar == kerndata->unicodePrevChar)
|
||||
{
|
||||
return kerndata->distance;
|
||||
}
|
||||
if (prevChar < kerndata->unicodePrevChar)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const GlyphNode* FusedFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
|
||||
{
|
||||
if (unicode < 0xAC00 || unicode > 0xD7A3)
|
||||
{
|
||||
return GeneratedFont::getGlyph(unicode, pixelData, bitsPerPixel);
|
||||
}
|
||||
else
|
||||
{
|
||||
fusedNode.unicode = unicode;
|
||||
bitsPerPixel = 1;
|
||||
pixelData = 0;
|
||||
return const_cast<const GlyphNode*>(&fusedNode);
|
||||
}
|
||||
}
|
||||
|
||||
GlyphNode GeneratedVectorFont::glyphNode; // Static member
|
||||
|
||||
GeneratedVectorFont::GeneratedVectorFont(uint16_t baseline, float scale, const VectorFontNode* vectorGlyphs, const VectorFontData& fontData,
|
||||
const uint16_t* const* glyphData, const VectorKerningNode* kerning,
|
||||
const uint16_t* const gsubData, const FontContextualFormsTable* formsTable)
|
||||
: Font((int)ceilf((fontData.maxBelowBottom + fontData.baselineHeight) * scale), baseline,
|
||||
(uint8_t)ceilf(fontData.maxAboveTop * scale),
|
||||
(uint8_t)ceilf(fontData.maxBelowBottom * scale), 0 /*bitsPerPixel*/, 0 /*byteAlignRow*/,
|
||||
(uint8_t)ceilf(fontData.maxLeft * scale),
|
||||
(uint8_t)ceilf(fontData.maxRight * scale),
|
||||
fontData.fallbackChar,
|
||||
fontData.ellipsisChar),
|
||||
scaleFactor(scale), vectorNodes(vectorGlyphs), vectorTable(glyphData), kerningTable(kerning),
|
||||
arabicTable(formsTable), numberOfGlyphs(fontData.numberOfGlyphs)
|
||||
{
|
||||
if (gsubData[0] != 0)
|
||||
{
|
||||
gsubTable = gsubData;
|
||||
}
|
||||
else
|
||||
{
|
||||
gsubTable = 0;
|
||||
}
|
||||
}
|
||||
|
||||
const GlyphNode* GeneratedVectorFont::getGlyph(Unicode::UnicodeChar unicode) const
|
||||
{
|
||||
const VectorFontNode* const node = find(unicode);
|
||||
if (node == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return getGlyphNode(node);
|
||||
}
|
||||
}
|
||||
|
||||
const GlyphNode* GeneratedVectorFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
|
||||
{
|
||||
const VectorFontNode* const node = find(unicode);
|
||||
if (node == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
const uint16_t* contourData = &(vectorTable[unicode / 2048][node->dataOffset]);
|
||||
pixelData = (const uint8_t*)contourData;
|
||||
bitsPerPixel = 0xFF;
|
||||
return getGlyphNode(node);
|
||||
}
|
||||
}
|
||||
|
||||
const GlyphNode* GeneratedVectorFont::getGlyphNode(const VectorFontNode* node) const
|
||||
{
|
||||
glyphNode.dataOffset = 0;
|
||||
uint8_t flags = 0;
|
||||
|
||||
//Convert data from VectorFontNode to glyphNode using scaleFactor
|
||||
glyphNode.unicode = node->unicode;
|
||||
|
||||
const int width = (node->width == 0) ? 0 : ((int)ceilf(node->width * scaleFactor) + 1);
|
||||
glyphNode._width = width; // Save low 8 bit
|
||||
// Set flags bits for values above 8 bit
|
||||
if (width > 255)
|
||||
{
|
||||
flags |= GLYPH_DATA_WIDTH_BIT8;
|
||||
}
|
||||
|
||||
const int height = (int)ceilf(node->height * scaleFactor);
|
||||
glyphNode._height = height;
|
||||
if (height > 255)
|
||||
{
|
||||
flags |= GLYPH_DATA_HEIGHT_BIT8;
|
||||
}
|
||||
|
||||
const int top = (int)ceilf(node->top * scaleFactor);
|
||||
glyphNode._top = top;
|
||||
if (top > 255)
|
||||
{
|
||||
flags |= ((top & 0x300) >> 3); // GLYPH_DATA_TOP_BIT8 + 9
|
||||
}
|
||||
|
||||
const int left = (int)(node->left * scaleFactor);
|
||||
glyphNode.left = left;
|
||||
|
||||
const int advance = (int)(node->advance * scaleFactor + 0.5f);
|
||||
glyphNode._advance = advance;
|
||||
if (advance > 255)
|
||||
{
|
||||
flags |= GLYPH_DATA_ADVANCE_BIT8;
|
||||
}
|
||||
|
||||
glyphNode._kerningTablePos = (uint8_t)node->kerningTablePos;
|
||||
if (node->kerningTablePos > 255)
|
||||
{
|
||||
flags |= (node->kerningTablePos >> 8) & GLYPH_DATA_KERNINGTABLEPOS_BIT8_10;
|
||||
}
|
||||
|
||||
glyphNode.kerningTableSize = node->kerningTableSize;
|
||||
|
||||
glyphNode.flags = flags;
|
||||
|
||||
return &glyphNode;
|
||||
}
|
||||
|
||||
int8_t GeneratedVectorFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
|
||||
{
|
||||
if (!glyph || glyph->kerningTableSize == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const VectorKerningNode* kerndata = kerningTable + glyph->kerningTablePos();
|
||||
for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++)
|
||||
{
|
||||
if (prevChar == kerndata->unicodePrevChar)
|
||||
{
|
||||
const float scaledDistance = kerndata->distance * scaleFactor;
|
||||
return (int)(scaledDistance >= 0.0f ? (scaledDistance + 0.5f) : (scaledDistance - 0.5f));
|
||||
}
|
||||
if (prevChar < kerndata->unicodePrevChar)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const VectorFontNode* GeneratedVectorFont::find(Unicode::UnicodeChar unicode) const
|
||||
{
|
||||
// Some fonts does not have a glyphList. Cannot be searched...
|
||||
if (vectorNodes == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t min = 0;
|
||||
int32_t max = numberOfGlyphs - 1;
|
||||
|
||||
int32_t mid = min + (unicode - vectorNodes[min].unicode); // Linear up from [min].unicode
|
||||
if (mid < min)
|
||||
{
|
||||
// Unicode < [min].unicode => not found
|
||||
return (VectorFontNode*)0;
|
||||
}
|
||||
if (mid > max)
|
||||
{
|
||||
// Linear up ends too high
|
||||
mid = max - (vectorNodes[max].unicode - unicode); // Linear down from [max].unicode
|
||||
if (mid > max)
|
||||
{
|
||||
// Unicode > [max].unicode => not found
|
||||
return (VectorFontNode*)0;
|
||||
}
|
||||
if (mid < min)
|
||||
{
|
||||
// Linear down ends too low, take the middle element
|
||||
mid = (min + max) / 2;
|
||||
}
|
||||
}
|
||||
while (min <= max)
|
||||
{
|
||||
const Unicode::UnicodeChar midUnicode = vectorNodes[mid].unicode;
|
||||
if (unicode == midUnicode)
|
||||
{
|
||||
// Found at [mid]
|
||||
return vectorNodes + mid;
|
||||
}
|
||||
if (unicode < midUnicode)
|
||||
{
|
||||
// Unicode is in lower half
|
||||
max = mid - 1;
|
||||
if (max < min)
|
||||
{
|
||||
// Range is empty => not found
|
||||
break;
|
||||
}
|
||||
// We adjusted max, try linear down from [max].unicode
|
||||
mid = max - (vectorNodes[max].unicode - unicode);
|
||||
if (mid > max)
|
||||
{
|
||||
// Unicode > [max].unicode => not found
|
||||
break;
|
||||
}
|
||||
if (mid < min)
|
||||
{
|
||||
// Linear down ends too low, take the middle element
|
||||
mid = (min + max) / 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Unicode is in upper half
|
||||
min = mid + 1;
|
||||
if (min > max)
|
||||
{
|
||||
// Range is empty => not found
|
||||
break;
|
||||
}
|
||||
// We adjusted min, try linear up from [min].unicode
|
||||
mid = min + (unicode - vectorNodes[min].unicode);
|
||||
if (mid < min)
|
||||
{
|
||||
// Unicode < [min].unicode => not found
|
||||
break;
|
||||
}
|
||||
if (mid > max)
|
||||
{
|
||||
// Linear up ends too high, take the middle element
|
||||
mid = (min + max) / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return (VectorFontNode*)0;
|
||||
}
|
||||
|
||||
CompressedMappedFont::CompressedMappedFont(const GlyphNode* glyphs, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataInternalFlash, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable)
|
||||
: GeneratedFont(glyphs, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, glyphDataInternalFlash, kerningList, fallbackChar, ellipsisChar, gsubData, formsTable)
|
||||
{
|
||||
}
|
||||
|
||||
const GlyphNode* CompressedMappedFont::getGlyph(Unicode::UnicodeChar unicode) const
|
||||
{
|
||||
return find(unicode);
|
||||
}
|
||||
|
||||
const uint8_t* CompressedMappedFont::getPixelData(const GlyphNode* glyph) const
|
||||
{
|
||||
const uint8_t* pixelData = CompressedFontCache::hasCachedGlyph(glyph);
|
||||
if (pixelData)
|
||||
{
|
||||
return pixelData;
|
||||
}
|
||||
|
||||
const uint8_t* const* table = (const uint8_t* const*)glyphData;
|
||||
const uint8_t* compressedData = &(table[glyph->unicode / 2048][glyph->dataOffset & 0x3FFFFFFF]);
|
||||
return CompressedFontCache::cacheGlyph(glyph, compressedData);
|
||||
}
|
||||
|
||||
} // namespace touchgfx
|
||||
@@ -0,0 +1,6 @@
|
||||
#include <touchgfx/Font.hpp>
|
||||
|
||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::KerningNode kerning_arial_10_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = {
|
||||
{ 0, 0 }
|
||||
};
|
||||
@@ -0,0 +1,31 @@
|
||||
#include <touchgfx/Font.hpp>
|
||||
|
||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::KerningNode kerning_arial_20_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = {
|
||||
{ 0x0041, -1 }, // (First char = [0x0041, A], Second char = [0x0020, space], Kerning dist = -1)
|
||||
{ 0x004C, -1 }, // (First char = [0x004C, L], Second char = [0x0020, space], Kerning dist = -1)
|
||||
{ 0x0046, -2 }, // (First char = [0x0046, F], Second char = [0x002C, comma], Kerning dist = -2)
|
||||
{ 0x0050, -2 }, // (First char = [0x0050, P], Second char = [0x002C, comma], Kerning dist = -2)
|
||||
{ 0x0054, -2 }, // (First char = [0x0054, T], Second char = [0x002C, comma], Kerning dist = -2)
|
||||
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x002C, comma], Kerning dist = -1)
|
||||
{ 0x0054, -1 }, // (First char = [0x0054, T], Second char = [0x002D, hyphen], Kerning dist = -1)
|
||||
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x002D, hyphen], Kerning dist = -1)
|
||||
{ 0x0046, -2 }, // (First char = [0x0046, F], Second char = [0x002E, period], Kerning dist = -2)
|
||||
{ 0x0050, -2 }, // (First char = [0x0050, P], Second char = [0x002E, period], Kerning dist = -2)
|
||||
{ 0x0054, -2 }, // (First char = [0x0054, T], Second char = [0x002E, period], Kerning dist = -2)
|
||||
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x002E, period], Kerning dist = -1)
|
||||
{ 0x0031, -1 }, // (First char = [0x0031, one], Second char = [0x0031, one], Kerning dist = -1)
|
||||
{ 0x0054, -2 }, // (First char = [0x0054, T], Second char = [0x003A, colon], Kerning dist = -2)
|
||||
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x003A, colon], Kerning dist = -1)
|
||||
{ 0x0020, -1 }, // (First char = [0x0020, space], Second char = [0x0041, A], Kerning dist = -1)
|
||||
{ 0x0046, -1 }, // (First char = [0x0046, F], Second char = [0x0041, A], Kerning dist = -1)
|
||||
{ 0x0050, -1 }, // (First char = [0x0050, P], Second char = [0x0041, A], Kerning dist = -1)
|
||||
{ 0x0054, -1 }, // (First char = [0x0054, T], Second char = [0x0041, A], Kerning dist = -1)
|
||||
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x0041, A], Kerning dist = -1)
|
||||
{ 0x0041, -1 }, // (First char = [0x0041, A], Second char = [0x0054, T], Kerning dist = -1)
|
||||
{ 0x004C, -1 }, // (First char = [0x004C, L], Second char = [0x0054, T], Kerning dist = -1)
|
||||
{ 0x0041, -1 }, // (First char = [0x0041, A], Second char = [0x0056, V], Kerning dist = -1)
|
||||
{ 0x004C, -1 }, // (First char = [0x004C, L], Second char = [0x0056, V], Kerning dist = -1)
|
||||
{ 0x0054, -2 }, // (First char = [0x0054, T], Second char = [0x0061, a], Kerning dist = -2)
|
||||
{ 0x0056, -1 }, // (First char = [0x0056, V], Second char = [0x0061, a], Kerning dist = -1)
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
#include <touchgfx/Font.hpp>
|
||||
|
||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::KerningNode kerning_arial_40_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE = {
|
||||
{ 0x0054, -2 }, // (First char = [0x0054, T], Second char = [0x002D, hyphen], Kerning dist = -2)
|
||||
{ 0x0056, -2 }, // (First char = [0x0056, V], Second char = [0x002D, hyphen], Kerning dist = -2)
|
||||
{ 0x0031, -3 }, // (First char = [0x0031, one], Second char = [0x0031, one], Kerning dist = -3)
|
||||
{ 0x0054, -3 }, // (First char = [0x0054, T], Second char = [0x0041, A], Kerning dist = -3)
|
||||
{ 0x0056, -3 }, // (First char = [0x0056, V], Second char = [0x0041, A], Kerning dist = -3)
|
||||
{ 0x0054, -1 }, // (First char = [0x0054, T], Second char = [0x004F, O], Kerning dist = -1)
|
||||
{ 0x0041, -3 }, // (First char = [0x0041, A], Second char = [0x0054, T], Kerning dist = -3)
|
||||
{ 0x004C, -3 }, // (First char = [0x004C, L], Second char = [0x0054, T], Kerning dist = -3)
|
||||
{ 0x0052, -1 }, // (First char = [0x0052, R], Second char = [0x0054, T], Kerning dist = -1)
|
||||
{ 0x0041, -3 }, // (First char = [0x0041, A], Second char = [0x0056, V], Kerning dist = -3)
|
||||
{ 0x004C, -3 }, // (First char = [0x004C, L], Second char = [0x0056, V], Kerning dist = -3)
|
||||
{ 0x0052, -1 }, // (First char = [0x0052, R], Second char = [0x0056, V], Kerning dist = -1)
|
||||
};
|
||||
@@ -0,0 +1,122 @@
|
||||
// Autogenerated, do not edit
|
||||
|
||||
#include <fonts/GeneratedFont.hpp>
|
||||
|
||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::GlyphNode glyphs_arial_10_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
|
||||
{ 0, 0x003F, 5, 7, 7, 0, 6, 0, 0, 0x00 } // question
|
||||
};
|
||||
|
||||
// arial_10_4bpp
|
||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::GlyphNode glyphs_arial_10_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE;
|
||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t unicodes_arial_10_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE;
|
||||
FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t* const unicodes_arial_10_4bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = {
|
||||
unicodes_arial_10_4bpp_0
|
||||
};
|
||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::KerningNode kerning_arial_10_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE;
|
||||
static const touchgfx::Unicode::UnicodeChar contextualForms4Long[][5] = {
|
||||
// key, isol, key2
|
||||
{ /*0627 0644 0644 0647*/ 0x02ED, 0xFDF2, 0x0644, 0x0000, 0x0000 } // ARABIC LIGATURE ALLAH
|
||||
};
|
||||
|
||||
static const touchgfx::Unicode::UnicodeChar contextualForms3Long[][5] = {
|
||||
// key, isol, fina, init, medi
|
||||
{ /*0020 064C 0651*/ 0xD4F5, 0xFC5E, 0x0000, 0x0000, 0x0000 }, // ARABIC LIGATURE SHADDA WITH DAMMATAN
|
||||
{ /*0020 064D 0651*/ 0xD51D, 0xFC5F, 0x0000, 0x0000, 0x0000 }, // ARABIC LIGATURE SHADDA WITH KASRATAN
|
||||
{ /*0020 064E 0651*/ 0xD545, 0xFC60, 0x0000, 0x0000, 0x0000 }, // ARABIC LIGATURE SHADDA WITH FATHA
|
||||
{ /*0020 064F 0651*/ 0xD56D, 0xFC61, 0x0000, 0x0000, 0x0000 }, // ARABIC LIGATURE SHADDA WITH DAMMA
|
||||
{ /*0020 0650 0651*/ 0xD595, 0xFC62, 0x0000, 0x0000, 0x0000 } // ARABIC LIGATURE SHADDA WITH KASRA
|
||||
};
|
||||
|
||||
static const touchgfx::Unicode::UnicodeChar contextualForms2Long[][5] = {
|
||||
// key, isol, fina, init, medi
|
||||
{ /*0644 0622*/ 0x4422, 0xFEF5, 0xFEF6, 0x0000, 0x0000 }, // ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE
|
||||
{ /*0644 0623*/ 0x4423, 0xFEF7, 0xFEF8, 0x0000, 0x0000 }, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE
|
||||
{ /*0644 0625*/ 0x4425, 0xFEF9, 0xFEFA, 0x0000, 0x0000 }, // ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW
|
||||
{ /*0644 0627*/ 0x4427, 0xFEFB, 0xFEFC, 0x0000, 0x0000 } // ARABIC LIGATURE LAM WITH ALEF
|
||||
};
|
||||
|
||||
static const touchgfx::Unicode::UnicodeChar contextualForms0621_063a[][4] = {
|
||||
// isol, fina, init, medi
|
||||
{ /*0621*/ 0xFE80, 0x0000, 0x0000, 0x0000 }, // ARABIC LETTER HAMZA
|
||||
{ /*0622*/ 0xFE81, 0xFE82, 0x0000, 0x0000 }, // ARABIC LETTER ALEF WITH MADDA ABOVE
|
||||
{ /*0623*/ 0xFE83, 0xFE84, 0x0000, 0x0000 }, // ARABIC LETTER ALEF WITH HAMZA ABOVE
|
||||
{ /*0624*/ 0xFE85, 0xFE86, 0x0000, 0x0000 }, // ARABIC LETTER WAW WITH HAMZA ABOVE
|
||||
{ /*0625*/ 0xFE87, 0xFE88, 0x0000, 0x0000 }, // ARABIC LETTER ALEF WITH HAMZA BELOW
|
||||
{ /*0626*/ 0xFE89, 0xFE8A, 0xFE8B, 0xFE8C }, // ARABIC LETTER YEH WITH HAMZA ABOVE
|
||||
{ /*0627*/ 0xFE8D, 0xFE8E, 0x0000, 0x0000 }, // ARABIC LETTER ALEF
|
||||
{ /*0628*/ 0xFE8F, 0xFE90, 0xFE91, 0xFE92 }, // ARABIC LETTER BEH
|
||||
{ /*0629*/ 0xFE93, 0xFE94, 0x0000, 0x0000 }, // ARABIC LETTER TEH MARBUTA
|
||||
{ /*062A*/ 0xFE95, 0xFE96, 0xFE97, 0xFE98 }, // ARABIC LETTER TEH
|
||||
{ /*062B*/ 0xFE99, 0xFE9A, 0xFE9B, 0xFE9C }, // ARABIC LETTER THEH
|
||||
{ /*062C*/ 0xFE9D, 0xFE9E, 0xFE9F, 0xFEA0 }, // ARABIC LETTER JEEM
|
||||
{ /*062D*/ 0xFEA1, 0xFEA2, 0xFEA3, 0xFEA4 }, // ARABIC LETTER HAH
|
||||
{ /*062E*/ 0xFEA5, 0xFEA6, 0xFEA7, 0xFEA8 }, // ARABIC LETTER KHAH
|
||||
{ /*062F*/ 0xFEA9, 0xFEAA, 0x0000, 0x0000 }, // ARABIC LETTER DAL
|
||||
{ /*0630*/ 0xFEAB, 0xFEAC, 0x0000, 0x0000 }, // ARABIC LETTER THAL
|
||||
{ /*0631*/ 0xFEAD, 0xFEAE, 0x0000, 0x0000 }, // ARABIC LETTER REH
|
||||
{ /*0632*/ 0xFEAF, 0xFEB0, 0x0000, 0x0000 }, // ARABIC LETTER ZAIN
|
||||
{ /*0633*/ 0xFEB1, 0xFEB2, 0xFEB3, 0xFEB4 }, // ARABIC LETTER SEEN
|
||||
{ /*0634*/ 0xFEB5, 0xFEB6, 0xFEB7, 0xFEB8 }, // ARABIC LETTER SHEEN
|
||||
{ /*0635*/ 0xFEB9, 0xFEBA, 0xFEBB, 0xFEBC }, // ARABIC LETTER SAD
|
||||
{ /*0636*/ 0xFEBD, 0xFEBE, 0xFEBF, 0xFEC0 }, // ARABIC LETTER DAD
|
||||
{ /*0637*/ 0xFEC1, 0xFEC2, 0xFEC3, 0xFEC4 }, // ARABIC LETTER TAH
|
||||
{ /*0638*/ 0xFEC5, 0xFEC6, 0xFEC7, 0xFEC8 }, // ARABIC LETTER ZAH
|
||||
{ /*0639*/ 0xFEC9, 0xFECA, 0xFECB, 0xFECC }, // ARABIC LETTER AIN
|
||||
{ /*063A*/ 0xFECD, 0xFECE, 0xFECF, 0xFED0 } // ARABIC LETTER GHAIN
|
||||
};
|
||||
|
||||
static const touchgfx::Unicode::UnicodeChar contextualForms0641_064a[][4] = {
|
||||
// isol, fina, init, medi
|
||||
{ /*0641*/ 0xFED1, 0xFED2, 0xFED3, 0xFED4 }, // ARABIC LETTER FEH
|
||||
{ /*0642*/ 0xFED5, 0xFED6, 0xFED7, 0xFED8 }, // ARABIC LETTER QAF
|
||||
{ /*0643*/ 0xFED9, 0xFEDA, 0xFEDB, 0xFEDC }, // ARABIC LETTER KAF
|
||||
{ /*0644*/ 0xFEDD, 0xFEDE, 0xFEDF, 0xFEE0 }, // ARABIC LETTER LAM
|
||||
{ /*0645*/ 0xFEE1, 0xFEE2, 0xFEE3, 0xFEE4 }, // ARABIC LETTER MEEM
|
||||
{ /*0646*/ 0xFEE5, 0xFEE6, 0xFEE7, 0xFEE8 }, // ARABIC LETTER NOON
|
||||
{ /*0647*/ 0xFEE9, 0xFEEA, 0xFEEB, 0xFEEC }, // ARABIC LETTER HEH
|
||||
{ /*0648*/ 0xFEED, 0xFEEE, 0x0000, 0x0000 }, // ARABIC LETTER WAW
|
||||
{ /*0649*/ 0xFEEF, 0xFEF0, 0x0000, 0x0000 }, // ARABIC LETTER ALEF MAKSURA / ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA
|
||||
{ /*064A*/ 0xFEF1, 0xFEF2, 0xFEF3, 0xFEF4 } // ARABIC LETTER YEH
|
||||
};
|
||||
|
||||
static const touchgfx::Unicode::UnicodeChar contextualForms06XX[][5] = {
|
||||
// key, isol, fina, init, medi
|
||||
{ /*0671*/ 0x0671, 0xFB50, 0x0000, 0x0000, 0x0000 }, // ARABIC LETTER ALEF WASLA
|
||||
{ /*067E*/ 0x067E, 0xFB56, 0xFB57, 0xFB58, 0xFB59 }, // ARABIC LETTER PEH
|
||||
{ /*0686*/ 0x0686, 0xFB7A, 0xFB7B, 0xFB7C, 0xFB7D }, // ARABIC LETTER TCHEH
|
||||
{ /*0698*/ 0x0698, 0xFB8A, 0xFB8B, 0x0000, 0x0000 }, // ARABIC LETTER JEH
|
||||
{ /*06A4*/ 0x06A4, 0xFB6A, 0x0000, 0x0000, 0x0000 }, // ARABIC LETTER VEH
|
||||
{ /*06A9*/ 0x06A9, 0xFB8E, 0xFB8F, 0xFB90, 0xFB91 }, // ARABIC LETTER KEHEH
|
||||
{ /*06AF*/ 0x06AF, 0xFB92, 0xFB93, 0xFB94, 0xFB95 }, // ARABIC LETTER GAF
|
||||
{ /*06CC*/ 0x06CC, 0xFBFC, 0xFBFD, 0xFBFE, 0xFBFF } // ARABIC LETTER FARSI YEH
|
||||
};
|
||||
|
||||
extern const touchgfx::FontContextualFormsTable arial_contextualFormsTable;
|
||||
|
||||
const touchgfx::FontContextualFormsTable arial_contextualFormsTable =
|
||||
{
|
||||
contextualForms4Long,
|
||||
contextualForms3Long,
|
||||
contextualForms2Long,
|
||||
contextualForms0621_063a,
|
||||
contextualForms0641_064a,
|
||||
contextualForms06XX,
|
||||
|
||||
sizeof(contextualForms4Long)/sizeof(contextualForms4Long[0]),
|
||||
sizeof(contextualForms3Long)/sizeof(contextualForms3Long[0]),
|
||||
sizeof(contextualForms2Long)/sizeof(contextualForms2Long[0]),
|
||||
sizeof(contextualForms06XX)/sizeof(contextualForms06XX[0])
|
||||
};
|
||||
|
||||
touchgfx::GeneratedFont& getFont_arial_10_4bpp();
|
||||
|
||||
touchgfx::GeneratedFont& getFont_arial_10_4bpp()
|
||||
{
|
||||
static touchgfx::GeneratedFont arial_10_4bpp(glyphs_arial_10_4bpp, 1, 10, 10, 0, 0, 4, 1, 0, 0, unicodes_arial_10_4bpp, kerning_arial_10_4bpp, 63, 0, 0, &arial_contextualFormsTable);
|
||||
return arial_10_4bpp;
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
// Autogenerated, do not edit
|
||||
|
||||
#include <fonts/GeneratedFont.hpp>
|
||||
|
||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::GlyphNode glyphs_arial_20_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
|
||||
{ 0, 0x0020, 0, 0, 0, 0, 6, 0, 2, 0x00 }, // space
|
||||
{ 0, 0x002C, 3, 6, 3, 1, 6, 2, 4, 0x00 }, // comma
|
||||
{ 12, 0x002D, 6, 2, 6, 0, 7, 6, 2, 0x00 }, // hyphen
|
||||
{ 18, 0x002E, 3, 3, 3, 1, 6, 8, 4, 0x00 }, // period
|
||||
{ 24, 0x0030, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // zero
|
||||
{ 114, 0x0031, 6, 15, 15, 2, 11, 12, 1, 0x00 }, // one
|
||||
{ 159, 0x0032, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // two
|
||||
{ 249, 0x0033, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // three
|
||||
{ 339, 0x0034, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // four
|
||||
{ 429, 0x0035, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // five
|
||||
{ 519, 0x0036, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // six
|
||||
{ 609, 0x0037, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // seven
|
||||
{ 699, 0x0038, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // eight
|
||||
{ 789, 0x0039, 11, 15, 15, 0, 11, 0, 0, 0x00 }, // nine
|
||||
{ 879, 0x003A, 3, 11, 11, 1, 6, 13, 2, 0x00 }, // colon
|
||||
{ 901, 0x003F, 10, 15, 15, 1, 11, 0, 0, 0x00 }, // question
|
||||
{ 976, 0x0041, 14, 15, 15, 0, 13, 15, 5, 0x00 }, // A
|
||||
{ 1081, 0x0042, 12, 15, 15, 1, 13, 0, 0, 0x00 }, // B
|
||||
{ 1171, 0x0043, 13, 15, 15, 1, 14, 0, 0, 0x00 }, // C
|
||||
{ 1276, 0x0044, 13, 15, 15, 1, 14, 0, 0, 0x00 }, // D
|
||||
{ 1381, 0x0045, 12, 15, 15, 1, 13, 0, 0, 0x00 }, // E
|
||||
{ 1471, 0x0046, 11, 15, 15, 1, 12, 0, 0, 0x00 }, // F
|
||||
{ 1561, 0x0048, 12, 15, 15, 1, 14, 0, 0, 0x00 }, // H
|
||||
{ 1651, 0x0049, 3, 15, 15, 1, 6, 0, 0, 0x00 }, // I
|
||||
{ 1681, 0x004B, 13, 15, 15, 1, 13, 0, 0, 0x00 }, // K
|
||||
{ 1786, 0x004C, 10, 15, 15, 1, 11, 0, 0, 0x00 }, // L
|
||||
{ 1861, 0x004D, 15, 15, 15, 1, 17, 0, 0, 0x00 }, // M
|
||||
{ 1981, 0x004E, 12, 15, 15, 1, 14, 0, 0, 0x00 }, // N
|
||||
{ 2071, 0x004F, 14, 15, 15, 1, 16, 0, 0, 0x00 }, // O
|
||||
{ 2176, 0x0050, 12, 15, 15, 1, 13, 0, 0, 0x00 }, // P
|
||||
{ 2266, 0x0052, 13, 15, 15, 1, 14, 0, 0, 0x00 }, // R
|
||||
{ 2371, 0x0054, 12, 15, 15, 0, 12, 20, 2, 0x00 }, // T
|
||||
{ 2461, 0x0055, 12, 15, 15, 1, 14, 0, 0, 0x00 }, // U
|
||||
{ 2551, 0x0056, 14, 15, 15, 0, 13, 22, 2, 0x00 }, // V
|
||||
{ 2656, 0x0058, 13, 15, 15, 0, 13, 0, 0, 0x00 }, // X
|
||||
{ 2761, 0x0061, 11, 11, 11, 0, 11, 24, 2, 0x00 }, // a
|
||||
{ 2827, 0x0078, 10, 11, 11, 0, 10, 0, 0, 0x00 }, // x
|
||||
{ 2882, 0x007A, 10, 11, 11, 0, 10, 0, 0, 0x00 } // z
|
||||
};
|
||||
|
||||
// arial_20_4bpp
|
||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::GlyphNode glyphs_arial_20_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE;
|
||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t unicodes_arial_20_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE;
|
||||
FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t* const unicodes_arial_20_4bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = {
|
||||
unicodes_arial_20_4bpp_0
|
||||
};
|
||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::KerningNode kerning_arial_20_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE;
|
||||
extern const touchgfx::FontContextualFormsTable arial_contextualFormsTable;
|
||||
touchgfx::GeneratedFont& getFont_arial_20_4bpp();
|
||||
|
||||
touchgfx::GeneratedFont& getFont_arial_20_4bpp()
|
||||
{
|
||||
static touchgfx::GeneratedFont arial_20_4bpp(glyphs_arial_20_4bpp, 38, 23, 20, 0, 0, 4, 1, 0, 1, unicodes_arial_20_4bpp, kerning_arial_20_4bpp, 63, 0, 0, &arial_contextualFormsTable);
|
||||
return arial_20_4bpp;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
// Autogenerated, do not edit
|
||||
|
||||
#include <fonts/GeneratedFont.hpp>
|
||||
|
||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::GlyphNode glyphs_arial_40_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE = {
|
||||
{ 0, 0x002B, 20, 19, 24, 2, 23, 0, 0, 0x00 }, // plus
|
||||
{ 190, 0x002D, 12, 4, 13, 1, 13, 0, 2, 0x00 }, // hyphen
|
||||
{ 214, 0x0030, 20, 28, 28, 1, 22, 0, 0, 0x00 }, // zero
|
||||
{ 494, 0x0031, 11, 28, 28, 4, 22, 2, 1, 0x00 }, // one
|
||||
{ 662, 0x0032, 20, 28, 28, 1, 22, 0, 0, 0x00 }, // two
|
||||
{ 942, 0x003F, 20, 28, 28, 1, 22, 0, 0, 0x00 }, // question
|
||||
{ 1222, 0x0041, 27, 28, 28, 0, 27, 3, 2, 0x00 }, // A
|
||||
{ 1614, 0x0042, 23, 28, 28, 2, 27, 0, 0, 0x00 }, // B
|
||||
{ 1950, 0x0043, 26, 28, 28, 2, 29, 0, 0, 0x00 }, // C
|
||||
{ 2314, 0x0044, 24, 28, 28, 3, 29, 0, 0, 0x00 }, // D
|
||||
{ 2650, 0x0045, 22, 28, 28, 3, 27, 0, 0, 0x00 }, // E
|
||||
{ 2958, 0x0048, 23, 28, 28, 3, 29, 0, 0, 0x00 }, // H
|
||||
{ 3294, 0x0049, 5, 28, 28, 3, 11, 0, 0, 0x00 }, // I
|
||||
{ 3378, 0x004C, 19, 28, 28, 2, 22, 0, 0, 0x00 }, // L
|
||||
{ 3658, 0x004E, 23, 28, 28, 3, 29, 0, 0, 0x00 }, // N
|
||||
{ 3994, 0x004F, 29, 28, 28, 1, 31, 5, 1, 0x00 }, // O
|
||||
{ 4414, 0x0051, 29, 30, 28, 1, 31, 0, 0, 0x00 }, // Q
|
||||
{ 4864, 0x0052, 26, 28, 28, 3, 29, 0, 0, 0x00 }, // R
|
||||
{ 5228, 0x0053, 24, 28, 28, 1, 27, 0, 0, 0x00 }, // S
|
||||
{ 5564, 0x0054, 24, 28, 28, 0, 24, 6, 3, 0x00 }, // T
|
||||
{ 5900, 0x0055, 23, 28, 28, 3, 29, 0, 0, 0x00 }, // U
|
||||
{ 6236, 0x0056, 27, 28, 28, 0, 27, 9, 3, 0x00 }, // V
|
||||
{ 6628, 0x005A, 24, 28, 28, 0, 24, 0, 0, 0x00 } // Z
|
||||
};
|
||||
|
||||
// arial_40_4bpp
|
||||
FONT_TABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::GlyphNode glyphs_arial_40_4bpp[] FONT_TABLE_LOCATION_FLASH_ATTRIBUTE;
|
||||
FONT_GLYPH_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t unicodes_arial_40_4bpp_0[] FONT_GLYPH_LOCATION_FLASH_ATTRIBUTE;
|
||||
FONT_SEARCHTABLE_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const uint8_t* const unicodes_arial_40_4bpp[] FONT_SEARCHTABLE_LOCATION_FLASH_ATTRIBUTE = {
|
||||
unicodes_arial_40_4bpp_0
|
||||
};
|
||||
FONT_KERNING_LOCATION_FLASH_PRAGMA
|
||||
KEEP extern const touchgfx::KerningNode kerning_arial_40_4bpp[] FONT_KERNING_LOCATION_FLASH_ATTRIBUTE;
|
||||
extern const touchgfx::FontContextualFormsTable arial_contextualFormsTable;
|
||||
touchgfx::GeneratedFont& getFont_arial_40_4bpp();
|
||||
|
||||
touchgfx::GeneratedFont& getFont_arial_40_4bpp()
|
||||
{
|
||||
static touchgfx::GeneratedFont arial_40_4bpp(glyphs_arial_40_4bpp, 23, 42, 40, 0, 0, 4, 1, 0, 0, unicodes_arial_40_4bpp, kerning_arial_40_4bpp, 63, 0, 0, &arial_contextualFormsTable);
|
||||
return arial_40_4bpp;
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
|
||||
#include <touchgfx/hal/FlashDataReader.hpp>
|
||||
#include <fonts/ApplicationFontProvider.hpp>
|
||||
#include <fonts/CompressedUnmappedFontCache.hpp>
|
||||
#include <fonts/UnmappedDataFont.hpp>
|
||||
|
||||
namespace touchgfx
|
||||
{
|
||||
GlyphNode UnmappedDataFont::glyphNodeBuffer;
|
||||
|
||||
UnmappedDataFont::UnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodeList, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable)
|
||||
: Font(height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, fallbackChar, ellipsisChar),
|
||||
glyphList(glyphs),
|
||||
listSize(numGlyphs),
|
||||
unicodes(unicodeList),
|
||||
glyphDataList(glyphDataList),
|
||||
kerningData(kerningList),
|
||||
gsubTable(gsubData),
|
||||
arabicTable(formsTable)
|
||||
{
|
||||
}
|
||||
|
||||
const GlyphNode* UnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
|
||||
{
|
||||
int index = lookupUnicode(unicode);
|
||||
|
||||
if (index != -1)
|
||||
{
|
||||
// Read glyphNode from unmapped flash
|
||||
touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader();
|
||||
if (flashReader)
|
||||
{
|
||||
flashReader->copyData(glyphList + index, &glyphNodeBuffer, sizeof(GlyphNode));
|
||||
|
||||
pixelData = getPixelData(const_cast<const GlyphNode*>(&glyphNodeBuffer));
|
||||
bitsPerPixel = getBitsPerPixel();
|
||||
return &glyphNodeBuffer;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const uint8_t* UnmappedDataFont::getPixelData(const GlyphNode* glyph) const
|
||||
{
|
||||
const uint8_t* const* table = (const uint8_t* const*)glyphDataList;
|
||||
return &(table[glyph->unicode / 2048][glyph->dataOffset]);
|
||||
}
|
||||
|
||||
int8_t UnmappedDataFont::getKerning(Unicode::UnicodeChar prevChar, const GlyphNode* glyph) const
|
||||
{
|
||||
if (!glyph || glyph->kerningTableSize == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const KerningNode* kerndata = kerningData + glyph->kerningTablePos();
|
||||
for (uint16_t i = glyph->kerningTableSize; i > 0; i--, kerndata++)
|
||||
{
|
||||
if (prevChar == kerndata->unicodePrevChar)
|
||||
{
|
||||
return kerndata->distance;
|
||||
}
|
||||
if (prevChar < kerndata->unicodePrevChar)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int UnmappedDataFont::lookupUnicode(uint16_t unicode) const
|
||||
{
|
||||
int32_t min = 0;
|
||||
int32_t max = listSize - 1;
|
||||
|
||||
int32_t mid = min + (unicode - unicodes[min]); // Linear up from [min].unicode
|
||||
if (mid < min)
|
||||
{
|
||||
// Unicode < unicodes[min] => not found
|
||||
return -1;
|
||||
}
|
||||
if (mid > max)
|
||||
{
|
||||
// Linear up ends too high
|
||||
mid = max - (unicodes[max] - unicode); // Linear down from [max].unicode
|
||||
if (mid > max)
|
||||
{
|
||||
// Unicode > unicodes[max] => not found
|
||||
return -1;
|
||||
}
|
||||
if (mid < min)
|
||||
{
|
||||
// Linear down ends too low, take the middle element
|
||||
mid = (min + max) / 2;
|
||||
}
|
||||
}
|
||||
while (min <= max)
|
||||
{
|
||||
if (unicode == unicodes[mid])
|
||||
{
|
||||
// Found at [mid]
|
||||
return mid;
|
||||
}
|
||||
if (unicode < unicodes[mid])
|
||||
{
|
||||
// Unicode is in lower half
|
||||
max = mid - 1;
|
||||
if (max < min)
|
||||
{
|
||||
// Range is empty => not found
|
||||
break;
|
||||
}
|
||||
// We adjusted max, try linear down from [max].unicode
|
||||
mid = max - (unicodes[max] - unicode);
|
||||
if (mid > max)
|
||||
{
|
||||
// Unicode > [max].unicode => not found
|
||||
break;
|
||||
}
|
||||
if (mid < min)
|
||||
{
|
||||
// Linear down ends too low, take the middle element
|
||||
mid = (min + max) / 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Unicode is in upper half
|
||||
min = mid + 1;
|
||||
if (min > max)
|
||||
{
|
||||
// Range is empty => not found
|
||||
break;
|
||||
}
|
||||
// We adjusted min, try linear up from [min].unicode
|
||||
mid = min + (unicode - unicodes[min]);
|
||||
if (mid < min)
|
||||
{
|
||||
// Unicode < [min].unicode => not found
|
||||
break;
|
||||
}
|
||||
if (mid > max)
|
||||
{
|
||||
// Linear up ends too high, take the middle element
|
||||
mid = (min + max) / 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
CompressedUnmappedDataFont::CompressedUnmappedDataFont(const GlyphNode* glyphs, const uint16_t* unicodes, uint16_t numGlyphs, uint16_t height, uint16_t baseline, uint8_t pixAboveTop, uint8_t pixBelowBottom, uint8_t bitsPerPixel, uint8_t byteAlignRow, uint8_t maxLeft, uint8_t maxRight, const uint8_t* const* glyphDataList, const KerningNode* kerningList, const Unicode::UnicodeChar fallbackChar, const Unicode::UnicodeChar ellipsisChar, const uint16_t* const gsubData, const FontContextualFormsTable* formsTable)
|
||||
: UnmappedDataFont(glyphs, unicodes, numGlyphs, height, baseline, pixAboveTop, pixBelowBottom, bitsPerPixel, byteAlignRow, maxLeft, maxRight, glyphDataList, kerningList, fallbackChar, ellipsisChar, gsubData, formsTable)
|
||||
{
|
||||
}
|
||||
|
||||
const GlyphNode* CompressedUnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode) const
|
||||
{
|
||||
const int index = lookupUnicode(unicode);
|
||||
if (index != -1)
|
||||
{
|
||||
const GlyphNode* glyphNode = glyphList + index;
|
||||
|
||||
// Is the GlyphNode already cached
|
||||
const GlyphNode* cachedNode = CompressedUnmappedFontCache::hasCachedGlyphNode(glyphNode);
|
||||
if (cachedNode)
|
||||
{
|
||||
return cachedNode;
|
||||
}
|
||||
|
||||
// Read glyphNode from unmapped flash
|
||||
touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader();
|
||||
if (flashReader)
|
||||
{
|
||||
GlyphNode* newGlyphNode = CompressedUnmappedFontCache::cacheGlyphNode(glyphNode);
|
||||
flashReader->copyData(glyphList + index, (uint8_t*)newGlyphNode, sizeof(GlyphNode));
|
||||
return newGlyphNode;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const GlyphNode* CompressedUnmappedDataFont::getGlyph(Unicode::UnicodeChar unicode, const uint8_t*& pixelData, uint8_t& bitsPerPixel) const
|
||||
{
|
||||
const int index = lookupUnicode(unicode);
|
||||
if (index != -1)
|
||||
{
|
||||
const GlyphNode* glyphNode = glyphList + index;
|
||||
const uint8_t* pixels = 0;
|
||||
const GlyphNode* cachedNode = CompressedUnmappedFontCache::hasCachedGlyphData(glyphNode, pixels);
|
||||
if (pixels)
|
||||
{
|
||||
pixelData = pixels;
|
||||
bitsPerPixel = 4;
|
||||
return cachedNode;
|
||||
}
|
||||
|
||||
// Cache glyphNode if not found already
|
||||
if (cachedNode == 0)
|
||||
{
|
||||
cachedNode = getGlyph(unicode);
|
||||
}
|
||||
if (cachedNode->width() == 0)
|
||||
{
|
||||
bitsPerPixel = 4;
|
||||
pixelData = 0;
|
||||
return cachedNode;
|
||||
}
|
||||
|
||||
// Read data from unmapped flash
|
||||
touchgfx::FlashDataReader* const flashReader = ApplicationFontProvider::getFlashReader();
|
||||
if (flashReader)
|
||||
{
|
||||
const uint8_t* const* table = (const uint8_t* const*)glyphDataList;
|
||||
const uint32_t dataOffset = cachedNode->dataOffset & 0x3FFFFFFF;
|
||||
const uint8_t* compressedData = &(table[unicode / 2048][dataOffset]);
|
||||
const uint8_t* cachedData = CompressedUnmappedFontCache::cacheGlyphData(glyphNode, compressedData, flashReader);
|
||||
if (cachedData)
|
||||
{
|
||||
bitsPerPixel = 4;
|
||||
pixelData = cachedData;
|
||||
return cachedNode;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
const uint8_t* CompressedUnmappedDataFont::getPixelData(const GlyphNode* glyph) const
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
} // namespace touchgfx
|
||||
@@ -0,0 +1,11 @@
|
||||
/* DO NOT EDIT THIS FILE */
|
||||
/* This file is autogenerated by the text-database code generator */
|
||||
#include <touchgfx/VectorFontRendererImpl.hpp>
|
||||
|
||||
void touchgfx::VectorFontRendererImpl::getVectorFontBuffers(float*& pointArray, int& pointArraySize, uint8_t*& commandArray, int& commandArraySize)
|
||||
{
|
||||
pointArray = 0;
|
||||
pointArraySize = 0;
|
||||
commandArray = 0;
|
||||
commandArraySize = 0;
|
||||
}
|
||||
Reference in new issue
Block a user