3 my @feat = split m{/+}, $Request || 'default';
12 stylesheet => [qw'light circus dark red'],
13 data => [qw'codec.inc.pl'],
16 my $info = do 'codec.inc.pl';
17 $info and %{$info} > 1 or Abort("cannot open operator include", 500, $@ // $!);
19 my %BOOLSCORE = (y => [5, '✔'], n => [1, '✘'], 0 => [0, 'n/a']);
24 <table class="mapped">
25 <col><colgroup span=3><colgroup span=2><colgroup span=3>
26 <thead><tr><th rowspan=2>feature
29 $info->{codec}->{$a}->{available} <=> $info->{codec}->{$b}->{available}
30 } keys $info->{codec}->%*;
32 print '<th>', $_->{name} for @{$info->{codec}}{@codecs};
34 print '<td>', $_->{available} for @{$info->{codec}}{@codecs};
37 while (defined (my $feat = shift @feat)) {
38 my $featinfo = $info->{feature}->{$feat} or next;
39 unshift @feat, @{$_} for $featinfo->{children} // ();
40 $featinfo->{score} or next;
41 print '<tbody>' if $featinfo->{children};
42 printf '<tr><th>%s', $featinfo->{name} // $feat;
44 my ($score, $data) = map { ref ? @$_ : $_ } $featinfo->{score}->{$_};
45 if (not defined $data) {
46 if (my $override = $BOOLSCORE{$score}) {
47 ($score, $data) = @{$override};
50 $data = '•' x ($score - 1);
53 printf '<td class="l%d">%s', $score, $data;