From: Wolfgang Bumiller Date: Thu, 1 Oct 2015 08:36:26 +0000 (+0200) Subject: Support named formats in typetext generation X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=commitdiff_plain;h=2421fba133ffed89eb92e9c09be573d67cec9bc3;hp=2f53cc39198f9d828ad59f0c538109296375ed1e Support named formats in typetext generation 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. --- diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm index 3afc37a..51dfc89 100644 --- a/src/PVE/JSONSchema.pm +++ b/src/PVE/JSONSchema.pm @@ -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; diff --git a/src/PVE/PodParser.pm b/src/PVE/PodParser.pm index 3cb3c56..eb443bd 100644 --- a/src/PVE/PodParser.pm +++ b/src/PVE/PodParser.pm @@ -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); + } } }