diff --git a/doc/classes/TextServer.xml b/doc/classes/TextServer.xml index 633c267030..3b415acfda 100644 --- a/doc/classes/TextServer.xml +++ b/doc/classes/TextServer.xml @@ -1164,6 +1164,12 @@ Returns the name of the server interface. + + + + Returns the short name of the server interface. This short name can be used as a value for the [code]--text-driver[/code] [url=$DOCS_URL/tutorials/editor/command_line_tutorial.html]command line argument[/url] (the full name is also supported for compatibility, but it must be quoted if it contains spaces). + + diff --git a/doc/classes/TextServerExtension.xml b/doc/classes/TextServerExtension.xml index 4bb3e94910..6af8643c1c 100644 --- a/doc/classes/TextServerExtension.xml +++ b/doc/classes/TextServerExtension.xml @@ -1143,6 +1143,12 @@ Returns the name of the server interface. + + + + Returns the short name of the server interface. By convention, this should return a lowercase string that follows the [code]snake_case[/code] naming scheme. + + diff --git a/main/main.cpp b/main/main.cpp index b8a7c6c356..30268f4a0a 100644 --- a/main/main.cpp +++ b/main/main.cpp @@ -3722,7 +3722,7 @@ Error Main::setup2(bool p_show_boot_logo) { if (!text_driver.is_empty()) { /* Load user selected text server. */ for (int i = 0; i < TextServerManager::get_singleton()->get_interface_count(); i++) { - if (TextServerManager::get_singleton()->get_interface(i)->get_name() == text_driver) { + if (TextServerManager::get_singleton()->get_interface(i)->get_short_name() == text_driver || TextServerManager::get_singleton()->get_interface(i)->get_name() == text_driver) { text_driver_idx = i; break; } diff --git a/modules/text_server_adv/text_server_adv.cpp b/modules/text_server_adv/text_server_adv.cpp index ed59f5882f..364904ea9a 100644 --- a/modules/text_server_adv/text_server_adv.cpp +++ b/modules/text_server_adv/text_server_adv.cpp @@ -366,6 +366,10 @@ String TextServerAdvanced::_get_name() const { return "ICU / HarfBuzz / Graphite (Built-in)"; } +String TextServerAdvanced::_get_short_name() const { + return "advanced"; +} + int64_t TextServerAdvanced::_get_features() const { int64_t interface_features = FEATURE_SIMPLE_LAYOUT | FEATURE_BIDI_LAYOUT | FEATURE_VERTICAL_LAYOUT | FEATURE_SHAPING | FEATURE_KASHIDA_JUSTIFICATION | FEATURE_BREAK_ITERATORS | FEATURE_FONT_BITMAP | FEATURE_FONT_VARIABLE | FEATURE_CONTEXT_SENSITIVE_CASE_CONVERSION | FEATURE_USE_SUPPORT_DATA; #ifdef MODULE_FREETYPE_ENABLED diff --git a/modules/text_server_adv/text_server_adv.h b/modules/text_server_adv/text_server_adv.h index 28637a668b..c96432c6cb 100644 --- a/modules/text_server_adv/text_server_adv.h +++ b/modules/text_server_adv/text_server_adv.h @@ -819,6 +819,7 @@ protected: public: MODBIND1RC(bool, has_feature, Feature); MODBIND0RC(String, get_name); + MODBIND0RC(String, get_short_name); MODBIND0RC(int64_t, get_features); MODBIND1(free_rid, const RID &); diff --git a/modules/text_server_fb/text_server_fb.cpp b/modules/text_server_fb/text_server_fb.cpp index bcd838c3c6..cfe287cfd8 100644 --- a/modules/text_server_fb/text_server_fb.cpp +++ b/modules/text_server_fb/text_server_fb.cpp @@ -89,6 +89,10 @@ String TextServerFallback::_get_name() const { return "Fallback (Built-in)"; } +String TextServerFallback::_get_short_name() const { + return "fallback"; +} + int64_t TextServerFallback::_get_features() const { int64_t interface_features = FEATURE_SIMPLE_LAYOUT | FEATURE_FONT_BITMAP; #ifdef MODULE_FREETYPE_ENABLED diff --git a/modules/text_server_fb/text_server_fb.h b/modules/text_server_fb/text_server_fb.h index b33fea5aa7..b7b233674e 100644 --- a/modules/text_server_fb/text_server_fb.h +++ b/modules/text_server_fb/text_server_fb.h @@ -570,6 +570,7 @@ protected: public: MODBIND1RC(bool, has_feature, Feature); MODBIND0RC(String, get_name); + MODBIND0RC(String, get_short_name); MODBIND0RC(int64_t, get_features); MODBIND1(free_rid, const RID &); diff --git a/servers/text/text_server.cpp b/servers/text/text_server.cpp index 12a408b7c2..eaf09b232e 100644 --- a/servers/text/text_server.cpp +++ b/servers/text/text_server.cpp @@ -70,7 +70,7 @@ void TextServerManager::add_interface(const Ref &p_interface) { }; interfaces.push_back(p_interface); - print_verbose("TextServer: Added interface \"" + p_interface->get_name() + "\""); + print_verbose("TextServer: Added interface \"" + p_interface->get_name() + "\" (" + p_interface->get_short_name() + ")"); emit_signal(SNAME("interface_added"), p_interface->get_name()); } @@ -87,7 +87,7 @@ void TextServerManager::remove_interface(const Ref &p_interface) { }; ERR_FAIL_COND_MSG(idx == -1, "Interface not found."); - print_verbose("TextServer: Removed interface \"" + p_interface->get_name() + "\""); + print_verbose("TextServer: Removed interface \"" + p_interface->get_name() + "\" (" + p_interface->get_short_name() + ")"); emit_signal(SNAME("interface_removed"), p_interface->get_name()); interfaces.remove_at(idx); } @@ -122,6 +122,7 @@ TypedArray TextServerManager::get_interfaces() const { iface_info["id"] = i; iface_info["name"] = interfaces[i]->get_name(); + iface_info["short_name"] = interfaces[i]->get_short_name(); ret.push_back(iface_info); }; @@ -135,7 +136,7 @@ void TextServerManager::set_primary_interface(const Ref &p_primary_i primary_interface.unref(); } else { primary_interface = p_primary_interface; - print_verbose("TextServer: Primary interface set to: \"" + primary_interface->get_name() + "\"."); + print_verbose("TextServer: Primary interface set to: \"" + primary_interface->get_name() + "\" (" + primary_interface->get_short_name() + ")."); if (OS::get_singleton()->get_main_loop()) { OS::get_singleton()->get_main_loop()->notification(MainLoop::NOTIFICATION_TEXT_SERVER_CHANGED); @@ -200,6 +201,7 @@ double TextServer::vp_oversampling = 0.0; void TextServer::_bind_methods() { ClassDB::bind_method(D_METHOD("has_feature", "feature"), &TextServer::has_feature); ClassDB::bind_method(D_METHOD("get_name"), &TextServer::get_name); + ClassDB::bind_method(D_METHOD("get_short_name"), &TextServer::get_short_name); ClassDB::bind_method(D_METHOD("get_features"), &TextServer::get_features); ClassDB::bind_method(D_METHOD("load_support_data", "filename"), &TextServer::load_support_data); diff --git a/servers/text/text_server.h b/servers/text/text_server.h index f2da4fc3e7..311b2d2243 100644 --- a/servers/text/text_server.h +++ b/servers/text/text_server.h @@ -251,6 +251,7 @@ public: virtual bool has_feature(Feature p_feature) const = 0; virtual String get_name() const = 0; + virtual String get_short_name() const = 0; virtual int64_t get_features() const = 0; virtual void free_rid(const RID &p_rid) = 0; diff --git a/servers/text/text_server_dummy.h b/servers/text/text_server_dummy.h index 4fc991e4ab..b771b1bf24 100644 --- a/servers/text/text_server_dummy.h +++ b/servers/text/text_server_dummy.h @@ -41,6 +41,7 @@ class TextServerDummy : public TextServerExtension { public: virtual bool has_feature(Feature p_feature) const override { return false; } virtual String get_name() const override { return "Dummy"; } + virtual String get_short_name() const override { return "dummy"; } virtual int64_t get_features() const override { return 0; } virtual void free_rid(const RID &p_rid) override {} virtual bool has(const RID &p_rid) override { return false; } diff --git a/servers/text/text_server_extension.cpp b/servers/text/text_server_extension.cpp index bfd88bafb4..53dbf18442 100644 --- a/servers/text/text_server_extension.cpp +++ b/servers/text/text_server_extension.cpp @@ -35,6 +35,7 @@ void TextServerExtension::_bind_methods() { GDVIRTUAL_BIND(_has_feature, "feature"); GDVIRTUAL_BIND(_get_name); + GDVIRTUAL_BIND(_get_short_name); GDVIRTUAL_BIND(_get_features); GDVIRTUAL_BIND(_free_rid, "rid"); @@ -414,6 +415,16 @@ String TextServerExtension::get_name() const { return ret; } +String TextServerExtension::get_short_name() const { + String ret = "unknown"; + GDVIRTUAL_CALL(_get_short_name, ret); + if (ret == "unknown") { + // Fall back to a simplified version of the full name if not overridden. + ret = get_name().to_lower().replace_char(' ', '_'); + } + return ret; +} + int64_t TextServerExtension::get_features() const { int64_t ret = 0; GDVIRTUAL_CALL(_get_features, ret); diff --git a/servers/text/text_server_extension.h b/servers/text/text_server_extension.h index 407aa55c07..cce832dbcf 100644 --- a/servers/text/text_server_extension.h +++ b/servers/text/text_server_extension.h @@ -47,9 +47,11 @@ protected: public: virtual bool has_feature(Feature p_feature) const override; virtual String get_name() const override; + virtual String get_short_name() const override; virtual int64_t get_features() const override; GDVIRTUAL1RC_REQUIRED(bool, _has_feature, Feature); GDVIRTUAL0RC_REQUIRED(String, _get_name); + GDVIRTUAL0RC(String, _get_short_name); GDVIRTUAL0RC_REQUIRED(int64_t, _get_features); virtual void free_rid(const RID &p_rid) override;