mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2026-01-29 17:38:16 +03:00
Add RTL level property and print flag
Again, the RTL property controls whether textboxes will be right-aligned, and that kind of stuff. It can't be font-bound, since Space Station supports Hebrew characters and we want to be able to support, say, a Hebrew translation or Hebrew levels in the future without having to make a dedicated (or duplicated) font for it. Therefore it's a property of both the language pack as well as custom levels - like custom levels already had a <font> tag, they now also have an <rtl> tag that sets this property. Right now, we'll have to hardcode it so the menu option for the Arabic font sets the <rtl> property to 1, and all the other options set it to 0. But it's future-proof in that we can later decide to split the option for Space Station into an LTR option and an RTL option (so both "english/..." and "עברית" would select Space Station, but one sets the RTL property to 0 and the other sets it to 1).
This commit is contained in:
committed by
Misa Elizabeth Kai
parent
37c4f76988
commit
29e2b19698
@@ -282,11 +282,16 @@ bool is_joiner(const uint32_t codepoint)
|
||||
return codepoint == 0x200C || codepoint == 0x200D;
|
||||
}
|
||||
|
||||
bool bidi_should_transform(const char* text)
|
||||
bool bidi_should_transform(const bool rtl, const char* text)
|
||||
{
|
||||
/* Just as an optimization, only run the whole bidi machinery if the
|
||||
* language is actually an RTL one, _or_ if an RTL character is found. */
|
||||
|
||||
if (rtl)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
const char* text_ptr = text;
|
||||
uint32_t ch;
|
||||
while ((ch = UTF8_next(&text_ptr)))
|
||||
@@ -313,7 +318,7 @@ bool bidi_should_transform(const char* text)
|
||||
return false;
|
||||
}
|
||||
|
||||
const char* bidi_transform(const char* text)
|
||||
const char* bidi_transform(const bool rtl, const char* text)
|
||||
{
|
||||
uint32_t utf32_in[1024];
|
||||
int n_codepoints = 0;
|
||||
@@ -345,7 +350,12 @@ const char* bidi_transform(const char* text)
|
||||
{
|
||||
return text;
|
||||
}
|
||||
SBParagraphRef paragraph = SBAlgorithmCreateParagraph(algorithm, 0, INT32_MAX, SBLevelDefaultRTL);
|
||||
SBParagraphRef paragraph = SBAlgorithmCreateParagraph(
|
||||
algorithm,
|
||||
0,
|
||||
INT32_MAX,
|
||||
rtl ? SBLevelDefaultRTL : SBLevelDefaultLTR
|
||||
);
|
||||
SDL_assert(paragraph != NULL);
|
||||
SBUInteger paragraph_len = SBParagraphGetLength(paragraph);
|
||||
SBLineRef paragraph_line = SBParagraphCreateLine(paragraph, 0, paragraph_len);
|
||||
|
||||
Reference in New Issue
Block a user