mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2024-11-30 12:33:52 -06:00
64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
##########################################################################
|
|
#
|
|
# pgAdmin 4 - PostgreSQL Tools
|
|
#
|
|
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
|
# This software is released under the PostgreSQL Licence
|
|
#
|
|
# This allows us to generate to keywords.py for PostgreSQL for used by
|
|
# qtIdent and qtTypeIdent functions for scanning the keywords type.
|
|
#
|
|
# In order to generate keywords.py for specific version of PostgreSQL, put
|
|
# pg_config executable in the PATH.
|
|
#
|
|
##########################################################################
|
|
|
|
import os
|
|
import re
|
|
|
|
if __name__ == '__main__':
|
|
include_dir = os.popen('pg_config --includedir').read().rstrip()
|
|
version = os.popen('pg_config --version').read().rstrip()
|
|
|
|
keywords_file = open('keywords.py', 'w')
|
|
|
|
keywords_file.write("""##########################################################################
|
|
#
|
|
# pgAdmin 4 - PostgreSQL Tools
|
|
#
|
|
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
|
# This software is released under the PostgreSQL Licence
|
|
#
|
|
##########################################################################
|
|
""")
|
|
keywords_file.write('# ScanKeyword function for ' + version)
|
|
keywords_file.write('\n\ndef ScanKeyword(key):')
|
|
keywords_file.write('\n keywordDict = {\n')
|
|
|
|
idx = 0
|
|
|
|
with open(include_dir + "/postgresql/server/parser/kwlist.h", "rb") as ins:
|
|
|
|
pattern = re.compile(r'"([^"]+)",\s*[^,]*\s*,\s*(.*)$')
|
|
keyword_types = [
|
|
u'UNRESERVED_KEYWORD', u'COL_NAME_KEYWORD',
|
|
u'TYPE_FUNC_NAME_KEYWORD', u'RESERVED_KEYWORD'
|
|
]
|
|
|
|
for line in ins:
|
|
line = line.decode().rstrip()
|
|
if line[0:11] == 'PG_KEYWORD(' and line[-1] == ')':
|
|
match = pattern.match(line[11:-1])
|
|
if idx != 0:
|
|
keywords_file.write(", ")
|
|
else:
|
|
keywords_file.write(" ")
|
|
keywords_file.write(
|
|
'"' + match.group(1) + u'": ' +
|
|
str(keyword_types.index(match.group(2)))
|
|
)
|
|
idx += 1
|
|
keywords_file.write('\n }\n')
|
|
keywords_file.write(
|
|
' return (key in keywordDict and keywordDict[key]) or None')
|