Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/pygments/lexers/ecl.py: 100%
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
Shortcuts on this page
r m x toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2 pygments.lexers.ecl
3 ~~~~~~~~~~~~~~~~~~~
5 Lexers for the ECL language.
7 :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS.
8 :license: BSD, see LICENSE for details.
9"""
11import re
13from pygments.lexer import RegexLexer, include, bygroups, words
14from pygments.token import Comment, Operator, Keyword, Name, String, \
15 Number, Punctuation, Whitespace
17__all__ = ['ECLLexer']
20class ECLLexer(RegexLexer):
21 """
22 Lexer for the declarative big-data ECL language.
23 """
25 name = 'ECL'
26 url = 'https://hpccsystems.com/training/documentation/ecl-language-reference/html'
27 aliases = ['ecl']
28 filenames = ['*.ecl']
29 mimetypes = ['application/x-ecl']
30 version_added = '1.5'
32 flags = re.IGNORECASE | re.MULTILINE
34 tokens = {
35 'root': [
36 include('whitespace'),
37 include('statements'),
38 ],
39 'whitespace': [
40 (r'\s+', Whitespace),
41 (r'\/\/.*', Comment.Single),
42 (r'/(\\\n)?\*(.|\n)*?\*(\\\n)?/', Comment.Multiline),
43 ],
44 'statements': [
45 include('types'),
46 include('keywords'),
47 include('functions'),
48 include('hash'),
49 (r'"', String, 'string'),
50 (r'\'', String, 'string'),
51 (r'(\d+\.\d*|\.\d+|\d+)e[+-]?\d+[lu]*', Number.Float),
52 (r'(\d+\.\d*|\.\d+|\d+f)f?', Number.Float),
53 (r'0x[0-9a-f]+[lu]*', Number.Hex),
54 (r'0[0-7]+[lu]*', Number.Oct),
55 (r'\d+[lu]*', Number.Integer),
56 (r'[~!%^&*+=|?:<>/-]+', Operator),
57 (r'[{}()\[\],.;]', Punctuation),
58 (r'[a-z_]\w*', Name),
59 ],
60 'hash': [
61 (r'^#.*$', Comment.Preproc),
62 ],
63 'types': [
64 (r'(RECORD|END)\D', Keyword.Declaration),
65 (r'((?:ASCII|BIG_ENDIAN|BOOLEAN|DATA|DECIMAL|EBCDIC|INTEGER|PATTERN|'
66 r'QSTRING|REAL|RECORD|RULE|SET OF|STRING|TOKEN|UDECIMAL|UNICODE|'
67 r'UNSIGNED|VARSTRING|VARUNICODE)\d*)(\s+)',
68 bygroups(Keyword.Type, Whitespace)),
69 ],
70 'keywords': [
71 (words((
72 'APPLY', 'ASSERT', 'BUILD', 'BUILDINDEX', 'EVALUATE', 'FAIL',
73 'KEYDIFF', 'KEYPATCH', 'LOADXML', 'NOTHOR', 'NOTIFY', 'OUTPUT',
74 'PARALLEL', 'SEQUENTIAL', 'SOAPCALL', 'CHECKPOINT', 'DEPRECATED',
75 'FAILCODE', 'FAILMESSAGE', 'FAILURE', 'GLOBAL', 'INDEPENDENT',
76 'ONWARNING', 'PERSIST', 'PRIORITY', 'RECOVERY', 'STORED', 'SUCCESS',
77 'WAIT', 'WHEN'), suffix=r'\b'),
78 Keyword.Reserved),
79 # These are classed differently, check later
80 (words((
81 'ALL', 'AND', 'ANY', 'AS', 'ATMOST', 'BEFORE', 'BEGINC++', 'BEST',
82 'BETWEEN', 'CASE', 'CONST', 'COUNTER', 'CSV', 'DESCEND', 'ENCRYPT',
83 'ENDC++', 'ENDMACRO', 'EXCEPT', 'EXCLUSIVE', 'EXPIRE', 'EXPORT',
84 'EXTEND', 'FALSE', 'FEW', 'FIRST', 'FLAT', 'FULL', 'FUNCTION',
85 'GROUP', 'HEADER', 'HEADING', 'HOLE', 'IFBLOCK', 'IMPORT', 'IN',
86 'JOINED', 'KEEP', 'KEYED', 'LAST', 'LEFT', 'LIMIT', 'LOAD', 'LOCAL',
87 'LOCALE', 'LOOKUP', 'MACRO', 'MANY', 'MAXCOUNT', 'MAXLENGTH',
88 'MIN SKEW', 'MODULE', 'INTERFACE', 'NAMED', 'NOCASE', 'NOROOT',
89 'NOSCAN', 'NOSORT', 'NOT', 'OF', 'ONLY', 'OPT', 'OR', 'OUTER',
90 'OVERWRITE', 'PACKED', 'PARTITION', 'PENALTY', 'PHYSICALLENGTH',
91 'PIPE', 'QUOTE', 'RELATIONSHIP', 'REPEAT', 'RETURN', 'RIGHT',
92 'SCAN', 'SELF', 'SEPARATOR', 'SERVICE', 'SHARED', 'SKEW', 'SKIP',
93 'SQL', 'STORE', 'TERMINATOR', 'THOR', 'THRESHOLD', 'TOKEN',
94 'TRANSFORM', 'TRIM', 'TRUE', 'TYPE', 'UNICODEORDER', 'UNSORTED',
95 'VALIDATE', 'VIRTUAL', 'WHOLE', 'WILD', 'WITHIN', 'XML', 'XPATH',
96 '__COMPRESSED__'), suffix=r'\b'),
97 Keyword.Reserved),
98 ],
99 'functions': [
100 (words((
101 'ABS', 'ACOS', 'ALLNODES', 'ASCII', 'ASIN', 'ASSTRING', 'ATAN',
102 'ATAN2', 'AVE', 'CASE', 'CHOOSE', 'CHOOSEN', 'CHOOSESETS',
103 'CLUSTERSIZE', 'COMBINE', 'CORRELATION', 'COS', 'COSH', 'COUNT',
104 'COVARIANCE', 'CRON', 'DATASET', 'DEDUP', 'DEFINE', 'DENORMALIZE',
105 'DISTRIBUTE', 'DISTRIBUTED', 'DISTRIBUTION', 'EBCDIC', 'ENTH',
106 'ERROR', 'EVALUATE', 'EVENT', 'EVENTEXTRA', 'EVENTNAME', 'EXISTS',
107 'EXP', 'FAILCODE', 'FAILMESSAGE', 'FETCH', 'FROMUNICODE',
108 'GETISVALID', 'GLOBAL', 'GRAPH', 'GROUP', 'HASH', 'HASH32',
109 'HASH64', 'HASHCRC', 'HASHMD5', 'HAVING', 'IF', 'INDEX',
110 'INTFORMAT', 'ISVALID', 'ITERATE', 'JOIN', 'KEYUNICODE', 'LENGTH',
111 'LIBRARY', 'LIMIT', 'LN', 'LOCAL', 'LOG', 'LOOP', 'MAP', 'MATCHED',
112 'MATCHLENGTH', 'MATCHPOSITION', 'MATCHTEXT', 'MATCHUNICODE', 'MAX',
113 'MERGE', 'MERGEJOIN', 'MIN', 'NOLOCAL', 'NONEMPTY', 'NORMALIZE',
114 'PARSE', 'PIPE', 'POWER', 'PRELOAD', 'PROCESS', 'PROJECT', 'PULL',
115 'RANDOM', 'RANGE', 'RANK', 'RANKED', 'REALFORMAT', 'RECORDOF',
116 'REGEXFIND', 'REGEXREPLACE', 'REGROUP', 'REJECTED', 'ROLLUP',
117 'ROUND', 'ROUNDUP', 'ROW', 'ROWDIFF', 'SAMPLE', 'SET', 'SIN',
118 'SINH', 'SIZEOF', 'SOAPCALL', 'SORT', 'SORTED', 'SQRT', 'STEPPED',
119 'STORED', 'SUM', 'TABLE', 'TAN', 'TANH', 'THISNODE', 'TOPN',
120 'TOUNICODE', 'TRANSFER', 'TRIM', 'TRUNCATE', 'TYPEOF', 'UNGROUP',
121 'UNICODEORDER', 'VARIANCE', 'WHICH', 'WORKUNIT', 'XMLDECODE',
122 'XMLENCODE', 'XMLTEXT', 'XMLUNICODE'), suffix=r'\b'),
123 Name.Function),
124 ],
125 'string': [
126 (r'"', String, '#pop'),
127 (r'\'', String, '#pop'),
128 (r'[^"\']+', String),
129 ],
130 }
132 def analyse_text(text):
133 """This is very difficult to guess relative to other business languages.
134 -> in conjunction with BEGIN/END seems relatively rare though."""
135 result = 0
137 if '->' in text:
138 result += 0.01
139 if 'BEGIN' in text:
140 result += 0.01
141 if 'END' in text:
142 result += 0.01
144 return result