Add String.is_valid_unicode_identifier()
- Adds `is_valid_unicode_identifier()` - Adds `is_valid_ascii_identifier()` - Deprecates `is_valid_identifier()` - Renames `validate_identifier()` to `validate_ascii_identifier()`
This commit is contained in:
parent
db76de5de8
commit
8bf4ecc026
22 changed files with 132 additions and 60 deletions
|
|
@ -1768,7 +1768,7 @@ Object *Engine::get_singleton_object(const StringName &p_name) const {
|
|||
|
||||
void Engine::register_singleton(const StringName &p_name, Object *p_object) {
|
||||
ERR_FAIL_COND_MSG(has_singleton(p_name), "Singleton already registered: " + String(p_name));
|
||||
ERR_FAIL_COND_MSG(!String(p_name).is_valid_identifier(), "Singleton name is not a valid identifier: " + p_name);
|
||||
ERR_FAIL_COND_MSG(!String(p_name).is_valid_ascii_identifier(), "Singleton name is not a valid identifier: " + p_name);
|
||||
::Engine::Singleton s;
|
||||
s.class_name = p_name;
|
||||
s.name = p_name;
|
||||
|
|
|
|||
|
|
@ -355,7 +355,7 @@ void GDExtension::_register_extension_class_internal(GDExtensionClassLibraryPtr
|
|||
|
||||
StringName class_name = *reinterpret_cast<const StringName *>(p_class_name);
|
||||
StringName parent_class_name = *reinterpret_cast<const StringName *>(p_parent_class_name);
|
||||
ERR_FAIL_COND_MSG(!String(class_name).is_valid_identifier(), "Attempt to register extension class '" + class_name + "', which is not a valid class identifier.");
|
||||
ERR_FAIL_COND_MSG(!String(class_name).is_valid_ascii_identifier(), "Attempt to register extension class '" + class_name + "', which is not a valid class identifier.");
|
||||
ERR_FAIL_COND_MSG(ClassDB::class_exists(class_name), "Attempt to register extension class '" + class_name + "', which appears to be already registered.");
|
||||
|
||||
Extension *parent_extension = nullptr;
|
||||
|
|
|
|||
|
|
@ -997,7 +997,7 @@ void Object::set_meta(const StringName &p_name, const Variant &p_value) {
|
|||
if (E) {
|
||||
E->value = p_value;
|
||||
} else {
|
||||
ERR_FAIL_COND_MSG(!p_name.operator String().is_valid_identifier(), "Invalid metadata identifier: '" + p_name + "'.");
|
||||
ERR_FAIL_COND_MSG(!p_name.operator String().is_valid_ascii_identifier(), "Invalid metadata identifier: '" + p_name + "'.");
|
||||
Variant *V = &metadata.insert(p_name, p_value)->value;
|
||||
|
||||
const String &sname = p_name;
|
||||
|
|
|
|||
|
|
@ -4624,7 +4624,7 @@ bool String::is_absolute_path() const {
|
|||
}
|
||||
}
|
||||
|
||||
String String::validate_identifier() const {
|
||||
String String::validate_ascii_identifier() const {
|
||||
if (is_empty()) {
|
||||
return "_"; // Empty string is not a valid identifier;
|
||||
}
|
||||
|
|
@ -4647,7 +4647,7 @@ String String::validate_identifier() const {
|
|||
return result;
|
||||
}
|
||||
|
||||
bool String::is_valid_identifier() const {
|
||||
bool String::is_valid_ascii_identifier() const {
|
||||
int len = length();
|
||||
|
||||
if (len == 0) {
|
||||
|
|
@ -4669,6 +4669,26 @@ bool String::is_valid_identifier() const {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool String::is_valid_unicode_identifier() const {
|
||||
const char32_t *str = ptr();
|
||||
int len = length();
|
||||
|
||||
if (len == 0) {
|
||||
return false; // Empty string.
|
||||
}
|
||||
|
||||
if (!is_unicode_identifier_start(str[0])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (int i = 1; i < len; i++) {
|
||||
if (!is_unicode_identifier_continue(str[i])) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool String::is_valid_string() const {
|
||||
int l = length();
|
||||
const char32_t *src = get_data();
|
||||
|
|
|
|||
|
|
@ -459,10 +459,11 @@ public:
|
|||
// node functions
|
||||
static String get_invalid_node_name_characters(bool p_allow_internal = false);
|
||||
String validate_node_name() const;
|
||||
String validate_identifier() const;
|
||||
String validate_ascii_identifier() const;
|
||||
String validate_filename() const;
|
||||
|
||||
bool is_valid_identifier() const;
|
||||
bool is_valid_ascii_identifier() const;
|
||||
bool is_valid_unicode_identifier() const;
|
||||
bool is_valid_int() const;
|
||||
bool is_valid_float() const;
|
||||
bool is_valid_hex_number(bool p_with_prefix) const;
|
||||
|
|
@ -470,6 +471,9 @@ public:
|
|||
bool is_valid_ip_address() const;
|
||||
bool is_valid_filename() const;
|
||||
|
||||
// Use `is_valid_ascii_identifier()` instead. Kept for compatibility.
|
||||
bool is_valid_identifier() const { return is_valid_ascii_identifier(); }
|
||||
|
||||
/**
|
||||
* The constructors must not depend on other overloads
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1724,6 +1724,8 @@ static void _register_variant_builtin_methods_string() {
|
|||
bind_string_method(validate_node_name, sarray(), varray());
|
||||
bind_string_method(validate_filename, sarray(), varray());
|
||||
|
||||
bind_string_method(is_valid_ascii_identifier, sarray(), varray());
|
||||
bind_string_method(is_valid_unicode_identifier, sarray(), varray());
|
||||
bind_string_method(is_valid_identifier, sarray(), varray());
|
||||
bind_string_method(is_valid_int, sarray(), varray());
|
||||
bind_string_method(is_valid_float, sarray(), varray());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue