mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-08-01 13:37:48 +00:00
C flag for split
This commit is contained in:
parent
7945e3d51c
commit
93c3f02600
1 changed files with 14 additions and 1 deletions
|
@ -162,6 +162,8 @@ impl Splitter for LineSplitter {
|
||||||
struct ByteSplitter {
|
struct ByteSplitter {
|
||||||
saved_bytes_to_write: uint,
|
saved_bytes_to_write: uint,
|
||||||
bytes_to_write: uint,
|
bytes_to_write: uint,
|
||||||
|
break_on_line_end: bool,
|
||||||
|
require_whole_line: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Splitter for ByteSplitter {
|
impl Splitter for ByteSplitter {
|
||||||
|
@ -189,17 +191,28 @@ impl Splitter for ByteSplitter {
|
||||||
box ByteSplitter {
|
box ByteSplitter {
|
||||||
saved_bytes_to_write: n * multiplier,
|
saved_bytes_to_write: n * multiplier,
|
||||||
bytes_to_write: n * multiplier,
|
bytes_to_write: n * multiplier,
|
||||||
|
break_on_line_end: if settings.strategy == "b" { false } else { true },
|
||||||
|
require_whole_line: false,
|
||||||
} as Box<Splitter>
|
} as Box<Splitter>
|
||||||
}
|
}
|
||||||
|
|
||||||
fn consume(&mut self, control: &mut SplitControl) -> String {
|
fn consume(&mut self, control: &mut SplitControl) -> String {
|
||||||
let line = control.current_line.clone();
|
let line = control.current_line.clone();
|
||||||
let n = std::cmp::min(line.as_slice().chars().count(), self.bytes_to_write);
|
let n = std::cmp::min(line.as_slice().chars().count(), self.bytes_to_write);
|
||||||
|
if self.require_whole_line && n < line.as_slice().chars().count() {
|
||||||
|
self.bytes_to_write = self.saved_bytes_to_write;
|
||||||
|
control.request_new_file = true;
|
||||||
|
self.require_whole_line = false;
|
||||||
|
return line.as_slice().slice(0, 0).to_string();
|
||||||
|
}
|
||||||
self.bytes_to_write -= n;
|
self.bytes_to_write -= n;
|
||||||
if n == 0 {
|
if n == 0 {
|
||||||
self.bytes_to_write = self.saved_bytes_to_write;
|
self.bytes_to_write = self.saved_bytes_to_write;
|
||||||
control.request_new_file = true;
|
control.request_new_file = true;
|
||||||
}
|
}
|
||||||
|
if self.break_on_line_end && n == line.as_slice().chars().count() {
|
||||||
|
self.require_whole_line = self.break_on_line_end;
|
||||||
|
}
|
||||||
line.as_slice().slice(0, n).to_string()
|
line.as_slice().slice(0, n).to_string()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -250,7 +263,7 @@ fn split(settings: &Settings) -> int {
|
||||||
let mut splitter: Box<Splitter> =
|
let mut splitter: Box<Splitter> =
|
||||||
match settings.strategy.as_slice() {
|
match settings.strategy.as_slice() {
|
||||||
"l" => Splitter::new(None::<LineSplitter>, settings),
|
"l" => Splitter::new(None::<LineSplitter>, settings),
|
||||||
"b" => Splitter::new(None::<ByteSplitter>, settings),
|
"b" | "C" => Splitter::new(None::<ByteSplitter>, settings),
|
||||||
a @ _ => crash!(1, "strategy {} not supported", a)
|
a @ _ => crash!(1, "strategy {} not supported", a)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue