82 lines
2.2 KiB
GDScript3
82 lines
2.2 KiB
GDScript3
|
@tool
|
||
|
extends EditorPlugin
|
||
|
|
||
|
|
||
|
var dialogue_highlighter:DialogueHighlighter
|
||
|
|
||
|
|
||
|
func _enter_tree() -> void:
|
||
|
dialogue_highlighter = DialogueHighlighter.new()
|
||
|
var script_editor = EditorInterface.get_script_editor()
|
||
|
print(script_editor)
|
||
|
print(dialogue_highlighter)
|
||
|
script_editor.register_syntax_highlighter(dialogue_highlighter)
|
||
|
print(script_editor.get_current_script())
|
||
|
print(script_editor.get_open_scripts())
|
||
|
script_editor.goto_line(20)
|
||
|
|
||
|
|
||
|
func _exit_tree() -> void:
|
||
|
if is_instance_valid(dialogue_highlighter):
|
||
|
var script_editor = EditorInterface.get_script_editor()
|
||
|
script_editor.unregister_syntax_highlighter(dialogue_highlighter)
|
||
|
dialogue_highlighter = null
|
||
|
|
||
|
|
||
|
class DialogueHighlighter extends EditorSyntaxHighlighter:
|
||
|
func _get_name() -> String:
|
||
|
return "Laia"
|
||
|
|
||
|
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)
|
||
|
|
||
|
# Comment
|
||
|
if str.strip_edges().begins_with("#"):
|
||
|
color_map[0] = { "color": Color.WEB_GRAY }
|
||
|
return color_map
|
||
|
|
||
|
# Key
|
||
|
var regex3 = RegEx.new()
|
||
|
regex3.compile("([a-zA-Z0-9_]+:).*")
|
||
|
var result3 = regex3.search(str)
|
||
|
|
||
|
if result3:
|
||
|
color_map[result3.get_start(1)] = { "color": Color.SEA_GREEN }
|
||
|
color_map[result3.get_end(1)] = { "color": Color.WHITE }
|
||
|
|
||
|
# Array
|
||
|
var regex = RegEx.new()
|
||
|
regex.compile("([a-zA-Z0-9_\\-])+\\[\\]")
|
||
|
var result = regex.search(str)
|
||
|
|
||
|
if result:
|
||
|
color_map[result.get_start()] = { "color": Color.CYAN }
|
||
|
color_map[result.get_end(1)] = { "color": Color.LIGHT_CYAN }
|
||
|
|
||
|
# Enum
|
||
|
var regex4 = RegEx.new()
|
||
|
regex4.compile("[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)")
|
||
|
var result4 = regex4.search(str)
|
||
|
|
||
|
if result4:
|
||
|
color_map[result4.get_start()] = { "color": Color.ORANGE }
|
||
|
color_map[result4.get_start(1)] = { "color": Color.ORANGE_RED }
|
||
|
color_map[result4.get_end()] = { "color": Color.WHITE }
|
||
|
|
||
|
# Color
|
||
|
var regex2 = RegEx.new()
|
||
|
regex2.compile("#[a-zA-Z0-9]+")
|
||
|
var result2 = regex2.search(str)
|
||
|
|
||
|
if result2:
|
||
|
color_map[result2.get_start()] = { "color": Color(result2.get_string()) }
|
||
|
|
||
|
|
||
|
|
||
|
return color_map
|