summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/pygments/lexers/func.py
diff options
context:
space:
mode:
authorcyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
committercyfraeviolae <cyfraeviolae>2024-04-03 03:10:44 -0400
commit6d7ba58f880be618ade07f8ea080fe8c4bf8a896 (patch)
treeb1c931051ffcebd2bd9d61d98d6233ffa289bbce /venv/lib/python3.11/site-packages/pygments/lexers/func.py
parent4f884c9abc32990b4061a1bb6997b4b37e58ea0b (diff)
venv
Diffstat (limited to 'venv/lib/python3.11/site-packages/pygments/lexers/func.py')
-rw-r--r--venv/lib/python3.11/site-packages/pygments/lexers/func.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/venv/lib/python3.11/site-packages/pygments/lexers/func.py b/venv/lib/python3.11/site-packages/pygments/lexers/func.py
new file mode 100644
index 0000000..871f040
--- /dev/null
+++ b/venv/lib/python3.11/site-packages/pygments/lexers/func.py
@@ -0,0 +1,108 @@
+"""
+ pygments.lexers.func
+ ~~~~~~~~~~~~~~~~~~~~
+
+ Lexers for FunC.
+
+ :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, include, words
+from pygments.token import Text, Comment, Operator, Keyword, Name, String, \
+ Number, Whitespace, Punctuation
+
+__all__ = ['FuncLexer']
+
+
+class FuncLexer(RegexLexer):
+ """
+ For FunC source code.
+ """
+
+ name = 'FunC'
+ aliases = ['func', 'fc']
+ filenames = ['*.fc', '*.func']
+
+ # 1. Does not start from "
+ # 2. Can start from ` and end with `, containing any character
+ # 3. Starts with underscore or { or } and have more than 1 character after it
+ # 4. Starts with letter, contains letters, numbers and underscores
+ identifier = r'(?!")(`([^`]+)`|((?=_)_|(?=\{)\{|(?=\})\}|(?![_`{}]))([^;,\[\]\(\)\s~.]+))'
+
+ tokens = {
+ 'root': [
+ (r'\n', Whitespace),
+ (r'\s+', Whitespace),
+
+ include('keywords'),
+ include('strings'),
+ include('directives'),
+ include('numeric'),
+ include('comments'),
+ include('storage'),
+ include('functions'),
+ include('variables'),
+
+ (r'[.;(),\[\]~{}]', Punctuation)
+ ],
+ 'keywords': [
+ (words((
+ '<=>', '>=', '<=', '!=', '==', '^>>', '~>>',
+ '>>', '<<', '/%', '^%', '~%', '^/', '~/', '+=',
+ '-=', '*=', '/=', '~/=', '^/=', '%=', '^%=', '<<=',
+ '>>=', '~>>=', '^>>=', '&=', '|=', '^=', '^', '=',
+ '~', '/', '%', '-', '*', '+','>',
+ '<', '&', '|', ':', '?'), prefix=r'(?<=\s)', suffix=r'(?=\s)'),
+ Operator),
+ (words((
+ 'if', 'ifnot',
+ 'else', 'elseif', 'elseifnot',
+ 'while', 'do', 'until', 'repeat',
+ 'return', 'impure', 'method_id',
+ 'forall', 'asm', 'inline', 'inline_ref'), prefix=r'\b', suffix=r'\b'),
+ Keyword),
+ (words(('true', 'false'), prefix=r'\b', suffix=r'\b'), Keyword.Constant),
+ ],
+ 'directives': [
+ (r'#include|#pragma', Keyword, 'directive'),
+ ],
+ 'directive': [
+ include('strings'),
+ (r'\s+', Whitespace),
+ (r'version|not-version', Keyword),
+ (r'(>=|<=|=|>|<|\^)?([0-9]+)(.[0-9]+)?(.[0-9]+)?', Number), # version
+ (r';', Text, '#pop')
+ ],
+ 'strings': [
+ (r'\"([^\n\"]+)\"[Hhcusa]?', String),
+ ],
+ 'numeric': [
+ (r'\b(-?(?!_)([\d_]+|0x[\d_a-fA-F]+)|0b[1_0]+)(?<!_)(?=[\s\)\],;])', Number)
+ ],
+ 'comments': [
+ (r';;([^\n]*)', Comment.Singleline),
+ (r'\{-', Comment.Multiline, 'comment'),
+ ],
+ 'comment': [
+ (r'[^-}{]+', Comment.Multiline),
+ (r'\{-', Comment.Multiline, '#push'),
+ (r'-\}', Comment.Multiline, '#pop'),
+ (r'[-}{]', Comment.Multiline),
+ ],
+ 'storage': [
+ (words((
+ 'var', 'int', 'slice', 'tuple',
+ 'cell', 'builder', 'cont', '_'),
+ prefix=r'\b', suffix=r'(?=[\s\(\),\[\]])'),
+ Keyword.Type),
+ (words(('global', 'const'), prefix=r'\b', suffix=r'\b'), Keyword.Constant),
+ ],
+ 'variables': [
+ (identifier, Name.Variable),
+ ],
+ 'functions': [
+ # identifier followed by (
+ (identifier + r'(?=[\(])', Name.Function),
+ ]
+ }