1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-24 15:26:15 +00:00

Add line_breaking_strictness project setting.

This commit is contained in:
Pāvels Nadtočajevs
2025-06-12 09:26:52 +03:00
parent d9cd011e2f
commit e87cccefca
4 changed files with 30 additions and 1 deletions

View File

@@ -6513,7 +6513,17 @@ UBreakIterator *TextServerAdvanced::_create_line_break_iterator_for_locale(const
// Creating UBreakIterator (ubrk_open) is surprisingly costly.
// However, cloning (ubrk_clone) is cheaper, so we keep around blueprints to accelerate creating new ones.
const String language = p_language.is_empty() ? TranslationServer::get_singleton()->get_tool_locale() : p_language;
String language = p_language.is_empty() ? TranslationServer::get_singleton()->get_tool_locale() : p_language;
if (!language.contains("@")) {
if (lb_strictness == LB_LOOSE) {
language += "@lb=loose";
} else if (lb_strictness == LB_NORMAL) {
language += "@lb=normal";
} else if (lb_strictness == LB_STRICT) {
language += "@lb=strict";
}
}
_THREAD_SAFE_METHOD_
const HashMap<String, UBreakIterator *>::Iterator key_value = line_break_iterators_per_language.find(language);
if (key_value) {
@@ -8066,12 +8076,14 @@ bool TextServerAdvanced::_is_valid_letter(uint64_t p_unicode) const {
void TextServerAdvanced::_update_settings() {
lcd_subpixel_layout.set((TextServer::FontLCDSubpixelLayout)(int)GLOBAL_GET("gui/theme/lcd_subpixel_layout"));
lb_strictness = (LineBreakStrictness)(int)GLOBAL_GET("internationalization/locale/line_breaking_strictness");
}
TextServerAdvanced::TextServerAdvanced() {
_insert_num_systems_lang();
_insert_feature_sets();
_bmp_create_font_funcs();
_update_settings();
ProjectSettings::get_singleton()->connect("settings_changed", callable_mp(this, &TextServerAdvanced::_update_settings));
}