Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/pygments/lexers/eiffel.py: 100%

10 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-06-07 06:16 +0000

1""" 

2 pygments.lexers.eiffel 

3 ~~~~~~~~~~~~~~~~~~~~~~ 

4 

5 Lexer for the Eiffel language. 

6 

7 :copyright: Copyright 2006-2023 by the Pygments team, see AUTHORS. 

8 :license: BSD, see LICENSE for details. 

9""" 

10 

11from pygments.lexer import RegexLexer, include, words, bygroups 

12from pygments.token import Comment, Operator, Keyword, Name, String, Number, \ 

13 Punctuation, Whitespace 

14 

15__all__ = ['EiffelLexer'] 

16 

17 

18class EiffelLexer(RegexLexer): 

19 """ 

20 For Eiffel source code. 

21 

22 .. versionadded:: 2.0 

23 """ 

24 name = 'Eiffel' 

25 url = 'http://www.eiffel.com' 

26 aliases = ['eiffel'] 

27 filenames = ['*.e'] 

28 mimetypes = ['text/x-eiffel'] 

29 

30 tokens = { 

31 'root': [ 

32 (r'[^\S\n]+', Whitespace), 

33 (r'--.*?$', Comment.Single), 

34 (r'[^\S\n]+', Whitespace), 

35 # Please note that keyword and operator are case insensitive. 

36 (r'(?i)(true|false|void|current|result|precursor)\b', Keyword.Constant), 

37 (r'(?i)(not|xor|implies|or)\b', Operator.Word), 

38 (r'(?i)(and)(?:(\s+)(then))?\b', 

39 bygroups(Operator.Word, Whitespace, Operator.Word)), 

40 (r'(?i)(or)(?:(\s+)(else))?\b', 

41 bygroups(Operator.Word, Whitespace, Operator.Word)), 

42 (words(( 

43 'across', 'agent', 'alias', 'all', 'as', 'assign', 'attached', 

44 'attribute', 'check', 'class', 'convert', 'create', 'debug', 

45 'deferred', 'detachable', 'do', 'else', 'elseif', 'end', 'ensure', 

46 'expanded', 'export', 'external', 'feature', 'from', 'frozen', 'if', 

47 'inherit', 'inspect', 'invariant', 'like', 'local', 'loop', 'none', 

48 'note', 'obsolete', 'old', 'once', 'only', 'redefine', 'rename', 

49 'require', 'rescue', 'retry', 'select', 'separate', 'then', 

50 'undefine', 'until', 'variant', 'when'), prefix=r'(?i)\b', suffix=r'\b'), 

51 Keyword.Reserved), 

52 (r'"\[([^\]%]|%(.|\n)|\][^"])*?\]"', String), 

53 (r'"([^"%\n]|%.)*?"', String), 

54 include('numbers'), 

55 (r"'([^'%]|%'|%%)'", String.Char), 

56 (r"(//|\\\\|>=|<=|:=|/=|~|/~|[\\?!#%&@|+/\-=>*$<^\[\]])", Operator), 

57 (r"([{}():;,.])", Punctuation), 

58 (r'([a-z]\w*)|([A-Z][A-Z0-9_]*[a-z]\w*)', Name), 

59 (r'([A-Z][A-Z0-9_]*)', Name.Class), 

60 (r'\n+', Whitespace), 

61 ], 

62 'numbers': [ 

63 (r'0[xX][a-fA-F0-9]+', Number.Hex), 

64 (r'0[bB][01]+', Number.Bin), 

65 (r'0[cC][0-7]+', Number.Oct), 

66 (r'([0-9]+\.[0-9]*)|([0-9]*\.[0-9]+)', Number.Float), 

67 (r'[0-9]+', Number.Integer), 

68 ], 

69 }