0% found this document useful (0 votes)
44 views

1

The document describes a GDScript lexer for the Pygments library. It defines regex patterns and token types for lexical analysis of GDScript source code.

Uploaded by

fetir47964
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
44 views

1

The document describes a GDScript lexer for the Pygments library. It defines regex patterns and token types for lexical analysis of GDScript source code.

Uploaded by

fetir47964
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

# -*- coding: utf-8 -*-

"""
pygments.lexers.gdscript
~~~~~~~~~~~~~~~~~~~~~~

Lexer for GDScript.

:copyright: Copyright 2xxx by The Godot Engine Community


:license: MIT.

modified by Daniel J. Ramirez <[email protected]> based on the original


python.py pygment
"""

import re

from pygments.lexer import (


RegexLexer,
include,
bygroups,
default,
words,
combined,
)
from pygments.token import (
Text,
Comment,
Operator,
Keyword,
Name,
String,
Number,
Punctuation,
Whitespace,
)

__all__ = ["GDScriptLexer"]

line_re = re.compile(".*?\n")

class GDScriptLexer(RegexLexer):
"""
For `GDScript source code <https://www.godotengine.org>`_.
"""

name = "GDScript"
aliases = ["gdscript", "gd"]
filenames = ["*.gd"]
mimetypes = ["text/x-gdscript", "application/x-gdscript"]

def innerstring_rules(ttype):
return [
# the old style '%s' % (...) string formatting
(
r"%(\(\w+\))?[-#0 +]*([0-9]+|[*])?(\.([0-9]+|[*]))?"
"[hlL]?[E-GXc-giorsux%]",
String.Interpol,
),
# backslashes, quotes and formatting signs must be parsed one at a time
(r'[^\\\'"%\n]+', ttype),
(r'[\'"\\]', ttype),
# unhandled string formatting sign
(r"%", ttype),
# newlines are an error (use "nl" state)
]

tokens = {
"root": [
(r"\n", Whitespace),
(
r'^(\s*)([rRuUbB]{,2})("""(?:.|\n)*?""")',
bygroups(Whitespace, String.Affix, String.Doc),
),
(
r"^(\s*)([rRuUbB]{,2})('''(?:.|\n)*?''')",
bygroups(Whitespace, String.Affix, String.Doc),
),
(r"[^\S\n]+", Whitespace),
(r"#.*$", Comment.Single),
(r"[]{}:(),;[]", Punctuation),
(r"(\\)(\n)", Whitespace),
(r"\\", Text),
(r"(in|and|or|not)\b", Operator.Word),
(
r"!=|==|<<|>>|&&|\+=|-=|\*=|/=|%=|&=|\|=|\|\||[-~+/*%=<>&^.!|$]",
Operator,
),
include("keywords"),
include("control_flow_keywords"),
(r"(func)((?:\s|\\\s)+)", bygroups(Keyword, Whitespace), "funcname"),
(r"(class)((?:\s|\\\s)+)", bygroups(Keyword, Whitespace), "classname"),
include("builtins"),
include("decorators"),
(
'([rR]|[uUbB][rR]|[rR][uUbB])(""")',
bygroups(String.Affix, String.Double),
"tdqs",
),
(
"([rR]|[uUbB][rR]|[rR][uUbB])(''')",
bygroups(String.Affix, String.Single),
"tsqs",
),
(
'([rR]|[uUbB][rR]|[rR][uUbB])(")',
bygroups(String.Affix, String.Double),
"dqs",
),
(
"([rR]|[uUbB][rR]|[rR][uUbB])(')",
bygroups(String.Affix, String.Single),
"sqs",
),
(
'([uUbB]?)(""")',
bygroups(String.Affix, String.Double),
combined("stringescape", "tdqs"),
),
(
"([uUbB]?)(''')",
bygroups(String.Affix, String.Single),
combined("stringescape", "tsqs"),
),
(
'([uUbB]?)(")',
bygroups(String.Affix, String.Double),
combined("stringescape", "dqs"),
),
(
"([uUbB]?)(')",
bygroups(String.Affix, String.Single),
combined("stringescape", "sqs"),
),
include("name"),
include("numbers"),
],
"keywords": [
(
words(
(
"and",
"await",
"in",
"get",
"set",
"not",
"or",
"as",
"breakpoint",
"class",
"class_name",
"extends",
"is",
"func",
"signal",
"const",
"enum",
"static",
"var",
"super",
),
suffix=r"\b",
),
Keyword,
),
],
"control_flow_keywords": [
(
words(
(
"break",
"continue",
"elif",
"else",
"if",
"for",
"match",
"pass",
"return",
"when",
"while",
),
suffix=r"\b",
),
# Custom control flow class used to give control flow keywords a
different color,
# like in the Godot editor.
Keyword.ControlFlow,
),
],
"builtins": [
(
words(
(
# doc/classes/@GlobalScope.xml
"abs",
"absf",
"absi",
"acos",
"asin",
"atan",
"atan2",
"bezier_derivative",
"bezier_interpolate",
"bytes_to_var",
"bytes_to_var_with_objects",
"ceil",
"ceilf",
"ceili",
"clamp",
"clampf",
"clampi",
"cos",
"cosh",
"cubic_interpolate",
"cubic_interpolate_angle",
"cubic_interpolate_angle_in_time",
"cubic_interpolate_in_time",
"db_to_linear",
"deg_to_rad",
"ease",
"error_string",
"exp",
"floor",
"floorf",
"floori",
"fmod",
"fposmod",
"hash",
"instance_from_id",
"inverse_lerp",
"is_equal_approx",
"is_finite",
"is_inf",
"is_instance_id_valid",
"is_instance_valid",
"is_nan",
"is_zero_approx",
"lerp",
"lerp_angle",
"lerpf",
"linear_to_db",
"log",
"max",
"maxf",
"maxi",
"min",
"minf",
"mini",
"move_toward",
"nearest_po2",
"pingpong",
"posmod",
"pow",
"print",
"print_rich",
"print_verbose",
"printerr",
"printraw",
"prints",
"printt",
"push_error",
"push_warning",
"rad_to_deg",
"rand_from_seed",
"randf",
"randf_range",
"randfn",
"randi",
"randi_range",
"randomize",
"remap",
"rid_allocate_id",
"rid_from_int64",
"round",
"roundf",
"roundi",
"seed",
"sign",
"signf",
"signi",
"sin",
"sinh",
"smoothstep",
"snapped",
"snappedf",
"snappedi",
"sqrt",
"step_decimals",
"str",
"str_to_var",
"tan",
"tanh",
"typeof",
"var_to_bytes",
"var_to_bytes_with_objects",
"var_to_str",
"weakref",
"wrap",
"wrapf",
"wrapi",

# modules/gdscript/doc_classes/@GDScript.xml
"Color8",
"assert",
"char",
"convert",
"dict_to_inst",
"get_stack",
"inst_to_dict",
"len",
"load",
"preload",
"print_debug",
"print_stack",
"range",
"str",
"type_exists",
),
prefix=r"(?<!\.)",
suffix=r"\b",
),
Name.Builtin,
),
(r"((?<!\.)(self|super|false|true)|(PI|TAU|NAN|INF)" r")\b",
Name.Builtin.Pseudo),
(
words(
(
"bool",
"int",
"float",
"String",
"StringName",
"NodePath",
"Vector2",
"Vector2i",
"Rect2",
"Rect2i",
"Transform2D",
"Vector3",
"Vector3i",
"AABB",
"Plane",
"Quaternion",
"Basis",
"Transform3D",
"Color",
"RID",
"Object",
"Dictionary",

You might also like