Improve ScriptLanguage get keyword API.
This commit is contained in:
parent
34f005d810
commit
1384e82c2c
13 changed files with 87 additions and 123 deletions
|
|
@ -756,13 +756,11 @@ void GDScriptSyntaxHighlighter::_update_cache() {
|
|||
/* Reserved words. */
|
||||
const Color keyword_color = EDITOR_GET("text_editor/theme/highlighting/keyword_color");
|
||||
const Color control_flow_keyword_color = EDITOR_GET("text_editor/theme/highlighting/control_flow_keyword_color");
|
||||
List<String> keyword_list;
|
||||
gdscript->get_reserved_words(&keyword_list);
|
||||
for (const String &E : keyword_list) {
|
||||
if (gdscript->is_control_flow_keyword(E)) {
|
||||
reserved_keywords[StringName(E)] = control_flow_keyword_color;
|
||||
for (const String &keyword : gdscript->get_reserved_words()) {
|
||||
if (gdscript->is_control_flow_keyword(keyword)) {
|
||||
reserved_keywords[StringName(keyword)] = control_flow_keyword_color;
|
||||
} else {
|
||||
reserved_keywords[StringName(E)] = keyword_color;
|
||||
reserved_keywords[StringName(keyword)] = keyword_color;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -783,9 +781,7 @@ void GDScriptSyntaxHighlighter::_update_cache() {
|
|||
|
||||
/* Comments */
|
||||
const Color comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
|
||||
List<String> comments;
|
||||
gdscript->get_comment_delimiters(&comments);
|
||||
for (const String &comment : comments) {
|
||||
for (const String &comment : gdscript->get_comment_delimiters()) {
|
||||
String beg = comment.get_slicec(' ', 0);
|
||||
String end = comment.get_slice_count(" ") > 1 ? comment.get_slicec(' ', 1) : String();
|
||||
add_color_region(ColorRegion::TYPE_COMMENT, beg, end, comment_color, end.is_empty());
|
||||
|
|
@ -793,9 +789,7 @@ void GDScriptSyntaxHighlighter::_update_cache() {
|
|||
|
||||
/* Doc comments */
|
||||
const Color doc_comment_color = EDITOR_GET("text_editor/theme/highlighting/doc_comment_color");
|
||||
List<String> doc_comments;
|
||||
gdscript->get_doc_comment_delimiters(&doc_comments);
|
||||
for (const String &doc_comment : doc_comments) {
|
||||
for (const String &doc_comment : gdscript->get_doc_comment_delimiters()) {
|
||||
String beg = doc_comment.get_slicec(' ', 0);
|
||||
String end = doc_comment.get_slice_count(" ") > 1 ? doc_comment.get_slicec(' ', 1) : String();
|
||||
add_color_region(ColorRegion::TYPE_COMMENT, beg, end, doc_comment_color, end.is_empty());
|
||||
|
|
|
|||
|
|
@ -2731,9 +2731,9 @@ void GDScriptLanguage::frame() {
|
|||
}
|
||||
|
||||
/* EDITOR FUNCTIONS */
|
||||
void GDScriptLanguage::get_reserved_words(List<String> *p_words) const {
|
||||
Vector<String> GDScriptLanguage::get_reserved_words() const {
|
||||
// Please keep alphabetical order within categories.
|
||||
static const char *_reserved_words[] = {
|
||||
static const Vector<String> ret = {
|
||||
// Control flow.
|
||||
"break",
|
||||
"continue",
|
||||
|
|
@ -2786,15 +2786,9 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const {
|
|||
"preload",
|
||||
// Types (highlighter uses type color instead).
|
||||
"void",
|
||||
nullptr,
|
||||
};
|
||||
|
||||
const char **w = _reserved_words;
|
||||
|
||||
while (*w) {
|
||||
p_words->push_back(*w);
|
||||
w++;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool GDScriptLanguage::is_control_flow_keyword(const String &p_keyword) const {
|
||||
|
|
|
|||
|
|
@ -603,11 +603,11 @@ public:
|
|||
virtual void finish() override;
|
||||
|
||||
/* EDITOR FUNCTIONS */
|
||||
virtual void get_reserved_words(List<String> *p_words) const override;
|
||||
virtual Vector<String> get_reserved_words() const override;
|
||||
virtual bool is_control_flow_keyword(const String &p_keywords) const override;
|
||||
virtual void get_comment_delimiters(List<String> *p_delimiters) const override;
|
||||
virtual void get_doc_comment_delimiters(List<String> *p_delimiters) const override;
|
||||
virtual void get_string_delimiters(List<String> *p_delimiters) const override;
|
||||
virtual Vector<String> get_comment_delimiters() const override;
|
||||
virtual Vector<String> get_doc_comment_delimiters() const override;
|
||||
virtual Vector<String> get_string_delimiters() const override;
|
||||
virtual bool is_using_templates() override;
|
||||
virtual Ref<Script> make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const override;
|
||||
virtual Vector<ScriptTemplate> get_built_in_templates(const StringName &p_object) override;
|
||||
|
|
|
|||
|
|
@ -51,20 +51,25 @@
|
|||
#include "editor/editor_settings.h"
|
||||
#endif
|
||||
|
||||
void GDScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const {
|
||||
p_delimiters->push_back("#");
|
||||
Vector<String> GDScriptLanguage::get_comment_delimiters() const {
|
||||
static const Vector<String> delimiters = { "#" };
|
||||
return delimiters;
|
||||
}
|
||||
|
||||
void GDScriptLanguage::get_doc_comment_delimiters(List<String> *p_delimiters) const {
|
||||
p_delimiters->push_back("##");
|
||||
Vector<String> GDScriptLanguage::get_doc_comment_delimiters() const {
|
||||
static const Vector<String> delimiters = { "##" };
|
||||
return delimiters;
|
||||
}
|
||||
|
||||
void GDScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const {
|
||||
p_delimiters->push_back("\" \"");
|
||||
p_delimiters->push_back("' '");
|
||||
p_delimiters->push_back("\"\"\" \"\"\"");
|
||||
p_delimiters->push_back("''' '''");
|
||||
Vector<String> GDScriptLanguage::get_string_delimiters() const {
|
||||
static const Vector<String> delimiters = {
|
||||
"\" \"",
|
||||
"' '",
|
||||
"\"\"\" \"\"\"",
|
||||
"''' '''",
|
||||
};
|
||||
// NOTE: StringName, NodePath and r-strings are not listed here.
|
||||
return delimiters;
|
||||
}
|
||||
|
||||
bool GDScriptLanguage::is_using_templates() {
|
||||
|
|
|
|||
|
|
@ -187,8 +187,8 @@ void CSharpLanguage::finalize() {
|
|||
finalized = true;
|
||||
}
|
||||
|
||||
void CSharpLanguage::get_reserved_words(List<String> *p_words) const {
|
||||
static const char *_reserved_words[] = {
|
||||
Vector<String> CSharpLanguage::get_reserved_words() const {
|
||||
static const Vector<String> ret = {
|
||||
// Reserved keywords
|
||||
"abstract",
|
||||
"as",
|
||||
|
|
@ -298,15 +298,9 @@ void CSharpLanguage::get_reserved_words(List<String> *p_words) const {
|
|||
"when",
|
||||
"where",
|
||||
"yield",
|
||||
nullptr
|
||||
};
|
||||
|
||||
const char **w = _reserved_words;
|
||||
|
||||
while (*w) {
|
||||
p_words->push_back(*w);
|
||||
w++;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool CSharpLanguage::is_control_flow_keyword(const String &p_keyword) const {
|
||||
|
|
@ -329,21 +323,30 @@ bool CSharpLanguage::is_control_flow_keyword(const String &p_keyword) const {
|
|||
p_keyword == "while";
|
||||
}
|
||||
|
||||
void CSharpLanguage::get_comment_delimiters(List<String> *p_delimiters) const {
|
||||
p_delimiters->push_back("//"); // single-line comment
|
||||
p_delimiters->push_back("/* */"); // delimited comment
|
||||
Vector<String> CSharpLanguage::get_comment_delimiters() const {
|
||||
static const Vector<String> delimiters = {
|
||||
"//", // single-line comment
|
||||
"/* */" // delimited comment
|
||||
};
|
||||
return delimiters;
|
||||
}
|
||||
|
||||
void CSharpLanguage::get_doc_comment_delimiters(List<String> *p_delimiters) const {
|
||||
p_delimiters->push_back("///"); // single-line doc comment
|
||||
p_delimiters->push_back("/** */"); // delimited doc comment
|
||||
Vector<String> CSharpLanguage::get_doc_comment_delimiters() const {
|
||||
static const Vector<String> delimiters = {
|
||||
"///", // single-line doc comment
|
||||
"/** */" // delimited doc comment
|
||||
};
|
||||
return delimiters;
|
||||
}
|
||||
|
||||
void CSharpLanguage::get_string_delimiters(List<String> *p_delimiters) const {
|
||||
p_delimiters->push_back("' '"); // character literal
|
||||
p_delimiters->push_back("\" \""); // regular string literal
|
||||
p_delimiters->push_back("@\" \""); // verbatim string literal
|
||||
Vector<String> CSharpLanguage::get_string_delimiters() const {
|
||||
static const Vector<String> delimiters = {
|
||||
"' '", // character literal
|
||||
"\" \"", // regular string literal
|
||||
"@\" \"" // verbatim string literal
|
||||
};
|
||||
// Generic string highlighting suffices as a workaround for now.
|
||||
return delimiters;
|
||||
}
|
||||
|
||||
static String get_base_class_name(const String &p_base_class_name, const String p_class_name) {
|
||||
|
|
@ -387,9 +390,7 @@ Vector<ScriptLanguage::ScriptTemplate> CSharpLanguage::get_built_in_templates(co
|
|||
|
||||
String CSharpLanguage::validate_path(const String &p_path) const {
|
||||
String class_name = p_path.get_file().get_basename();
|
||||
List<String> keywords;
|
||||
get_reserved_words(&keywords);
|
||||
if (keywords.find(class_name)) {
|
||||
if (get_reserved_words().has(class_name)) {
|
||||
return RTR("Class name can't be a reserved keyword");
|
||||
}
|
||||
if (!TS->is_valid_identifier(class_name)) {
|
||||
|
|
|
|||
|
|
@ -499,11 +499,11 @@ public:
|
|||
void finalize();
|
||||
|
||||
/* EDITOR FUNCTIONS */
|
||||
void get_reserved_words(List<String> *p_words) const override;
|
||||
Vector<String> get_reserved_words() const override;
|
||||
bool is_control_flow_keyword(const String &p_keyword) const override;
|
||||
void get_comment_delimiters(List<String> *p_delimiters) const override;
|
||||
void get_doc_comment_delimiters(List<String> *p_delimiters) const override;
|
||||
void get_string_delimiters(List<String> *p_delimiters) const override;
|
||||
Vector<String> get_comment_delimiters() const override;
|
||||
Vector<String> get_doc_comment_delimiters() const override;
|
||||
Vector<String> get_string_delimiters() const override;
|
||||
bool is_using_templates() override;
|
||||
virtual Ref<Script> make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const override;
|
||||
virtual Vector<ScriptTemplate> get_built_in_templates(const StringName &p_object) override;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue