183 lines
6.0 KiB
Plaintext
183 lines
6.0 KiB
Plaintext
/* DO NOT EDIT THIS FILE */
|
|
/* This file is autogenerated by the text-database code generator */
|
|
|
|
#include <stdarg.h>
|
|
#include <texts/TypedTextDatabase.hpp>
|
|
#include <touchgfx/TextProvider.hpp>
|
|
#include <touchgfx/Texts.hpp>
|
|
#include <touchgfx/TypedText.hpp>
|
|
#include <touchgfx/Unicode.hpp>
|
|
#include <touchgfx/hal/HAL.hpp>
|
|
#include <touchgfx/lcd/LCD.hpp>
|
|
|
|
uint16_t touchgfx::Font::getStringWidth(const touchgfx::Unicode::UnicodeChar* text, ...) const
|
|
{
|
|
va_list pArg;
|
|
va_start(pArg, text);
|
|
uint16_t width = getStringWidth<%= is_rtl ? 'RTL' : 'LTR' %>(TEXT_DIRECTION_LTR, text, pArg);
|
|
va_end(pArg);
|
|
return width;
|
|
}
|
|
|
|
uint16_t touchgfx::Font::getStringWidth(touchgfx::TextDirection textDirection, const touchgfx::Unicode::UnicodeChar* text, ...) const
|
|
{
|
|
va_list pArg;
|
|
va_start(pArg, text);
|
|
uint16_t width = getStringWidth<%= is_rtl ? 'RTL' : 'LTR' %>(textDirection, text, pArg);
|
|
va_end(pArg);
|
|
return width;
|
|
}
|
|
|
|
touchgfx::Unicode::UnicodeChar touchgfx::TextProvider::getNextLigature(TextDirection direction)
|
|
{<% if is_rtl %>
|
|
nextCharacters.replaceAt0(unicodeConverter(direction));<% end %>
|
|
if (fontGsubTable && nextCharacters.peekChar())
|
|
{
|
|
substituteGlyphs();
|
|
if (nextCharacters.peekChar(1) == 0x093F) //Hindi I-matra
|
|
{
|
|
nextCharacters.replaceAt1(nextCharacters.peekChar());
|
|
nextCharacters.replaceAt0(0x093F);
|
|
}
|
|
}
|
|
return getNextChar();
|
|
}
|
|
|
|
void touchgfx::TextProvider::initializeInternal()
|
|
{
|
|
fillInputBuffer();<% if is_rtl %>
|
|
unicodeConverterInit();<% end %>
|
|
}
|
|
|
|
void touchgfx::LCD::drawString(touchgfx::Rect widgetArea, const touchgfx::Rect& invalidatedArea, const touchgfx::LCD::StringVisuals& stringVisuals, const touchgfx::Unicode::UnicodeChar* format, ...)
|
|
{
|
|
va_list pArg;
|
|
va_start(pArg, format);
|
|
drawString<%= is_rtl ? 'RTL' : 'LTR' %>(widgetArea, invalidatedArea, stringVisuals, format, pArg);
|
|
va_end(pArg);
|
|
}
|
|
|
|
//Default typed text database
|
|
extern const touchgfx::TypedText::TypedTextData* const typedTextDatabaseArray[];
|
|
|
|
<% if generate_binary_files? %>
|
|
extern const touchgfx::Unicode::UnicodeChar EmptyLanguageTexts[];
|
|
extern uint32_t const EmptyLanguageIndices[];
|
|
<% else %>
|
|
<% if remap_strings? %>
|
|
TEXT_LOCATION_FLASH_PRAGMA
|
|
KEEP extern const touchgfx::Unicode::UnicodeChar texts_all_languages[] TEXT_LOCATION_FLASH_ATTRIBUTE =
|
|
{
|
|
<%= all_unicodes %>
|
|
};
|
|
<% end %>
|
|
<% countries.each do |lang| %>
|
|
TEXT_LOCATION_FLASH_PRAGMA
|
|
KEEP extern uint32_t const indices<%= lang %>[] TEXT_LOCATION_FLASH_ATTRIBUTE;
|
|
<% if not remap_strings? %>
|
|
TEXT_LOCATION_FLASH_PRAGMA
|
|
KEEP extern const touchgfx::Unicode::UnicodeChar texts<%= lang %>[] TEXT_LOCATION_FLASH_ATTRIBUTE;
|
|
<% end %>
|
|
<% end %>
|
|
<% end %>
|
|
|
|
//array holding dynamically installed languages
|
|
struct TranslationHeader
|
|
{
|
|
uint32_t offset_to_texts;
|
|
uint32_t offset_to_indices;
|
|
uint32_t offset_to_typedtext;
|
|
};
|
|
static const TranslationHeader* languagesArray[<%= countries.length > 0 ? countries.length : 1 %>] = { 0 };
|
|
|
|
//Compiled and linked in languages
|
|
static const uint32_t* const staticLanguageIndices[] =
|
|
{
|
|
<% if generate_binary_files? %>
|
|
EmptyLanguageIndices
|
|
<% else %>
|
|
<% if countries.empty? %>
|
|
0
|
|
<% end %>
|
|
<% countries.each_with_index do |lang, index| %>
|
|
indices<%= lang %><%= (index==countries.length-1) ? '': ',' %>
|
|
<% end %>
|
|
<% end %>
|
|
};
|
|
<% if generate_binary_files? %>
|
|
static const touchgfx::Unicode::UnicodeChar* const staticLanguageTexts[] = {
|
|
EmptyLanguageTexts
|
|
};
|
|
<% else %>
|
|
<% if not remap_strings? %>
|
|
static const touchgfx::Unicode::UnicodeChar* const staticLanguageTexts[] = {
|
|
<% if countries.empty? %>
|
|
0
|
|
<% end %>
|
|
<% countries.each_with_index do |lang, index| %>
|
|
texts<%= lang %><%= (index==countries.length-1) ? '': ',' %>
|
|
<% end %>
|
|
};
|
|
<% end %>
|
|
<% end %>
|
|
|
|
touchgfx::LanguageId touchgfx::Texts::currentLanguage = static_cast<touchgfx::LanguageId>(0);
|
|
static const touchgfx::Unicode::UnicodeChar* currentLanguagePtr = 0;
|
|
static const uint32_t* currentLanguageIndices = 0;
|
|
|
|
void touchgfx::Texts::setLanguage(touchgfx::LanguageId id)
|
|
{
|
|
const touchgfx::TypedText::TypedTextData* currentLanguageTypedText = 0;
|
|
if (id < <%= countries.length > 0 ? countries.length : 1 %>)
|
|
{
|
|
if (languagesArray[id] != 0)
|
|
{
|
|
//dynamic translation is added
|
|
const TranslationHeader* translation = languagesArray[id];
|
|
currentLanguagePtr = (const touchgfx::Unicode::UnicodeChar*)(((const uint8_t*)translation) + translation->offset_to_texts);
|
|
currentLanguageIndices = (const uint32_t*)(((const uint8_t*)translation) + translation->offset_to_indices);
|
|
currentLanguageTypedText = (const touchgfx::TypedText::TypedTextData*)(((const uint8_t*)translation) + translation->offset_to_typedtext);
|
|
}
|
|
<% if generate_binary_files? %>
|
|
else
|
|
{
|
|
//compiled and linked empty texts and indices in typedTextData
|
|
currentLanguagePtr = staticLanguageTexts[0];
|
|
currentLanguageIndices = staticLanguageIndices[0];
|
|
currentLanguageTypedText = typedTextDatabaseArray[0];
|
|
}
|
|
<% else %>
|
|
else
|
|
{
|
|
//compiled and linked in languages
|
|
<% if remap_strings? %>
|
|
currentLanguagePtr = texts_all_languages;
|
|
currentLanguageIndices = staticLanguageIndices[id];
|
|
<% else %>
|
|
currentLanguagePtr = staticLanguageTexts[id];
|
|
currentLanguageIndices = staticLanguageIndices[id];
|
|
<% end %>
|
|
currentLanguageTypedText = typedTextDatabaseArray[id];
|
|
}
|
|
<% end %>
|
|
}
|
|
|
|
if (currentLanguageTypedText)
|
|
{
|
|
currentLanguage = id;
|
|
touchgfx::TypedText::registerTypedTextDatabase(currentLanguageTypedText,
|
|
TypedTextDatabase::getFonts(), TypedTextDatabase::getInstanceSize());
|
|
}
|
|
}
|
|
|
|
void touchgfx::Texts::setTranslation(touchgfx::LanguageId id, const void* translation)
|
|
{
|
|
languagesArray[id] = (const TranslationHeader*)translation;
|
|
}
|
|
|
|
const touchgfx::Unicode::UnicodeChar* touchgfx::Texts::getText(TypedTextId id) const
|
|
{
|
|
return ¤tLanguagePtr[currentLanguageIndices[id]];
|
|
}
|
|
|