Possible to add custom highlight syntax for file types?

Godot Version



I was wondering if it’s possible to add custom syntax to specific file types?
I’m writing a “dialogue script” parser for my dialogue system and I currently read from .txt files, but was wondering if I could easily add highlightable syntax specifically for the txt file type, or somehow add it if I have a custom file type (.dialogue as eg.)? Having the highlightable syntax for my dialogue would make it so much easier to read, eg. easier to see any misspellings.

Yes, you can create a plugin and register a new syntax highlighter with ScriptEditor.register_syntax_highlighter()


extends EditorPlugin

var dialogue_highlighter:DialogueHighlighter

func _enter_tree() -> void:
	dialogue_highlighter = DialogueHighlighter.new()
	var script_editor = EditorInterface.get_script_editor()

func _exit_tree() -> void:
	if is_instance_valid(dialogue_highlighter):
		var script_editor = EditorInterface.get_script_editor()
		dialogue_highlighter = null

class DialogueHighlighter extends EditorSyntaxHighlighter:

	func _get_name() -> String:
		return "Dialogue"

	func _get_supported_languages() -> PackedStringArray:
		return ["TextFile"]

	func _get_line_syntax_highlighting(line: int) -> Dictionary:
		var color_map = {}
		var text_editor = get_text_edit()
		var str = text_editor.get_line(line)

		if str.strip_edges().begins_with("#"):
			color_map[0] = { "color": Color.RED }

		var name_dialog_separator = str.find("::")

		if name_dialog_separator > -1:
			color_map[0] = { "color": Color.BLUE }
			color_map[name_dialog_separator] = { "color": Color.GREEN }
			color_map[name_dialog_separator + 2] = { "color": Color.WHITE }

		return color_map



More info on how to make plugins Making plugins — Godot Engine (stable) documentation in English


Would there be a way to access autoload variables with this script? I’m having issues with that, eg.

No, scripts running in the editor can’t access Autoloads.

1 Like

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.