You've already forked uutils.github.io
mirror of
https://github.com/uutils/uutils.github.io.git
synced 2026-06-10 16:12:28 -07:00
deploy: f0e8d44e6e
This commit is contained in:
+36
-70
@@ -433,23 +433,6 @@
|
||||
<a href="#433" id="433">433</a>
|
||||
<a href="#434" id="434">434</a>
|
||||
<a href="#435" id="435">435</a>
|
||||
<a href="#436" id="436">436</a>
|
||||
<a href="#437" id="437">437</a>
|
||||
<a href="#438" id="438">438</a>
|
||||
<a href="#439" id="439">439</a>
|
||||
<a href="#440" id="440">440</a>
|
||||
<a href="#441" id="441">441</a>
|
||||
<a href="#442" id="442">442</a>
|
||||
<a href="#443" id="443">443</a>
|
||||
<a href="#444" id="444">444</a>
|
||||
<a href="#445" id="445">445</a>
|
||||
<a href="#446" id="446">446</a>
|
||||
<a href="#447" id="447">447</a>
|
||||
<a href="#448" id="448">448</a>
|
||||
<a href="#449" id="449">449</a>
|
||||
<a href="#450" id="450">450</a>
|
||||
<a href="#451" id="451">451</a>
|
||||
<a href="#452" id="452">452</a>
|
||||
</pre></div><pre class="rust"><code><span class="comment">// * This file is part of the uutils coreutils package.
|
||||
// *
|
||||
// * (c) Tobias Bohumir Schottdorf <tobias.schottdorf@gmail.com>
|
||||
@@ -461,7 +444,6 @@
|
||||
</span><span class="kw">use </span>clap::{crate_version, Arg, ArgAction, Command};
|
||||
<span class="kw">use </span>std::fs::File;
|
||||
<span class="kw">use </span>std::io::{stdin, BufRead, BufReader, Read};
|
||||
<span class="kw">use </span>std::iter::repeat;
|
||||
<span class="kw">use </span>std::path::Path;
|
||||
<span class="kw">use </span>uucore::error::{FromIo, UResult, USimpleError};
|
||||
<span class="kw">use </span>uucore::{format_usage, help_about, help_section, help_usage};
|
||||
@@ -547,6 +529,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>NumberFormat {
|
||||
<span class="comment">// Turns a line number into a `String` with at least `min_width` chars,
|
||||
// formatted according to the `NumberFormat`s variant.
|
||||
</span><span class="kw">fn </span>format(<span class="kw-2">&</span><span class="self">self</span>, number: i64, min_width: usize) -> String {
|
||||
<span class="kw">match </span><span class="self">self </span>{
|
||||
<span class="self">Self</span>::Left => <span class="macro">format!</span>(<span class="string">"{number:<min_width$}"</span>),
|
||||
<span class="self">Self</span>::Right => <span class="macro">format!</span>(<span class="string">"{number:>min_width$}"</span>),
|
||||
<span class="self">Self</span>::RightZero <span class="kw">if </span>number < <span class="number">0 </span>=> <span class="macro">format!</span>(<span class="string">"-{0:0>1$}"</span>, number.abs(), min_width - <span class="number">1</span>),
|
||||
<span class="self">Self</span>::RightZero => <span class="macro">format!</span>(<span class="string">"{number:0>min_width$}"</span>),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<span class="kw">pub mod </span>options {
|
||||
<span class="kw">pub const </span>HELP: <span class="kw-2">&</span>str = <span class="string">"help"</span>;
|
||||
<span class="kw">pub const </span>FILE: <span class="kw-2">&</span>str = <span class="string">"file"</span>;
|
||||
@@ -715,13 +710,7 @@
|
||||
</span><span class="kw">fn </span>nl<T: Read>(reader: <span class="kw-2">&mut </span>BufReader<T>, settings: <span class="kw-2">&</span>Settings) -> UResult<()> {
|
||||
<span class="kw">let </span>regexp: regex::Regex = regex::Regex::new(<span class="string">r".?"</span>).unwrap();
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>line_no = settings.starting_line_number;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>line_no_width = line_no.len();
|
||||
<span class="kw">let </span>line_no_width_initial = line_no_width;
|
||||
<span class="kw">let </span><span class="kw-2">mut </span>empty_line_count: u64 = <span class="number">0</span>;
|
||||
<span class="kw">let </span>fill_char = <span class="kw">match </span>settings.number_format {
|
||||
NumberFormat::RightZero => <span class="string">'0'</span>,
|
||||
<span class="kw">_ </span>=> <span class="string">' '</span>,
|
||||
};
|
||||
<span class="comment">// Initially, we use the body's line counting settings
|
||||
</span><span class="kw">let </span><span class="kw-2">mut </span>regex_filter = <span class="kw">match </span>settings.body_numbering {
|
||||
NumberingStyle::NumberForRegularExpression(<span class="kw-2">ref </span>re) => re,
|
||||
@@ -774,10 +763,9 @@
|
||||
<span class="kw">match </span><span class="kw-2">*</span><span class="kw">match </span>matched_groups {
|
||||
<span class="number">3 </span>=> {
|
||||
<span class="comment">// This is a header, so we may need to reset the
|
||||
// line number and the line width
|
||||
// line number
|
||||
</span><span class="kw">if </span>settings.renumber {
|
||||
line_no = settings.starting_line_number;
|
||||
line_no_width = line_no_width_initial;
|
||||
}
|
||||
<span class="kw-2">&</span>settings.header_numbering
|
||||
}
|
||||
@@ -827,26 +815,17 @@
|
||||
// way, start counting empties from zero once more.
|
||||
</span>empty_line_count = <span class="number">0</span>;
|
||||
<span class="comment">// A line number is to be printed.
|
||||
</span><span class="kw">let </span>w = <span class="kw">if </span>settings.number_width > line_no_width {
|
||||
settings.number_width - line_no_width
|
||||
} <span class="kw">else </span>{
|
||||
<span class="number">0
|
||||
</span>};
|
||||
<span class="kw">let </span>fill: String = repeat(fill_char).take(w).collect();
|
||||
<span class="kw">match </span>settings.number_format {
|
||||
NumberFormat::Left => <span class="macro">println!</span>(
|
||||
<span class="string">"{1}{0}{2}{3}"</span>,
|
||||
fill, line_no, settings.number_separator, line
|
||||
),
|
||||
<span class="kw">_ </span>=> <span class="macro">println!</span>(
|
||||
<span class="string">"{0}{1}{2}{3}"</span>,
|
||||
fill, line_no, settings.number_separator, line
|
||||
),
|
||||
}
|
||||
<span class="comment">// Now update the variables for the (potential) next
|
||||
</span><span class="macro">println!</span>(
|
||||
<span class="string">"{}{}{}"</span>,
|
||||
settings
|
||||
.number_format
|
||||
.format(line_no, settings.number_width),
|
||||
settings.number_separator,
|
||||
line
|
||||
);
|
||||
<span class="comment">// Now update the line number for the (potential) next
|
||||
// line.
|
||||
</span>line_no += settings.line_increment;
|
||||
line_no_width = line_no.len();
|
||||
}
|
||||
<span class="prelude-val">Ok</span>(())
|
||||
}
|
||||
@@ -867,39 +846,26 @@
|
||||
<span class="bool-val">true
|
||||
</span>}
|
||||
|
||||
<span class="kw">trait </span>Length {
|
||||
<span class="kw">fn </span>len(<span class="kw-2">&</span><span class="self">self</span>) -> usize;
|
||||
}
|
||||
|
||||
<span class="kw">impl </span>Length <span class="kw">for </span>i64 {
|
||||
<span class="comment">// Returns the length in `char`s.
|
||||
</span><span class="kw">fn </span>len(<span class="kw-2">&</span><span class="self">self</span>) -> usize {
|
||||
<span class="kw">if </span><span class="kw-2">*</span><span class="self">self </span>== <span class="number">0 </span>{
|
||||
<span class="kw">return </span><span class="number">1</span>;
|
||||
};
|
||||
|
||||
<span class="kw">let </span>sign_len = <span class="kw">if </span><span class="kw-2">*</span><span class="self">self </span>< <span class="number">0 </span>{ <span class="number">1 </span>} <span class="kw">else </span>{ <span class="number">0 </span>};
|
||||
(<span class="number">0</span>..).take_while(|i| <span class="number">10i64</span>.pow(<span class="kw-2">*</span>i) <= <span class="self">self</span>.abs()).count() + sign_len
|
||||
}
|
||||
}
|
||||
|
||||
<span class="attr">#[cfg(test)]
|
||||
</span><span class="kw">mod </span>test {
|
||||
<span class="kw">use super</span>::<span class="kw-2">*</span>;
|
||||
|
||||
<span class="attr">#[test]
|
||||
</span><span class="kw">fn </span>test_len() {
|
||||
<span class="macro">assert_eq!</span>((-<span class="number">1</span>).len(), <span class="number">2</span>);
|
||||
<span class="macro">assert_eq!</span>((-<span class="number">10</span>).len(), <span class="number">3</span>);
|
||||
<span class="macro">assert_eq!</span>((-<span class="number">100</span>).len(), <span class="number">4</span>);
|
||||
<span class="macro">assert_eq!</span>((-<span class="number">1000</span>).len(), <span class="number">5</span>);
|
||||
</span><span class="kw">fn </span>test_format() {
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Left.format(<span class="number">12</span>, <span class="number">1</span>), <span class="string">"12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Left.format(-<span class="number">12</span>, <span class="number">1</span>), <span class="string">"-12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Left.format(<span class="number">12</span>, <span class="number">4</span>), <span class="string">"12 "</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Left.format(-<span class="number">12</span>, <span class="number">4</span>), <span class="string">"-12 "</span>);
|
||||
|
||||
<span class="macro">assert_eq!</span>(<span class="number">0</span>.len(), <span class="number">1</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Right.format(<span class="number">12</span>, <span class="number">1</span>), <span class="string">"12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Right.format(-<span class="number">12</span>, <span class="number">1</span>), <span class="string">"-12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Right.format(<span class="number">12</span>, <span class="number">4</span>), <span class="string">" 12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::Right.format(-<span class="number">12</span>, <span class="number">4</span>), <span class="string">" -12"</span>);
|
||||
|
||||
<span class="macro">assert_eq!</span>(<span class="number">1</span>.len(), <span class="number">1</span>);
|
||||
<span class="macro">assert_eq!</span>(<span class="number">10</span>.len(), <span class="number">2</span>);
|
||||
<span class="macro">assert_eq!</span>(<span class="number">100</span>.len(), <span class="number">3</span>);
|
||||
<span class="macro">assert_eq!</span>(<span class="number">1000</span>.len(), <span class="number">4</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::RightZero.format(<span class="number">12</span>, <span class="number">1</span>), <span class="string">"12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::RightZero.format(-<span class="number">12</span>, <span class="number">1</span>), <span class="string">"-12"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::RightZero.format(<span class="number">12</span>, <span class="number">4</span>), <span class="string">"0012"</span>);
|
||||
<span class="macro">assert_eq!</span>(NumberFormat::RightZero.format(-<span class="number">12</span>, <span class="number">4</span>), <span class="string">"-012"</span>);
|
||||
}
|
||||
}
|
||||
</code></pre></div></section></main></body></html>
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user