From 536ea8561e00b8d6183ddc522476dd232c1d3bef Mon Sep 17 00:00:00 2001 From: David Snopek Date: Fri, 6 Sep 2024 17:24:07 -0500 Subject: [PATCH] Allow unicode class names --- .github/workflows/ci.yml | 15 +++++++++------ include/godot_cpp/classes/wrapped.hpp | 2 +- test/CMakeLists.txt | 1 + test/project/main.gd | 4 ++++ test/src/example.cpp | 8 ++++++++ test/src/example.h | 10 ++++++++++ test/src/register_types.cpp | 1 + 7 files changed, 34 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 76abdd57..64229d85 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,9 @@ env: GODOT_BASE_BRANCH: master # Used to select the version of Godot to run the tests with. GODOT_TEST_VERSION: master + # Use UTF-8 on Linux. + LANG: en_US.UTF-8 + LC_ALL: en_US.UTF-8 concurrency: group: ci-${{github.actor}}-${{github.head_ref || github.run_number}}-${{github.ref}} @@ -20,7 +23,7 @@ jobs: matrix: include: - name: 🐧 Linux (GCC) - os: ubuntu-20.04 + os: ubuntu-22.04 platform: linux artifact-name: godot-cpp-linux-glibc2.27-x86_64-release artifact-path: bin/libgodot-cpp.linux.template_release.x86_64.a @@ -28,7 +31,7 @@ jobs: cache-name: linux-x86_64 - name: 🐧 Linux (GCC, Double Precision) - os: ubuntu-20.04 + os: ubuntu-22.04 platform: linux artifact-name: godot-cpp-linux-glibc2.27-x86_64-double-release artifact-path: bin/libgodot-cpp.linux.template_release.double.x86_64.a @@ -63,7 +66,7 @@ jobs: cache-name: macos-universal - name: 🀖 Android (arm64) - os: ubuntu-20.04 + os: ubuntu-22.04 platform: android artifact-name: godot-cpp-android-arm64-release artifact-path: bin/libgodot-cpp.android.template_release.arm64.a @@ -81,7 +84,7 @@ jobs: cache-name: ios-arm64 - name: 🌐 Web (wasm32) - os: ubuntu-20.04 + os: ubuntu-22.04 platform: web artifact-name: godot-cpp-web-wasm32-release artifact-path: bin/libgodot-cpp.web.template_release.wasm32.a @@ -206,7 +209,7 @@ jobs: linux-cmake: name: 🐧 Build (Linux, GCC, CMake) - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 @@ -230,7 +233,7 @@ jobs: linux-cmake-ninja: name: 🐧 Build (Linux, GCC, CMake Ninja) - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - name: Checkout uses: actions/checkout@v4 diff --git a/include/godot_cpp/classes/wrapped.hpp b/include/godot_cpp/classes/wrapped.hpp index 0ffd783f..3f0d1e2e 100644 --- a/include/godot_cpp/classes/wrapped.hpp +++ b/include/godot_cpp/classes/wrapped.hpp @@ -250,7 +250,7 @@ public: } \ \ static const ::godot::StringName &get_class_static() { \ - static const ::godot::StringName string_name = ::godot::StringName(#m_class); \ + static const ::godot::StringName string_name = ::godot::StringName(U## #m_class); \ return string_name; \ } \ \ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 42ea6e08..f1c4c0d7 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -38,6 +38,7 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") # using Visual Studio C++ set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /WX") # /GF /MP set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /DTYPED_METHOD_BIND") + set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /utf-8") if(CMAKE_BUILD_TYPE MATCHES Debug) set(GODOT_COMPILE_FLAGS "${GODOT_COMPILE_FLAGS} /MDd") # /Od /RTC1 /Zi diff --git a/test/project/main.gd b/test/project/main.gd index b2625b9a..b2d5b6a4 100644 --- a/test/project/main.gd +++ b/test/project/main.gd @@ -276,6 +276,10 @@ func _ready(): assert_equal(library_path, ProjectSettings.globalize_path(library_path)) assert_equal(FileAccess.file_exists(library_path), true) + # Test a class with a unicode name. + var przykład = ExamplePrzykład.new() + assert_equal(przykład.get_the_word(), "słowo to przykład") + exit_with_status() func _on_Example_custom_signal(signal_name, value): diff --git a/test/src/example.cpp b/test/src/example.cpp index 8075f551..ab85e22f 100644 --- a/test/src/example.cpp +++ b/test/src/example.cpp @@ -736,3 +736,11 @@ ExampleRuntime::ExampleRuntime() { ExampleRuntime::~ExampleRuntime() { } + +void ExamplePrzykład::_bind_methods() { + ClassDB::bind_method(D_METHOD("get_the_word"), &ExamplePrzykład::get_the_word); +} + +String ExamplePrzykład::get_the_word() const { + return U"słowo to przykład"; +} diff --git a/test/src/example.h b/test/src/example.h index 6d88cf11..6d31ca59 100644 --- a/test/src/example.h +++ b/test/src/example.h @@ -273,4 +273,14 @@ public: ~ExampleRuntime(); }; +class ExamplePrzykład : public RefCounted { + GDCLASS(ExamplePrzykład, RefCounted); + +protected: + static void _bind_methods(); + +public: + String get_the_word() const; +}; + #endif // EXAMPLE_CLASS_H diff --git a/test/src/register_types.cpp b/test/src/register_types.cpp index 7cfe689e..d9290c80 100644 --- a/test/src/register_types.cpp +++ b/test/src/register_types.cpp @@ -30,6 +30,7 @@ void initialize_example_module(ModuleInitializationLevel p_level) { GDREGISTER_CLASS(ExampleBase); GDREGISTER_CLASS(ExampleChild); GDREGISTER_RUNTIME_CLASS(ExampleRuntime); + GDREGISTER_CLASS(ExamplePrzykład); } void uninitialize_example_module(ModuleInitializationLevel p_level) {