diff options
| author | Nick Psaris <psaris@users.noreply.github.com> | 2022-03-05 02:18:48 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-03-05 08:18:48 +0100 |
| commit | 20c9141b1589f1baea5e209a523f7985cf89fb77 (patch) | |
| tree | 15c37405317310442ea5f83f1aa1bb49d612c80f /pygments | |
| parent | 34a3462c522d6eb0b5d125580878b863d09e2df9 (diff) | |
| download | pygments-git-20c9141b1589f1baea5e209a523f7985cf89fb77.tar.gz | |
Add K and Q lexers (#2073)
Diffstat (limited to 'pygments')
| -rw-r--r-- | pygments/lexers/_mapping.py | 2 | ||||
| -rw-r--r-- | pygments/lexers/q.py | 235 |
2 files changed, 237 insertions, 0 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index a21d1073..a2a89b49 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -245,6 +245,7 @@ LEXERS = { 'JuliaConsoleLexer': ('pygments.lexers.julia', 'Julia console', ('jlcon', 'julia-repl'), (), ()), 'JuliaLexer': ('pygments.lexers.julia', 'Julia', ('julia', 'jl'), ('*.jl',), ('text/x-julia', 'application/x-julia')), 'JuttleLexer': ('pygments.lexers.javascript', 'Juttle', ('juttle',), ('*.juttle',), ('application/juttle', 'application/x-juttle', 'text/x-juttle', 'text/juttle')), + 'KLexer': ('pygments.lexers.q', 'K', ('k',), ('*.k',), ()), 'KalLexer': ('pygments.lexers.javascript', 'Kal', ('kal',), ('*.kal',), ('text/kal', 'application/kal')), 'KconfigLexer': ('pygments.lexers.configs', 'Kconfig', ('kconfig', 'menuconfig', 'linux-config', 'kernel-config'), ('Kconfig*', '*Config.in*', 'external.in*', 'standard-modules.in'), ('text/x-kconfig',)), 'KernelLogLexer': ('pygments.lexers.textfmts', 'Kernel log', ('kmsg', 'dmesg'), ('*.kmsg', '*.dmesg'), ()), @@ -381,6 +382,7 @@ LEXERS = { 'PythonLexer': ('pygments.lexers.python', 'Python', ('python', 'py', 'sage', 'python3', 'py3'), ('*.py', '*.pyw', '*.jy', '*.sage', '*.sc', 'SConstruct', 'SConscript', '*.bzl', 'BUCK', 'BUILD', 'BUILD.bazel', 'WORKSPACE', '*.tac'), ('text/x-python', 'application/x-python', 'text/x-python3', 'application/x-python3')), 'PythonTracebackLexer': ('pygments.lexers.python', 'Python Traceback', ('pytb', 'py3tb'), ('*.pytb', '*.py3tb'), ('text/x-python-traceback', 'text/x-python3-traceback')), 'QBasicLexer': ('pygments.lexers.basic', 'QBasic', ('qbasic', 'basic'), ('*.BAS', '*.bas'), ('text/basic',)), + 'QLexer': ('pygments.lexers.q', 'Q', ('q',), ('*.q',), ()), 'QVToLexer': ('pygments.lexers.qvt', 'QVTO', ('qvto', 'qvt'), ('*.qvto',), ()), 'QlikLexer': ('pygments.lexers.qlik', 'Qlik', ('qlik', 'qlikview', 'qliksense', 'qlikscript'), ('*.qvs', '*.qvw'), ()), 'QmlLexer': ('pygments.lexers.webmisc', 'QML', ('qml', 'qbs'), ('*.qml', '*.qbs'), ('application/x-qml', 'application/x-qt.qbs+qml')), diff --git a/pygments/lexers/q.py b/pygments/lexers/q.py new file mode 100644 index 00000000..21a049fa --- /dev/null +++ b/pygments/lexers/q.py @@ -0,0 +1,235 @@ +""" + pygments.lexers.q + ~~~~~~~~~~~~~~~~~ + + Lexer for the Q programming language. + + :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS. + :license: BSD, see LICENSE for details. +""" + +from pygments.lexer import RegexLexer, words, include, bygroups, inherit +from pygments.token import ( + Comment, + Keyword, + Name, + Number, + Operator, + Punctuation, + String, + Text, + Whitespace, + Literal, + Generic, +) + +__all__ = ["KLexer", "QLexer"] + + +class KLexer(RegexLexer): + """ + For `K <https://code.kx.com/>`_ source code. + + .. versionadded:: 2.12 + """ + + name = "K" + aliases = ["k"] + filenames = ["*.k"] + + tokens = { + "whitespace": [ + # hashbang script + (r"^#!.*", Comment.Hashbang), + # Comments + (r"^/\s*\n", Comment.Multiline, "comments"), + (r"(?<!\S)/.*", Comment.Single), + # Whitespace + (r"\s+", Whitespace), + # Strings + (r"\"", String.Double, "strings"), + ], + "root": [ + include("whitespace"), + include("keywords"), + include("declarations"), + ], + "keywords": [ + ( + words( + ("abs", "acos", "asin", "atan", "avg", "bin", + "binr", "by", "cor", "cos", "cov", "dev", + "delete", "div", "do", "enlist", "exec", "exit", + "exp", "from", "getenv", "hopen", "if", "in", + "insert", "last", "like", "log", "max", "min", + "prd", "select", "setenv", "sin", "sqrt", "ss", + "sum", "tan", "update", "var", "wavg", "while", + "within", "wsum", "xexp"), + suffix=r"\b", + ), + Operator.Word, + ), + ], + "declarations": [ + # Timing + (r"^\\ts?", Comment.Preproc), + ( + r"^(\\\w\s+[^/\n]*?)(/.*)", + bygroups(Comment.Preproc, Comment.Single), + ), + # Generic System Commands + (r"^\\\w.*", Comment.Preproc), + # Prompt + (r"^[a-zA-Z]\)", Generic.Prompt), + # Function Names + ( + r"([.]?[a-zA-Z][\w.]*)(\s*)([-.~=!@#$%^&*_+|,<>?/\\:']?:)(\s*)(\{)", + bygroups(Name.Function, Whitespace, Operator, Whitespace, Punctuation), + "functions", + ), + # Variable Names + ( + r"([.]?[a-zA-Z][\w.]*)(\s*)([-.~=!@#$%^&*_+|,<>?/\\:']?:)", + bygroups(Name.Variable, Whitespace, Operator), + ), + # Functions + (r"\{", Punctuation, "functions"), + # Parentheses + (r"\(", Punctuation, "parentheses"), + # Brackets + (r"\[", Punctuation, "brackets"), + # Errors + (r"'`([a-zA-Z][\w.]*)?", Name.Exception), + # File Symbols + (r"`:([a-zA-Z/][\w./]*)?", String.Symbol), + # Symbols + (r"`([a-zA-Z][\w.]*)?", String.Symbol), + # Numbers + include("numbers"), + # Variable Names + (r"[a-zA-Z][\w.]*", Name), + # Operators + (r"[-=+*#$%@!~^&:.,<>'\\|/?_]", Operator), + # Punctuation + (r";", Punctuation), + ], + "functions": [ + include("root"), + (r"\}", Punctuation, "#pop"), + ], + "parentheses": [ + include("root"), + (r"\)", Punctuation, "#pop"), + ], + "brackets": [ + include("root"), + (r"\]", Punctuation, "#pop"), + ], + "numbers": [ + # Binary Values + (r"[01]+b", Number.Bin), + # Nulls/Infinities + (r"0[nNwW][cefghijmndzuvtp]?", Number), + # Timestamps + ( + ( + r"(?:[0-9]{4}[.][0-9]{2}[.][0-9]{2}|[0-9]+)" + "D(?:[0-9](?:[0-9](?::[0-9]{2}" + "(?::[0-9]{2}(?:[.][0-9]*)?)?)?)?)?" + ), + Literal.Date, + ), + # Datetimes + ( + ( + r"[0-9]{4}[.][0-9]{2}" + "(?:m|[.][0-9]{2}(?:T(?:[0-9]{2}:[0-9]{2}" + "(?::[0-9]{2}(?:[.][0-9]*)?)?)?)?)" + ), + Literal.Date, + ), + # Times + ( + (r"[0-9]{2}:[0-9]{2}(?::[0-9]{2}(?:[.][0-9]{1,3})?)?"), + Literal.Date, + ), + # GUIDs + ( + r"[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", + Number.Hex, + ), + # Byte Vectors + (r"0x[0-9a-fA-F]+", Number.Hex), + # Floats + ( + r"([0-9]*[.]?[0-9]+|[0-9]+[.]?[0-9]*)[eE][+-]?[0-9]+[ef]?", + Number.Float, + ), + (r"([0-9]*[.][0-9]+|[0-9]+[.][0-9]*)[ef]?", Number.Float), + (r"[0-9]+[ef]", Number.Float), + # Characters + (r"[0-9]+c", Number), + # Integers + (r"[0-9]+[ihtuv]", Number.Integer), + # Long Integers + (r"[0-9]+[jnp]?", Number.Integer.Long), + ], + "comments": [ + (r"[^\\]+", Comment.Multiline), + (r"^\\", Comment.Multiline, "#pop"), + (r"\\", Comment.Multiline), + ], + "strings": [ + (r'[^"\\]+', String.Double), + (r"\\.", String.Escape), + (r'"', String.Double, "#pop"), + ], + } + + +class QLexer(KLexer): + """ + For `Q <https://code.kx.com/>`_ source code. + + .. versionadded:: 2.12 + """ + + name = "Q" + aliases = ["q"] + filenames = ["*.q"] + + tokens = { + "root": [ + ( + words( + ("aj", "aj0", "ajf", "ajf0", "all", "and", "any", + "asc", "asof", "attr", "avgs", "ceiling", "cols", + "count", "cross", "csv", "cut", "deltas", "desc", + "differ", "distinct", "dsave", "each", "ej", + "ema", "eval", "except", "fby", "fills", "first", + "fkeys", "flip", "floor", "get", "group", "gtime", + "hclose", "hcount", "hdel", "hsym", "iasc", + "idesc", "ij", "ijf", "inter", "inv", "key", + "keys", "lj", "ljf", "load", "lower", "lsq", + "ltime", "ltrim", "mavg", "maxs", "mcount", "md5", + "mdev", "med", "meta", "mins", "mmax", "mmin", + "mmu", "mod", "msum", "neg", "next", "not", + "null", "or", "over", "parse", "peach", "pj", + "prds", "prior", "prev", "rand", "rank", "ratios", + "raze", "read0", "read1", "reciprocal", "reval", + "reverse", "rload", "rotate", "rsave", "rtrim", + "save", "scan", "scov", "sdev", "set", "show", + "signum", "ssr", "string", "sublist", "sums", + "sv", "svar", "system", "tables", "til", "trim", + "txf", "type", "uj", "ujf", "ungroup", "union", + "upper", "upsert", "value", "view", "views", "vs", + "where", "wj", "wj1", "ww", "xasc", "xbar", + "xcol", "xcols", "xdesc", "xgroup", "xkey", + "xlog", "xprev", "xrank"), + suffix=r"\b", + ), + Name.Builtin, + ), + inherit, + ], + } |
