Skip to content

Commit bceee5c

Browse files
author
InAnYan
committed
First step
1 parent c055473 commit bceee5c

File tree

1 file changed

+20
-3
lines changed
  • module/core/format_tools/src/format/output_format

1 file changed

+20
-3
lines changed

module/core/format_tools/src/format/output_format/table.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ pub struct Table
7575
pub corner_lb : char,
7676
/// Bottom-right corner character.
7777
pub corner_rb : char,
78+
/// Limit table size (0 - no limit).
79+
pub max_width : usize,
7880
}
7981

8082
impl Default for Table
@@ -103,6 +105,8 @@ impl Default for Table
103105
let corner_lb = '└';
104106
let corner_rb = '┘';
105107

108+
let max_width = 50;
109+
106110
Self
107111
{
108112
delimitting_header,
@@ -123,6 +127,7 @@ impl Default for Table
123127
corner_rt,
124128
corner_lb,
125129
corner_rb,
130+
max_width,
126131
}
127132
}
128133
}
@@ -192,6 +197,17 @@ impl TableOutputFormat for Table
192197

193198
// dbg!( x.row_descriptors.len() );
194199

200+
let table_width: usize = x.col_descriptors.iter().map( |col| col.width ).sum();
201+
202+
let shrink_factor = if self.max_width == 0 || table_width <= self.max_width
203+
{
204+
1.0
205+
}
206+
else
207+
{
208+
( self.max_width as f32 ) / ( table_width as f32 )
209+
};
210+
195211
for ( irow, row ) in x.row_descriptors.iter().enumerate()
196212
{
197213
let height = row.height;
@@ -203,7 +219,8 @@ impl TableOutputFormat for Table
203219
if prev_typ == LineType::Header && row.typ == LineType::Regular
204220
{
205221
write!( c.buf, "{}", row_separator )?;
206-
write!( c.buf, "{}", h.repeat( row_width ) )?;
222+
let new_row_width = ( ( row_width as f32 ) * shrink_factor ).floor() as usize;
223+
write!( c.buf, "{}", h.repeat( new_row_width ) )?;
207224
delimitting_header = false
208225
}
209226
}
@@ -234,7 +251,7 @@ impl TableOutputFormat for Table
234251
{
235252
let col = &x.col_descriptors[ icol ];
236253
let cell_width = x.data[ irow ][ icol ].1[0];
237-
let width = col.width;
254+
let width = ( ( col.width as f32 ) * shrink_factor ).floor() as usize;
238255
let md_index = [ islice, icol, irow as usize ];
239256
let slice = x.slices[ x.slices_dim.md_offset( md_index ) ];
240257

@@ -247,7 +264,7 @@ impl TableOutputFormat for Table
247264

248265
write!( c.buf, "{}", cell_prefix )?;
249266

250-
println!( "icol : {icol} | irow : {irow} | width : {width} | cell_width : {cell_width} | slice.len() : {}", slice.len() );
267+
// println!( "icol : {icol} | irow : {irow} | width : {width} | cell_width : {cell_width} | slice.len() : {}", slice.len() );
251268

252269
let lspaces = if cell_width > width {
253270
0

0 commit comments

Comments
 (0)