mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 04:34:08 +08:00
scripts: get_feat.pl: reduce table width for all features output
Auto-adjust the table columns width to better fit under terminals, by breaking the description on multiple lines and auto-estimating the minimal size for the per-architecture status. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Link: https://lore.kernel.org/r/9d39ac3fd51f1360aecc328c01558be88a1d6930.1607095090.git.mchehab+huawei@kernel.org Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
4fa32f8702
commit
f5889e70b9
@ -19,6 +19,11 @@ $basename =~ s,/[^/]+$,/,;
|
|||||||
|
|
||||||
my $prefix=$basename . "../Documentation/features";
|
my $prefix=$basename . "../Documentation/features";
|
||||||
|
|
||||||
|
# Used only at for full features output. The script will auto-adjust
|
||||||
|
# such values for the minimal possible values
|
||||||
|
my $status_size = 1;
|
||||||
|
my $description_size = 1;
|
||||||
|
|
||||||
GetOptions(
|
GetOptions(
|
||||||
"debug|d+" => \$debug,
|
"debug|d+" => \$debug,
|
||||||
"dir=s" => \$prefix,
|
"dir=s" => \$prefix,
|
||||||
@ -77,7 +82,10 @@ my $max_size_kconfig = length($h_kconfig);
|
|||||||
my $max_size_description = length($h_description);
|
my $max_size_description = length($h_description);
|
||||||
my $max_size_subsys = length($h_subsys);
|
my $max_size_subsys = length($h_subsys);
|
||||||
my $max_size_status = length($h_status);
|
my $max_size_status = length($h_status);
|
||||||
my $max_size_arch = length($h_arch);
|
|
||||||
|
my $max_size_arch = 0;
|
||||||
|
my $max_size_arch_with_header;
|
||||||
|
my $max_description_word = 0;
|
||||||
|
|
||||||
sub parse_feat {
|
sub parse_feat {
|
||||||
my $file = $File::Find::name;
|
my $file = $File::Find::name;
|
||||||
@ -127,6 +135,13 @@ sub parse_feat {
|
|||||||
if (length($description) > $max_size_description) {
|
if (length($description) > $max_size_description) {
|
||||||
$max_size_description = length($description);
|
$max_size_description = length($description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach my $word (split /\s+/, $description) {
|
||||||
|
if (length($word) > $max_description_word) {
|
||||||
|
$max_description_word = length($word);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
next if (m/^\\s*$/);
|
next if (m/^\\s*$/);
|
||||||
@ -180,6 +195,8 @@ sub parse_feat {
|
|||||||
$data{$name}->{description} = $description;
|
$data{$name}->{description} = $description;
|
||||||
$data{$name}->{comments} = $comments;
|
$data{$name}->{comments} = $comments;
|
||||||
$data{$name}->{table} = \%arch_table;
|
$data{$name}->{table} = \%arch_table;
|
||||||
|
|
||||||
|
$max_size_arch_with_header = $max_size_arch + length($h_arch);
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -296,7 +313,7 @@ sub output_feature {
|
|||||||
print "$com\n\n";
|
print "$com\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
print "=" x $max_size_arch;
|
print "=" x $max_size_arch_with_header;
|
||||||
print " ";
|
print " ";
|
||||||
print "=" x $max_size_status;
|
print "=" x $max_size_status;
|
||||||
print "\n";
|
print "\n";
|
||||||
@ -304,7 +321,7 @@ sub output_feature {
|
|||||||
printf "%-${max_size_arch}s ", $h_arch;
|
printf "%-${max_size_arch}s ", $h_arch;
|
||||||
printf "%-${max_size_status}s", $h_status . "\n";
|
printf "%-${max_size_status}s", $h_status . "\n";
|
||||||
|
|
||||||
print "=" x $max_size_arch;
|
print "=" x $max_size_arch_with_header;
|
||||||
print " ";
|
print " ";
|
||||||
print "=" x $max_size_status;
|
print "=" x $max_size_status;
|
||||||
print "\n";
|
print "\n";
|
||||||
@ -315,7 +332,7 @@ sub output_feature {
|
|||||||
printf "%-${max_size_status}s\n", $arch_table{$arch};
|
printf "%-${max_size_status}s\n", $arch_table{$arch};
|
||||||
}
|
}
|
||||||
|
|
||||||
print "=" x $max_size_arch;
|
print "=" x $max_size_arch_with_header;
|
||||||
print " ";
|
print " ";
|
||||||
print "=" x $max_size_status;
|
print "=" x $max_size_status;
|
||||||
print "\n";
|
print "\n";
|
||||||
@ -351,6 +368,7 @@ sub matrix_lines($$$) {
|
|||||||
|
|
||||||
sub output_matrix {
|
sub output_matrix {
|
||||||
my $title = "Feature status on all architectures";
|
my $title = "Feature status on all architectures";
|
||||||
|
my $notcompat = "Not compatible";
|
||||||
|
|
||||||
print "=" x length($title) . "\n";
|
print "=" x length($title) . "\n";
|
||||||
print "$title\n";
|
print "$title\n";
|
||||||
@ -359,10 +377,21 @@ sub output_matrix {
|
|||||||
my $desc_title = "$h_kconfig / $h_description";
|
my $desc_title = "$h_kconfig / $h_description";
|
||||||
|
|
||||||
my $desc_size = $max_size_kconfig + 4;
|
my $desc_size = $max_size_kconfig + 4;
|
||||||
$desc_size = $max_size_description if ($max_size_description > $desc_size);
|
if (!$description_size) {
|
||||||
|
$desc_size = $max_size_description if ($max_size_description > $desc_size);
|
||||||
|
} else {
|
||||||
|
$desc_size = $description_size if ($description_size > $desc_size);
|
||||||
|
}
|
||||||
|
$desc_size = $max_description_word if ($max_description_word > $desc_size);
|
||||||
|
|
||||||
$desc_size = length($desc_title) if (length($desc_title) > $desc_size);
|
$desc_size = length($desc_title) if (length($desc_title) > $desc_size);
|
||||||
|
|
||||||
my $status_size = 60;
|
$max_size_status = length($notcompat) if (length($notcompat) > $max_size_status);
|
||||||
|
|
||||||
|
# Ensure that the status will fit
|
||||||
|
my $min_status_size = $max_size_status + $max_size_arch + 6;
|
||||||
|
$status_size = $min_status_size if ($status_size < $min_status_size);
|
||||||
|
|
||||||
|
|
||||||
my $cur_subsys = "";
|
my $cur_subsys = "";
|
||||||
foreach my $name (sort {
|
foreach my $name (sort {
|
||||||
@ -394,7 +423,7 @@ sub output_matrix {
|
|||||||
my %arch_table = %{$data{$name}->{table}};
|
my %arch_table = %{$data{$name}->{table}};
|
||||||
my $cur_status = "";
|
my $cur_status = "";
|
||||||
|
|
||||||
my @lines;
|
my (@lines, @descs);
|
||||||
my $line = "";
|
my $line = "";
|
||||||
foreach my $arch (sort {
|
foreach my $arch (sort {
|
||||||
($arch_table{$b} cmp $arch_table{$a}) or
|
($arch_table{$b} cmp $arch_table{$a}) or
|
||||||
@ -404,7 +433,7 @@ sub output_matrix {
|
|||||||
my $status = $arch_table{$arch};
|
my $status = $arch_table{$arch};
|
||||||
|
|
||||||
if ($status eq "---") {
|
if ($status eq "---") {
|
||||||
$status = "Not compatible";
|
$status = $notcompat;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($status ne $cur_status) {
|
if ($status ne $cur_status) {
|
||||||
@ -423,17 +452,35 @@ sub output_matrix {
|
|||||||
}
|
}
|
||||||
push @lines, $line if ($line ne "");
|
push @lines, $line if ($line ne "");
|
||||||
|
|
||||||
# Ensure that description will be printed
|
my $description = $data{$name}->{description};
|
||||||
push @lines, "" while (scalar(@lines) < 2);
|
while (length($description) > $desc_size) {
|
||||||
|
my $d = substr $description, 0, $desc_size;
|
||||||
|
|
||||||
|
# Ensure that it will end on a space
|
||||||
|
# if it can't, it means that the size is too small
|
||||||
|
# Instead of aborting it, let's print what we have
|
||||||
|
if (!($d =~ s/^(.*)\s+.*/$1/)) {
|
||||||
|
$d = substr $d, 0, -1;
|
||||||
|
push @descs, "$d\\";
|
||||||
|
$description =~ s/^\Q$d\E//;
|
||||||
|
} else {
|
||||||
|
push @descs, $d;
|
||||||
|
$description =~ s/^\Q$d\E\s+//;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
push @descs, $description;
|
||||||
|
|
||||||
|
# Ensure that the full description will be printed
|
||||||
|
push @lines, "" while (scalar(@lines) < 2 + scalar(@descs));
|
||||||
|
|
||||||
my $ln = 0;
|
my $ln = 0;
|
||||||
for my $line(@lines) {
|
for my $line(@lines) {
|
||||||
if (!$ln) {
|
if (!$ln) {
|
||||||
printf "|%-${max_size_name}s", $name;
|
printf "|%-${max_size_name}s", $name;
|
||||||
printf "|%-${desc_size}s", "``" . $data{$name}->{kconfig} . "``";
|
printf "|%-${desc_size}s", "``" . $data{$name}->{kconfig} . "``";
|
||||||
} elsif ($ln == 2) {
|
} elsif ($ln >= 2 && scalar(@descs)) {
|
||||||
printf "|%-${max_size_name}s", "";
|
printf "|%-${max_size_name}s", "";
|
||||||
printf "|%-${desc_size}s", $data{$name}->{description};
|
printf "|%-${desc_size}s", shift @descs;
|
||||||
} else {
|
} else {
|
||||||
printf "|%-${max_size_name}s", "";
|
printf "|%-${max_size_name}s", "";
|
||||||
printf "|%-${desc_size}s", "";
|
printf "|%-${desc_size}s", "";
|
||||||
|
Loading…
Reference in New Issue
Block a user