#!/usr/bin/perl ########################################################################## ## ## pgAdmin III - Tab completion ## ## Copyright (C) 2002 - 2016, The pgAdmin Development Team ## This software is released under the PostgreSQL Licence ## ## tab-complete.pl - Script to build tab-complete.inc ## ########################################################################## # This script builds tab-complete.inc from tab-complete.c. The # source file (tab-complete.c) should be copied from the latest # PostgreSQL sources (src/bin/psql/tab-complete.c), so we don't # have to do all the work ourselves... use strict; use warnings; open(F, "tab-complete.c") || die("Could not open tab-complete.c!"); undef $/; my $alltxt = ; close(F); # Get rid of everything before and after the parts we're interested in $alltxt =~ /.*(typedef struct SchemaQuery.*)\/\* GENERATOR FUNCTIONS\s+.*/s || die("Failed match 1"); $alltxt = $1; # Get rid of forward declarations and initialize_readline $alltxt =~ /(.*)\/\*\s+Forward declaration of functions \*\/.*(\/\* The completion function\..*)/s || die("Failed match 2"); $alltxt = $1 . $2; # Get rid of completion macros, we define them ourselves $alltxt =~ /(.*)\/\* A couple of macros to ease typing.*\*\/\s+#define COMPLETE_WITH_QUERY.*\s+(\/\*\s+\* Assembly instructions.*)/s || die("Failed match 4"); $alltxt = $1 . $2; # Rewrite matches that don't use the macros $alltxt =~ s/completion_matches\(text, create_command_generator\)/complete_create_command\(text\)/gs || die("Failed match 5"); $alltxt =~ s/completion_matches\(text, filename_completion_function\)/complete_filename\(\)/gs || die("Failed match 6"); # We're going to return char*, not char** $alltxt =~ s/static char \*\*\s+psql_completion/static char \* psql_completion/s || die("Failed match 7"); $alltxt =~ s/char\s+\*\*matches = NULL/char \*matches = NULL/s || die("Failed match 8"); # Add an extra parameter to psql_completion $alltxt =~ s/psql_completion\(char \*text, int start, int end\)/psql_completion\(char \*text, int start, int end, void \*dbptr\)/s || die("Failed match 9"); open(F,">tab-complete.inc") || die("Could not open tab-complete.inc!"); print F $alltxt; print F "\n\n"; close(F); print "Done.\n";