summaryrefslogtreecommitdiffstats
path: root/modules/text_server_fb/text_server_fb.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-03-05 09:56:22 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-03-05 09:56:22 +0100
commitb59166d77ad46a924aa919c334c973756a892cea (patch)
tree603f67f4538108badfeae58e34eae1ae8c3ea57a /modules/text_server_fb/text_server_fb.cpp
parenta36979674150fc5944bb0dabcea5473d55188548 (diff)
parentb58e45ed4379cf74423f5341ae7c52151483504b (diff)
downloadredot-engine-b59166d77ad46a924aa919c334c973756a892cea.tar.gz
Merge pull request #89171 from bruvzg/fix_fb_breaks
[TextServer] Fix fallback line breaking code adding two breaks for CR-LF.
Diffstat (limited to 'modules/text_server_fb/text_server_fb.cpp')
-rw-r--r--modules/text_server_fb/text_server_fb.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp
index f2d70db7a4..7e34de0bbc 100644
--- a/modules/text_server_fb/text_server_fb.cpp
+++ b/modules/text_server_fb/text_server_fb.cpp
@@ -3617,6 +3617,7 @@ bool TextServerFallback::_shaped_text_update_breaks(const RID &p_shaped) {
for (int i = 0; i < sd_size; i++) {
if (sd_glyphs[i].count > 0) {
char32_t c = sd->text[sd_glyphs[i].start - sd->start];
+ char32_t c_next = i < sd_size ? sd->text[sd_glyphs[i].start - sd->start + 1] : 0x0000;
if (c_punct_size == 0) {
if (is_punct(c) && c != 0x005F && c != ' ') {
sd_glyphs[i].flags |= GRAPHEME_IS_PUNCTUATION;
@@ -3640,7 +3641,9 @@ bool TextServerFallback::_shaped_text_update_breaks(const RID &p_shaped) {
}
if (is_linebreak(c)) {
sd_glyphs[i].flags |= GRAPHEME_IS_SPACE;
- sd_glyphs[i].flags |= GRAPHEME_IS_BREAK_HARD;
+ if (c != 0x000D || c_next != 0x000A) { // Skip first hard break in CR-LF pair.
+ sd_glyphs[i].flags |= GRAPHEME_IS_BREAK_HARD;
+ }
}
if (c == 0x0009 || c == 0x000b) {
sd_glyphs[i].flags |= GRAPHEME_IS_TAB;