[Gtk-sharp-list] patch: gapi.pl allows renaming of enum and enum members

Aleksey Sanin aleksey@aleksey.com
Tue, 26 Aug 2003 13:15:32 -0700


This is a multi-part message in MIME format.
--------------060409020004030900010707
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

While I worked on wrapping libzvt I found that current gapi scripts 
could not
process enums. The attached patch fixes this problem and allows to rename
enums and enum memebers from metadata file using syntax like one on the
following example:

<rule>
  <enum name="zvtfont_t" />
  <data>
    <attribute target="enum">
      <name>name</name>
      <value>FontType</value>
    </attribute>
  </data>
</rule>
                                                                                

<rule>
  <enum name="zvtfont_t">
    <member>1Byte</member>
  </enum>
  <data>
    <attribute target="member">
      <name>name</name>
      <value>OneByte</value>
    </attribute>
  </data>
</rule>
                                                                                

The patch does not change any existing behavior.  I would appreciate if 
someone
can review it and check it in.

Thanks,
Aleksey




--------------060409020004030900010707
Content-Type: text/plain;
 name="gapi.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="gapi.diff"

Index: parser/GAPI/Metadata.pm
===================================================================
RCS file: /mono/gtk-sharp/parser/GAPI/Metadata.pm,v
retrieving revision 1.12
diff -u -r1.12 Metadata.pm
--- parser/GAPI/Metadata.pm	11 Jul 2003 02:00:12 -0000	1.12
+++ parser/GAPI/Metadata.pm	26 Aug 2003 19:58:49 -0000
@@ -35,7 +35,7 @@
 			$methods{$method_node->firstChild->nodeValue} = 1;
 		} elsif ($method_node->nodeName eq "signal") {
 			$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;
 		}	
 	}
@@ -80,7 +80,7 @@
 		my %classes = ();
 		my @data;
 		for ($node = $rule_node->firstChild; $node != undef; $node = $node->nextSibling ()) {
-			if ($node->nodeName eq "class") {
+			if ($node->nodeName eq "class" or $node->nodeName eq "enum") {
 				parseClass ($node, \%classes);
 			} elsif ($node->nodeName eq "data") {
 				@data = parseData ($node);	
@@ -158,7 +158,7 @@
     my ($doc, $node, $class, $data_list_ref) = @_;
 
     foreach $data (@$data_list_ref) {
-	if ($$data[1] eq "class") {
+	if ($$data[1] eq "class" or $$data[1] eq "enum") {
 		if ($$data[7] eq "delete") {
 			my $parent = $node->parentNode;
 			$parent->removeChild ($node);
@@ -182,7 +182,7 @@
 	foreach $rule (@{$self->{rules}}) {
 		my ($classes_ref, $data_list_ref) = @$rule;
 		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;
 			foreach $attr ($node->attributes) {
 				if ($attr->name eq "cname") {
@@ -231,7 +231,7 @@
 			}
 
 			for ($property_node = $node->firstChild; $property_node; $property_node = $property_node->nextSibling ()) {
-				next if $property_node->nodeName ne "property";
+				next if $property_node->nodeName ne "property" and $property_node->nodeName ne "member";
 				my $property;
 				foreach $attr ($property_node->attributes) {
 					if ($attr->name eq "name") {
@@ -242,14 +242,12 @@
 				next if not ${$properties_ref}{$property};
 
 				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]);
 						next;
 					}
 				}
-
 			}
-
 		}
 	}
 }

--------------060409020004030900010707--