Improve ScriptLanguage get keyword API.

This commit is contained in:
Yufeng Ying
2025-01-15 21:47:43 +08:00
parent 34f005d810
commit 1384e82c2c
13 changed files with 87 additions and 123 deletions

View File

@@ -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);
}
}
}

View File

@@ -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);
}
}
@@ -199,9 +197,7 @@ 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());
@@ -209,9 +205,7 @@ void EditorStandardSyntaxHighlighter::_update_cache() {
/* 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());
@@ -219,9 +213,7 @@ void EditorStandardSyntaxHighlighter::_update_cache() {
/* 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());

View File

@@ -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);
@@ -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());
@@ -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());
@@ -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;