Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions core/object/script_language.h
Original file line number Diff line number Diff line change
Expand Up @@ -255,11 +255,11 @@ class ScriptLanguage : public Object {
};

void get_core_type_words(List<String> *p_core_type_words) const;
virtual void get_reserved_words(List<String> *p_words) const = 0;
virtual Vector<String> get_reserved_words() const = 0;
virtual bool is_control_flow_keyword(const String &p_string) const = 0;
virtual void get_comment_delimiters(List<String> *p_delimiters) const = 0;
virtual void get_doc_comment_delimiters(List<String> *p_delimiters) const = 0;
virtual void get_string_delimiters(List<String> *p_delimiters) const = 0;
virtual Vector<String> get_comment_delimiters() const = 0;
virtual Vector<String> get_doc_comment_delimiters() const = 0;
virtual Vector<String> get_string_delimiters() const = 0;
virtual Ref<Script> make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const { return Ref<Script>(); }
virtual Vector<ScriptTemplate> get_built_in_templates(const StringName &p_object) { return Vector<ScriptTemplate>(); }
virtual bool is_using_templates() { return false; }
Expand Down
24 changes: 8 additions & 16 deletions core/object/script_language_extension.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,43 +239,35 @@ class ScriptLanguageExtension : public ScriptLanguage {

GDVIRTUAL0RC_REQUIRED(Vector<String>, _get_reserved_words)

virtual void get_reserved_words(List<String> *p_words) const override {
virtual Vector<String> get_reserved_words() const override {
Vector<String> ret;
GDVIRTUAL_CALL(_get_reserved_words, ret);
for (int i = 0; i < ret.size(); i++) {
p_words->push_back(ret[i]);
}
return ret;
}
EXBIND1RC(bool, is_control_flow_keyword, const String &)

GDVIRTUAL0RC_REQUIRED(Vector<String>, _get_comment_delimiters)

virtual void get_comment_delimiters(List<String> *p_words) const override {
virtual Vector<String> get_comment_delimiters() const override {
Vector<String> ret;
GDVIRTUAL_CALL(_get_comment_delimiters, ret);
for (int i = 0; i < ret.size(); i++) {
p_words->push_back(ret[i]);
}
return ret;
}

GDVIRTUAL0RC(Vector<String>, _get_doc_comment_delimiters)

virtual void get_doc_comment_delimiters(List<String> *p_words) const override {
virtual Vector<String> get_doc_comment_delimiters() const override {
Vector<String> ret;
GDVIRTUAL_CALL(_get_doc_comment_delimiters, ret);
for (int i = 0; i < ret.size(); i++) {
p_words->push_back(ret[i]);
}
return ret;
}

GDVIRTUAL0RC_REQUIRED(Vector<String>, _get_string_delimiters)

virtual void get_string_delimiters(List<String> *p_words) const override {
virtual Vector<String> get_string_delimiters() const override {
Vector<String> ret;
GDVIRTUAL_CALL(_get_string_delimiters, ret);
for (int i = 0; i < ret.size(); i++) {
p_words->push_back(ret[i]);
}
return ret;
}

EXBIND3RC(Ref<Script>, make_template, const String &, const String &, const String &)
Expand Down
6 changes: 2 additions & 4 deletions editor/editor_autoload_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,10 +130,8 @@ bool EditorAutoloadSettings::_autoload_name_is_valid(const String &p_name, Strin
}

for (int i = 0; i < ScriptServer::get_language_count(); i++) {
List<String> keywords;
ScriptServer::get_language(i)->get_reserved_words(&keywords);
for (const String &E : keywords) {
if (E == p_name) {
for (const String &keyword : ScriptServer::get_language(i)->get_reserved_words()) {
if (keyword == p_name) {
if (r_error) {
*r_error = TTR("Invalid name.") + " " + TTR("Keyword cannot be used as an Autoload name.");
}
Expand Down
17 changes: 7 additions & 10 deletions editor/plugins/editor_preview_plugins.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -511,19 +511,16 @@ Ref<Texture2D> EditorScriptPreviewPlugin::_generate_from_source_code(const Scrip
return Ref<Texture2D>();
}

List<String> kwors;
if (p_language) {
p_language->get_reserved_words(&kwors);
}

HashSet<String> control_flow_keywords;
HashSet<String> keywords;

for (const String &E : kwors) {
if (p_language && p_language->is_control_flow_keyword(E)) {
control_flow_keywords.insert(E);
} else {
keywords.insert(E);
if (p_language) {
for (const String &keyword : p_language->get_reserved_words()) {
if (p_language->is_control_flow_keyword(keyword)) {
control_flow_keywords.insert(keyword);
} else {
keywords.insert(keyword);
}
}
}

Expand Down
22 changes: 7 additions & 15 deletions editor/plugins/script_editor_plugin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -164,13 +164,11 @@ void EditorStandardSyntaxHighlighter::_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> keywords;
scr_lang->get_reserved_words(&keywords);
for (const String &E : keywords) {
if (scr_lang->is_control_flow_keyword(E)) {
highlighter->add_keyword_color(E, control_flow_keyword_color);
for (const String &keyword : scr_lang->get_reserved_words()) {
if (scr_lang->is_control_flow_keyword(keyword)) {
highlighter->add_keyword_color(keyword, control_flow_keyword_color);
} else {
highlighter->add_keyword_color(E, keyword_color);
highlighter->add_keyword_color(keyword, keyword_color);
}
}

Expand Down Expand Up @@ -199,29 +197,23 @@ void EditorStandardSyntaxHighlighter::_update_cache() {

/* Comments */
const Color comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
List<String> comments;
scr_lang->get_comment_delimiters(&comments);
for (const String &comment : comments) {
for (const String &comment : scr_lang->get_comment_delimiters()) {
String beg = comment.get_slicec(' ', 0);
String end = comment.get_slice_count(" ") > 1 ? comment.get_slicec(' ', 1) : String();
highlighter->add_color_region(beg, end, comment_color, end.is_empty());
}

/* Doc comments */
const Color doc_comment_color = EDITOR_GET("text_editor/theme/highlighting/doc_comment_color");
List<String> doc_comments;
scr_lang->get_doc_comment_delimiters(&doc_comments);
for (const String &doc_comment : doc_comments) {
for (const String &doc_comment : scr_lang->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();
highlighter->add_color_region(beg, end, doc_comment_color, end.is_empty());
}

/* Strings */
const Color string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
List<String> strings;
scr_lang->get_string_delimiters(&strings);
for (const String &string : strings) {
for (const String &string : scr_lang->get_string_delimiters()) {
String beg = string.get_slicec(' ', 0);
String end = string.get_slice_count(" ") > 1 ? string.get_slicec(' ', 1) : String();
highlighter->add_color_region(beg, end, string_color, end.is_empty());
Expand Down
15 changes: 4 additions & 11 deletions editor/plugins/script_text_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -233,8 +233,7 @@ void ScriptTextEditor::_set_theme_for_script() {
CodeEdit *text_edit = code_editor->get_text_editor();
text_edit->get_syntax_highlighter()->update_cache();

List<String> strings;
script->get_language()->get_string_delimiters(&strings);
Vector<String> strings = script->get_language()->get_string_delimiters();
text_edit->clear_string_delimiters();
for (const String &string : strings) {
String beg = string.get_slicec(' ', 0);
Expand All @@ -250,9 +249,7 @@ void ScriptTextEditor::_set_theme_for_script() {

text_edit->clear_comment_delimiters();

List<String> comments;
script->get_language()->get_comment_delimiters(&comments);
for (const String &comment : comments) {
for (const String &comment : script->get_language()->get_comment_delimiters()) {
String beg = comment.get_slicec(' ', 0);
String end = comment.get_slice_count(" ") > 1 ? comment.get_slicec(' ', 1) : String();
text_edit->add_comment_delimiter(beg, end, end.is_empty());
Expand All @@ -262,9 +259,7 @@ void ScriptTextEditor::_set_theme_for_script() {
}
}

List<String> doc_comments;
script->get_language()->get_doc_comment_delimiters(&doc_comments);
for (const String &doc_comment : doc_comments) {
for (const String &doc_comment : script->get_language()->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();
text_edit->add_comment_delimiter(beg, end, end.is_empty());
Expand Down Expand Up @@ -1990,10 +1985,8 @@ void ScriptTextEditor::_edit_option_toggle_inline_comment() {
}

String delimiter = "#";
List<String> comment_delimiters;
script->get_language()->get_comment_delimiters(&comment_delimiters);

for (const String &script_delimiter : comment_delimiters) {
for (const String &script_delimiter : script->get_language()->get_comment_delimiters()) {
if (!script_delimiter.contains_char(' ')) {
delimiter = script_delimiter;
break;
Expand Down
4 changes: 1 addition & 3 deletions editor/script_create_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -746,9 +746,7 @@ ScriptLanguage::ScriptTemplate ScriptCreateDialog::_parse_template(const ScriptL
int space_indent_size = 4;
// Get meta delimiter
String meta_delimiter;
List<String> comment_delimiters;
p_language->get_comment_delimiters(&comment_delimiters);
for (const String &script_delimiter : comment_delimiters) {
for (const String &script_delimiter : p_language->get_comment_delimiters()) {
if (!script_delimiter.contains_char(' ')) {
meta_delimiter = script_delimiter;
break;
Expand Down
18 changes: 6 additions & 12 deletions modules/gdscript/editor/gdscript_highlighter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}

Expand All @@ -783,19 +781,15 @@ 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());
}

/* 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());
Expand Down
12 changes: 3 additions & 9 deletions modules/gdscript/gdscript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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 {
Expand Down
8 changes: 4 additions & 4 deletions modules/gdscript/gdscript.h
Original file line number Diff line number Diff line change
Expand Up @@ -603,11 +603,11 @@ class GDScriptLanguage : public ScriptLanguage {
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;
Expand Down
23 changes: 14 additions & 9 deletions modules/gdscript/gdscript_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Loading