97 lines
3.6 KiB
Python
97 lines
3.6 KiB
Python
"""
|
|
pygments.lexers.openscad
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Lexers for the OpenSCAD languages.
|
|
|
|
:copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
|
|
:license: BSD, see LICENSE for details.
|
|
"""
|
|
|
|
from pygments.lexer import RegexLexer, bygroups, words, include
|
|
from pygments.token import Text, Comment, Punctuation, Operator, Keyword, Name, Number, Whitespace, Literal, String
|
|
|
|
__all__ = ['OpenScadLexer']
|
|
|
|
|
|
class OpenScadLexer(RegexLexer):
|
|
"""For openSCAD code.
|
|
"""
|
|
name = "OpenSCAD"
|
|
url = "https://openscad.org/"
|
|
aliases = ["openscad"]
|
|
filenames = ["*.scad"]
|
|
mimetypes = ["application/x-openscad"]
|
|
version_added = '2.16'
|
|
|
|
tokens = {
|
|
"root": [
|
|
(r"[^\S\n]+", Whitespace),
|
|
(r'//', Comment.Single, 'comment-single'),
|
|
(r'/\*', Comment.Multiline, 'comment-multi'),
|
|
(r"[{}\[\]\(\),;:]", Punctuation),
|
|
(r"[*!#%\-+=?/]", Operator),
|
|
(r"<=|<|==|!=|>=|>|&&|\|\|", Operator),
|
|
(r"\$(f[asn]|t|vp[rtd]|children)", Operator),
|
|
(r"(undef|PI)\b", Keyword.Constant),
|
|
(
|
|
r"(use|include)((?:\s|\\\\s)+)",
|
|
bygroups(Keyword.Namespace, Text),
|
|
"includes",
|
|
),
|
|
(r"(module)(\s*)([^\s\(]+)",
|
|
bygroups(Keyword.Namespace, Whitespace, Name.Namespace)),
|
|
(r"(function)(\s*)([^\s\(]+)",
|
|
bygroups(Keyword.Declaration, Whitespace, Name.Function)),
|
|
(words(("true", "false"), prefix=r"\b", suffix=r"\b"), Literal),
|
|
(words((
|
|
"function", "module", "include", "use", "for",
|
|
"intersection_for", "if", "else", "return"
|
|
), prefix=r"\b", suffix=r"\b"), Keyword
|
|
),
|
|
(words((
|
|
"circle", "square", "polygon", "text", "sphere", "cube",
|
|
"cylinder", "polyhedron", "translate", "rotate", "scale",
|
|
"resize", "mirror", "multmatrix", "color", "offset", "hull",
|
|
"minkowski", "union", "difference", "intersection", "abs",
|
|
"sign", "sin", "cos", "tan", "acos", "asin", "atan", "atan2",
|
|
"floor", "round", "ceil", "ln", "log", "pow", "sqrt", "exp",
|
|
"rands", "min", "max", "concat", "lookup", "str", "chr",
|
|
"search", "version", "version_num", "norm", "cross",
|
|
"parent_module", "echo", "import", "import_dxf",
|
|
"dxf_linear_extrude", "linear_extrude", "rotate_extrude",
|
|
"surface", "projection", "render", "dxf_cross",
|
|
"dxf_dim", "let", "assign", "len"
|
|
), prefix=r"\b", suffix=r"\b"),
|
|
Name.Builtin
|
|
),
|
|
(r"\bchildren\b", Name.Builtin.Pseudo),
|
|
(r'""".*?"""', String.Double),
|
|
(r'"(\\\\|\\[^\\]|[^"\\])*"', String.Double),
|
|
(r"-?\d+(\.\d+)?(e[+-]?\d+)?", Number),
|
|
(r"\w+", Name),
|
|
],
|
|
"includes": [
|
|
(
|
|
r"(<)([^>]*)(>)",
|
|
bygroups(Punctuation, Comment.PreprocFile, Punctuation),
|
|
),
|
|
],
|
|
'comment': [
|
|
(r':param: [a-zA-Z_]\w*|:returns?:|(FIXME|MARK|TODO):',
|
|
Comment.Special)
|
|
],
|
|
'comment-single': [
|
|
(r'\n', Text, '#pop'),
|
|
include('comment'),
|
|
(r'[^\n]+', Comment.Single)
|
|
],
|
|
'comment-multi': [
|
|
include('comment'),
|
|
(r'[^*/]+', Comment.Multiline),
|
|
(r'/\*', Comment.Multiline, '#push'),
|
|
(r'\*/', Comment.Multiline, '#pop'),
|
|
(r'[*/]', Comment.Multiline)
|
|
],
|
|
}
|