rell.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. """
  2. pygments.lexers.rell
  3. ~~~~~~~~~~~~~~~~~~~~
  4. Lexers for the Rell language.
  5. :copyright: Copyright 2006-present by the Pygments team, see AUTHORS.
  6. :license: BSD, see LICENSE for details.
  7. """
  8. from pygments.lexer import RegexLexer, bygroups, default, words
  9. from pygments.token import Comment, Keyword, Name, String, Number, \
  10. Punctuation, Whitespace
  11. __all__ = ['RellLexer']
  12. class RellLexer(RegexLexer):
  13. """
  14. A Lexer for Rell.
  15. """
  16. name = 'Rell'
  17. url = 'https://docs.chromia.com/rell/rell-intro'
  18. aliases = ['rell']
  19. filenames = ['*.rell']
  20. mimetypes = ['text/x-rell']
  21. version_added = '2.20'
  22. ident = r'[a-zA-Z_][a-zA-Z0-9_]*'
  23. tokens = {
  24. 'root': [
  25. (words((
  26. 'big_integer', 'boolean', 'byte_array', 'decimal', 'gtv',
  27. 'integer', 'json', 'list', 'map', 'mutable', 'set', 'text',
  28. 'virtual'), suffix=r'\b'),
  29. Keyword.Type),
  30. (r'(false|true|null)\b', Keyword.Constant),
  31. (r'(entity|enum|namespace|object|struct)\b', Keyword.Declaration),
  32. (r'(function|operation|query)\b', Keyword.Declaration, 'function'),
  33. (words((
  34. 'abstract', 'and', 'break', 'continue', 'create', 'delete',
  35. 'else', 'for', 'if', 'import', 'in', 'index', 'key', 'limit',
  36. 'module', 'not', 'offset', 'or', 'override', 'return', 'update',
  37. 'val', 'var', 'when', 'while'), suffix=r'\b'),
  38. Keyword.Reserved),
  39. (r'//.*?$', Comment.Single),
  40. (r'/\*(.|\n|\r)*?\*/', Comment.Multiline),
  41. (r'"(\\\\|\\"|[^"])*"', String.Double),
  42. (r'\'(\\\\|\\\'|[^\\\'])*\'', String.Single),
  43. (r'-?[0-9]*\.[0-9]+([eE][+-][0-9]+)?', Number.Float),
  44. (r'-?[0-9]+([eE][+-][0-9]+|[lL])?', Number.Integer),
  45. (r'x(\'[a-fA-F0-9]*\'|"[a-fA-F0-9]*")', String.Binary),
  46. (r'(\.)([ \n\t\r]*)(' + ident + ')',
  47. bygroups(Punctuation, Whitespace, Name.Attribute)),
  48. (r'[{}():;,]+', Punctuation),
  49. (r'[ \n\t\r]+', Whitespace),
  50. (r'@[a-zA-Z_][a-zA-Z0-9_]*', Name.Decorator),
  51. (r'[~^*!%&\[\]<>|+=/?\-@\$]', Punctuation.Marker),
  52. (ident, Name),
  53. (r'(\.)+', Punctuation),
  54. ],
  55. 'function': [
  56. (r'[ \n\t\r]+', Whitespace),
  57. (ident, Name.Function, '#pop'),
  58. default('#pop'),
  59. ],
  60. }