X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FPodParser.pm;h=8ad05980f71ea63f1a28ca99b703db63d45028c6;hp=7e31e1957e71c42a542c9ae1eb7ab76eb91b7af1;hb=19e95cd08f663e51c90bb8a510b29870121ad254;hpb=b51b16e6f58de4cb385bd461d97866b3d94c93ec diff --git a/src/PVE/PodParser.pm b/src/PVE/PodParser.pm index 7e31e19..8ad0598 100644 --- a/src/PVE/PodParser.pm +++ b/src/PVE/PodParser.pm @@ -44,6 +44,51 @@ 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 $alias = $entry->{alias}) { + $key = $alias; + $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) = @_; @@ -61,6 +106,13 @@ sub schema_get_type_text { } elsif (defined($phash->{maximum})) { return "$phash->{type} (-N - $phash->{maximum})"; } + } elsif ($phash->{type} eq 'string') { + 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); + } + } } my $type = $phash->{type} || 'string'; @@ -68,6 +120,19 @@ sub schema_get_type_text { return $type; } +sub generate_property_text { + my ($schema) = @_; + my $data = ''; + foreach my $key (sort keys %$schema) { + my $d = $schema->{$key}; + my $desc = $d->{description}; + my $typetext = schema_get_type_text($d); + $desc = 'No description available' if !$desc; + $data .= "=item $key: $typetext\n\n$desc\n\n"; + } + return $data; +} + # generta epop from JSON schema properties sub dump_properties { my ($properties) = @_; @@ -98,6 +163,15 @@ sub dump_properties { my $typetext = schema_get_type_text($d); $data .= "=item $base: $typetext\n\n"; $data .= "$descr\n\n"; + + if ($d->{type} eq 'string') { + my $format = $d->{format}; + if ($format && ref($format) eq 'HASH') { + $data .= "=over 1.1\n\n"; + $data .= generate_property_text($format); + $data .= "=back\n\n"; + } + } } $data .= "=back";