summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/qlik.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/qlik.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/qlik.py117
1 files changed, 117 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/qlik.py b/venv/lib/python3.11/site-packages/pygments/lexers/qlik.py
new file mode 100644
index 0000000..b265b60
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/lexers/qlik.py
@@ -0,0 +1,117 @@
+"""
+ pygments.lexers.qlik
+ ~~~~~~~~~~~~~~~~~~~~
+
+ Lexer for the qlik scripting language
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+import re
+
+from pygments.lexer import RegexLexer, include, bygroups, words
+from pygments.token import Comment, Keyword, Name, Number, Operator, \
+ Punctuation, String, Text
+from pygments.lexers._qlik_builtins import OPERATORS_LIST, STATEMENT_LIST, \
+ SCRIPT_FUNCTIONS, CONSTANT_LIST
+
+__all__ = ["QlikLexer"]
+
+
+class QlikLexer(RegexLexer):
+ """
+ Lexer for qlik code, including .qvs files
+
+ .. versionadded:: 2.12
+ """
+
+ name = "Qlik"
+ aliases = ["qlik", "qlikview", "qliksense", "qlikscript"]
+ filenames = ["*.qvs", "*.qvw"]
+
+ flags = re.IGNORECASE
+
+ tokens = {
+ # Handle multi-line comments
+ "comment": [
+ (r"\*/", Comment.Multiline, "#pop"),
+ (r"[^*]+", Comment.Multiline),
+ ],
+ # Handle numbers
+ "numerics": [
+ (r"\b\d+\.\d+(e\d+)?[fd]?\b", Number.Float),
+ (r"\b\d+\b", Number.Integer),
+ ],
+ # Handle variable names in things
+ "interp": [
+ (
+ r"(\$\()(\w+)(\))",
+ bygroups(String.Interpol, Name.Variable, String.Interpol),
+ ),
+ ],
+ # Handle strings
+ "string": [
+ (r"'", String, "#pop"),
+ include("interp"),
+ (r"[^'$]+", String),
+ (r"\$", String),
+ ],
+ #
+ "assignment": [
+ (r";", Punctuation, "#pop"),
+ include("root"),
+ ],
+ "field_name_quote": [
+ (r'"', String.Symbol, "#pop"),
+ include("interp"),
+ (r"[^\"$]+", String.Symbol),
+ (r"\$", String.Symbol),
+ ],
+ "field_name_bracket": [
+ (r"\]", String.Symbol, "#pop"),
+ include("interp"),
+ (r"[^\]$]+", String.Symbol),
+ (r"\$", String.Symbol),
+ ],
+ "function": [(r"\)", Punctuation, "#pop"), include("root")],
+ "root": [
+ # Whitespace and comments
+ (r"\s+", Text.Whitespace),
+ (r"/\*", Comment.Multiline, "comment"),
+ (r"//.*\n", Comment.Single),
+ # variable assignment
+ (r"(let|set)(\s+)", bygroups(Keyword.Declaration, Text.Whitespace),
+ "assignment"),
+ # Word operators
+ (words(OPERATORS_LIST["words"], prefix=r"\b", suffix=r"\b"),
+ Operator.Word),
+ # Statements
+ (words(STATEMENT_LIST, suffix=r"\b"), Keyword),
+ # Table names
+ (r"[a-z]\w*:", Keyword.Declaration),
+ # Constants
+ (words(CONSTANT_LIST, suffix=r"\b"), Keyword.Constant),
+ # Functions
+ (words(SCRIPT_FUNCTIONS, suffix=r"(?=\s*\()"), Name.Builtin,
+ "function"),
+ # interpolation - e.g. $(variableName)
+ include("interp"),
+ # Quotes denote a field/file name
+ (r'"', String.Symbol, "field_name_quote"),
+ # Square brackets denote a field/file name
+ (r"\[", String.Symbol, "field_name_bracket"),
+ # Strings
+ (r"'", String, "string"),
+ # Numbers
+ include("numerics"),
+ # Operator symbols
+ (words(OPERATORS_LIST["symbols"]), Operator),
+ # Strings denoted by single quotes
+ (r"'.+?'", String),
+ # Words as text
+ (r"\b\w+\b", Text),
+ # Basic punctuation
+ (r"[,;.()\\/]", Punctuation),
+ ],
+ }