| """ |
| pygments.lexers.fift |
| ~~~~~~~~~~~~~~~~~~~~ |
| |
| Lexers for fift. |
| |
| :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. |
| :license: BSD, see LICENSE for details. |
| """ |
| |
| from pygments.lexer import RegexLexer, include |
| 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), |
| ], |
| } |