mirror of
https://github.com/sharkdp/hexyl.git
synced 2026-10-30 09:05:54 +00:00
Precalculate position formatting in Printer state
This commit is contained in:
1 parent
a6aeabfde4
commit
d214bc63f1
1 file changed
+38
-18
+38
-18
@@ -208,12 +208,13 @@ pub struct Printer<'a, Writer: Write> {
|
|||||||
/// the buffer containing all the bytes in a line for character printing
|
/// the buffer containing all the bytes in a line for character printing
|
||||||
line_buf: Vec<u8>,
|
line_buf: Vec<u8>,
|
||||||
writer: &'a mut Writer,
|
writer: &'a mut Writer,
|
||||||
show_color: bool,
|
|
||||||
show_char_panel: bool,
|
show_char_panel: bool,
|
||||||
show_position_panel: bool,
|
show_position_panel: bool,
|
||||||
border_style: BorderStyle,
|
border_style: BorderStyle,
|
||||||
byte_hex_panel: Vec<String>,
|
byte_hex_panel: Vec<String>,
|
||||||
byte_char_panel: Vec<String>,
|
byte_char_panel: Vec<String>,
|
||||||
|
byte_hex_panel_g: Vec<String>,
|
||||||
|
byte_char_panel_g: Vec<String>,
|
||||||
squeezer: Squeezer,
|
squeezer: Squeezer,
|
||||||
display_offset: u64,
|
display_offset: u64,
|
||||||
/// The number of panels to draw.
|
/// The number of panels to draw.
|
||||||
@@ -234,7 +235,6 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
|||||||
idx: 0,
|
idx: 0,
|
||||||
line_buf: vec![],
|
line_buf: vec![],
|
||||||
writer,
|
writer,
|
||||||
show_color,
|
|
||||||
show_char_panel,
|
show_char_panel,
|
||||||
show_position_panel,
|
show_position_panel,
|
||||||
border_style,
|
border_style,
|
||||||
@@ -262,6 +262,32 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
|||||||
.collect()
|
.collect()
|
||||||
})
|
})
|
||||||
.unwrap_or_default(),
|
.unwrap_or_default(),
|
||||||
|
byte_hex_panel_g: (0u8..=u8::MAX)
|
||||||
|
.map(|i| {
|
||||||
|
let byte_hex = format!("{:02x}", i);
|
||||||
|
let style = COLOR_OFFSET.normal();
|
||||||
|
if show_color {
|
||||||
|
style.paint(byte_hex).to_string()
|
||||||
|
} else {
|
||||||
|
byte_hex
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect(),
|
||||||
|
byte_char_panel_g: show_char_panel
|
||||||
|
.then(|| {
|
||||||
|
(0u8..=u8::MAX)
|
||||||
|
.map(|i| {
|
||||||
|
let byte_char = format!("{}", Byte(i).as_char());
|
||||||
|
let style = COLOR_OFFSET.normal();
|
||||||
|
if show_color {
|
||||||
|
style.paint(byte_char).to_string()
|
||||||
|
} else {
|
||||||
|
byte_char
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.collect()
|
||||||
|
})
|
||||||
|
.unwrap_or_default(),
|
||||||
squeezer: Squeezer::new(use_squeeze, 8 * panels as u64),
|
squeezer: Squeezer::new(use_squeeze, 8 * panels as u64),
|
||||||
display_offset: 0,
|
display_offset: 0,
|
||||||
panels,
|
panels,
|
||||||
@@ -321,32 +347,26 @@ impl<'a, Writer: Write> Printer<'a, Writer> {
|
|||||||
fn print_position_panel(&mut self) -> io::Result<()> {
|
fn print_position_panel(&mut self) -> io::Result<()> {
|
||||||
match self.squeezer.action() {
|
match self.squeezer.action() {
|
||||||
SqueezeAction::Print => {
|
SqueezeAction::Print => {
|
||||||
let style = COLOR_OFFSET.normal();
|
|
||||||
let asterisk = if self.show_color {
|
|
||||||
format!("{}", style.paint("*"))
|
|
||||||
} else {
|
|
||||||
String::from("*")
|
|
||||||
};
|
|
||||||
write!(
|
write!(
|
||||||
self.writer,
|
self.writer,
|
||||||
"{} {}",
|
"{} {}",
|
||||||
asterisk,
|
self.byte_char_panel_g[b'*' as usize],
|
||||||
self.border_style.outer_sep()
|
self.border_style.outer_sep()
|
||||||
)?;
|
)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
SqueezeAction::Ignore => {
|
SqueezeAction::Ignore => {
|
||||||
let style = COLOR_OFFSET.normal();
|
let byte_index: [u8; 8] = (self.idx + self.display_offset).to_be_bytes();
|
||||||
let byte_index = format!("{:08x}", self.idx + self.display_offset);
|
let mut i = 0;
|
||||||
let formatted_string = if self.show_color {
|
while byte_index[i] == 0x0 && i < 4 {
|
||||||
format!("{}", style.paint(byte_index))
|
i += 1;
|
||||||
} else {
|
}
|
||||||
byte_index
|
for &byte in byte_index.iter().skip(i) {
|
||||||
};
|
write!(self.writer, "{}", self.byte_hex_panel_g[byte as usize])?;
|
||||||
|
}
|
||||||
write!(
|
write!(
|
||||||
self.writer,
|
self.writer,
|
||||||
"{}{}",
|
"{}",
|
||||||
formatted_string,
|
|
||||||
self.border_style.outer_sep()
|
self.border_style.outer_sep()
|
||||||
)?;
|
)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
Reference in new issue
Block a user