1<lexer>
  2  <config>
  3    <name>GDScript3</name>
  4    <alias>gdscript3</alias>
  5    <alias>gd3</alias>
  6    <filename>*.gd</filename>
  7    <mime_type>text/x-gdscript</mime_type>
  8    <mime_type>application/x-gdscript</mime_type>
  9    <analyse>
 10      <regex pattern="func (_ready|_init|_input|_process|_unhandled_input)" score="0.8"/>
 11      <regex pattern="(extends |class_name |onready |preload|load|setget|func [^_])" score="0.4"/>
 12      <regex pattern="(var|const|enum|export|signal|tool)" score="0.2"/>
 13    </analyse>
 14  </config>
 15  <rules>
 16    <state name="builtins">
 17      <rule pattern="(?<!\.)(instance_from_id|nearest_po2|print_stack|type_exist|rand_range|linear2db|var2bytes|dict2inst|randomize|bytes2var|rand_seed|db2linear|inst2dict|printerr|printraw|decimals|preload|deg2rad|str2var|stepify|var2str|convert|weakref|fposmod|funcref|rad2deg|dectime|printt|is_inf|is_nan|assert|Color8|typeof|ColorN|prints|floor|atan2|yield|randf|print|range|clamp|round|randi|sqrt|tanh|cosh|ceil|ease|acos|load|fmod|lerp|seed|sign|atan|sinh|hash|asin|sin|str|cos|tan|pow|exp|min|abs|log|max)\b">
 18        <token type="NameBuiltin"/>
 19      </rule>
 20      <rule pattern="(?<!\.)(self|false|true|PI|NAN|INF)\b">
 21        <token type="NameBuiltinPseudo"/>
 22      </rule>
 23      <rule pattern="(?<!\.)(Physics2DShapeQueryParameters|PhysicsShapeQueryParameters|Physics2DDirectBodyStateSW|NavigationPolygonInstance|ResourceInteractiveLoader|Physics2DDirectSpaceState|Physics2DShapeQueryResult|Physics2DTestMotionResult|InputEventJoystickButton|InputEventJoystickMotion|Physics2DDirectBodyState|PhysicsDirectBodyStateSW|PhysicsShapeQueryResult|PhysicsDirectSpaceState|SpatialSound2DServerSW|PackedDataContainerRef|NavigationMeshInstance|ResourceImportMetadata|PhysicsDirectBodyState|ConcavePolygonShape2D|CanvasItemShaderGraph|EditorScenePostImport|InputEventScreenTouch|InputEventMouseButton|InputEventMouseMotion|SpatialSound2DServer|AudioStreamOGGVorbis|VisibilityNotifier2D|InputEventScreenDrag|ConvexPolygonShape2D|SpatialSoundServerSW|ParticleAttractor2D|PackedDataContainer|SpatialStreamPlayer|RenderTargetTexture|AnimationTreePlayer|ConcavePolygonShape|InstancePlaceholder|MaterialShaderGraph|AudioStreamPlayback|VisibilityEnabler2D|SpatialSamplePlayer|DampedSpringJoint2D|InterpolatedCamera|ConvexPolygonShape|ConfirmationDialog|SpatialSoundServer|BakedLightInstance|ParallaxBackground|CollisionPolygon2D|CanvasItemMaterial|VisibilityNotifier|EditorImportPlugin|VideoStreamTheora|TouchScreenButton|ResourcePreloader|OccluderPolygon2D|BakedLightSampler|CollisionObject2D|RemoteTransform2D|PolygonPathFinder|StyleBoxImageMask|NavigationPolygon|TranslationServer|MultiMeshInstance|ImmediateGeometry|Physics2DServerSW|ColorPickerButton|VisibilityEnabler|PHashTranslation|RectangleShape2D|DirectionalLight|AnimatedSprite3D|WorldEnvironment|CollisionShape2D|EventStreamChibi|InputEventAction|CollisionPolygon|AudioStreamSpeex|EditorFileDialog|GeometryInstance|Generic6DOFJoint|PacketPeerStream|CanvasItemShader|KinematicBody2D|StyleBoxTexture|PhysicsServerSW|VSplitContainer|CenterContainer|GDFunctionState|AudioStreamOpus|TextureProgress|MarginContainer|CollisionObject|LightOccluder2D|AnimationPlayer|HSplitContainer|ScrollContainer|SoundRoomParams|Physics2DServer|MaterialShader|ShaderMaterial|ViewportSprite|SplitContainer|AudioStreamMPC|VisualInstance|PanelContainer|BackBufferCopy|SamplePlayer2D|CanvasModulate|ResourceLoader|CapsuleShape2D|ReferenceFrame|NavigationMesh|CollisionShape|ConeTwistJoint|ProximityGroup|AnimatedSprite|SegmentShape2D|BoneAttachment|RichTextLabel|CircleShape2D|VBoxContainer|PacketPeerUDP|SpatialPlayer|TextureButton|KinematicBody|SoundPlayer2D|PhysicsServer|ParallaxLayer|InputEventKey|GrooveJoint2D|PhysicsBody2D|FixedMaterial|GridContainer|HBoxContainer|StreamPeerSSL|StyleBoxEmpty|StreamPeerTCP|SampleLibrary|GDNativeClass|AudioServerSW|ResourceSaver|SpriteBase3D|StreamPlayer|AtlasTexture|VisualServer|SamplePlayer|StyleBoxFlat|StaticBody2D|SpriteFrames|MeshDataTool|MeshInstance|Vector3Array|BoxContainer|TabContainer|HButtonArray|LargeTexture|Navigation2D|WindowDialog|EditorScript|EditorPlugin|TextureFrame|AcceptDialog|ImageTexture|CapsuleShape|VehicleWheel|VButtonArray|Vector2Array|InputDefault|OptionButton|PathFollow2D|VehicleBody|ColorPicker|PopupDialog|ProgressBar|CanvasLayer|Translation|Environment|EventPlayer|VideoPlayer|EventStream|VideoStream|ButtonGroup|Particles2D|Patch9Frame|ButtonArray|SurfaceTool|MeshLibrary|PackedScene|PhysicsBody|AudioStream|Performance|StringArray|AudioServer|RigidBody2D|LineShape2D|SliderJoint|SphereShape|ShaderGraph|CheckButton|StreamPeer|FileDialog|PathFollow|SceneState|RoomBounds|Dictionary|VSeparator|PacketPeer|VScrollBar|MenuButton|HTTPClient|PinJoint2D|BakedLight|PlaneShape|InputEvent|BaseButton|HSeparator|HScrollBar|Navigation|PopupPanel|StaticBody|Position2D|Position3D|ToolButton|HingeJoint|CanvasItem|RayShape2D|ColorArray|ConfigFile|TCP_Server|RayCast2D|ColorRamp|SpotLight|RealArray|GraphNode|Container|Reference|PopupMenu|Separator|Polygon2D|MultiMesh|Semaphore|Transform|OmniLight|GraphEdit|Particles|Animation|Marshalls|SceneTree|RigidBody|XMLParser|PathRemap|ScrollBar|Directory|PCKPacker|RawArray|TextEdit|MainLoop|TreeItem|StyleBox|Material|Geometry|Matrix32|Resource|UndoRedo|RayShape|TestCube|ItemList|CheckBox|Camera2D|Skeleton|Sprite3D|Viewport|NodePath|IntArray|BoxShape|PinJoint|InputMap|LineEdit|GDScript|Vector3|TileMap|HSlider|Spatial|SpinBox|World2D|IP_Unix|Curve2D|Curve3D|WeakRef|GridMap|Matrix3|VSlider|CubeMap|Joint2D|Globals|Shape2D|Texture|Control|TileSet|Light2D|FuncRef|Vector2|RayCast|Script|Node2D|Button|BitMap|Sample|Object|String|Shader|Area2D|Slider|Sprite|Thread|Path2D|Camera|Portal|float|Theme|World|YSort|Shape|Joint|Mutex|Tween|RegEx|Label|Rect2|Array|Plane|Light|Range|Color|Input|Popup|Panel|Timer|Image|Area|Quad|bool|AABB|Quat|File|Tabs|Path|Font|Tree|Room|Mesh|Node|RID|int|Nil|IP|OS)\b">
 24        <token type="NameException"/>
 25      </rule>
 26    </state>
 27    <state name="sqs">
 28      <rule pattern="'">
 29        <token type="LiteralStringSingle"/>
 30        <pop depth="1"/>
 31      </rule>
 32      <rule pattern="\\\\|\\'|\\\n">
 33        <token type="LiteralStringEscape"/>
 34      </rule>
 35      <rule>
 36        <include state="strings-single"/>
 37      </rule>
 38    </state>
 39    <state name="stringescape">
 40      <rule pattern="\\([\\abfnrtv"\']|\n|N\{.*?\}|u[a-fA-F0-9]{4}|U[a-fA-F0-9]{8}|x[a-fA-F0-9]{2}|[0-7]{1,3})">
 41        <token type="LiteralStringEscape"/>
 42      </rule>
 43    </state>
 44    <state name="classname">
 45      <rule pattern="[a-zA-Z_]\w*">
 46        <token type="NameClass"/>
 47        <pop depth="1"/>
 48      </rule>
 49    </state>
 50    <state name="strings-single">
 51      <rule pattern="%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]">
 52        <token type="LiteralStringInterpol"/>
 53      </rule>
 54      <rule pattern="[^\\\'"%\n]+">
 55        <token type="LiteralStringSingle"/>
 56      </rule>
 57      <rule pattern="[\'"\\]">
 58        <token type="LiteralStringSingle"/>
 59      </rule>
 60      <rule pattern="%">
 61        <token type="LiteralStringSingle"/>
 62      </rule>
 63    </state>
 64    <state name="funcname">
 65      <rule pattern="[a-zA-Z_]\w*">
 66        <token type="NameFunction"/>
 67        <pop depth="1"/>
 68      </rule>
 69      <rule>
 70        <pop depth="1"/>
 71      </rule>
 72    </state>
 73    <state name="numbers">
 74      <rule pattern="(\d+\.\d*|\d*\.\d+)([eE][+-]?[0-9]+)?j?">
 75        <token type="LiteralNumberFloat"/>
 76      </rule>
 77      <rule pattern="\d+[eE][+-]?[0-9]+j?">
 78        <token type="LiteralNumberFloat"/>
 79      </rule>
 80      <rule pattern="0[xX][a-fA-F0-9]+">
 81        <token type="LiteralNumberHex"/>
 82      </rule>
 83      <rule pattern="\d+j?">
 84        <token type="LiteralNumberInteger"/>
 85      </rule>
 86    </state>
 87    <state name="tdqs">
 88      <rule pattern=""""">
 89        <token type="LiteralStringDouble"/>
 90        <pop depth="1"/>
 91      </rule>
 92      <rule>
 93        <include state="strings-double"/>
 94      </rule>
 95      <rule pattern="\n">
 96        <token type="LiteralStringDouble"/>
 97      </rule>
 98    </state>
 99    <state name="name">
100      <rule pattern="[a-zA-Z_]\w*">
101        <token type="Name"/>
102      </rule>
103    </state>
104    <state name="root">
105      <rule pattern="\n">
106        <token type="Text"/>
107      </rule>
108      <rule pattern="^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")">
109        <bygroups>
110          <token type="Text"/>
111          <token type="LiteralStringAffix"/>
112          <token type="LiteralStringDoc"/>
113        </bygroups>
114      </rule>
115      <rule pattern="^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')">
116        <bygroups>
117          <token type="Text"/>
118          <token type="LiteralStringAffix"/>
119          <token type="LiteralStringDoc"/>
120        </bygroups>
121      </rule>
122      <rule pattern="[^\S\n]+">
123        <token type="Text"/>
124      </rule>
125      <rule pattern="#.*$">
126        <token type="CommentSingle"/>
127      </rule>
128      <rule pattern="[]{}:(),;[]">
129        <token type="Punctuation"/>
130      </rule>
131      <rule pattern="\\\n">
132        <token type="Text"/>
133      </rule>
134      <rule pattern="\\">
135        <token type="Text"/>
136      </rule>
137      <rule pattern="(in|and|or|not)\b">
138        <token type="OperatorWord"/>
139      </rule>
140      <rule pattern="!=|==|<<|>>|&&|\+=|-=|\*=|/=|%=|&=|\|=|\|\||[-~+/*%=<>&^.!|$]">
141        <token type="Operator"/>
142      </rule>
143      <rule>
144        <include state="keywords"/>
145      </rule>
146      <rule pattern="(def)((?:\s|\\\s)+)">
147        <bygroups>
148          <token type="Keyword"/>
149          <token type="Text"/>
150        </bygroups>
151        <push state="funcname"/>
152      </rule>
153      <rule pattern="(class)((?:\s|\\\s)+)">
154        <bygroups>
155          <token type="Keyword"/>
156          <token type="Text"/>
157        </bygroups>
158        <push state="classname"/>
159      </rule>
160      <rule>
161        <include state="builtins"/>
162      </rule>
163      <rule pattern="([rR]|[uUbB][rR]|[rR][uUbB])(""")">
164        <bygroups>
165          <token type="LiteralStringAffix"/>
166          <token type="LiteralStringDouble"/>
167        </bygroups>
168        <push state="tdqs"/>
169      </rule>
170      <rule pattern="([rR]|[uUbB][rR]|[rR][uUbB])(''')">
171        <bygroups>
172          <token type="LiteralStringAffix"/>
173          <token type="LiteralStringSingle"/>
174        </bygroups>
175        <push state="tsqs"/>
176      </rule>
177      <rule pattern="([rR]|[uUbB][rR]|[rR][uUbB])(")">
178        <bygroups>
179          <token type="LiteralStringAffix"/>
180          <token type="LiteralStringDouble"/>
181        </bygroups>
182        <push state="dqs"/>
183      </rule>
184      <rule pattern="([rR]|[uUbB][rR]|[rR][uUbB])(')">
185        <bygroups>
186          <token type="LiteralStringAffix"/>
187          <token type="LiteralStringSingle"/>
188        </bygroups>
189        <push state="sqs"/>
190      </rule>
191      <rule pattern="([uUbB]?)(""")">
192        <bygroups>
193          <token type="LiteralStringAffix"/>
194          <token type="LiteralStringDouble"/>
195        </bygroups>
196        <combined state="stringescape" state="tdqs"/>
197      </rule>
198      <rule pattern="([uUbB]?)(''')">
199        <bygroups>
200          <token type="LiteralStringAffix"/>
201          <token type="LiteralStringSingle"/>
202        </bygroups>
203        <combined state="stringescape" state="tsqs"/>
204      </rule>
205      <rule pattern="([uUbB]?)(")">
206        <bygroups>
207          <token type="LiteralStringAffix"/>
208          <token type="LiteralStringDouble"/>
209        </bygroups>
210        <combined state="stringescape" state="dqs"/>
211      </rule>
212      <rule pattern="([uUbB]?)(')">
213        <bygroups>
214          <token type="LiteralStringAffix"/>
215          <token type="LiteralStringSingle"/>
216        </bygroups>
217        <combined state="stringescape" state="sqs"/>
218      </rule>
219      <rule>
220        <include state="name"/>
221      </rule>
222      <rule>
223        <include state="numbers"/>
224      </rule>
225    </state>
226    <state name="keywords">
227      <rule pattern="(breakpoint|continue|onready|extends|signal|return|export|static|setget|switch|break|const|while|class|tool|pass|func|case|enum|else|elif|var|for|do|if)\b">
228        <token type="Keyword"/>
229      </rule>
230    </state>
231    <state name="dqs">
232      <rule pattern=""">
233        <token type="LiteralStringDouble"/>
234        <pop depth="1"/>
235      </rule>
236      <rule pattern="\\\\|\\"|\\\n">
237        <token type="LiteralStringEscape"/>
238      </rule>
239      <rule>
240        <include state="strings-double"/>
241      </rule>
242    </state>
243    <state name="tsqs">
244      <rule pattern="'''">
245        <token type="LiteralStringSingle"/>
246        <pop depth="1"/>
247      </rule>
248      <rule>
249        <include state="strings-single"/>
250      </rule>
251      <rule pattern="\n">
252        <token type="LiteralStringSingle"/>
253      </rule>
254    </state>
255    <state name="strings-double">
256      <rule pattern="%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?[hlL]?[E-GXc-giorsux%]">
257        <token type="LiteralStringInterpol"/>
258      </rule>
259      <rule pattern="[^\\\'"%\n]+">
260        <token type="LiteralStringDouble"/>
261      </rule>
262      <rule pattern="[\'"\\]">
263        <token type="LiteralStringDouble"/>
264      </rule>
265      <rule pattern="%">
266        <token type="LiteralStringDouble"/>
267      </rule>
268    </state>
269  </rules>
270</lexer>