|
804 | 804 | <span id="799">799</span>
|
805 | 805 | <span id="800">800</span>
|
806 | 806 | <span id="801">801</span>
|
| 807 | +<span id="802">802</span> |
| 808 | +<span id="803">803</span> |
| 809 | +<span id="804">804</span> |
| 810 | +<span id="805">805</span> |
| 811 | +<span id="806">806</span> |
| 812 | +<span id="807">807</span> |
| 813 | +<span id="808">808</span> |
| 814 | +<span id="809">809</span> |
| 815 | +<span id="810">810</span> |
| 816 | +<span id="811">811</span> |
807 | 817 | </pre><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.</span>
|
808 | 818 | <span class="comment">// *</span>
|
809 | 819 | <span class="comment">// * For the full copyright and license information, please view the LICENSE</span>
|
|
814 | 824 | <span class="doccomment">//! A table ([`Table`]) comprises a header row ([`Header`]) and a</span>
|
815 | 825 | <span class="doccomment">//! collection of data rows ([`Row`]), one per filesystem.</span>
|
816 | 826 | <span class="kw">use</span> <span class="ident">number_prefix::NumberPrefix</span>;
|
| 827 | +<span class="kw">use</span> <span class="ident">unicode_width::UnicodeWidthStr</span>; |
817 | 828 |
|
818 | 829 | <span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::columns</span>::{<span class="ident">Alignment</span>, <span class="ident">Column</span>};
|
819 | 830 | <span class="kw">use</span> <span class="ident"><span class="kw">crate</span>::filesystem::Filesystem</span>;
|
|
1168 | 1179 | <span class="ident">total</span> <span class="op">+</span><span class="op">=</span> <span class="ident">row</span>;
|
1169 | 1180 |
|
1170 | 1181 | <span class="kw">for</span> (<span class="ident">i</span>, <span class="ident">value</span>) <span class="kw">in</span> <span class="ident">values</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>() {
|
1171 |
| - <span class="kw">if</span> <span class="ident">value</span>.<span class="ident">len</span>() <span class="op">></span> <span class="ident">widths</span>[<span class="ident">i</span>] { |
1172 |
| - <span class="ident">widths</span>[<span class="ident">i</span>] <span class="op">=</span> <span class="ident">value</span>.<span class="ident">len</span>(); |
| 1182 | + <span class="kw">if</span> <span class="ident">UnicodeWidthStr::width</span>(<span class="ident">value</span>.<span class="ident">as_str</span>()) <span class="op">></span> <span class="ident">widths</span>[<span class="ident">i</span>] { |
| 1183 | + <span class="ident">widths</span>[<span class="ident">i</span>] <span class="op">=</span> <span class="ident">UnicodeWidthStr::width</span>(<span class="ident">value</span>.<span class="ident">as_str</span>()); |
1173 | 1184 | }
|
1174 | 1185 | }
|
1175 | 1186 |
|
|
1206 | 1217 | <span class="kw">while</span> <span class="kw">let</span> <span class="prelude-val">Some</span>(<span class="ident">row</span>) <span class="op">=</span> <span class="ident">row_iter</span>.<span class="ident">next</span>() {
|
1207 | 1218 | <span class="kw">let</span> <span class="kw-2">mut</span> <span class="ident">col_iter</span> <span class="op">=</span> <span class="ident">row</span>.<span class="ident">iter</span>().<span class="ident">enumerate</span>().<span class="ident">peekable</span>();
|
1208 | 1219 | <span class="kw">while</span> <span class="kw">let</span> <span class="prelude-val">Some</span>((<span class="ident">i</span>, <span class="ident">elem</span>)) <span class="op">=</span> <span class="ident">col_iter</span>.<span class="ident">next</span>() {
|
| 1220 | + <span class="kw">let</span> <span class="ident">is_last_col</span> <span class="op">=</span> <span class="ident">col_iter</span>.<span class="ident">peek</span>().<span class="ident">is_none</span>(); |
| 1221 | + |
1209 | 1222 | <span class="kw">match</span> <span class="self">self</span>.<span class="ident">alignments</span>[<span class="ident">i</span>] {
|
1210 |
| - <span class="ident">Alignment::Left</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"{:<width$}"</span>, <span class="ident">elem</span>, <span class="ident">width</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">widths</span>[<span class="ident">i</span>])<span class="question-mark">?</span>, |
| 1223 | + <span class="ident">Alignment::Left</span> => { |
| 1224 | + <span class="kw">if</span> <span class="ident">is_last_col</span> { |
| 1225 | + <span class="comment">// no trailing spaces in last column</span> |
| 1226 | + <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"{}"</span>, <span class="ident">elem</span>)<span class="question-mark">?</span>; |
| 1227 | + } <span class="kw">else</span> { |
| 1228 | + <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"{:<width$}"</span>, <span class="ident">elem</span>, <span class="ident">width</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">widths</span>[<span class="ident">i</span>])<span class="question-mark">?</span>; |
| 1229 | + } |
| 1230 | + } |
1211 | 1231 | <span class="ident">Alignment::Right</span> => <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">"{:>width$}"</span>, <span class="ident">elem</span>, <span class="ident">width</span> <span class="op">=</span> <span class="self">self</span>.<span class="ident">widths</span>[<span class="ident">i</span>])<span class="question-mark">?</span>,
|
1212 | 1232 | }
|
1213 | 1233 |
|
1214 |
| - <span class="kw">if</span> <span class="ident">col_iter</span>.<span class="ident">peek</span>().<span class="ident">is_some</span>() { |
| 1234 | + <span class="kw">if</span> <span class="op">!</span><span class="ident">is_last_col</span> { |
1215 | 1235 | <span class="comment">// column separator</span>
|
1216 | 1236 | <span class="macro">write!</span>(<span class="ident">f</span>, <span class="string">" "</span>)<span class="question-mark">?</span>;
|
1217 | 1237 | }
|
|
0 commit comments