codekingpro/portable-devtools
114k
1##########################################################################2#3# pgAdmin 4 - PostgreSQL Tools4#5# Copyright (C) 2013 - 2024, The pgAdmin Development Team6# This software is released under the PostgreSQL Licence7#8# This allows us to generate to keywords.py for PostgreSQL for used by9# qtIdent and qtTypeIdent functions for scanning the keywords type.10#11# In order to generate keywords.py for specific version of PostgreSQL, put12# pg_config executable in the PATH.13#14##########################################################################15 16import os17import re18 19if __name__ == '__main__':20 include_dir = os.popen('pg_config --includedir').read().rstrip()21 version = os.popen('pg_config --version').read().rstrip()22 23 keywords_file = open('keywords.py', 'w')24 25 keywords_file.write("""##########################################################################26#27# pgAdmin 4 - PostgreSQL Tools28#29# Copyright (C) 2013 - 2024, The pgAdmin Development Team30# This software is released under the PostgreSQL Licence31#32##########################################################################33""")34 keywords_file.write('# ScanKeyword function for ' + version)35 keywords_file.write('\n\ndef ScanKeyword(key):')36 keywords_file.write('\n keywordDict = {\n')37 38 idx = 039 40 with open(include_dir + "/postgresql/server/parser/kwlist.h", "rb") as ins:41 42 pattern = re.compile(r'"([^"]+)",\s*[^,]*\s*,\s*(.*)$')43 keyword_types = [44 'UNRESERVED_KEYWORD', 'COL_NAME_KEYWORD',45 'TYPE_FUNC_NAME_KEYWORD', 'RESERVED_KEYWORD'46 ]47 48 for line in ins:49 line = line.decode().rstrip()50 if line[0:11] == 'PG_KEYWORD(' and line[-1] == ')':51 match = pattern.match(line[11:-1])52 if idx != 0:53 keywords_file.write(", ")54 else:55 keywords_file.write(" ")56 keywords_file.write(57 '"' + match.group(1) + '": ' +58 str(keyword_types.index(match.group(2)))59 )60 idx += 161 keywords_file.write('\n }\n')62 keywords_file.write(63 ' return (key in keywordDict and keywordDict[key]) or None')64 