[pve-devel] [pve-common 07/11] CLIFormatter: implement tables with utf8 borders
Dietmar Maurer
dietmar at proxmox.com
Fri Jun 29 13:15:22 CEST 2018
Signed-off-by: Dietmar Maurer <dietmar at proxmox.com>
---
src/PVE/CLIFormatter.pm | 63 ++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 52 insertions(+), 11 deletions(-)
diff --git a/src/PVE/CLIFormatter.pm b/src/PVE/CLIFormatter.pm
index 8ce0d2f..93e2cad 100644
--- a/src/PVE/CLIFormatter.pm
+++ b/src/PVE/CLIFormatter.pm
@@ -4,6 +4,8 @@ use strict;
use warnings;
use PVE::JSONSchema;
use JSON;
+use utf8;
+use Encode;
sub println_max {
my ($text, $max) = @_;
@@ -11,10 +13,10 @@ sub println_max {
if ($max) {
my @lines = split(/\n/, $text);
foreach my $line (@lines) {
- print substr($line, 0, $max) . "\n";
+ print encode('UTF-8', substr($line, 0, $max) . "\n");
}
} else {
- print $text;
+ print encode('UTF-8', $text);
}
}
@@ -73,7 +75,9 @@ sub print_text_table {
my $colopts = {};
- my $borderstring = '';
+ my $borderstring_m = '';
+ my $borderstring_b = '';
+ my $borderstring_t = '';
my $formatstring = '';
my $column_count = scalar(@$props_to_print);
@@ -105,12 +109,46 @@ sub print_text_table {
};
if ($border) {
- if ($i == ($column_count - 1)) {
- $formatstring .= "| %-${cutoff}s |\n";
- $borderstring .= "+-" . ('-' x $cutoff) . "-+\n";
+ if ($i == 0 && ($column_count == 1)) {
+ if ($utf8) {
+ $formatstring .= "│ %-${cutoff}s │\n";
+ $borderstring_t .= "┌─" . ('─' x $cutoff) . "─┐\n";
+ $borderstring_m .= "├─" . ('─' x $cutoff) . "─┤\n";
+ $borderstring_b .= "└─" . ('─' x $cutoff) . "─┘\n";
+ } else {
+ $formatstring .= "| %-${cutoff}s |\n";
+ $borderstring_m .= "+-" . ('-' x $cutoff) . "-+\n";
+ }
+ } elsif ($i == 0) {
+ if ($utf8) {
+ $formatstring .= "│ %-${cutoff}s ";
+ $borderstring_t .= "┌─" . ('─' x $cutoff) . '─';
+ $borderstring_m .= "├─" . ('─' x $cutoff) . '─';
+ $borderstring_b .= "└─" . ('─' x $cutoff) . '─';
+ } else {
+ $formatstring .= "| %-${cutoff}s ";
+ $borderstring_m .= "+-" . ('-' x $cutoff) . '-';
+ }
+ } elsif ($i == ($column_count - 1)) {
+ if ($utf8) {
+ $formatstring .= "│ %-${cutoff}s │\n";
+ $borderstring_t .= "┬─" . ('─' x $cutoff) . "─┐\n";
+ $borderstring_m .= "┼─" . ('─' x $cutoff) . "─┤\n";
+ $borderstring_b .= "┴─" . ('─' x $cutoff) . "─┘\n";
+ } else {
+ $formatstring .= "| %-${cutoff}s |\n";
+ $borderstring_m .= "+-" . ('-' x $cutoff) . "-+\n";
+ }
} else {
- $formatstring .= "| %-${cutoff}s ";
- $borderstring .= "+-" . ('-' x $cutoff) . '-';
+ if ($utf8) {
+ $formatstring .= "│ %-${cutoff}s ";
+ $borderstring_t .= "┬─" . ('─' x $cutoff) . '─';
+ $borderstring_m .= "┼─" . ('─' x $cutoff) . '─';
+ $borderstring_b .= "┴─" . ('─' x $cutoff) . '─';
+ } else {
+ $formatstring .= "| %-${cutoff}s ";
+ $borderstring_m .= "+-" . ('-' x $cutoff) . '-';
+ }
}
} else {
# skip alignment and cutoff on last column
@@ -127,19 +165,22 @@ sub print_text_table {
}
}
- println_max($borderstring, $columns) if $border;
+ $borderstring_t = $borderstring_m if !length($borderstring_t);
+ $borderstring_b = $borderstring_m if !length($borderstring_b);
+
+ println_max($borderstring_t, $columns) if $border;
my $text = sprintf $formatstring, map { $colopts->{$_}->{title} } @$props_to_print;
println_max($text, $columns);
foreach my $entry (@$data) {
- println_max($borderstring, $columns) if $border;
+ println_max($borderstring_m, $columns) if $border;
$text = sprintf $formatstring, map {
substr(data_to_text($entry->{$_}, $returnprops->{$_}) // $colopts->{$_}->{default},
0, $colopts->{$_}->{cutoff});
} @$props_to_print;
println_max($text, $columns);
}
- println_max($borderstring, $columns) if $border;
+ println_max($borderstring_b, $columns) if $border;
}
# prints the result of an API GET call returning an array as a table.
--
2.11.0
More information about the pve-devel
mailing list