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;