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="(?&lt;!\.)(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="(?&lt;!\.)(self|false|true|PI|NAN|INF)\b">
    
  21.         <token type="NameBuiltinPseudo"/>
    
  22.       </rule>
    
  23.       <rule pattern="(?&lt;!\.)(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="&#39;">
    
  29.         <token type="LiteralStringSingle"/>
    
  30.         <pop depth="1"/>
    
  31.       </rule>
    
  32.       <rule pattern="\\\\|\\&#39;|\\\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&#34;\&#39;]|\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="[^\\\&#39;&#34;%\n]+">
    
  55.         <token type="LiteralStringSingle"/>
    
  56.       </rule>
    
  57.       <rule pattern="[\&#39;&#34;\\]">
    
  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="&#34;&#34;&#34;">
    
  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})(&#34;&#34;&#34;(?:.|\n)*?&#34;&#34;&#34;)">
    
  109.         <bygroups>
    
  110.           <token type="Text"/>
    
  111.           <token type="LiteralStringAffix"/>
    
  112.           <token type="LiteralStringDoc"/>
    
  113.         </bygroups>
    
  114.       </rule>
    
  115.       <rule pattern="^(\s*)([rRuUbB]{,2})(&#39;&#39;&#39;(?:.|\n)*?&#39;&#39;&#39;)">
    
  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="!=|==|&lt;&lt;|&gt;&gt;|&amp;&amp;|\+=|-=|\*=|/=|%=|&amp;=|\|=|\|\||[-~+/*%=&lt;&gt;&amp;^.!|$]">
    
  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])(&#34;&#34;&#34;)">
    
  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])(&#39;&#39;&#39;)">
    
  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])(&#34;)">
    
  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])(&#39;)">
    
  185.         <bygroups>
    
  186.           <token type="LiteralStringAffix"/>
    
  187.           <token type="LiteralStringSingle"/>
    
  188.         </bygroups>
    
  189.         <push state="sqs"/>
    
  190.       </rule>
    
  191.       <rule pattern="([uUbB]?)(&#34;&#34;&#34;)">
    
  192.         <bygroups>
    
  193.           <token type="LiteralStringAffix"/>
    
  194.           <token type="LiteralStringDouble"/>
    
  195.         </bygroups>
    
  196.         <combined state="stringescape" state="tdqs"/>
    
  197.       </rule>
    
  198.       <rule pattern="([uUbB]?)(&#39;&#39;&#39;)">
    
  199.         <bygroups>
    
  200.           <token type="LiteralStringAffix"/>
    
  201.           <token type="LiteralStringSingle"/>
    
  202.         </bygroups>
    
  203.         <combined state="stringescape" state="tsqs"/>
    
  204.       </rule>
    
  205.       <rule pattern="([uUbB]?)(&#34;)">
    
  206.         <bygroups>
    
  207.           <token type="LiteralStringAffix"/>
    
  208.           <token type="LiteralStringDouble"/>
    
  209.         </bygroups>
    
  210.         <combined state="stringescape" state="dqs"/>
    
  211.       </rule>
    
  212.       <rule pattern="([uUbB]?)(&#39;)">
    
  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="&#34;">
    
  233.         <token type="LiteralStringDouble"/>
    
  234.         <pop depth="1"/>
    
  235.       </rule>
    
  236.       <rule pattern="\\\\|\\&#34;|\\\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="&#39;&#39;&#39;">
    
  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="[^\\\&#39;&#34;%\n]+">
    
  260.         <token type="LiteralStringDouble"/>
    
  261.       </rule>
    
  262.       <rule pattern="[\&#39;&#34;\\]">
    
  263.         <token type="LiteralStringDouble"/>
    
  264.       </rule>
    
  265.       <rule pattern="%">
    
  266.         <token type="LiteralStringDouble"/>
    
  267.       </rule>
    
  268.     </state>
    
  269.   </rules>
    
  270. </lexer>