7700:a3cf077a8db3 | 7701:25f42e208e08 |
---|---|
3 pygments.lexers._postgres_builtins | 3 pygments.lexers._postgres_builtins |
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
5 | 5 |
6 Self-updating data files for PostgreSQL lexer. | 6 Self-updating data files for PostgreSQL lexer. |
7 | 7 |
8 :copyright: Copyright 2006-2019 by the Pygments team, see AUTHORS. | 8 :copyright: Copyright 2006-2020 by the Pygments team, see AUTHORS. |
9 :license: BSD, see LICENSE for details. | 9 :license: BSD, see LICENSE for details. |
10 """ | 10 """ |
11 | 11 |
12 | 12 |
13 # Autogenerated: please edit them if you like wasting your time. | 13 # Autogenerated: please edit them if you like wasting your time. |
34 'ASC', | 34 'ASC', |
35 'ASSERTION', | 35 'ASSERTION', |
36 'ASSIGNMENT', | 36 'ASSIGNMENT', |
37 'ASYMMETRIC', | 37 'ASYMMETRIC', |
38 'AT', | 38 'AT', |
39 'ATTACH', | |
39 'ATTRIBUTE', | 40 'ATTRIBUTE', |
40 'AUTHORIZATION', | 41 'AUTHORIZATION', |
41 'BACKWARD', | 42 'BACKWARD', |
42 'BEFORE', | 43 'BEFORE', |
43 'BEGIN', | 44 'BEGIN', |
47 'BIT', | 48 'BIT', |
48 'BOOLEAN', | 49 'BOOLEAN', |
49 'BOTH', | 50 'BOTH', |
50 'BY', | 51 'BY', |
51 'CACHE', | 52 'CACHE', |
53 'CALL', | |
52 'CALLED', | 54 'CALLED', |
53 'CASCADE', | 55 'CASCADE', |
54 'CASCADED', | 56 'CASCADED', |
55 'CASE', | 57 'CASE', |
56 'CAST', | 58 'CAST', |
66 'CLUSTER', | 68 'CLUSTER', |
67 'COALESCE', | 69 'COALESCE', |
68 'COLLATE', | 70 'COLLATE', |
69 'COLLATION', | 71 'COLLATION', |
70 'COLUMN', | 72 'COLUMN', |
73 'COLUMNS', | |
71 'COMMENT', | 74 'COMMENT', |
72 'COMMENTS', | 75 'COMMENTS', |
73 'COMMIT', | 76 'COMMIT', |
74 'COMMITTED', | 77 'COMMITTED', |
75 'CONCURRENTLY', | 78 'CONCURRENTLY', |
76 'CONFIGURATION', | 79 'CONFIGURATION', |
80 'CONFLICT', | |
77 'CONNECTION', | 81 'CONNECTION', |
78 'CONSTRAINT', | 82 'CONSTRAINT', |
79 'CONSTRAINTS', | 83 'CONSTRAINTS', |
80 'CONTENT', | 84 'CONTENT', |
81 'CONTINUE', | 85 'CONTINUE', |
83 'COPY', | 87 'COPY', |
84 'COST', | 88 'COST', |
85 'CREATE', | 89 'CREATE', |
86 'CROSS', | 90 'CROSS', |
87 'CSV', | 91 'CSV', |
92 'CUBE', | |
88 'CURRENT', | 93 'CURRENT', |
89 'CURRENT_CATALOG', | 94 'CURRENT_CATALOG', |
90 'CURRENT_DATE', | 95 'CURRENT_DATE', |
91 'CURRENT_ROLE', | 96 'CURRENT_ROLE', |
92 'CURRENT_SCHEMA', | 97 'CURRENT_SCHEMA', |
108 'DEFERRED', | 113 'DEFERRED', |
109 'DEFINER', | 114 'DEFINER', |
110 'DELETE', | 115 'DELETE', |
111 'DELIMITER', | 116 'DELIMITER', |
112 'DELIMITERS', | 117 'DELIMITERS', |
118 'DEPENDS', | |
113 'DESC', | 119 'DESC', |
120 'DETACH', | |
114 'DICTIONARY', | 121 'DICTIONARY', |
115 'DISABLE', | 122 'DISABLE', |
116 'DISCARD', | 123 'DISCARD', |
117 'DISTINCT', | 124 'DISTINCT', |
118 'DO', | 125 'DO', |
134 'EXCLUDING', | 141 'EXCLUDING', |
135 'EXCLUSIVE', | 142 'EXCLUSIVE', |
136 'EXECUTE', | 143 'EXECUTE', |
137 'EXISTS', | 144 'EXISTS', |
138 'EXPLAIN', | 145 'EXPLAIN', |
146 'EXPRESSION', | |
139 'EXTENSION', | 147 'EXTENSION', |
140 'EXTERNAL', | 148 'EXTERNAL', |
141 'EXTRACT', | 149 'EXTRACT', |
142 'FALSE', | 150 'FALSE', |
143 'FAMILY', | 151 'FAMILY', |
153 'FREEZE', | 161 'FREEZE', |
154 'FROM', | 162 'FROM', |
155 'FULL', | 163 'FULL', |
156 'FUNCTION', | 164 'FUNCTION', |
157 'FUNCTIONS', | 165 'FUNCTIONS', |
166 'GENERATED', | |
158 'GLOBAL', | 167 'GLOBAL', |
159 'GRANT', | 168 'GRANT', |
160 'GRANTED', | 169 'GRANTED', |
161 'GREATEST', | 170 'GREATEST', |
162 'GROUP', | 171 'GROUP', |
172 'GROUPING', | |
173 'GROUPS', | |
163 'HANDLER', | 174 'HANDLER', |
164 'HAVING', | 175 'HAVING', |
165 'HEADER', | 176 'HEADER', |
166 'HOLD', | 177 'HOLD', |
167 'HOUR', | 178 'HOUR', |
169 'IF', | 180 'IF', |
170 'ILIKE', | 181 'ILIKE', |
171 'IMMEDIATE', | 182 'IMMEDIATE', |
172 'IMMUTABLE', | 183 'IMMUTABLE', |
173 'IMPLICIT', | 184 'IMPLICIT', |
185 'IMPORT', | |
174 'IN', | 186 'IN', |
187 'INCLUDE', | |
175 'INCLUDING', | 188 'INCLUDING', |
176 'INCREMENT', | 189 'INCREMENT', |
177 'INDEX', | 190 'INDEX', |
178 'INDEXES', | 191 'INDEXES', |
179 'INHERIT', | 192 'INHERIT', |
200 'LABEL', | 213 'LABEL', |
201 'LANGUAGE', | 214 'LANGUAGE', |
202 'LARGE', | 215 'LARGE', |
203 'LAST', | 216 'LAST', |
204 'LATERAL', | 217 'LATERAL', |
205 'LC_COLLATE', | |
206 'LC_CTYPE', | |
207 'LEADING', | 218 'LEADING', |
208 'LEAKPROOF', | 219 'LEAKPROOF', |
209 'LEAST', | 220 'LEAST', |
210 'LEFT', | 221 'LEFT', |
211 'LEVEL', | 222 'LEVEL', |
216 'LOCAL', | 227 'LOCAL', |
217 'LOCALTIME', | 228 'LOCALTIME', |
218 'LOCALTIMESTAMP', | 229 'LOCALTIMESTAMP', |
219 'LOCATION', | 230 'LOCATION', |
220 'LOCK', | 231 'LOCK', |
232 'LOCKED', | |
233 'LOGGED', | |
221 'MAPPING', | 234 'MAPPING', |
222 'MATCH', | 235 'MATCH', |
223 'MATERIALIZED', | 236 'MATERIALIZED', |
224 'MAXVALUE', | 237 'MAXVALUE', |
238 'METHOD', | |
225 'MINUTE', | 239 'MINUTE', |
226 'MINVALUE', | 240 'MINVALUE', |
227 'MODE', | 241 'MODE', |
228 'MONTH', | 242 'MONTH', |
229 'MOVE', | 243 'MOVE', |
230 'NAME', | 244 'NAME', |
231 'NAMES', | 245 'NAMES', |
232 'NATIONAL', | 246 'NATIONAL', |
233 'NATURAL', | 247 'NATURAL', |
234 'NCHAR', | 248 'NCHAR', |
249 'NEW', | |
235 'NEXT', | 250 'NEXT', |
251 'NFC', | |
252 'NFD', | |
253 'NFKC', | |
254 'NFKD', | |
236 'NO', | 255 'NO', |
237 'NONE', | 256 'NONE', |
257 'NORMALIZE', | |
258 'NORMALIZED', | |
238 'NOT', | 259 'NOT', |
239 'NOTHING', | 260 'NOTHING', |
240 'NOTIFY', | 261 'NOTIFY', |
241 'NOTNULL', | 262 'NOTNULL', |
242 'NOWAIT', | 263 'NOWAIT', |
247 'OBJECT', | 268 'OBJECT', |
248 'OF', | 269 'OF', |
249 'OFF', | 270 'OFF', |
250 'OFFSET', | 271 'OFFSET', |
251 'OIDS', | 272 'OIDS', |
273 'OLD', | |
252 'ON', | 274 'ON', |
253 'ONLY', | 275 'ONLY', |
254 'OPERATOR', | 276 'OPERATOR', |
255 'OPTION', | 277 'OPTION', |
256 'OPTIONS', | 278 'OPTIONS', |
257 'OR', | 279 'OR', |
258 'ORDER', | 280 'ORDER', |
259 'ORDINALITY', | 281 'ORDINALITY', |
282 'OTHERS', | |
260 'OUT', | 283 'OUT', |
261 'OUTER', | 284 'OUTER', |
262 'OVER', | 285 'OVER', |
263 'OVERLAPS', | 286 'OVERLAPS', |
264 'OVERLAY', | 287 'OVERLAY', |
288 'OVERRIDING', | |
265 'OWNED', | 289 'OWNED', |
266 'OWNER', | 290 'OWNER', |
291 'PARALLEL', | |
267 'PARSER', | 292 'PARSER', |
268 'PARTIAL', | 293 'PARTIAL', |
269 'PARTITION', | 294 'PARTITION', |
270 'PASSING', | 295 'PASSING', |
271 'PASSWORD', | 296 'PASSWORD', |
281 'PRIMARY', | 306 'PRIMARY', |
282 'PRIOR', | 307 'PRIOR', |
283 'PRIVILEGES', | 308 'PRIVILEGES', |
284 'PROCEDURAL', | 309 'PROCEDURAL', |
285 'PROCEDURE', | 310 'PROCEDURE', |
311 'PROCEDURES', | |
286 'PROGRAM', | 312 'PROGRAM', |
313 'PUBLICATION', | |
287 'QUOTE', | 314 'QUOTE', |
288 'RANGE', | 315 'RANGE', |
289 'READ', | 316 'READ', |
290 'REAL', | 317 'REAL', |
291 'REASSIGN', | 318 'REASSIGN', |
292 'RECHECK', | 319 'RECHECK', |
293 'RECURSIVE', | 320 'RECURSIVE', |
294 'REF', | 321 'REF', |
295 'REFERENCES', | 322 'REFERENCES', |
323 'REFERENCING', | |
296 'REFRESH', | 324 'REFRESH', |
297 'REINDEX', | 325 'REINDEX', |
298 'RELATIVE', | 326 'RELATIVE', |
299 'RELEASE', | 327 'RELEASE', |
300 'RENAME', | 328 'RENAME', |
308 'RETURNS', | 336 'RETURNS', |
309 'REVOKE', | 337 'REVOKE', |
310 'RIGHT', | 338 'RIGHT', |
311 'ROLE', | 339 'ROLE', |
312 'ROLLBACK', | 340 'ROLLBACK', |
341 'ROLLUP', | |
342 'ROUTINE', | |
343 'ROUTINES', | |
313 'ROW', | 344 'ROW', |
314 'ROWS', | 345 'ROWS', |
315 'RULE', | 346 'RULE', |
316 'SAVEPOINT', | 347 'SAVEPOINT', |
317 'SCHEMA', | 348 'SCHEMA', |
349 'SCHEMAS', | |
318 'SCROLL', | 350 'SCROLL', |
319 'SEARCH', | 351 'SEARCH', |
320 'SECOND', | 352 'SECOND', |
321 'SECURITY', | 353 'SECURITY', |
322 'SELECT', | 354 'SELECT', |
326 'SERVER', | 358 'SERVER', |
327 'SESSION', | 359 'SESSION', |
328 'SESSION_USER', | 360 'SESSION_USER', |
329 'SET', | 361 'SET', |
330 'SETOF', | 362 'SETOF', |
363 'SETS', | |
331 'SHARE', | 364 'SHARE', |
332 'SHOW', | 365 'SHOW', |
333 'SIMILAR', | 366 'SIMILAR', |
334 'SIMPLE', | 367 'SIMPLE', |
368 'SKIP', | |
335 'SMALLINT', | 369 'SMALLINT', |
336 'SNAPSHOT', | 370 'SNAPSHOT', |
337 'SOME', | 371 'SOME', |
372 'SQL', | |
338 'STABLE', | 373 'STABLE', |
339 'STANDALONE', | 374 'STANDALONE', |
340 'START', | 375 'START', |
341 'STATEMENT', | 376 'STATEMENT', |
342 'STATISTICS', | 377 'STATISTICS', |
343 'STDIN', | 378 'STDIN', |
344 'STDOUT', | 379 'STDOUT', |
345 'STORAGE', | 380 'STORAGE', |
381 'STORED', | |
346 'STRICT', | 382 'STRICT', |
347 'STRIP', | 383 'STRIP', |
384 'SUBSCRIPTION', | |
348 'SUBSTRING', | 385 'SUBSTRING', |
386 'SUPPORT', | |
349 'SYMMETRIC', | 387 'SYMMETRIC', |
350 'SYSID', | 388 'SYSID', |
351 'SYSTEM', | 389 'SYSTEM', |
352 'TABLE', | 390 'TABLE', |
353 'TABLES', | 391 'TABLES', |
392 'TABLESAMPLE', | |
354 'TABLESPACE', | 393 'TABLESPACE', |
355 'TEMP', | 394 'TEMP', |
356 'TEMPLATE', | 395 'TEMPLATE', |
357 'TEMPORARY', | 396 'TEMPORARY', |
358 'TEXT', | 397 'TEXT', |
359 'THEN', | 398 'THEN', |
399 'TIES', | |
360 'TIME', | 400 'TIME', |
361 'TIMESTAMP', | 401 'TIMESTAMP', |
362 'TO', | 402 'TO', |
363 'TRAILING', | 403 'TRAILING', |
364 'TRANSACTION', | 404 'TRANSACTION', |
405 'TRANSFORM', | |
365 'TREAT', | 406 'TREAT', |
366 'TRIGGER', | 407 'TRIGGER', |
367 'TRIM', | 408 'TRIM', |
368 'TRUE', | 409 'TRUE', |
369 'TRUNCATE', | 410 'TRUNCATE', |
370 'TRUSTED', | 411 'TRUSTED', |
371 'TYPE', | 412 'TYPE', |
372 'TYPES', | 413 'TYPES', |
414 'UESCAPE', | |
373 'UNBOUNDED', | 415 'UNBOUNDED', |
374 'UNCOMMITTED', | 416 'UNCOMMITTED', |
375 'UNENCRYPTED', | 417 'UNENCRYPTED', |
376 'UNION', | 418 'UNION', |
377 'UNIQUE', | 419 'UNIQUE', |
410 'XMLATTRIBUTES', | 452 'XMLATTRIBUTES', |
411 'XMLCONCAT', | 453 'XMLCONCAT', |
412 'XMLELEMENT', | 454 'XMLELEMENT', |
413 'XMLEXISTS', | 455 'XMLEXISTS', |
414 'XMLFOREST', | 456 'XMLFOREST', |
457 'XMLNAMESPACES', | |
415 'XMLPARSE', | 458 'XMLPARSE', |
416 'XMLPI', | 459 'XMLPI', |
417 'XMLROOT', | 460 'XMLROOT', |
418 'XMLSERIALIZE', | 461 'XMLSERIALIZE', |
462 'XMLTABLE', | |
419 'YEAR', | 463 'YEAR', |
420 'YES', | 464 'YES', |
421 'ZONE', | 465 'ZONE', |
422 ) | 466 ) |
423 | 467 |
450 'json', | 494 'json', |
451 'jsonb', | 495 'jsonb', |
452 'line', | 496 'line', |
453 'lseg', | 497 'lseg', |
454 'macaddr', | 498 'macaddr', |
499 'macaddr8', | |
455 'money', | 500 'money', |
456 'numeric', | 501 'numeric', |
457 'path', | 502 'path', |
458 'pg_lsn', | 503 'pg_lsn', |
504 'pg_snapshot', | |
459 'point', | 505 'point', |
460 'polygon', | 506 'polygon', |
461 'real', | 507 'real', |
462 'serial', | 508 'serial', |
463 'serial2', | 509 'serial2', |
481 'xml', | 527 'xml', |
482 ) | 528 ) |
483 | 529 |
484 PSEUDO_TYPES = ( | 530 PSEUDO_TYPES = ( |
485 'any', | 531 'any', |
532 'anyarray', | |
533 'anycompatible', | |
534 'anycompatiblearray', | |
535 'anycompatiblenonarray', | |
536 'anycompatiblerange', | |
486 'anyelement', | 537 'anyelement', |
487 'anyarray', | 538 'anyenum', |
488 'anynonarray', | 539 'anynonarray', |
489 'anyenum', | |
490 'anyrange', | 540 'anyrange', |
491 'cstring', | 541 'cstring', |
542 'event_trigger', | |
543 'fdw_handler', | |
544 'index_am_handler', | |
492 'internal', | 545 'internal', |
493 'language_handler', | 546 'language_handler', |
494 'fdw_handler', | 547 'pg_ddl_command', |
495 'record', | 548 'record', |
549 'table_am_handler', | |
496 'trigger', | 550 'trigger', |
551 'tsm_handler', | |
552 'unknown', | |
497 'void', | 553 'void', |
498 'opaque', | |
499 ) | 554 ) |
500 | 555 |
501 # Remove 'trigger' from types | 556 # Remove 'trigger' from types |
502 PSEUDO_TYPES = tuple(sorted(set(PSEUDO_TYPES) - set(map(str.lower, KEYWORDS)))) | 557 PSEUDO_TYPES = tuple(sorted(set(PSEUDO_TYPES) - set(map(str.lower, KEYWORDS)))) |
503 | 558 |
517 | 572 |
518 from pygments.util import format_lines | 573 from pygments.util import format_lines |
519 | 574 |
520 # One man's constant is another man's variable. | 575 # One man's constant is another man's variable. |
521 SOURCE_URL = 'https://github.com/postgres/postgres/raw/master' | 576 SOURCE_URL = 'https://github.com/postgres/postgres/raw/master' |
522 KEYWORDS_URL = SOURCE_URL + '/doc/src/sgml/keywords.sgml' | 577 KEYWORDS_URL = SOURCE_URL + '/src/include/parser/kwlist.h' |
523 DATATYPES_URL = SOURCE_URL + '/doc/src/sgml/datatype.sgml' | 578 DATATYPES_URL = SOURCE_URL + '/doc/src/sgml/datatype.sgml' |
524 | 579 |
525 def update_myself(): | 580 def update_myself(): |
526 data_file = list(urlopen(DATATYPES_URL)) | 581 content = urlopen(DATATYPES_URL).read().decode('utf-8', errors='ignore') |
582 data_file = list(content.splitlines()) | |
527 datatypes = parse_datatypes(data_file) | 583 datatypes = parse_datatypes(data_file) |
528 pseudos = parse_pseudos(data_file) | 584 pseudos = parse_pseudos(data_file) |
529 | 585 |
530 keywords = parse_keywords(urlopen(KEYWORDS_URL)) | 586 content = urlopen(KEYWORDS_URL).read().decode('utf-8', errors='ignore') |
587 keywords = parse_keywords(content) | |
588 | |
531 update_consts(__file__, 'DATATYPES', datatypes) | 589 update_consts(__file__, 'DATATYPES', datatypes) |
532 update_consts(__file__, 'PSEUDO_TYPES', pseudos) | 590 update_consts(__file__, 'PSEUDO_TYPES', pseudos) |
533 update_consts(__file__, 'KEYWORDS', keywords) | 591 update_consts(__file__, 'KEYWORDS', keywords) |
534 | 592 |
535 def parse_keywords(f): | 593 def parse_keywords(f): |
536 kw = [] | 594 kw = [] |
537 for m in re.finditer( | 595 for m in re.finditer(r'PG_KEYWORD\("(.+?)"', f): |
538 r'\s*<entry><token>([^<]+)</token></entry>\s*' | 596 kw.append(m.group(1).upper()) |
539 r'<entry>([^<]+)</entry>', f.read()): | |
540 kw.append(m.group(1)) | |
541 | 597 |
542 if not kw: | 598 if not kw: |
543 raise ValueError('no keyword found') | 599 raise ValueError('no keyword found') |
544 | 600 |
545 kw.sort() | 601 kw.sort() |
574 return dt | 630 return dt |
575 | 631 |
576 def parse_pseudos(f): | 632 def parse_pseudos(f): |
577 dt = [] | 633 dt = [] |
578 re_start = re.compile(r'\s*<table id="datatype-pseudotypes-table">') | 634 re_start = re.compile(r'\s*<table id="datatype-pseudotypes-table">') |
579 re_entry = re.compile(r'\s*<entry><type>([^<]+)</></entry>') | 635 re_entry = re.compile(r'\s*<entry><type>(.+?)</type></entry>') |
580 re_end = re.compile(r'\s*</table>') | 636 re_end = re.compile(r'\s*</table>') |
581 | 637 |
582 f = iter(f) | 638 f = iter(f) |
583 for line in f: | 639 for line in f: |
584 if re_start.match(line) is not None: | 640 if re_start.match(line) is not None: |
597 raise ValueError('end of pseudo datatypes table not found') | 653 raise ValueError('end of pseudo datatypes table not found') |
598 | 654 |
599 if not dt: | 655 if not dt: |
600 raise ValueError('pseudo datatypes not found') | 656 raise ValueError('pseudo datatypes not found') |
601 | 657 |
658 dt.sort() | |
602 return dt | 659 return dt |
603 | 660 |
604 def update_consts(filename, constname, content): | 661 def update_consts(filename, constname, content): |
605 with open(filename) as f: | 662 with open(filename) as f: |
606 data = f.read() | 663 data = f.read() |
613 (constname,)) | 670 (constname,)) |
614 | 671 |
615 new_block = format_lines(constname, content) | 672 new_block = format_lines(constname, content) |
616 data = data[:m.start()] + new_block + data[m.end():] | 673 data = data[:m.start()] + new_block + data[m.end():] |
617 | 674 |
618 with open(filename, 'w') as f: | 675 with open(filename, 'w', newline='\n') as f: |
619 f.write(data) | 676 f.write(data) |
620 | 677 |
621 update_myself() | 678 update_myself() |