Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
godotengine
GitHub Repository: godotengine/godot
Path: blob/master/editor/script/syntax_highlighters.h
20860 views
1
/**************************************************************************/
2
/* syntax_highlighters.h */
3
/**************************************************************************/
4
/* This file is part of: */
5
/* GODOT ENGINE */
6
/* https://godotengine.org */
7
/**************************************************************************/
8
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
9
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
10
/* */
11
/* Permission is hereby granted, free of charge, to any person obtaining */
12
/* a copy of this software and associated documentation files (the */
13
/* "Software"), to deal in the Software without restriction, including */
14
/* without limitation the rights to use, copy, modify, merge, publish, */
15
/* distribute, sublicense, and/or sell copies of the Software, and to */
16
/* permit persons to whom the Software is furnished to do so, subject to */
17
/* the following conditions: */
18
/* */
19
/* The above copyright notice and this permission notice shall be */
20
/* included in all copies or substantial portions of the Software. */
21
/* */
22
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
23
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
24
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
25
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
26
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
27
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
28
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
29
/**************************************************************************/
30
31
#pragma once
32
33
#include "scene/resources/syntax_highlighter.h"
34
35
class EditorSyntaxHighlighter : public SyntaxHighlighter {
36
GDCLASS(EditorSyntaxHighlighter, SyntaxHighlighter)
37
38
private:
39
Ref<RefCounted> edited_resource;
40
41
protected:
42
static void _bind_methods();
43
44
GDVIRTUAL0RC(String, _get_name)
45
GDVIRTUAL0RC(PackedStringArray, _get_supported_languages)
46
GDVIRTUAL0RC(Ref<EditorSyntaxHighlighter>, _create)
47
48
public:
49
virtual String _get_name() const;
50
virtual PackedStringArray _get_supported_languages() const;
51
52
void _set_edited_resource(const Ref<Resource> &p_res) { edited_resource = p_res; }
53
Ref<RefCounted> _get_edited_resource() { return edited_resource; }
54
55
virtual Ref<EditorSyntaxHighlighter> _create() const;
56
};
57
58
class EditorStandardSyntaxHighlighter : public EditorSyntaxHighlighter {
59
GDCLASS(EditorStandardSyntaxHighlighter, EditorSyntaxHighlighter)
60
61
private:
62
Ref<CodeHighlighter> highlighter;
63
ScriptLanguage *script_language = nullptr; // See GH-89610.
64
65
public:
66
virtual void _update_cache() override;
67
virtual Dictionary _get_line_syntax_highlighting_impl(int p_line) override { return highlighter->get_line_syntax_highlighting(p_line); }
68
69
virtual String _get_name() const override { return TTR("Standard"); }
70
71
virtual Ref<EditorSyntaxHighlighter> _create() const override;
72
73
void _set_script_language(ScriptLanguage *p_script_language) { script_language = p_script_language; }
74
75
EditorStandardSyntaxHighlighter() { highlighter.instantiate(); }
76
};
77
78
class EditorPlainTextSyntaxHighlighter : public EditorSyntaxHighlighter {
79
GDCLASS(EditorPlainTextSyntaxHighlighter, EditorSyntaxHighlighter)
80
81
public:
82
virtual String _get_name() const override { return TTR("Plain Text"); }
83
84
virtual Ref<EditorSyntaxHighlighter> _create() const override;
85
};
86
87
class EditorJSONSyntaxHighlighter : public EditorSyntaxHighlighter {
88
GDCLASS(EditorJSONSyntaxHighlighter, EditorSyntaxHighlighter)
89
90
private:
91
Ref<CodeHighlighter> highlighter;
92
93
public:
94
virtual void _update_cache() override;
95
virtual Dictionary _get_line_syntax_highlighting_impl(int p_line) override { return highlighter->get_line_syntax_highlighting(p_line); }
96
97
virtual PackedStringArray _get_supported_languages() const override { return PackedStringArray{ "json" }; }
98
virtual String _get_name() const override { return TTR("JSON"); }
99
100
virtual Ref<EditorSyntaxHighlighter> _create() const override;
101
102
EditorJSONSyntaxHighlighter() { highlighter.instantiate(); }
103
};
104
105
class EditorMarkdownSyntaxHighlighter : public EditorSyntaxHighlighter {
106
GDCLASS(EditorMarkdownSyntaxHighlighter, EditorSyntaxHighlighter)
107
108
private:
109
Ref<CodeHighlighter> highlighter;
110
111
public:
112
virtual void _update_cache() override;
113
virtual Dictionary _get_line_syntax_highlighting_impl(int p_line) override { return highlighter->get_line_syntax_highlighting(p_line); }
114
115
virtual PackedStringArray _get_supported_languages() const override { return PackedStringArray{ "md", "markdown" }; }
116
virtual String _get_name() const override { return TTR("Markdown"); }
117
118
virtual Ref<EditorSyntaxHighlighter> _create() const override;
119
120
EditorMarkdownSyntaxHighlighter() { highlighter.instantiate(); }
121
};
122
123
class EditorConfigFileSyntaxHighlighter : public EditorSyntaxHighlighter {
124
GDCLASS(EditorConfigFileSyntaxHighlighter, EditorSyntaxHighlighter)
125
126
private:
127
Ref<CodeHighlighter> highlighter;
128
129
public:
130
virtual void _update_cache() override;
131
virtual Dictionary _get_line_syntax_highlighting_impl(int p_line) override { return highlighter->get_line_syntax_highlighting(p_line); }
132
133
// While not explicitly designed for those formats, this highlighter happens
134
// to handle TSCN, TRES, `project.godot` well. We can expose it in case the
135
// user opens one of these using the script editor (which can be done using
136
// the All Files filter).
137
virtual PackedStringArray _get_supported_languages() const override { return PackedStringArray{ "ini", "cfg", "tscn", "tres", "godot" }; }
138
virtual String _get_name() const override { return TTR("ConfigFile"); }
139
140
virtual Ref<EditorSyntaxHighlighter> _create() const override;
141
142
EditorConfigFileSyntaxHighlighter() { highlighter.instantiate(); }
143
};
144
145