fift.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """
  2. pygments.lexers.fift
  3. ~~~~~~~~~~~~~~~~~~~~
  4. Lexers for fift.
  5. :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.
  6. :license: BSD, see LICENSE for details.
  7. """
  8. from pygments.lexer import RegexLexer, include
  9. from pygments.token import Literal, Comment, Name, String, Number, Whitespace
  10. __all__ = ['FiftLexer']
  11. class FiftLexer(RegexLexer):
  12. """
  13. For Fift source code.
  14. """
  15. name = 'Fift'
  16. aliases = ['fift', 'fif']
  17. filenames = ['*.fif']
  18. url = 'https://ton-blockchain.github.io/docs/fiftbase.pdf'
  19. version_added = ''
  20. tokens = {
  21. 'root': [
  22. (r'\s+', Whitespace),
  23. include('comments'),
  24. (r'[\.+]?\"', String, 'string'),
  25. # numbers
  26. (r'0x[0-9a-fA-F]+', Number.Hex),
  27. (r'0b[01]+', Number.Bin),
  28. (r'-?[0-9]+("/"-?[0-9]+)?', Number.Decimal),
  29. # slices
  30. (r'b\{[01]+\}', Literal),
  31. (r'x\{[0-9a-fA-F_]+\}', Literal),
  32. # byte literal
  33. (r'B\{[0-9a-fA-F_]+\}', Literal),
  34. # treat anything as word
  35. (r'\S+', Name)
  36. ],
  37. 'string': [
  38. (r'\\.', String.Escape),
  39. (r'\"', String, '#pop'),
  40. (r'[^\"\r\n\\]+', String)
  41. ],
  42. 'comments': [
  43. (r'//.*', Comment.Singleline),
  44. (r'/\*', Comment.Multiline, 'comment'),
  45. ],
  46. 'comment': [
  47. (r'[^/*]+', Comment.Multiline),
  48. (r'/\*', Comment.Multiline, '#push'),
  49. (r'\*/', Comment.Multiline, '#pop'),
  50. (r'[*/]', Comment.Multiline),
  51. ],
  52. }