Support named formats in typetext generation
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Thu, 1 Oct 2015 08:36:26 +0000 (10:36 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 1 Oct 2015 09:22:39 +0000 (11:22 +0200)
Now that generate_typetext doesn't need to be accessed
anymore it made sense to move it to PodParser.pm as this is
the only place that uses it now.
PodParser now needs access to JSONSchema's $format_list, so
a JSONSchema::get_format was added.

src/PVE/JSONSchema.pm
src/PVE/PodParser.pm

index 3afc37abd45d0d1d6dc1089d29ccc960224bdd21..51dfc89e7b5af9dc47a3a33645a72716d6a51e17 100644 (file)
@@ -101,6 +101,11 @@ sub register_format {
     $format_list->{$format} = $code;
 }
 
+sub get_format {
+    my ($format) = @_;
+    return $format_list->{$format};
+}
+
 # register some common type for pve
 
 register_format('string', sub {}); # allow format => 'string-list'
@@ -1341,45 +1346,4 @@ sub dump_config {
     return $data;
 }
 
-sub generate_typetext {
-    my ($schema) = @_;
-    my $typetext = '';
-    my (@optional, @required);
-    foreach my $key (sort keys %$schema) {
-       next if !$schema->{$key}->{format_description} &&
-               !$schema->{$key}->{typetext};
-       if ($schema->{$key}->{optional}) {
-           push @optional, $key;
-       } else {
-           push @required, $key;
-       }
-    }
-    my ($pre, $post) = ('', '');
-    my $add = sub {
-       my ($key) = @_;
-       $typetext .= $pre;
-       my $entry = $schema->{$key};
-       if (my $desc = $entry->{format_description}) {
-           $typetext .= $entry->{default_key} ? "[$key=]" : "$key=";
-           $typetext .= "<$desc>";
-       } elsif (my $text = $entry->{typetext}) {
-           $typetext .= $text;
-       } else {
-           die "internal error: neither format_description nor typetext found";
-       }
-       $typetext .= $post;
-    };
-    foreach my $key (@required) {
-       &$add($key);
-       $pre = ', ';
-    }
-    $pre = $pre ? ' [,' : '[';
-    $post = ']';
-    foreach my $key (@optional) {
-       &$add($key);
-       $pre = ' [,';
-    }
-    return $typetext;
-}
-
 1;
index 3cb3c56f0e6dfff9fc295469e929612238375c8c..eb443bd150713b33afddc40a14c96882a8a2d629 100644 (file)
@@ -44,6 +44,47 @@ sub command {
 
 # helpers used to generate our manual pages
 
+sub generate_typetext {
+    my ($schema) = @_;
+    my $typetext = '';
+    my (@optional, @required);
+    foreach my $key (sort keys %$schema) {
+       next if !$schema->{$key}->{format_description} &&
+               !$schema->{$key}->{typetext};
+       if ($schema->{$key}->{optional}) {
+           push @optional, $key;
+       } else {
+           push @required, $key;
+       }
+    }
+    my ($pre, $post) = ('', '');
+    my $add = sub {
+       my ($key) = @_;
+       $typetext .= $pre;
+       my $entry = $schema->{$key};
+       if (my $desc = $entry->{format_description}) {
+           $typetext .= $entry->{default_key} ? "[$key=]" : "$key=";
+           $typetext .= "<$desc>";
+       } elsif (my $text = $entry->{typetext}) {
+           $typetext .= $text;
+       } else {
+           die "internal error: neither format_description nor typetext found";
+       }
+       $typetext .= $post;
+    };
+    foreach my $key (@required) {
+       &$add($key);
+       $pre = ', ';
+    }
+    $pre = $pre ? ' [,' : '[';
+    $post = ']';
+    foreach my $key (@optional) {
+       &$add($key);
+       $pre = ' [,';
+    }
+    return $typetext;
+}
+
 sub schema_get_type_text {
     my ($phash) = @_;
 
@@ -62,9 +103,11 @@ sub schema_get_type_text {
            return "$phash->{type} (-N - $phash->{maximum})";
        }
     } elsif ($phash->{type} eq 'string') {
-       my $format = $phash->{format};
-       if ($format && ref($format) eq 'HASH') {
-           return PVE::JSONSchema::generate_typetext($format);
+       if (my $format = $phash->{format}) {
+           $format = PVE::JSONSchema::get_format($format) if ref($format) ne 'HASH';
+           if (ref($format) eq 'HASH') {
+               return generate_typetext($format);
+           }
        }
     }