diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index 06f93a135a..cc70f4fa91 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -5282,6 +5282,28 @@ bool TextServerAdvanced::_shape_substr(ShapedTextDataAdvanced *p_new_sd, const S } if (gl.end == p_start + p_length && ((gl.flags & GRAPHEME_IS_SOFT_HYPHEN) == GRAPHEME_IS_SOFT_HYPHEN)) { uint32_t index = font_get_glyph_index(gl.font_rid, gl.font_size, 0x00ad, 0); + if (index == 0) { // Try other fonts in the span. + const ShapedTextDataAdvanced::Span &span = p_sd->spans[gl.span_index + p_new_sd->first_span]; + for (int k = 0; k < span.fonts.size(); k++) { + if (span.fonts[k] != gl.font_rid) { + index = font_get_glyph_index(span.fonts[k], gl.font_size, 0x00ad, 0); + if (index != 0) { + gl.font_rid = span.fonts[k]; + break; + } + } + } + } + if (index == 0 && gl.font_rid.is_valid() && OS::get_singleton()->has_feature("system_fonts") && _font_is_allow_system_fallback(gl.font_rid)) { // Try system font fallback. + const char32_t u32str[] = { 0x00ad, 0 }; + RID rid = const_cast(this)->_find_sys_font_for_text(gl.font_rid, String(), String(), u32str); + if (rid.is_valid()) { + index = font_get_glyph_index(rid, gl.font_size, 0x00ad, 0); + if (index != 0) { + gl.font_rid = rid; + } + } + } float w = font_get_glyph_advance(gl.font_rid, gl.font_size, index)[(p_new_sd->orientation == ORIENTATION_HORIZONTAL) ? 0 : 1]; gl.index = index; gl.advance = w;