1 | //! The module contains [`Height`] structure which is responsible for a table and cell height. |
2 | |
3 | mod cell_height_increase; |
4 | mod cell_height_limit; |
5 | mod height_list; |
6 | mod table_height_increase; |
7 | mod table_height_limit; |
8 | mod util; |
9 | |
10 | use crate::settings::measurement::Measurement; |
11 | |
12 | pub use cell_height_increase::CellHeightIncrease; |
13 | pub use cell_height_limit::CellHeightLimit; |
14 | pub use height_list::HeightList; |
15 | pub use table_height_increase::TableHeightIncrease; |
16 | pub use table_height_limit::TableHeightLimit; |
17 | |
18 | /// Height is a abstract factory for height settings. |
19 | /// |
20 | /// # Example |
21 | /// |
22 | /// ``` |
23 | /// use tabled::{Table, settings::{Height, Settings}}; |
24 | /// |
25 | /// let data = vec![ |
26 | /// ("Some data" , "here" , "and here" ), |
27 | /// ("Some data on a next" , "line" , "right here" ), |
28 | /// ]; |
29 | /// |
30 | /// let table = Table::new(data) |
31 | /// .with(Settings::new(Height::limit(10), Height::increase(10))) |
32 | /// .to_string(); |
33 | /// |
34 | /// assert_eq!( |
35 | /// table, |
36 | /// "+---------------------+------+------------+ \n\ |
37 | /// | &str | &str | &str | \n\ |
38 | /// | | | | \n\ |
39 | /// +---------------------+------+------------+ \n\ |
40 | /// | Some data | here | and here | \n\ |
41 | /// | | | | \n\ |
42 | /// +---------------------+------+------------+ \n\ |
43 | /// | Some data on a next | line | right here | \n\ |
44 | /// | | | | \n\ |
45 | /// +---------------------+------+------------+" , |
46 | /// ) |
47 | /// ``` |
48 | #[derive (Debug)] |
49 | pub struct Height; |
50 | |
51 | impl Height { |
52 | /// Create [`CellHeightIncrease`] to set a table/cell height. |
53 | /// |
54 | /// # Example |
55 | /// |
56 | /// ## Cell height |
57 | /// |
58 | /// ``` |
59 | /// use tabled::{Table, settings::{Height, Modify, object::Columns}}; |
60 | /// |
61 | /// let data = vec![ |
62 | /// ("Some data" , "here" , "and here" ), |
63 | /// ("Some data on a next" , "line" , "right here" ), |
64 | /// ]; |
65 | /// |
66 | /// let table = Table::new(data) |
67 | /// .with(Modify::new(Columns::first()).with(Height::increase(5))) |
68 | /// .to_string(); |
69 | /// |
70 | /// assert_eq!( |
71 | /// table, |
72 | /// "+---------------------+------+------------+ \n\ |
73 | /// | &str | &str | &str | \n\ |
74 | /// | | | | \n\ |
75 | /// | | | | \n\ |
76 | /// | | | | \n\ |
77 | /// | | | | \n\ |
78 | /// +---------------------+------+------------+ \n\ |
79 | /// | Some data | here | and here | \n\ |
80 | /// | | | | \n\ |
81 | /// | | | | \n\ |
82 | /// | | | | \n\ |
83 | /// | | | | \n\ |
84 | /// +---------------------+------+------------+ \n\ |
85 | /// | Some data on a next | line | right here | \n\ |
86 | /// | | | | \n\ |
87 | /// | | | | \n\ |
88 | /// | | | | \n\ |
89 | /// | | | | \n\ |
90 | /// +---------------------+------+------------+" |
91 | /// ) |
92 | /// ``` |
93 | /// |
94 | /// ## Table height |
95 | /// |
96 | /// ``` |
97 | /// use tabled::{Table, settings::Height}; |
98 | /// |
99 | /// let data = vec![ |
100 | /// ("Some data" , "here" , "and here" ), |
101 | /// ("Some data on a next" , "line" , "right here" ), |
102 | /// ]; |
103 | /// |
104 | /// let table = Table::new(data) |
105 | /// .with(Height::increase(10)) |
106 | /// .to_string(); |
107 | /// |
108 | /// assert_eq!( |
109 | /// table, |
110 | /// "+---------------------+------+------------+ \n\ |
111 | /// | &str | &str | &str | \n\ |
112 | /// | | | | \n\ |
113 | /// +---------------------+------+------------+ \n\ |
114 | /// | Some data | here | and here | \n\ |
115 | /// | | | | \n\ |
116 | /// +---------------------+------+------------+ \n\ |
117 | /// | Some data on a next | line | right here | \n\ |
118 | /// | | | | \n\ |
119 | /// +---------------------+------+------------+" , |
120 | /// ) |
121 | /// ``` |
122 | pub fn increase<W: Measurement<Height>>(width: W) -> CellHeightIncrease<W> { |
123 | CellHeightIncrease::new(width) |
124 | } |
125 | |
126 | /// Create [`CellHeightLimit`] to set a table/cell height. |
127 | /// |
128 | /// # Example |
129 | /// |
130 | /// ## Cell height |
131 | /// |
132 | /// ``` |
133 | /// use tabled::{Table, settings::{Height, Modify, object::Columns}}; |
134 | /// |
135 | /// let data = vec![ |
136 | /// ("Some \ndata" , "here" , "and here" ), |
137 | /// ("Some \ndata on a next" , "line" , "right here" ), |
138 | /// ]; |
139 | /// |
140 | /// let table = Table::new(data) |
141 | /// .with(Modify::new(Columns::first()).with(Height::limit(1))) |
142 | /// .to_string(); |
143 | /// |
144 | /// assert_eq!( |
145 | /// table, |
146 | /// "+------+------+------------+ \n\ |
147 | /// | &str | &str | &str | \n\ |
148 | /// +------+------+------------+ \n\ |
149 | /// | Some | here | and here | \n\ |
150 | /// +------+------+------------+ \n\ |
151 | /// | Some | line | right here | \n\ |
152 | /// +------+------+------------+" |
153 | /// ) |
154 | /// ``` |
155 | /// |
156 | /// ## Table height |
157 | /// |
158 | /// ``` |
159 | /// use tabled::{Table, settings::Height}; |
160 | /// |
161 | /// let data = vec![ |
162 | /// ("Some \ndata" , "here" , "and here" ), |
163 | /// ("Some \ndata on a next" , "line" , "right here" ), |
164 | /// ]; |
165 | /// |
166 | /// let table = Table::new(&data) |
167 | /// .with(Height::limit(6)) |
168 | /// .to_string(); |
169 | /// |
170 | /// assert_eq!( |
171 | /// table, |
172 | /// "+------+------+------------+ \n\ |
173 | /// +------+------+------------+ \n\ |
174 | /// | Some | here | and here | \n\ |
175 | /// +------+------+------------+ \n\ |
176 | /// | Some | line | right here | \n\ |
177 | /// +------+------+------------+" , |
178 | /// ); |
179 | /// |
180 | /// let table = Table::new(&data) |
181 | /// .with(Height::limit(1)) |
182 | /// .to_string(); |
183 | /// |
184 | /// assert_eq!( |
185 | /// table, |
186 | /// "+--+--+--+ \n\ |
187 | /// +--+--+--+ \n\ |
188 | /// +--+--+--+ \n\ |
189 | /// +--+--+--+" , |
190 | /// ); |
191 | /// ``` |
192 | pub fn limit<W: Measurement<Height>>(width: W) -> CellHeightLimit<W> { |
193 | CellHeightLimit::new(width) |
194 | } |
195 | |
196 | /// Create [`HeightList`] to set a table height to a constant list of row heights. |
197 | /// |
198 | /// Notice if you provide a list with `.len()` less than `Table::count_rows` then it will have no affect. |
199 | /// |
200 | /// # Example |
201 | /// |
202 | /// ``` |
203 | /// use tabled::{Table, settings::{Height, Modify, object::Columns}}; |
204 | /// |
205 | /// let data = vec![ |
206 | /// ("Some \ndata" , "here" , "and here" ), |
207 | /// ("Some \ndata on a next" , "line" , "right here" ), |
208 | /// ]; |
209 | /// |
210 | /// let table = Table::new(data) |
211 | /// .with(Height::list([1, 0, 2])) |
212 | /// .to_string(); |
213 | /// |
214 | /// assert_eq!( |
215 | /// table, |
216 | /// "+----------------+------+------------+ \n\ |
217 | /// | &str | &str | &str | \n\ |
218 | /// +----------------+------+------------+ \n\ |
219 | /// +----------------+------+------------+ \n\ |
220 | /// | Some | line | right here | \n\ |
221 | /// | data on a next | | | \n\ |
222 | /// +----------------+------+------------+" , |
223 | /// ) |
224 | /// ``` |
225 | pub fn list<I: IntoIterator<Item = usize>>(rows: I) -> HeightList { |
226 | HeightList::new(rows.into_iter().collect()) |
227 | } |
228 | } |
229 | |