<(common.inc.plp)><:
+my @feat = split m{/+}, $Request || 'default';
+
Html({
title => 'Codecs',
version => '1.0',
my $info = do 'codec.inc.pl';
$info and %{$info} > 1 or Abort("cannot open operator include", 500, $@ // $!);
-my %BOOLSCORE = (y => 5, n => 1);
+my %BOOLSCORE = (y => [5, '✔'], n => [1, '✘'], 0 => [0, 'n/a']);
:>
<h1>Image codecs</h1>
<div class="section">
<table class="mapped">
- <col><colgroup span=2><colgroup span=2><colgroup span=3>
+ <col><colgroup span=3><colgroup span=2><colgroup span=3>
<thead><tr><th rowspan=2>feature
<:
my @codecs = sort {
print '<td>', $_->{available} for @{$info->{codec}}{@codecs};
say '</thead>';
-print '<tbody>';
-for my $feat (sort keys %{$info->{feature}}) {
- my $featinfo = $info->{feature}->{$feat};
+while (defined (my $feat = shift @feat)) {
+ my $featinfo = $info->{feature}->{$feat} or next;
+ unshift @feat, @{$_} for $featinfo->{children} // ();
+ $featinfo->{score} or next;
+ print '<tbody>' if $featinfo->{children};
printf '<tr><th>%s', $featinfo->{name} // $feat;
- printf('<td class="l%d">%s',
- (map { $_ && $BOOLSCORE{$_} || $_ || 0 } $featinfo->{score}->{$_}),
- $featinfo->{data}->{$_} // (map {
- $BOOLSCORE{$_} ? ($_ eq 'y' ? '✔' : '✘') : '•' x ($_ - 1)
- } $featinfo->{score}->{$_}),
- ) for @codecs;
+ for (@codecs) {
+ my ($score, $data, $title) = map { ref ? @$_ : $_ } $featinfo->{score}->{$_};
+ if (not defined $data) {
+ if (my $override = $BOOLSCORE{$score}) {
+ ($score, $data) = @{$override};
+ }
+ else {
+ $data = '•' x ($score - 1);
+ }
+ }
+ printf '<td class="l%d"', $score;
+ printf ' title="%s"', $_ for $title // ();
+ print '>', $data;
+ }
say '</td>';
}