2003-09-03 Aleksey Sanin <aleksey@aleksey.com>

* parser/GAPI/Metadata.pm: enable enums processing using
 	<class/> element syntax

svn path=/trunk/gtk-sharp/; revision=17846
This commit is contained in:
Mike Kestner 2003-09-03 13:14:19 +00:00
parent a12b7e1252
commit fe3e323429
2 changed files with 21 additions and 17 deletions

View File

@ -1,3 +1,9 @@
2003-09-03 Aleksey Sanin <aleksey@aleksey.com>
* parser/GAPI/Metadata.pm: enable enums processing using
<class/> element syntax
2003-09-02 Martin Willemoes Hansen <mwh@sysrq.dk> 2003-09-02 Martin Willemoes Hansen <mwh@sysrq.dk>
* gda/Makefile.in: Fixed bad nowarn options * gda/Makefile.in: Fixed bad nowarn options

View File

@ -25,18 +25,18 @@ sub parseClass {
my ($node, $classes) = @_; my ($node, $classes) = @_;
my %methods = (); my %methods = ();
my %signals = (); my %signals = ();
my %properties = (); my %members = ();
my @attrs = $node->attributes; my @attrs = $node->attributes;
my $class_name = $attrs[0]->value; my $class_name = $attrs[0]->value;
${$classes}{$class_name} = [\%methods, \%signals, \%properties]; ${$classes}{$class_name} = [\%methods, \%signals, \%members];
for ($method_node = $node->firstChild; $method_node != undef; $method_node = $method_node->nextSibling ()) { for ($method_node = $node->firstChild; $method_node != undef; $method_node = $method_node->nextSibling ()) {
if ($method_node->nodeName eq "method" or $method_node->nodeName eq "constructor") { if ($method_node->nodeName eq "method" or $method_node->nodeName eq "constructor") {
$methods{$method_node->firstChild->nodeValue} = 1; $methods{$method_node->firstChild->nodeValue} = 1;
} elsif ($method_node->nodeName eq "signal") { } elsif ($method_node->nodeName eq "signal") {
$signals{$method_node->firstChild->nodeValue} = 1; $signals{$method_node->firstChild->nodeValue} = 1;
} elsif ($method_node->nodeName eq "property") { } elsif ($method_node->nodeName eq "property" or $method_node->nodeName eq "member") {
$properties{$method_node->firstChild->nodeValue} = 1; $members{$method_node->firstChild->nodeValue} = 1;
} }
} }
} }
@ -182,7 +182,7 @@ sub fixupNamespace {
foreach $rule (@{$self->{rules}}) { foreach $rule (@{$self->{rules}}) {
my ($classes_ref, $data_list_ref) = @$rule; my ($classes_ref, $data_list_ref) = @$rule;
for ($node = $ns_node->firstChild; $node; $node = $node->nextSibling ()) { for ($node = $ns_node->firstChild; $node; $node = $node->nextSibling ()) {
next if not ($node->nodeName eq "object" or $node->nodeName eq "interface" or $node->nodeName eq "struct" or $node->nodeName eq "boxed" or $node->nodeName eq "callback" or $node->nodeName eq "class"); next if not ($node->nodeName eq "object" or $node->nodeName eq "interface" or $node->nodeName eq "struct" or $node->nodeName eq "boxed" or $node->nodeName eq "callback" or $node->nodeName eq "class" or $node->nodeName eq "enum");
my $class, $methods_ref, $attr; my $class, $methods_ref, $attr;
foreach $attr ($node->attributes) { foreach $attr ($node->attributes) {
if ($attr->name eq "cname") { if ($attr->name eq "cname") {
@ -194,13 +194,13 @@ sub fixupNamespace {
my %classes = %$classes_ref; my %classes = %$classes_ref;
$methods_ref = $classes{$class}[0]; $methods_ref = $classes{$class}[0];
$signals_ref = $classes{$class}[1]; $signals_ref = $classes{$class}[1];
$properties_ref = $classes{$class}[2]; $members_ref = $classes{$class}[2];
if ({%$classes_ref}->{$class}) { if ({%$classes_ref}->{$class}) {
addClassData ($doc, $node, $class, $data_list_ref); addClassData ($doc, $node, $class, $data_list_ref);
} }
next if not ($methods_ref or $signals_ref or $properties_ref); next if not ($methods_ref or $signals_ref or $members_ref);
for ($method_node = $node->firstChild; $method_node; $method_node = $method_node->nextSibling ()) { for ($method_node = $node->firstChild; $method_node; $method_node = $method_node->nextSibling ()) {
next if not ($method_node->nodeName eq "method" or $method_node->nodeName eq "constructor"); next if not ($method_node->nodeName eq "method" or $method_node->nodeName eq "constructor");
@ -230,26 +230,24 @@ sub fixupNamespace {
fixupParams ($signal_node, $data_list_ref); fixupParams ($signal_node, $data_list_ref);
} }
for ($property_node = $node->firstChild; $property_node; $property_node = $property_node->nextSibling ()) { for ($member_node = $node->firstChild; $member_node; $member_node = $member_node->nextSibling ()) {
next if $property_node->nodeName ne "property"; next if $member_node->nodeName ne "property" and $member_node->nodeName ne "member";
my $property; my $member;
foreach $attr ($property_node->attributes) { foreach $attr ($member_node->attributes) {
if ($attr->name eq "name") { if ($attr->name eq "name") {
$property = $attr->value; $member = $attr->value;
last; last;
} }
} }
next if not ${$properties_ref}{$property}; next if not ${$members_ref}{$member};
foreach $data (@$data_list_ref) { foreach $data (@$data_list_ref) {
if ($$data[1] eq "property") { if ($$data[1] eq "property" or $$data[1] eq "member") {
$property_node->setAttribute ($$data[5], $$data[6]); $member_node->setAttribute ($$data[5], $$data[6]);
next; next;
} }
} }
} }
} }
} }
} }