2001-11-13 Mike Kestner <mkestner@speakeasy.net>

* codegen/get-signals-from-source.pl : My own little perl signal
	parser.
	* codegen/gtk-signals.defs : Ripped the GtkWindow signals into here
	to goof with.

svn path=/trunk/gtk-sharp/; revision=1345
This commit is contained in:
Mike Kestner 2001-11-14 00:58:14 +00:00
parent 2af291dc52
commit b6338e2402
3 changed files with 152 additions and 1 deletions

View file

@ -1,4 +1,11 @@
2001-11-09 Mike Kestner <mkestner@speakeasy.net>
2001-11-13 Mike Kestner <mkestner@speakeasy.net>
* codegen/get-signals-from-source.pl : My own little perl signal
parser.
* codegen/gtk-signals.defs : Ripped the GtkWindow signals into here
to goof with.
2001-11-10 Mike Kestner <mkestner@speakeasy.net>
* codegen/defs-parse.pl : Fix String prop generation code.
* gtk/Window.custom : Fix ctor param casting error.

View file

@ -0,0 +1,96 @@
#!/usr/bin/perl
$hdrfile = $srcfile = $ARGV[0];
$hdrfile =~ s/c$/h/;
open (SRCFILE, $srcfile) || die "Could open $srcfile";
@lines = <SRCFILE>;
open (SRCFILE, $hdrfile) || die "Could open $hdrfile";
@hdrlines = <SRCFILE>;
$linenum = 0;
while ($linenum < @lines) {
$line = $lines[$linenum];
if ($line =~ /^(\w+)_class_init/) {
$typename = StudCaps($1);
} elsif ($line =~ /g_signal_new/) {
$str = $line;
do {
$str .= $lines[++$linenum];
} until ($lines[$linenum] =~ /;/);
print_signal ($str, $typename);
}
$linenum++;
}
sub print_signal
{
my ($spec, $class) = @_;
$spec =~ s/\n\s*//g;
$spec =~ /\(\"(\w+)\",.*G_SIGNAL_RUN_(\w+).*_OFFSET\s*\((.*)\),/;
$signame = $1;
$run = lc($2);
$class_method = $3;
($ret, $params) = lookup_method($class_method);
print "(define-signal $signame\n";
print " (of-object \"$class\")\n";
print " (return-type \"$ret\")\n";
print " (when \"$run\")\n";
print $params;
print ")\n\n";
}
sub lookup_method
{
my ($pstr) = @_;
my $lineno = 0;
($classname, $method) = split(/,\s*/, $pstr);
while ($hdrlines[$lineno] !~ /^struct\s*_$classname/) {$lineno++;}
do {
if ($hdrlines[$lineno] =~ /$method/) {
$sig = "";
while ($hdrlines[$lineno] !~ /;/) {
$sig .= $hdrlines[$lineno++];
}
$sig .= $hdrlines[$lineno];
$sig =~ s/\n\s*//g;
$sig =~ /(\S+)\s*\(\* $method\)\s*\((.*)\);/;
$ret = $1;
$parms = $2;
$ret =~ s/void/none/;
@plist = split(/,/, $parms);
$parms = " (parameters\n";
foreach $parm (@plist) {
$parm =~ s/\s+\*/\* /;
$parm =~ s/(\S+)/"$1"/g;
$parms .= " '($parm)\n";
}
$parms .= " )\n";
return ($ret, $parms);
}
} until ($hdrlines[$lineno++] =~ /^}/);
return ();
}
sub StudCaps
{
my ($str) = @_;
$str =~ s/^(\w)/\u\1/;
$str =~ s/[_-]([a-z])/\u\1/g;
$str =~ s/[_-](\d)/\1/g;
return $str;
}

48
codegen/gtk-signals.defs Normal file
View file

@ -0,0 +1,48 @@
(define-signal set_focus
(of-object "GtkWindow")
(return-type "none")
(when "last")
(parameters
'("GtkWindow*" "window")
'("GtkWidget*" "focus")
)
)
(define-signal frame_event
(of-object "GtkWindow")
(return-type "gboolean")
(when "last")
(parameters
'("GtkWidget*" "widget")
'("GdkEvent*" "event")
)
)
(define-signal activate_focus
(of-object "GtkWindow")
(return-type "none")
(when "last")
(parameters
'("GtkWindow*" "window")
)
)
(define-signal activate_default
(of-object "GtkWindow")
(return-type "none")
(when "last")
(parameters
'("GtkWindow*" "window")
)
)
(define-signal move_focus
(of-object "GtkWindow")
(return-type "none")
(when "last")
(parameters
'("GtkWindow*" "window")
'("GtkDirectionType" "direction")
)
)