[perl-Glib-Object-Introspection] perli11ndoc: correctly display array and callback parameters/return values/fields



commit 4a6d7490fd020c74c1f3edb92c5bafd19b9efdbc
Author: Torsten Schönfeld <kaffeetisch gmx de>
Date:   Sun Nov 20 21:04:39 2016 +0100

    perli11ndoc: correctly display array and callback parameters/return values/fields

 bin/perli11ndoc |   24 +++++++++++++++++++++---
 1 files changed, 21 insertions(+), 3 deletions(-)
---
diff --git a/bin/perli11ndoc b/bin/perli11ndoc
index 15f76b2..5282633 100755
--- a/bin/perli11ndoc
+++ b/bin/perli11ndoc
@@ -240,8 +240,27 @@ sub find_parameters_and_return_value {
 
 sub find_type_name {
   my ($self, $element) = @_;
-  # FIXME: Sometimes, fields or parameters have a <callback> or <array> element
-  # as its type, not <type> directly.
+
+  # arrays
+  my $array_list = $self->{xpc}->find ('core:array', $element);
+  if ($array_list->size == 1) {
+    my $array = $array_list->pop;
+    my $prefix = 'reference to array of ';
+    my $child_type_name = $self->find_type_name ($array);
+    return $prefix . $child_type_name;
+  }
+
+  # callbacks
+  my $callback_list = $self->{xpc}->find ('core:callback', $element);
+  if ($callback_list->size == 1) {
+    my $callback = $callback_list->pop;
+    my ($in, $retval, $out) = $self->find_parameters_and_return_value ($callback);
+    my $in_list = join ', ', map { $self->find_type_name ($_) } @$in;
+    my $out_list = join ', ', map { $self->find_type_name ($_) } ($retval, @$out);
+    return "callback (in: $in_list; out: $out_list)";
+  }
+
+  # bare types
   my $type_list = $self->{xpc}->find ('core:type', $element);
   return '[unknown type]' unless $type_list->size == 1;
   my $type = $type_list->pop;
@@ -553,7 +572,6 @@ sub format_callable {
     if (@$out) {
       foreach my $parameter (@$out) {
         my $name = $self->find_attribute ($parameter, 'name');
-        push @out_names, $name;
         my $type_name = $self->find_type_name ($parameter);
         my $full_type_name = $self->format_full_type_name ($type_name);
         $text .= "  • $name: $full_type_name\n";


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]