[Complex Test Layouts] Change String to use UTF-32 encoding on all platforms.
This commit is contained in:
@ -44,23 +44,23 @@
|
||||
|
||||
#define TAB_PIXELS
|
||||
|
||||
inline bool _is_symbol(CharType c) {
|
||||
inline bool _is_symbol(char32_t c) {
|
||||
return is_symbol(c);
|
||||
}
|
||||
|
||||
static bool _is_text_char(CharType c) {
|
||||
static bool _is_text_char(char32_t c) {
|
||||
return !is_symbol(c);
|
||||
}
|
||||
|
||||
static bool _is_whitespace(CharType c) {
|
||||
static bool _is_whitespace(char32_t c) {
|
||||
return c == '\t' || c == ' ';
|
||||
}
|
||||
|
||||
static bool _is_char(CharType c) {
|
||||
static bool _is_char(char32_t c) {
|
||||
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_';
|
||||
}
|
||||
|
||||
static bool _is_pair_right_symbol(CharType c) {
|
||||
static bool _is_pair_right_symbol(char32_t c) {
|
||||
return c == '"' ||
|
||||
c == '\'' ||
|
||||
c == ')' ||
|
||||
@ -68,7 +68,7 @@ static bool _is_pair_right_symbol(CharType c) {
|
||||
c == '}';
|
||||
}
|
||||
|
||||
static bool _is_pair_left_symbol(CharType c) {
|
||||
static bool _is_pair_left_symbol(char32_t c) {
|
||||
return c == '"' ||
|
||||
c == '\'' ||
|
||||
c == '(' ||
|
||||
@ -76,11 +76,11 @@ static bool _is_pair_left_symbol(CharType c) {
|
||||
c == '{';
|
||||
}
|
||||
|
||||
static bool _is_pair_symbol(CharType c) {
|
||||
static bool _is_pair_symbol(char32_t c) {
|
||||
return _is_pair_left_symbol(c) || _is_pair_right_symbol(c);
|
||||
}
|
||||
|
||||
static CharType _get_right_pair_symbol(CharType c) {
|
||||
static char32_t _get_right_pair_symbol(char32_t c) {
|
||||
if (c == '"') {
|
||||
return '"';
|
||||
}
|
||||
@ -119,7 +119,7 @@ void TextEdit::Text::_update_line_cache(int p_line) const {
|
||||
int w = 0;
|
||||
|
||||
int len = text[p_line].data.length();
|
||||
const CharType *str = text[p_line].data.c_str();
|
||||
const char32_t *str = text[p_line].data.get_data();
|
||||
|
||||
// Update width.
|
||||
|
||||
@ -214,7 +214,7 @@ void TextEdit::Text::remove(int p_at) {
|
||||
text.remove(p_at);
|
||||
}
|
||||
|
||||
int TextEdit::Text::get_char_width(CharType c, CharType next_c, int px) const {
|
||||
int TextEdit::Text::get_char_width(char32_t c, char32_t next_c, int px) const {
|
||||
int tab_w = font->get_char_size(' ').width * indent_size;
|
||||
int w = 0;
|
||||
|
||||
@ -654,8 +654,8 @@ void TextEdit::_notification(int p_what) {
|
||||
if (brace_matching_enabled && cursor.line >= 0 && cursor.line < text.size() && cursor.column >= 0) {
|
||||
if (cursor.column < text[cursor.line].length()) {
|
||||
// Check for open.
|
||||
CharType c = text[cursor.line][cursor.column];
|
||||
CharType closec = 0;
|
||||
char32_t c = text[cursor.line][cursor.column];
|
||||
char32_t closec = 0;
|
||||
|
||||
if (c == '[') {
|
||||
closec = ']';
|
||||
@ -671,10 +671,10 @@ void TextEdit::_notification(int p_what) {
|
||||
for (int i = cursor.line; i < text.size(); i++) {
|
||||
int from = i == cursor.line ? cursor.column + 1 : 0;
|
||||
for (int j = from; j < text[i].length(); j++) {
|
||||
CharType cc = text[i][j];
|
||||
char32_t cc = text[i][j];
|
||||
// Ignore any brackets inside a string.
|
||||
if (cc == '"' || cc == '\'') {
|
||||
CharType quotation = cc;
|
||||
char32_t quotation = cc;
|
||||
do {
|
||||
j++;
|
||||
if (!(j < text[i].length())) {
|
||||
@ -720,8 +720,8 @@ void TextEdit::_notification(int p_what) {
|
||||
}
|
||||
|
||||
if (cursor.column > 0) {
|
||||
CharType c = text[cursor.line][cursor.column - 1];
|
||||
CharType closec = 0;
|
||||
char32_t c = text[cursor.line][cursor.column - 1];
|
||||
char32_t closec = 0;
|
||||
|
||||
if (c == ']') {
|
||||
closec = '[';
|
||||
@ -737,10 +737,10 @@ void TextEdit::_notification(int p_what) {
|
||||
for (int i = cursor.line; i >= 0; i--) {
|
||||
int from = i == cursor.line ? cursor.column - 2 : text[i].length() - 1;
|
||||
for (int j = from; j >= 0; j--) {
|
||||
CharType cc = text[i][j];
|
||||
char32_t cc = text[i][j];
|
||||
// Ignore any brackets inside a string.
|
||||
if (cc == '"' || cc == '\'') {
|
||||
CharType quotation = cc;
|
||||
char32_t quotation = cc;
|
||||
do {
|
||||
j--;
|
||||
if (!(j >= 0)) {
|
||||
@ -1303,8 +1303,8 @@ void TextEdit::_notification(int p_what) {
|
||||
break;
|
||||
}
|
||||
|
||||
CharType cchar = ime_text[ofs];
|
||||
CharType next = ime_text[ofs + 1];
|
||||
char32_t cchar = ime_text[ofs];
|
||||
char32_t next = ime_text[ofs + 1];
|
||||
int im_char_width = cache.font->get_char_size(cchar, next).width;
|
||||
|
||||
if ((char_ofs + char_margin + im_char_width) >= xmargin_end) {
|
||||
@ -1399,8 +1399,8 @@ void TextEdit::_notification(int p_what) {
|
||||
break;
|
||||
}
|
||||
|
||||
CharType cchar = ime_text[ofs];
|
||||
CharType next = ime_text[ofs + 1];
|
||||
char32_t cchar = ime_text[ofs];
|
||||
char32_t next = ime_text[ofs + 1];
|
||||
int im_char_width = cache.font->get_char_size(cchar, next).width;
|
||||
|
||||
if ((char_ofs + char_margin + im_char_width) >= xmargin_end) {
|
||||
@ -1661,12 +1661,12 @@ void TextEdit::_notification(int p_what) {
|
||||
}
|
||||
}
|
||||
|
||||
void TextEdit::_consume_pair_symbol(CharType ch) {
|
||||
void TextEdit::_consume_pair_symbol(char32_t ch) {
|
||||
int cursor_position_to_move = cursor_get_column() + 1;
|
||||
|
||||
CharType ch_single[2] = { ch, 0 };
|
||||
CharType ch_single_pair[2] = { _get_right_pair_symbol(ch), 0 };
|
||||
CharType ch_pair[3] = { ch, _get_right_pair_symbol(ch), 0 };
|
||||
char32_t ch_single[2] = { ch, 0 };
|
||||
char32_t ch_single_pair[2] = { _get_right_pair_symbol(ch), 0 };
|
||||
char32_t ch_pair[3] = { ch, _get_right_pair_symbol(ch), 0 };
|
||||
|
||||
if (is_selection_active()) {
|
||||
int new_column, new_line;
|
||||
@ -1771,8 +1771,8 @@ void TextEdit::_consume_backspace_for_pair_symbol(int prev_line, int prev_column
|
||||
bool remove_right_symbol = false;
|
||||
|
||||
if (cursor.column < text[cursor.line].length() && cursor.column > 0) {
|
||||
CharType left_char = text[cursor.line][cursor.column - 1];
|
||||
CharType right_char = text[cursor.line][cursor.column];
|
||||
char32_t left_char = text[cursor.line][cursor.column - 1];
|
||||
char32_t right_char = text[cursor.line][cursor.column];
|
||||
|
||||
if (right_char == _get_right_pair_symbol(left_char)) {
|
||||
remove_right_symbol = true;
|
||||
@ -2540,7 +2540,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) {
|
||||
if (k->get_unicode() > 32) {
|
||||
_reset_caret_blink_timer();
|
||||
|
||||
const CharType chr[2] = { (CharType)k->get_unicode(), 0 };
|
||||
const char32_t chr[2] = { (char32_t)k->get_unicode(), 0 };
|
||||
if (auto_brace_completion_enabled && _is_pair_symbol(chr[0])) {
|
||||
_consume_pair_symbol(chr[0]);
|
||||
} else {
|
||||
@ -2784,7 +2784,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) {
|
||||
}
|
||||
|
||||
// No need to move the brace below if we are not taking the text with us.
|
||||
char closing_char = _get_right_pair_symbol(indent_char);
|
||||
char32_t closing_char = _get_right_pair_symbol(indent_char);
|
||||
if ((closing_char != 0) && (closing_char == text[cursor.line][cursor.column]) && !k->get_command()) {
|
||||
brace_indent = true;
|
||||
ins += "\n" + ins.substr(1, ins.length() - 2);
|
||||
@ -3312,7 +3312,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) {
|
||||
// Compute whitespace symbols seq length.
|
||||
int current_line_whitespace_len = 0;
|
||||
while (current_line_whitespace_len < text[cursor.line].length()) {
|
||||
CharType c = text[cursor.line][current_line_whitespace_len];
|
||||
char32_t c = text[cursor.line][current_line_whitespace_len];
|
||||
if (c != '\t' && c != ' ') {
|
||||
break;
|
||||
}
|
||||
@ -3458,7 +3458,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) {
|
||||
|
||||
int current_line_whitespace_len = 0;
|
||||
while (current_line_whitespace_len < text[cursor.line].length()) {
|
||||
CharType c = text[cursor.line][current_line_whitespace_len];
|
||||
char32_t c = text[cursor.line][current_line_whitespace_len];
|
||||
if (c != '\t' && c != ' ')
|
||||
break;
|
||||
current_line_whitespace_len++;
|
||||
@ -3624,7 +3624,7 @@ void TextEdit::_gui_input(const Ref<InputEvent> &p_gui_input) {
|
||||
}
|
||||
}
|
||||
|
||||
const CharType chr[2] = { (CharType)k->get_unicode(), 0 };
|
||||
const char32_t chr[2] = { (char32_t)k->get_unicode(), 0 };
|
||||
|
||||
if (completion_hint != "" && k->get_unicode() == ')') {
|
||||
completion_hint = "";
|
||||
@ -4251,7 +4251,7 @@ Vector<String> TextEdit::get_wrap_rows_text(int p_line) const {
|
||||
}
|
||||
|
||||
while (col < line_text.length()) {
|
||||
CharType c = line_text[col];
|
||||
char32_t c = line_text[col];
|
||||
int w = text.get_char_width(c, line_text[col + 1], px + word_px);
|
||||
|
||||
int indent_ofs = (cur_wrap_index != 0 ? tab_offset_px : 0);
|
||||
@ -6115,9 +6115,9 @@ void TextEdit::_confirm_completion() {
|
||||
|
||||
// When inserted into the middle of an existing string/method, don't add an unnecessary quote/bracket.
|
||||
String line = text[cursor.line];
|
||||
CharType next_char = line[cursor.column];
|
||||
CharType last_completion_char = completion_current.insert_text[completion_current.insert_text.length() - 1];
|
||||
CharType last_completion_char_display = completion_current.display[completion_current.display.length() - 1];
|
||||
char32_t next_char = line[cursor.column];
|
||||
char32_t last_completion_char = completion_current.insert_text[completion_current.insert_text.length() - 1];
|
||||
char32_t last_completion_char_display = completion_current.display[completion_current.display.length() - 1];
|
||||
|
||||
if ((last_completion_char == '"' || last_completion_char == '\'') && (last_completion_char == next_char || last_completion_char_display == next_char)) {
|
||||
_remove_text(cursor.line, cursor.column, cursor.line, cursor.column + 1);
|
||||
@ -6161,7 +6161,7 @@ void TextEdit::_cancel_completion() {
|
||||
update();
|
||||
}
|
||||
|
||||
static bool _is_completable(CharType c) {
|
||||
static bool _is_completable(char32_t c) {
|
||||
return !_is_symbol(c) || c == '"' || c == '\'';
|
||||
}
|
||||
|
||||
@ -6292,14 +6292,14 @@ void TextEdit::_update_completion_candidates() {
|
||||
|
||||
String display_lower = option.display.to_lower();
|
||||
|
||||
const CharType *ssq = &s[0];
|
||||
const CharType *ssq_lower = &s_lower[0];
|
||||
const char32_t *ssq = &s[0];
|
||||
const char32_t *ssq_lower = &s_lower[0];
|
||||
|
||||
const CharType *tgt = &option.display[0];
|
||||
const CharType *tgt_lower = &display_lower[0];
|
||||
const char32_t *tgt = &option.display[0];
|
||||
const char32_t *tgt_lower = &display_lower[0];
|
||||
|
||||
const CharType *ssq_last_tgt = nullptr;
|
||||
const CharType *ssq_lower_last_tgt = nullptr;
|
||||
const char32_t *ssq_last_tgt = nullptr;
|
||||
const char32_t *ssq_lower_last_tgt = nullptr;
|
||||
|
||||
for (; *tgt; tgt++, tgt_lower++) {
|
||||
if (*ssq == *tgt) {
|
||||
@ -6416,7 +6416,7 @@ String TextEdit::get_word_at_pos(const Vector2 &p_pos) const {
|
||||
int beg, end;
|
||||
if (select_word(s, col, beg, end)) {
|
||||
bool inside_quotes = false;
|
||||
CharType selected_quote = '\0';
|
||||
char32_t selected_quote = '\0';
|
||||
int qbegin = 0, qend = 0;
|
||||
for (int i = 0; i < s.length(); i++) {
|
||||
if (s[i] == '"' || s[i] == '\'') {
|
||||
|
||||
Reference in New Issue
Block a user