mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-04 07:31:16 +00:00 
			
		
		
		
	Merge pull request #72751 from dalexeev/doc-comment-color
Highlight doc comments in a different color
This commit is contained in:
		
						commit
						71a8ac41fb
					
				
					 17 changed files with 86 additions and 6 deletions
				
			
		| 
						 | 
					@ -239,6 +239,7 @@ public:
 | 
				
			||||||
	virtual void get_reserved_words(List<String> *p_words) const = 0;
 | 
						virtual void get_reserved_words(List<String> *p_words) const = 0;
 | 
				
			||||||
	virtual bool is_control_flow_keyword(String p_string) const = 0;
 | 
						virtual bool is_control_flow_keyword(String p_string) const = 0;
 | 
				
			||||||
	virtual void get_comment_delimiters(List<String> *p_delimiters) 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 void get_string_delimiters(List<String> *p_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 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(StringName p_object) { return Vector<ScriptTemplate>(); }
 | 
						virtual Vector<ScriptTemplate> get_built_in_templates(StringName p_object) { return Vector<ScriptTemplate>(); }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,6 +92,7 @@ void ScriptLanguageExtension::_bind_methods() {
 | 
				
			||||||
	GDVIRTUAL_BIND(_get_reserved_words);
 | 
						GDVIRTUAL_BIND(_get_reserved_words);
 | 
				
			||||||
	GDVIRTUAL_BIND(_is_control_flow_keyword, "keyword");
 | 
						GDVIRTUAL_BIND(_is_control_flow_keyword, "keyword");
 | 
				
			||||||
	GDVIRTUAL_BIND(_get_comment_delimiters);
 | 
						GDVIRTUAL_BIND(_get_comment_delimiters);
 | 
				
			||||||
 | 
						GDVIRTUAL_BIND(_get_doc_comment_delimiters);
 | 
				
			||||||
	GDVIRTUAL_BIND(_get_string_delimiters);
 | 
						GDVIRTUAL_BIND(_get_string_delimiters);
 | 
				
			||||||
	GDVIRTUAL_BIND(_make_template, "template", "class_name", "base_class_name");
 | 
						GDVIRTUAL_BIND(_make_template, "template", "class_name", "base_class_name");
 | 
				
			||||||
	GDVIRTUAL_BIND(_get_built_in_templates, "object");
 | 
						GDVIRTUAL_BIND(_get_built_in_templates, "object");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -241,6 +241,16 @@ public:
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						GDVIRTUAL0RC(Vector<String>, _get_doc_comment_delimiters)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void get_doc_comment_delimiters(List<String> *p_words) 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]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	GDVIRTUAL0RC(Vector<String>, _get_string_delimiters)
 | 
						GDVIRTUAL0RC(Vector<String>, _get_string_delimiters)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	virtual void get_string_delimiters(List<String> *p_words) const override {
 | 
						virtual void get_string_delimiters(List<String> *p_words) const override {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -953,6 +953,9 @@
 | 
				
			||||||
		<member name="text_editor/theme/highlighting/current_line_color" type="Color" setter="" getter="">
 | 
							<member name="text_editor/theme/highlighting/current_line_color" type="Color" setter="" getter="">
 | 
				
			||||||
			The script editor's background color for the line the caret is currently on. This should be set to a translucent color so that it can display on top of other line color modifiers such as [member text_editor/theme/highlighting/mark_color].
 | 
								The script editor's background color for the line the caret is currently on. This should be set to a translucent color so that it can display on top of other line color modifiers such as [member text_editor/theme/highlighting/mark_color].
 | 
				
			||||||
		</member>
 | 
							</member>
 | 
				
			||||||
 | 
							<member name="text_editor/theme/highlighting/doc_comment_color" type="Color" setter="" getter="">
 | 
				
			||||||
 | 
								The script editor's documentation comment color. In GDScript, this is used for comments starting with [code]##[/code]. In C#, this is used for comments starting with [code]///[/code] or [code]/**[/code].
 | 
				
			||||||
 | 
							</member>
 | 
				
			||||||
		<member name="text_editor/theme/highlighting/engine_type_color" type="Color" setter="" getter="">
 | 
							<member name="text_editor/theme/highlighting/engine_type_color" type="Color" setter="" getter="">
 | 
				
			||||||
			The script editor's engine type color ([Vector2], [Vector3], [Color], ...).
 | 
								The script editor's engine type color ([Vector2], [Vector3], [Color], ...).
 | 
				
			||||||
		</member>
 | 
							</member>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -140,6 +140,11 @@
 | 
				
			||||||
			<description>
 | 
								<description>
 | 
				
			||||||
			</description>
 | 
								</description>
 | 
				
			||||||
		</method>
 | 
							</method>
 | 
				
			||||||
 | 
							<method name="_get_doc_comment_delimiters" qualifiers="virtual const">
 | 
				
			||||||
 | 
								<return type="PackedStringArray" />
 | 
				
			||||||
 | 
								<description>
 | 
				
			||||||
 | 
								</description>
 | 
				
			||||||
 | 
							</method>
 | 
				
			||||||
		<method name="_get_extension" qualifiers="virtual const">
 | 
							<method name="_get_extension" qualifiers="virtual const">
 | 
				
			||||||
			<return type="String" />
 | 
								<return type="String" />
 | 
				
			||||||
			<description>
 | 
								<description>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -951,6 +951,8 @@ void CodeTextEditor::_complete_request() {
 | 
				
			||||||
			font_color = get_theme_color(e.theme_color_name, SNAME("Editor"));
 | 
								font_color = get_theme_color(e.theme_color_name, SNAME("Editor"));
 | 
				
			||||||
		} else if (e.insert_text.begins_with("\"") || e.insert_text.begins_with("\'")) {
 | 
							} else if (e.insert_text.begins_with("\"") || e.insert_text.begins_with("\'")) {
 | 
				
			||||||
			font_color = completion_string_color;
 | 
								font_color = completion_string_color;
 | 
				
			||||||
 | 
							} else if (e.insert_text.begins_with("##") || e.insert_text.begins_with("///")) {
 | 
				
			||||||
 | 
								font_color = completion_doc_comment_color;
 | 
				
			||||||
		} else if (e.insert_text.begins_with("#") || e.insert_text.begins_with("//")) {
 | 
							} else if (e.insert_text.begins_with("#") || e.insert_text.begins_with("//")) {
 | 
				
			||||||
			font_color = completion_comment_color;
 | 
								font_color = completion_comment_color;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					@ -1026,6 +1028,7 @@ void CodeTextEditor::update_editor_settings() {
 | 
				
			||||||
	completion_font_color = EDITOR_GET("text_editor/theme/highlighting/completion_font_color");
 | 
						completion_font_color = EDITOR_GET("text_editor/theme/highlighting/completion_font_color");
 | 
				
			||||||
	completion_string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
 | 
						completion_string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
 | 
				
			||||||
	completion_comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
 | 
						completion_comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
 | 
				
			||||||
 | 
						completion_doc_comment_color = EDITOR_GET("text_editor/theme/highlighting/doc_comment_color");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Appearance: Caret
 | 
						// Appearance: Caret
 | 
				
			||||||
	text_editor->set_caret_type((TextEdit::CaretType)EDITOR_GET("text_editor/appearance/caret/type").operator int());
 | 
						text_editor->set_caret_type((TextEdit::CaretType)EDITOR_GET("text_editor/appearance/caret/type").operator int());
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -188,6 +188,7 @@ class CodeTextEditor : public VBoxContainer {
 | 
				
			||||||
	Color completion_font_color;
 | 
						Color completion_font_color;
 | 
				
			||||||
	Color completion_string_color;
 | 
						Color completion_string_color;
 | 
				
			||||||
	Color completion_comment_color;
 | 
						Color completion_comment_color;
 | 
				
			||||||
 | 
						Color completion_doc_comment_color;
 | 
				
			||||||
	CodeTextEditorCodeCompleteFunc code_complete_func;
 | 
						CodeTextEditorCodeCompleteFunc code_complete_func;
 | 
				
			||||||
	void *code_complete_ud = nullptr;
 | 
						void *code_complete_ud = nullptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -821,6 +821,7 @@ void EditorSettings::_load_godot2_text_editor_theme() {
 | 
				
			||||||
	_initial_set("text_editor/theme/highlighting/engine_type_color", Color(0.51, 0.83, 1.0));
 | 
						_initial_set("text_editor/theme/highlighting/engine_type_color", Color(0.51, 0.83, 1.0));
 | 
				
			||||||
	_initial_set("text_editor/theme/highlighting/user_type_color", Color(0.42, 0.67, 0.93));
 | 
						_initial_set("text_editor/theme/highlighting/user_type_color", Color(0.42, 0.67, 0.93));
 | 
				
			||||||
	_initial_set("text_editor/theme/highlighting/comment_color", Color(0.4, 0.4, 0.4));
 | 
						_initial_set("text_editor/theme/highlighting/comment_color", Color(0.4, 0.4, 0.4));
 | 
				
			||||||
 | 
						_initial_set("text_editor/theme/highlighting/doc_comment_color", Color(0.5, 0.6, 0.7));
 | 
				
			||||||
	_initial_set("text_editor/theme/highlighting/string_color", Color(0.94, 0.43, 0.75));
 | 
						_initial_set("text_editor/theme/highlighting/string_color", Color(0.94, 0.43, 0.75));
 | 
				
			||||||
	_initial_set("text_editor/theme/highlighting/background_color", Color(0.13, 0.12, 0.15));
 | 
						_initial_set("text_editor/theme/highlighting/background_color", Color(0.13, 0.12, 0.15));
 | 
				
			||||||
	_initial_set("text_editor/theme/highlighting/completion_background_color", Color(0.17, 0.16, 0.2));
 | 
						_initial_set("text_editor/theme/highlighting/completion_background_color", Color(0.17, 0.16, 0.2));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2215,7 +2215,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// adaptive script theme constants
 | 
						// adaptive script theme constants
 | 
				
			||||||
	// for comments and elements with lower relevance
 | 
						// for comments and elements with lower relevance
 | 
				
			||||||
	const Color dim_color = Color(font_color.r, font_color.g, font_color.b, 0.5);
 | 
						const Color dim_color = Color(font_color, 0.5);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const float mono_value = mono_color.r;
 | 
						const float mono_value = mono_color.r;
 | 
				
			||||||
	const Color alpha1 = Color(mono_value, mono_value, mono_value, 0.07);
 | 
						const Color alpha1 = Color(mono_value, mono_value, mono_value, 0.07);
 | 
				
			||||||
| 
						 | 
					@ -2229,6 +2229,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 | 
				
			||||||
	const Color engine_type_color = dark_theme ? Color(0.56, 1, 0.86) : Color(0.11, 0.55, 0.4);
 | 
						const Color engine_type_color = dark_theme ? Color(0.56, 1, 0.86) : Color(0.11, 0.55, 0.4);
 | 
				
			||||||
	const Color user_type_color = dark_theme ? Color(0.78, 1, 0.93) : Color(0.18, 0.45, 0.4);
 | 
						const Color user_type_color = dark_theme ? Color(0.78, 1, 0.93) : Color(0.18, 0.45, 0.4);
 | 
				
			||||||
	const Color comment_color = dark_theme ? dim_color : Color(0.08, 0.08, 0.08, 0.5);
 | 
						const Color comment_color = dark_theme ? dim_color : Color(0.08, 0.08, 0.08, 0.5);
 | 
				
			||||||
 | 
						const Color doc_comment_color = dark_theme ? Color(0.6, 0.7, 0.8, 0.8) : Color(0.15, 0.15, 0.4, 0.7);
 | 
				
			||||||
	const Color string_color = dark_theme ? Color(1, 0.93, 0.63) : Color(0.6, 0.42, 0);
 | 
						const Color string_color = dark_theme ? Color(1, 0.93, 0.63) : Color(0.6, 0.42, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Use the brightest background color on a light theme (which generally uses a negative contrast rate).
 | 
						// Use the brightest background color on a light theme (which generally uses a negative contrast rate).
 | 
				
			||||||
| 
						 | 
					@ -2272,6 +2273,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {
 | 
				
			||||||
		setting->set_initial_value("text_editor/theme/highlighting/engine_type_color", engine_type_color, true);
 | 
							setting->set_initial_value("text_editor/theme/highlighting/engine_type_color", engine_type_color, true);
 | 
				
			||||||
		setting->set_initial_value("text_editor/theme/highlighting/user_type_color", user_type_color, true);
 | 
							setting->set_initial_value("text_editor/theme/highlighting/user_type_color", user_type_color, true);
 | 
				
			||||||
		setting->set_initial_value("text_editor/theme/highlighting/comment_color", comment_color, true);
 | 
							setting->set_initial_value("text_editor/theme/highlighting/comment_color", comment_color, true);
 | 
				
			||||||
 | 
							setting->set_initial_value("text_editor/theme/highlighting/doc_comment_color", doc_comment_color, true);
 | 
				
			||||||
		setting->set_initial_value("text_editor/theme/highlighting/string_color", string_color, true);
 | 
							setting->set_initial_value("text_editor/theme/highlighting/string_color", string_color, true);
 | 
				
			||||||
		setting->set_initial_value("text_editor/theme/highlighting/background_color", te_background_color, true);
 | 
							setting->set_initial_value("text_editor/theme/highlighting/background_color", te_background_color, true);
 | 
				
			||||||
		setting->set_initial_value("text_editor/theme/highlighting/completion_background_color", completion_background_color, true);
 | 
							setting->set_initial_value("text_editor/theme/highlighting/completion_background_color", completion_background_color, true);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -496,6 +496,7 @@ Ref<Texture2D> EditorScriptPreviewPlugin::generate(const Ref<Resource> &p_from,
 | 
				
			||||||
	Color text_color = EDITOR_GET("text_editor/theme/highlighting/text_color");
 | 
						Color text_color = EDITOR_GET("text_editor/theme/highlighting/text_color");
 | 
				
			||||||
	Color symbol_color = EDITOR_GET("text_editor/theme/highlighting/symbol_color");
 | 
						Color symbol_color = EDITOR_GET("text_editor/theme/highlighting/symbol_color");
 | 
				
			||||||
	Color comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
 | 
						Color comment_color = EDITOR_GET("text_editor/theme/highlighting/comment_color");
 | 
				
			||||||
 | 
						Color doc_comment_color = EDITOR_GET("text_editor/theme/highlighting/doc_comment_color");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (bg_color.a == 0) {
 | 
						if (bg_color.a == 0) {
 | 
				
			||||||
		bg_color = Color(0, 0, 0, 0);
 | 
							bg_color = Color(0, 0, 0, 0);
 | 
				
			||||||
| 
						 | 
					@ -513,6 +514,7 @@ Ref<Texture2D> EditorScriptPreviewPlugin::generate(const Ref<Resource> &p_from,
 | 
				
			||||||
	bool in_control_flow_keyword = false;
 | 
						bool in_control_flow_keyword = false;
 | 
				
			||||||
	bool in_keyword = false;
 | 
						bool in_keyword = false;
 | 
				
			||||||
	bool in_comment = false;
 | 
						bool in_comment = false;
 | 
				
			||||||
 | 
						bool in_doc_comment = false;
 | 
				
			||||||
	for (int i = 0; i < code.length(); i++) {
 | 
						for (int i = 0; i < code.length(); i++) {
 | 
				
			||||||
		char32_t c = code[i];
 | 
							char32_t c = code[i];
 | 
				
			||||||
		if (c > 32) {
 | 
							if (c > 32) {
 | 
				
			||||||
| 
						 | 
					@ -520,11 +522,17 @@ Ref<Texture2D> EditorScriptPreviewPlugin::generate(const Ref<Resource> &p_from,
 | 
				
			||||||
				Color color = text_color;
 | 
									Color color = text_color;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (c == '#') {
 | 
									if (c == '#') {
 | 
				
			||||||
 | 
										if (i < code.length() - 1 && code[i + 1] == '#') {
 | 
				
			||||||
 | 
											in_doc_comment = true;
 | 
				
			||||||
 | 
										} else {
 | 
				
			||||||
						in_comment = true;
 | 
											in_comment = true;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				if (in_comment) {
 | 
									if (in_comment) {
 | 
				
			||||||
					color = comment_color;
 | 
										color = comment_color;
 | 
				
			||||||
 | 
									} else if (in_doc_comment) {
 | 
				
			||||||
 | 
										color = doc_comment_color;
 | 
				
			||||||
				} else {
 | 
									} else {
 | 
				
			||||||
					if (is_symbol(c)) {
 | 
										if (is_symbol(c)) {
 | 
				
			||||||
						//make symbol a little visible
 | 
											//make symbol a little visible
 | 
				
			||||||
| 
						 | 
					@ -569,6 +577,7 @@ Ref<Texture2D> EditorScriptPreviewPlugin::generate(const Ref<Resource> &p_from,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if (c == '\n') {
 | 
								if (c == '\n') {
 | 
				
			||||||
				in_comment = false;
 | 
									in_comment = false;
 | 
				
			||||||
 | 
									in_doc_comment = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				col = x0;
 | 
									col = x0;
 | 
				
			||||||
				line++;
 | 
									line++;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -191,6 +191,16 @@ void EditorStandardSyntaxHighlighter::_update_cache() {
 | 
				
			||||||
			highlighter->add_color_region(beg, end, comment_color, end.is_empty());
 | 
								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->get_language()->get_doc_comment_delimiters(&doc_comments);
 | 
				
			||||||
 | 
							for (const String &doc_comment : doc_comments) {
 | 
				
			||||||
 | 
								String beg = doc_comment.get_slice(" ", 0);
 | 
				
			||||||
 | 
								String end = doc_comment.get_slice_count(" ") > 1 ? doc_comment.get_slice(" ", 1) : String();
 | 
				
			||||||
 | 
								highlighter->add_color_region(beg, end, doc_comment_color, end.is_empty());
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Strings */
 | 
							/* Strings */
 | 
				
			||||||
		const Color string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
 | 
							const Color string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
 | 
				
			||||||
		List<String> strings;
 | 
							List<String> strings;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -234,9 +234,10 @@ void ScriptTextEditor::_set_theme_for_script() {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						text_edit->clear_comment_delimiters();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	List<String> comments;
 | 
						List<String> comments;
 | 
				
			||||||
	script->get_language()->get_comment_delimiters(&comments);
 | 
						script->get_language()->get_comment_delimiters(&comments);
 | 
				
			||||||
	text_edit->clear_comment_delimiters();
 | 
					 | 
				
			||||||
	for (const String &comment : comments) {
 | 
						for (const String &comment : comments) {
 | 
				
			||||||
		String beg = comment.get_slice(" ", 0);
 | 
							String beg = comment.get_slice(" ", 0);
 | 
				
			||||||
		String end = comment.get_slice_count(" ") > 1 ? comment.get_slice(" ", 1) : String();
 | 
							String end = comment.get_slice_count(" ") > 1 ? comment.get_slice(" ", 1) : String();
 | 
				
			||||||
| 
						 | 
					@ -246,6 +247,18 @@ void ScriptTextEditor::_set_theme_for_script() {
 | 
				
			||||||
			text_edit->add_auto_brace_completion_pair(beg, end);
 | 
								text_edit->add_auto_brace_completion_pair(beg, end);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						List<String> doc_comments;
 | 
				
			||||||
 | 
						script->get_language()->get_doc_comment_delimiters(&doc_comments);
 | 
				
			||||||
 | 
						for (const String &doc_comment : doc_comments) {
 | 
				
			||||||
 | 
							String beg = doc_comment.get_slice(" ", 0);
 | 
				
			||||||
 | 
							String end = doc_comment.get_slice_count(" ") > 1 ? doc_comment.get_slice(" ", 1) : String();
 | 
				
			||||||
 | 
							text_edit->add_comment_delimiter(beg, end, end.is_empty());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!end.is_empty() && !text_edit->has_auto_brace_completion_open_key(beg)) {
 | 
				
			||||||
 | 
								text_edit->add_auto_brace_completion_pair(beg, end);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ScriptTextEditor::_show_errors_panel(bool p_show) {
 | 
					void ScriptTextEditor::_show_errors_panel(bool p_show) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -149,7 +149,7 @@ Dictionary GDScriptSyntaxHighlighter::_get_line_syntax_highlighting_impl(int p_l
 | 
				
			||||||
						// Check if it's the whole line.
 | 
											// Check if it's the whole line.
 | 
				
			||||||
						if (end_key_length == 0 || color_regions[c].line_only || from + end_key_length > line_length) {
 | 
											if (end_key_length == 0 || color_regions[c].line_only || from + end_key_length > line_length) {
 | 
				
			||||||
							// Don't skip comments, for highlighting markers.
 | 
												// Don't skip comments, for highlighting markers.
 | 
				
			||||||
							if (color_regions[in_region].start_key == "#") {
 | 
												if (color_regions[in_region].start_key.begins_with("#")) {
 | 
				
			||||||
								break;
 | 
													break;
 | 
				
			||||||
							}
 | 
												}
 | 
				
			||||||
							if (from + end_key_length > line_length) {
 | 
												if (from + end_key_length > line_length) {
 | 
				
			||||||
| 
						 | 
					@ -171,7 +171,7 @@ Dictionary GDScriptSyntaxHighlighter::_get_line_syntax_highlighting_impl(int p_l
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					// Don't skip comments, for highlighting markers.
 | 
										// Don't skip comments, for highlighting markers.
 | 
				
			||||||
					if (j == line_length && color_regions[in_region].start_key != "#") {
 | 
										if (j == line_length && !color_regions[in_region].start_key.begins_with("#")) {
 | 
				
			||||||
						continue;
 | 
											continue;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
| 
						 | 
					@ -193,7 +193,7 @@ Dictionary GDScriptSyntaxHighlighter::_get_line_syntax_highlighting_impl(int p_l
 | 
				
			||||||
					highlighter_info["color"] = region_color;
 | 
										highlighter_info["color"] = region_color;
 | 
				
			||||||
					color_map[j] = highlighter_info;
 | 
										color_map[j] = highlighter_info;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if (color_regions[in_region].start_key == "#") {
 | 
										if (color_regions[in_region].start_key.begins_with("#")) {
 | 
				
			||||||
						int marker_start_pos = from;
 | 
											int marker_start_pos = from;
 | 
				
			||||||
						int marker_len = 0;
 | 
											int marker_len = 0;
 | 
				
			||||||
						while (from <= line_length) {
 | 
											while (from <= line_length) {
 | 
				
			||||||
| 
						 | 
					@ -740,6 +740,16 @@ void GDScriptSyntaxHighlighter::_update_cache() {
 | 
				
			||||||
		add_color_region(beg, end, comment_color, end.is_empty());
 | 
							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;
 | 
				
			||||||
 | 
						gdscript->get_doc_comment_delimiters(&doc_comments);
 | 
				
			||||||
 | 
						for (const String &doc_comment : doc_comments) {
 | 
				
			||||||
 | 
							String beg = doc_comment.get_slice(" ", 0);
 | 
				
			||||||
 | 
							String end = doc_comment.get_slice_count(" ") > 1 ? doc_comment.get_slice(" ", 1) : String();
 | 
				
			||||||
 | 
							add_color_region(beg, end, doc_comment_color, end.is_empty());
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Strings */
 | 
						/* Strings */
 | 
				
			||||||
	string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
 | 
						string_color = EDITOR_GET("text_editor/theme/highlighting/string_color");
 | 
				
			||||||
	List<String> strings;
 | 
						List<String> strings;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -501,6 +501,7 @@ public:
 | 
				
			||||||
	virtual void get_reserved_words(List<String> *p_words) const override;
 | 
						virtual void get_reserved_words(List<String> *p_words) const override;
 | 
				
			||||||
	virtual bool is_control_flow_keyword(String p_keywords) const override;
 | 
						virtual bool is_control_flow_keyword(String p_keywords) const override;
 | 
				
			||||||
	virtual void get_comment_delimiters(List<String> *p_delimiters) 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 void get_string_delimiters(List<String> *p_delimiters) const override;
 | 
				
			||||||
	virtual bool is_using_templates() 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 Ref<Script> make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const override;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +54,10 @@ void GDScriptLanguage::get_comment_delimiters(List<String> *p_delimiters) const
 | 
				
			||||||
	p_delimiters->push_back("#");
 | 
						p_delimiters->push_back("#");
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void GDScriptLanguage::get_doc_comment_delimiters(List<String> *p_delimiters) const {
 | 
				
			||||||
 | 
						p_delimiters->push_back("##");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void GDScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const {
 | 
					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("' '");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -328,6 +328,11 @@ void CSharpLanguage::get_comment_delimiters(List<String> *p_delimiters) const {
 | 
				
			||||||
	p_delimiters->push_back("/* */"); // delimited comment
 | 
						p_delimiters->push_back("/* */"); // delimited comment
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void CSharpLanguage::get_string_delimiters(List<String> *p_delimiters) const {
 | 
					void CSharpLanguage::get_string_delimiters(List<String> *p_delimiters) const {
 | 
				
			||||||
	p_delimiters->push_back("' '"); // character literal
 | 
						p_delimiters->push_back("' '"); // character literal
 | 
				
			||||||
	p_delimiters->push_back("\" \""); // regular string literal
 | 
						p_delimiters->push_back("\" \""); // regular string literal
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -419,6 +419,7 @@ public:
 | 
				
			||||||
	void get_reserved_words(List<String> *p_words) const override;
 | 
						void get_reserved_words(List<String> *p_words) const override;
 | 
				
			||||||
	bool is_control_flow_keyword(String p_keyword) const override;
 | 
						bool is_control_flow_keyword(String p_keyword) const override;
 | 
				
			||||||
	void get_comment_delimiters(List<String> *p_delimiters) 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;
 | 
						void get_string_delimiters(List<String> *p_delimiters) const override;
 | 
				
			||||||
	bool is_using_templates() 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 Ref<Script> make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const override;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue