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

21 statements  

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

1""" 

2 pygments.lexers.ecl 

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

4 

5 Lexers for the ECL language. 

6 

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

8 :license: BSD, see LICENSE for details. 

9""" 

10 

11import re 

12 

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

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

15 Number, Punctuation, Whitespace 

16 

17__all__ = ['ECLLexer'] 

18 

19 

20class ECLLexer(RegexLexer): 

21 """ 

22 Lexer for the declarative big-data ECL language. 

23 

24 .. versionadded:: 1.5 

25 """ 

26 

27 name = 'ECL' 

28 url = 'https://hpccsystems.com/training/documentation/ecl-language-reference/html' 

29 aliases = ['ecl'] 

30 filenames = ['*.ecl'] 

31 mimetypes = ['application/x-ecl'] 

32 

33 flags = re.IGNORECASE | re.MULTILINE 

34 

35 tokens = { 

36 'root': [ 

37 include('whitespace'), 

38 include('statements'), 

39 ], 

40 'whitespace': [ 

41 (r'\s+', Whitespace), 

42 (r'\/\/.*', Comment.Single), 

43 (r'/(\\\n)?\*(.|\n)*?\*(\\\n)?/', Comment.Multiline), 

44 ], 

45 'statements': [ 

46 include('types'), 

47 include('keywords'), 

48 include('functions'), 

49 include('hash'), 

50 (r'"', String, 'string'), 

51 (r'\'', String, 'string'), 

52 (r'(\d+\.\d*|\.\d+|\d+)e[+-]?\d+[lu]*', Number.Float), 

53 (r'(\d+\.\d*|\.\d+|\d+f)f?', Number.Float), 

54 (r'0x[0-9a-f]+[lu]*', Number.Hex), 

55 (r'0[0-7]+[lu]*', Number.Oct), 

56 (r'\d+[lu]*', Number.Integer), 

57 (r'[~!%^&*+=|?:<>/-]+', Operator), 

58 (r'[{}()\[\],.;]', Punctuation), 

59 (r'[a-z_]\w*', Name), 

60 ], 

61 'hash': [ 

62 (r'^#.*$', Comment.Preproc), 

63 ], 

64 'types': [ 

65 (r'(RECORD|END)\D', Keyword.Declaration), 

66 (r'((?:ASCII|BIG_ENDIAN|BOOLEAN|DATA|DECIMAL|EBCDIC|INTEGER|PATTERN|' 

67 r'QSTRING|REAL|RECORD|RULE|SET OF|STRING|TOKEN|UDECIMAL|UNICODE|' 

68 r'UNSIGNED|VARSTRING|VARUNICODE)\d*)(\s+)', 

69 bygroups(Keyword.Type, Whitespace)), 

70 ], 

71 'keywords': [ 

72 (words(( 

73 'APPLY', 'ASSERT', 'BUILD', 'BUILDINDEX', 'EVALUATE', 'FAIL', 

74 'KEYDIFF', 'KEYPATCH', 'LOADXML', 'NOTHOR', 'NOTIFY', 'OUTPUT', 

75 'PARALLEL', 'SEQUENTIAL', 'SOAPCALL', 'CHECKPOINT', 'DEPRECATED', 

76 'FAILCODE', 'FAILMESSAGE', 'FAILURE', 'GLOBAL', 'INDEPENDENT', 

77 'ONWARNING', 'PERSIST', 'PRIORITY', 'RECOVERY', 'STORED', 'SUCCESS', 

78 'WAIT', 'WHEN'), suffix=r'\b'), 

79 Keyword.Reserved), 

80 # These are classed differently, check later 

81 (words(( 

82 'ALL', 'AND', 'ANY', 'AS', 'ATMOST', 'BEFORE', 'BEGINC++', 'BEST', 

83 'BETWEEN', 'CASE', 'CONST', 'COUNTER', 'CSV', 'DESCEND', 'ENCRYPT', 

84 'ENDC++', 'ENDMACRO', 'EXCEPT', 'EXCLUSIVE', 'EXPIRE', 'EXPORT', 

85 'EXTEND', 'FALSE', 'FEW', 'FIRST', 'FLAT', 'FULL', 'FUNCTION', 

86 'GROUP', 'HEADER', 'HEADING', 'HOLE', 'IFBLOCK', 'IMPORT', 'IN', 

87 'JOINED', 'KEEP', 'KEYED', 'LAST', 'LEFT', 'LIMIT', 'LOAD', 'LOCAL', 

88 'LOCALE', 'LOOKUP', 'MACRO', 'MANY', 'MAXCOUNT', 'MAXLENGTH', 

89 'MIN SKEW', 'MODULE', 'INTERFACE', 'NAMED', 'NOCASE', 'NOROOT', 

90 'NOSCAN', 'NOSORT', 'NOT', 'OF', 'ONLY', 'OPT', 'OR', 'OUTER', 

91 'OVERWRITE', 'PACKED', 'PARTITION', 'PENALTY', 'PHYSICALLENGTH', 

92 'PIPE', 'QUOTE', 'RELATIONSHIP', 'REPEAT', 'RETURN', 'RIGHT', 

93 'SCAN', 'SELF', 'SEPARATOR', 'SERVICE', 'SHARED', 'SKEW', 'SKIP', 

94 'SQL', 'STORE', 'TERMINATOR', 'THOR', 'THRESHOLD', 'TOKEN', 

95 'TRANSFORM', 'TRIM', 'TRUE', 'TYPE', 'UNICODEORDER', 'UNSORTED', 

96 'VALIDATE', 'VIRTUAL', 'WHOLE', 'WILD', 'WITHIN', 'XML', 'XPATH', 

97 '__COMPRESSED__'), suffix=r'\b'), 

98 Keyword.Reserved), 

99 ], 

100 'functions': [ 

101 (words(( 

102 'ABS', 'ACOS', 'ALLNODES', 'ASCII', 'ASIN', 'ASSTRING', 'ATAN', 

103 'ATAN2', 'AVE', 'CASE', 'CHOOSE', 'CHOOSEN', 'CHOOSESETS', 

104 'CLUSTERSIZE', 'COMBINE', 'CORRELATION', 'COS', 'COSH', 'COUNT', 

105 'COVARIANCE', 'CRON', 'DATASET', 'DEDUP', 'DEFINE', 'DENORMALIZE', 

106 'DISTRIBUTE', 'DISTRIBUTED', 'DISTRIBUTION', 'EBCDIC', 'ENTH', 

107 'ERROR', 'EVALUATE', 'EVENT', 'EVENTEXTRA', 'EVENTNAME', 'EXISTS', 

108 'EXP', 'FAILCODE', 'FAILMESSAGE', 'FETCH', 'FROMUNICODE', 

109 'GETISVALID', 'GLOBAL', 'GRAPH', 'GROUP', 'HASH', 'HASH32', 

110 'HASH64', 'HASHCRC', 'HASHMD5', 'HAVING', 'IF', 'INDEX', 

111 'INTFORMAT', 'ISVALID', 'ITERATE', 'JOIN', 'KEYUNICODE', 'LENGTH', 

112 'LIBRARY', 'LIMIT', 'LN', 'LOCAL', 'LOG', 'LOOP', 'MAP', 'MATCHED', 

113 'MATCHLENGTH', 'MATCHPOSITION', 'MATCHTEXT', 'MATCHUNICODE', 'MAX', 

114 'MERGE', 'MERGEJOIN', 'MIN', 'NOLOCAL', 'NONEMPTY', 'NORMALIZE', 

115 'PARSE', 'PIPE', 'POWER', 'PRELOAD', 'PROCESS', 'PROJECT', 'PULL', 

116 'RANDOM', 'RANGE', 'RANK', 'RANKED', 'REALFORMAT', 'RECORDOF', 

117 'REGEXFIND', 'REGEXREPLACE', 'REGROUP', 'REJECTED', 'ROLLUP', 

118 'ROUND', 'ROUNDUP', 'ROW', 'ROWDIFF', 'SAMPLE', 'SET', 'SIN', 

119 'SINH', 'SIZEOF', 'SOAPCALL', 'SORT', 'SORTED', 'SQRT', 'STEPPED', 

120 'STORED', 'SUM', 'TABLE', 'TAN', 'TANH', 'THISNODE', 'TOPN', 

121 'TOUNICODE', 'TRANSFER', 'TRIM', 'TRUNCATE', 'TYPEOF', 'UNGROUP', 

122 'UNICODEORDER', 'VARIANCE', 'WHICH', 'WORKUNIT', 'XMLDECODE', 

123 'XMLENCODE', 'XMLTEXT', 'XMLUNICODE'), suffix=r'\b'), 

124 Name.Function), 

125 ], 

126 'string': [ 

127 (r'"', String, '#pop'), 

128 (r'\'', String, '#pop'), 

129 (r'[^"\']+', String), 

130 ], 

131 } 

132 

133 def analyse_text(text): 

134 """This is very difficult to guess relative to other business languages. 

135 -> in conjunction with BEGIN/END seems relatively rare though.""" 

136 result = 0 

137 

138 if '->' in text: 

139 result += 0.01 

140 if 'BEGIN' in text: 

141 result += 0.01 

142 if 'END' in text: 

143 result += 0.01 

144 

145 return result