summaryrefslogtreecommitdiff
path: root/pygments
diff options
context:
space:
mode:
Diffstat (limited to 'pygments')
-rw-r--r--pygments/lexers/_mapping.py1
-rw-r--r--pygments/lexers/fift.py68
2 files changed, 69 insertions, 0 deletions
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index be3f4d79..223838c2 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -159,6 +159,7 @@ LEXERS = {
'FantomLexer': ('pygments.lexers.fantom', 'Fantom', ('fan',), ('*.fan',), ('application/x-fantom',)),
'FelixLexer': ('pygments.lexers.felix', 'Felix', ('felix', 'flx'), ('*.flx', '*.flxh'), ('text/x-felix',)),
'FennelLexer': ('pygments.lexers.lisp', 'Fennel', ('fennel', 'fnl'), ('*.fnl',), ()),
+ 'FiftLexer': ('pygments.lexers.fift', 'Fift', ('fift', 'fif'), ('*.fif',), ()),
'FishShellLexer': ('pygments.lexers.shell', 'Fish', ('fish', 'fishshell'), ('*.fish', '*.load'), ('application/x-fish',)),
'FlatlineLexer': ('pygments.lexers.dsls', 'Flatline', ('flatline',), (), ('text/x-flatline',)),
'FloScriptLexer': ('pygments.lexers.floscript', 'FloScript', ('floscript', 'flo'), ('*.flo',), ()),
diff --git a/pygments/lexers/fift.py b/pygments/lexers/fift.py
new file mode 100644
index 00000000..c20065c4
--- /dev/null
+++ b/pygments/lexers/fift.py
@@ -0,0 +1,68 @@
+"""
+ pygments.lexers.fift
+ ~~~~~~~~~~~~~~~~~~~~
+
+ Lexers for fift.
+
+ :copyright: Copyright 2006-2022 by the Pygments team, see AUTHORS.
+ :license: BSD, see LICENSE for details.
+"""
+
+from pygments.lexer import RegexLexer, include, words
+from pygments.token import Literal, Comment, Name, String, \
+ Number, Whitespace
+
+__all__ = ['FiftLexer']
+
+
+class FiftLexer(RegexLexer):
+ """
+ For Fift source code.
+ """
+
+ name = 'Fift'
+ aliases = ['fift', 'fif']
+ filenames = ['*.fif']
+ url = 'https://ton-blockchain.github.io/docs/fiftbase.pdf'
+
+ tokens = {
+ 'root': [
+ (r'\s+', Whitespace),
+
+ include('comments'),
+
+ (r'[\.+]?\"', String, 'string'),
+
+ # numbers
+ (r'0x[0-9a-fA-F]+', Number.Hex),
+ (r'0b[01]+', Number.Bin),
+ (r'-?[0-9]+("/"-?[0-9]+)?', Number.Decimal),
+
+ # slices
+ (r'b\{[01]+\}', Literal),
+ (r'x\{[0-9a-fA-F_]+\}', Literal),
+
+ # byte literal
+ (r'B\{[0-9a-fA-F_]+\}', Literal),
+
+ # treat anything as word
+ (r'\S+', Name)
+ ],
+
+ 'string': [
+ (r'\\.', String.Escape),
+ (r'\"', String, '#pop'),
+ (r'[^\"\r\n\\]+', String)
+ ],
+
+ 'comments': [
+ (r'//.*', Comment.Singleline),
+ (r'/\*', Comment.Multiline, 'comment'),
+ ],
+ 'comment': [
+ (r'[^/*]+', Comment.Multiline),
+ (r'/\*', Comment.Multiline, '#push'),
+ (r'\*/', Comment.Multiline, '#pop'),
+ (r'[*/]', Comment.Multiline),
+ ],
+ }