From 15dafc49d3cd0534c44fa568febfad4ac63c5a07 Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Mon, 23 Jan 2023 21:10:42 +0200 Subject: [PATCH] [TextServer] Fix ICU data loading and exporting with `internationalization/locale/include_text_server_data` setting. --- editor/export/editor_export_platform.cpp | 4 +++- main/main.cpp | 12 ++++++++++-- modules/text_server_adv/text_server_adv.cpp | 8 -------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index 8da52e20f782..27ca0b84a145 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -1294,7 +1294,9 @@ Error EditorExportPlatform::export_project_files(const Ref & } else { // Use default text server data. String icu_data_file = EditorPaths::get_singleton()->get_cache_dir().path_join("tmp_icu_data"); - TS->save_support_data(icu_data_file); + if (!TS->save_support_data(icu_data_file)) { + return ERR_INVALID_DATA; + } Vector array = FileAccess::get_file_as_bytes(icu_data_file); err = p_func(p_udata, ts_data, array, idx, total, enc_in_filters, enc_ex_filters, key); DirAccess::remove_file_or_error(icu_data_file); diff --git a/main/main.cpp b/main/main.cpp index cfde124b9054..eff30bee9b0f 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -524,7 +524,11 @@ Error Main::test_setup() { } } if (text_driver_idx >= 0) { - TextServerManager::get_singleton()->set_primary_interface(TextServerManager::get_singleton()->get_interface(text_driver_idx)); + Ref ts = TextServerManager::get_singleton()->get_interface(text_driver_idx); + TextServerManager::get_singleton()->set_primary_interface(ts); + if (ts->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + ts->load_support_data("res://" + ts->get_support_data_filename()); + } } else { ERR_FAIL_V_MSG(ERR_CANT_CREATE, "TextServer: Unable to create TextServer interface."); } @@ -2238,7 +2242,11 @@ Error Main::setup2(Thread::ID p_main_tid_override) { } } if (text_driver_idx >= 0) { - TextServerManager::get_singleton()->set_primary_interface(TextServerManager::get_singleton()->get_interface(text_driver_idx)); + Ref ts = TextServerManager::get_singleton()->get_interface(text_driver_idx); + TextServerManager::get_singleton()->set_primary_interface(ts); + if (ts->has_feature(TextServer::FEATURE_USE_SUPPORT_DATA)) { + ts->load_support_data("res://" + ts->get_support_data_filename()); + } } else { ERR_FAIL_V_MSG(ERR_CANT_CREATE, "TextServer: Unable to create TextServer interface."); } diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index ddafae5e58cd..780b09bc9ab1 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -443,19 +443,11 @@ bool TextServerAdvanced::_load_support_data(const String &p_filename) { } String TextServerAdvanced::_get_support_data_filename() const { -#ifdef ICU_STATIC_DATA return _MKSTR(ICU_DATA_NAME); -#else - return String(); -#endif } String TextServerAdvanced::_get_support_data_info() const { -#ifdef ICU_STATIC_DATA return String("ICU break iteration data (") + _MKSTR(ICU_DATA_NAME) + String(")."); -#else - return String(); -#endif } bool TextServerAdvanced::_save_support_data(const String &p_filename) const {