@@ -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
8082impl 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