From 32acac4651c00ab39f3bc7790283821fe14d45d6 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Tue, 18 Jan 2022 21:05:13 +1300 Subject: [PATCH 01/14] Add --inner-separator option --- src/bin/hexyl.rs | 21 +++++++++++++++++++-- src/lib.rs | 13 +++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index 367cc4e7..bed88f3d 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -16,7 +16,7 @@ use const_format::formatcp; use thiserror::Error as ThisError; -use hexyl::{BorderStyle, Input, Printer}; +use hexyl::{BorderStyle, InnerSeparatorStyle, Input, Printer}; const DEFAULT_BLOCK_SIZE: i64 = 512; @@ -122,6 +122,17 @@ fn run() -> Result<(), AnyhowError> { or none at all", ), ) + .arg( + Arg::with_name("inner_separator") + .long("inner-separator") + .takes_value(true) + .value_name("STYLE") + .possible_values(&["visible", "none"]) + .default_value("visible") + .help( + "Whether to draw the inner separators visibly, invisibly, or not at all", // TODO: Rephrase this + ), + ) .arg( Arg::with_name("display_offset") .short("o") @@ -234,6 +245,12 @@ fn run() -> Result<(), AnyhowError> { Some("ascii") => BorderStyle::Ascii, _ => BorderStyle::None, }; + + let inner_separator_style = match matches.value_of("inner_separator") { + Some("visible") => InnerSeparatorStyle::Visible, + Some("invisible") => InnerSeparatorStyle::Invisible, + _ => InnerSeparatorStyle::None + }; let squeeze = !matches.is_present("nosqueezing"); @@ -251,7 +268,7 @@ fn run() -> Result<(), AnyhowError> { let stdout = io::stdout(); let mut stdout_lock = stdout.lock(); - let mut printer = Printer::new(&mut stdout_lock, show_color, border_style, squeeze); + let mut printer = Printer::new(&mut stdout_lock, show_color, border_style, inner_separator_style, squeeze); printer.display_offset(skip_offset + display_offset); printer.print_all(&mut reader).map_err(|e| anyhow!(e))?; diff --git a/src/lib.rs b/src/lib.rs index 41859da8..3149432d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -138,6 +138,12 @@ impl BorderStyle { } } +pub enum InnerSeparatorStyle { + Visible, + Invisible, + None, +} + pub struct Printer<'a, Writer: Write> { idx: u64, /// The raw bytes used as input for the current line. @@ -147,6 +153,7 @@ pub struct Printer<'a, Writer: Write> { writer: &'a mut Writer, show_color: bool, border_style: BorderStyle, + inner_separator_style: InnerSeparatorStyle, header_was_printed: bool, byte_hex_table: Vec, byte_char_table: Vec, @@ -159,6 +166,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writer: &'a mut Writer, show_color: bool, border_style: BorderStyle, + inner_separator_style: InnerSeparatorStyle, use_squeeze: bool, ) -> Printer<'a, Writer> { Printer { @@ -168,6 +176,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writer, show_color, border_style, + inner_separator_style, header_was_printed: false, byte_hex_table: (0u8..=u8::max_value()) .map(|i| { @@ -452,7 +461,7 @@ mod tests { fn assert_print_all_output(input: Reader, expected_string: String) -> () { let mut output = vec![]; - let mut printer = Printer::new(&mut output, false, BorderStyle::Unicode, true); + let mut printer = Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, true); printer.print_all(input).unwrap(); @@ -497,7 +506,7 @@ mod tests { let mut output = vec![]; let mut printer: Printer> = - Printer::new(&mut output, false, BorderStyle::Unicode, true); + Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, true); printer.display_offset(0xdeadbeef); printer.print_all(input).unwrap(); From 7c68cf463b3331ca9cea33fea4d897d01696b710 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 01:18:42 +1300 Subject: [PATCH 02/14] Split inner_separator option into separate options for hex and text display --- src/bin/hexyl.rs | 29 +++++++++++++++++++++++------ src/lib.rs | 13 ++++++++----- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index bed88f3d..b4804691 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -123,14 +123,25 @@ fn run() -> Result<(), AnyhowError> { ), ) .arg( - Arg::with_name("inner_separator") - .long("inner-separator") + Arg::with_name("hex_inner_separator") + .long("hex-inner-separator") .takes_value(true) .value_name("STYLE") - .possible_values(&["visible", "none"]) + .possible_values(&["visible", "invisible", "none"]) .default_value("visible") .help( - "Whether to draw the inner separators visibly, invisibly, or not at all", // TODO: Rephrase this + "Whether to draw the inner separator for the hex display visibly, invisibly, or not at all", // TODO: Rephrase this + ), + ) + .arg( + Arg::with_name("text_inner_separator") + .long("text-inner-separator") + .takes_value(true) + .value_name("STYLE") + .possible_values(&["visible", "invisible", "none"]) + .default_value("visible") + .help( + "Whether to draw the inner separator for the text display visibly, invisibly, or not at all", // TODO: Rephrase this ), ) .arg( @@ -246,7 +257,13 @@ fn run() -> Result<(), AnyhowError> { _ => BorderStyle::None, }; - let inner_separator_style = match matches.value_of("inner_separator") { + let hex_inner_separator_style = match matches.value_of("hex_inner_separator") { + Some("visible") => InnerSeparatorStyle::Visible, + Some("invisible") => InnerSeparatorStyle::Invisible, + _ => InnerSeparatorStyle::None + }; + + let text_inner_separator_style = match matches.value_of("text_inner_separator") { Some("visible") => InnerSeparatorStyle::Visible, Some("invisible") => InnerSeparatorStyle::Invisible, _ => InnerSeparatorStyle::None @@ -268,7 +285,7 @@ fn run() -> Result<(), AnyhowError> { let stdout = io::stdout(); let mut stdout_lock = stdout.lock(); - let mut printer = Printer::new(&mut stdout_lock, show_color, border_style, inner_separator_style, squeeze); + let mut printer = Printer::new(&mut stdout_lock, show_color, border_style, hex_inner_separator_style, text_inner_separator_style, squeeze); printer.display_offset(skip_offset + display_offset); printer.print_all(&mut reader).map_err(|e| anyhow!(e))?; diff --git a/src/lib.rs b/src/lib.rs index 3149432d..f127043d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -153,7 +153,8 @@ pub struct Printer<'a, Writer: Write> { writer: &'a mut Writer, show_color: bool, border_style: BorderStyle, - inner_separator_style: InnerSeparatorStyle, + hex_inner_separator_style: InnerSeparatorStyle, + text_inner_separator_style: InnerSeparatorStyle, header_was_printed: bool, byte_hex_table: Vec, byte_char_table: Vec, @@ -166,7 +167,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writer: &'a mut Writer, show_color: bool, border_style: BorderStyle, - inner_separator_style: InnerSeparatorStyle, + hex_inner_separator_style: InnerSeparatorStyle, + text_inner_separator_style: InnerSeparatorStyle, use_squeeze: bool, ) -> Printer<'a, Writer> { Printer { @@ -176,7 +178,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writer, show_color, border_style, - inner_separator_style, + hex_inner_separator_style, + text_inner_separator_style, header_was_printed: false, byte_hex_table: (0u8..=u8::max_value()) .map(|i| { @@ -461,7 +464,7 @@ mod tests { fn assert_print_all_output(input: Reader, expected_string: String) -> () { let mut output = vec![]; - let mut printer = Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, true); + let mut printer = Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); printer.print_all(input).unwrap(); @@ -506,7 +509,7 @@ mod tests { let mut output = vec![]; let mut printer: Printer> = - Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, true); + Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); printer.display_offset(0xdeadbeef); printer.print_all(input).unwrap(); From 2fe54e176e8797c955059a2b58de5def01b0deda Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 01:56:16 +1300 Subject: [PATCH 03/14] Modified structure of border config to allow more customization --- src/bin/hexyl.rs | 15 ++++--- src/lib.rs | 115 ++++++++++++++++++++++++++++++----------------- 2 files changed, 84 insertions(+), 46 deletions(-) diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index b4804691..44c51132 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -16,7 +16,7 @@ use const_format::formatcp; use thiserror::Error as ThisError; -use hexyl::{BorderStyle, InnerSeparatorStyle, Input, Printer}; +use hexyl::{BorderType, InnerSeparatorStyle, Input, Printer}; const DEFAULT_BLOCK_SIZE: i64 = 512; @@ -110,6 +110,7 @@ fn run() -> Result<(), AnyhowError> { goes to an interactive terminal", ), ) + // TODO: Revisit name, value_name of border, {hex,text}_inner_separator .arg( Arg::with_name("border") .long("border") @@ -250,11 +251,13 @@ fn run() -> Result<(), AnyhowError> { Some("auto") => atty::is(Stream::Stdout), _ => true, }; + + // TODO: Revisit name of border_type, {hex,text}_inner_separator_style - let border_style = match matches.value_of("border") { - Some("unicode") => BorderStyle::Unicode, - Some("ascii") => BorderStyle::Ascii, - _ => BorderStyle::None, + let border_type = match matches.value_of("border") { + Some("unicode") => BorderType::Unicode, + Some("ascii") => BorderType::Ascii, + _ => BorderType::None, }; let hex_inner_separator_style = match matches.value_of("hex_inner_separator") { @@ -285,7 +288,7 @@ fn run() -> Result<(), AnyhowError> { let stdout = io::stdout(); let mut stdout_lock = stdout.lock(); - let mut printer = Printer::new(&mut stdout_lock, show_color, border_style, hex_inner_separator_style, text_inner_separator_style, squeeze); + let mut printer = Printer::new(&mut stdout_lock, show_color, border_type, hex_inner_separator_style, text_inner_separator_style, squeeze); printer.display_offset(skip_offset + display_offset); printer.print_all(&mut reader).map_err(|e| anyhow!(e))?; diff --git a/src/lib.rs b/src/lib.rs index f127043d..15cebb54 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -72,78 +72,107 @@ impl Byte { } struct BorderElements { + // TODO: Replace with strings (whatever the type of a string literal is) left_corner: char, horizontal_line: char, - column_separator: char, + outer_separator: char, + hex_inner_separator: char, + text_inner_separator: char, right_corner: char, } -pub enum BorderStyle { +// TODO: Revisit name of BorderType and InnerSeparatorStyle + +pub enum BorderType { Unicode, Ascii, None, } +pub enum InnerSeparatorStyle { + Visible, + Invisible, + None, +} + +struct BorderStyle { + border_type: BorderType, + hex_inner_separator_style: InnerSeparatorStyle, + text_inner_separator_style: InnerSeparatorStyle, +} + impl BorderStyle { + // TODO: Deal with the new {hex,text}_inner_separator_style fields + fn header_elems(&self) -> Option { - match self { - BorderStyle::Unicode => Some(BorderElements { + match self.border_type { + BorderType::Unicode => Some(BorderElements { left_corner: '┌', horizontal_line: '─', - column_separator: '┬', + outer_separator: '┬', + hex_inner_separator: '┬', + text_inner_separator: '┬', right_corner: '┐', }), - BorderStyle::Ascii => Some(BorderElements { + BorderType::Ascii => Some(BorderElements { left_corner: '+', horizontal_line: '-', - column_separator: '+', + outer_separator: '+', + hex_inner_separator: '+', + text_inner_separator: '+', right_corner: '+', }), - BorderStyle::None => None, + BorderType::None => None, } } fn footer_elems(&self) -> Option { - match self { - BorderStyle::Unicode => Some(BorderElements { + match self.border_type { + BorderType::Unicode => Some(BorderElements { left_corner: '└', horizontal_line: '─', - column_separator: '┴', + outer_separator: '┴', + hex_inner_separator: '┴', + text_inner_separator: '┴', right_corner: '┘', }), - BorderStyle::Ascii => Some(BorderElements { + BorderType::Ascii => Some(BorderElements { left_corner: '+', horizontal_line: '-', - column_separator: '+', + outer_separator: '+', + hex_inner_separator: '+', + text_inner_separator: '+', right_corner: '+', }), - BorderStyle::None => None, + BorderType::None => None, + } + } + + fn edge_sep(&self) -> char { + match self.border_type { + BorderType::Unicode => '│', + BorderType::Ascii => '|', + BorderType::None => ' ', } } fn outer_sep(&self) -> char { - match self { - BorderStyle::Unicode => '│', - BorderStyle::Ascii => '|', - BorderStyle::None => ' ', + match self.border_type { + BorderType::Unicode => '│', + BorderType::Ascii => '|', + BorderType::None => ' ', } } fn inner_sep(&self) -> char { - match self { - BorderStyle::Unicode => '┊', - BorderStyle::Ascii => '|', - BorderStyle::None => ' ', + match self.border_type { + BorderType::Unicode => '┊', + BorderType::Ascii => '|', + BorderType::None => ' ', } } } -pub enum InnerSeparatorStyle { - Visible, - Invisible, - None, -} - pub struct Printer<'a, Writer: Write> { idx: u64, /// The raw bytes used as input for the current line. @@ -153,8 +182,6 @@ pub struct Printer<'a, Writer: Write> { writer: &'a mut Writer, show_color: bool, border_style: BorderStyle, - hex_inner_separator_style: InnerSeparatorStyle, - text_inner_separator_style: InnerSeparatorStyle, header_was_printed: bool, byte_hex_table: Vec, byte_char_table: Vec, @@ -166,7 +193,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { pub fn new( writer: &'a mut Writer, show_color: bool, - border_style: BorderStyle, + // TODO: Revisit name of border_type, {hex,text}_inner_separator_style + border_type: BorderType, hex_inner_separator_style: InnerSeparatorStyle, text_inner_separator_style: InnerSeparatorStyle, use_squeeze: bool, @@ -177,9 +205,12 @@ impl<'a, Writer: Write> Printer<'a, Writer> { buffer_line: vec![], writer, show_color, - border_style, - hex_inner_separator_style, - text_inner_separator_style, + // TODO: Revisit name of border_type, {hex,text}_inner_separator_style + border_style: BorderStyle { + border_type, + hex_inner_separator_style, + text_inner_separator_style, + }, header_was_printed: false, byte_hex_table: (0u8..=u8::max_value()) .map(|i| { @@ -219,9 +250,11 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writeln!( self.writer, - "{l}{h8}{c}{h25}{c}{h25}{c}{h8}{c}{h8}{r}", + "{l}{h8}{o}{h25}{x}{h25}{o}{h8}{t}{h8}{r}", l = border_elements.left_corner, - c = border_elements.column_separator, + o = border_elements.outer_separator, + x = border_elements.hex_inner_separator, + t = border_elements.text_inner_separator, r = border_elements.right_corner, h8 = h8, h25 = h25 @@ -238,9 +271,11 @@ impl<'a, Writer: Write> Printer<'a, Writer> { writeln!( self.writer, - "{l}{h8}{c}{h25}{c}{h25}{c}{h8}{c}{h8}{r}", + "{l}{h8}{o}{h25}{x}{h25}{o}{h8}{t}{h8}{r}", l = border_elements.left_corner, - c = border_elements.column_separator, + o = border_elements.outer_separator, + x = border_elements.hex_inner_separator, + t = border_elements.text_inner_separator, r = border_elements.right_corner, h8 = h8, h25 = h25 @@ -464,7 +499,7 @@ mod tests { fn assert_print_all_output(input: Reader, expected_string: String) -> () { let mut output = vec![]; - let mut printer = Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); + let mut printer = Printer::new(&mut output, false, BorderType::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); printer.print_all(input).unwrap(); @@ -509,7 +544,7 @@ mod tests { let mut output = vec![]; let mut printer: Printer> = - Printer::new(&mut output, false, BorderStyle::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); + Printer::new(&mut output, false, BorderType::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); printer.display_offset(0xdeadbeef); printer.print_all(input).unwrap(); From df8d8a47d8fa72571f25aae6ab717bfa2d325fa4 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 02:13:41 +1300 Subject: [PATCH 04/14] Replaced border chars with &str --- src/lib.rs | 86 +++++++++++++++++++++++++++--------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 15cebb54..26878265 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -72,13 +72,13 @@ impl Byte { } struct BorderElements { - // TODO: Replace with strings (whatever the type of a string literal is) - left_corner: char, - horizontal_line: char, - outer_separator: char, - hex_inner_separator: char, - text_inner_separator: char, - right_corner: char, + // TODO: Lifetime Parameter + left_corner: &str, + horizontal_line: &str, + outer_separator: &str, + hex_inner_separator: &str, + text_inner_separator: &str, + right_corner: &str, } // TODO: Revisit name of BorderType and InnerSeparatorStyle @@ -107,20 +107,20 @@ impl BorderStyle { fn header_elems(&self) -> Option { match self.border_type { BorderType::Unicode => Some(BorderElements { - left_corner: '┌', - horizontal_line: '─', - outer_separator: '┬', - hex_inner_separator: '┬', - text_inner_separator: '┬', - right_corner: '┐', + left_corner: "┌", + horizontal_line: "─", + outer_separator: "┬", + hex_inner_separator: "┬", + text_inner_separator: "┬", + right_corner: "┐", }), BorderType::Ascii => Some(BorderElements { - left_corner: '+', - horizontal_line: '-', - outer_separator: '+', - hex_inner_separator: '+', - text_inner_separator: '+', - right_corner: '+', + left_corner: "+", + horizontal_line: "-", + outer_separator: "+", + hex_inner_separator: "+", + text_inner_separator: "+", + right_corner: "+", }), BorderType::None => None, } @@ -129,46 +129,46 @@ impl BorderStyle { fn footer_elems(&self) -> Option { match self.border_type { BorderType::Unicode => Some(BorderElements { - left_corner: '└', - horizontal_line: '─', - outer_separator: '┴', - hex_inner_separator: '┴', - text_inner_separator: '┴', - right_corner: '┘', + left_corner: "└", + horizontal_line: "─", + outer_separator: "┴", + hex_inner_separator: "┴", + text_inner_separator: "┴", + right_corner: "┘", }), BorderType::Ascii => Some(BorderElements { - left_corner: '+', - horizontal_line: '-', - outer_separator: '+', - hex_inner_separator: '+', - text_inner_separator: '+', - right_corner: '+', + left_corner: "+", + horizontal_line: "-", + outer_separator: "+", + hex_inner_separator: "+", + text_inner_separator: "+", + right_corner: "+", }), BorderType::None => None, } } - fn edge_sep(&self) -> char { + fn edge_sep(&self) -> &str { match self.border_type { - BorderType::Unicode => '│', - BorderType::Ascii => '|', - BorderType::None => ' ', + BorderType::Unicode => "│", + BorderType::Ascii => "|", + BorderType::None => "", } } - fn outer_sep(&self) -> char { + fn outer_sep(&self) -> &str { match self.border_type { - BorderType::Unicode => '│', - BorderType::Ascii => '|', - BorderType::None => ' ', + BorderType::Unicode => "│", + BorderType::Ascii => "|", + BorderType::None => " ", } } - fn inner_sep(&self) -> char { + fn inner_sep(&self) -> &str { match self.border_type { - BorderType::Unicode => '┊', - BorderType::Ascii => '|', - BorderType::None => ' ', + BorderType::Unicode => "┊", + BorderType::Ascii => "|", + BorderType::None => " ", } } } From 62fe0d28effe184275c681c6b1bd7441a19914c1 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 02:17:40 +1300 Subject: [PATCH 05/14] Rename ({edge,outer,inner})_sep to $1_separator --- src/lib.rs | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 26878265..164d0b85 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -148,7 +148,9 @@ impl BorderStyle { } } - fn edge_sep(&self) -> &str { + // TODO: Use edge_separator() where appropriate + + fn edge_separator(&self) -> &str { match self.border_type { BorderType::Unicode => "│", BorderType::Ascii => "|", @@ -156,7 +158,7 @@ impl BorderStyle { } } - fn outer_sep(&self) -> &str { + fn outer_separator(&self) -> &str { match self.border_type { BorderType::Unicode => "│", BorderType::Ascii => "|", @@ -164,7 +166,7 @@ impl BorderStyle { } } - fn inner_sep(&self) -> &str { + fn inner_separator(&self) -> &str { match self.border_type { BorderType::Unicode => "┊", BorderType::Ascii => "|", @@ -300,9 +302,9 @@ impl<'a, Writer: Write> Printer<'a, Writer> { let _ = write!( &mut self.buffer_line, "{}{}{} ", - self.border_style.outer_sep(), + self.border_style.outer_separator(), formatted_string, - self.border_style.outer_sep() + self.border_style.outer_separator() ); } @@ -318,7 +320,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { match self.idx % 16 { 8 => { - let _ = write!(&mut self.buffer_line, "{} ", self.border_style.inner_sep()); + let _ = write!(&mut self.buffer_line, "{} ", self.border_style.inner_separator()); } 0 => { self.print_textline()?; @@ -344,8 +346,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 24, 25, 8, - self.border_style.inner_sep(), - self.border_style.outer_sep(), + self.border_style.inner_separator(), + self.border_style.outer_separator(), ); self.writer.write_all(&self.buffer_line)?; } @@ -362,8 +364,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "", 3 * (8 - len), 1 + 3 * 8, - self.border_style.inner_sep(), - self.border_style.outer_sep(), + self.border_style.inner_separator(), + self.border_style.outer_separator(), ); } else { let _ = write!( @@ -371,7 +373,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "{0:1$}{2}", "", 3 * (16 - len), - self.border_style.outer_sep() + self.border_style.outer_separator() ); } @@ -384,7 +386,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { ); if idx == 8 { - let _ = write!(&mut self.buffer_line, "{}", self.border_style.inner_sep()); + let _ = write!(&mut self.buffer_line, "{}", self.border_style.inner_separator()); } idx += 1; @@ -397,8 +399,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "", 8 - len, 8, - self.border_style.inner_sep(), - self.border_style.outer_sep(), + self.border_style.inner_separator(), + self.border_style.outer_separator(), ); } else { let _ = writeln!( @@ -406,7 +408,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "{0:1$}{2}", "", 16 - len, - self.border_style.outer_sep() + self.border_style.outer_separator() ); } } @@ -428,8 +430,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 7, 25, 8, - self.border_style.outer_sep(), - self.border_style.inner_sep(), + self.border_style.outer_separator(), + self.border_style.inner_separator(), ); } SqueezeAction::Delete => self.buffer_line.clear(), From 1cb18d69392b4d82ed94a19f0a40ccfd9b471bb9 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 02:29:16 +1300 Subject: [PATCH 06/14] Add lifetime parameters to BorderElements --- src/lib.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 164d0b85..68753508 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -71,14 +71,13 @@ impl Byte { } } -struct BorderElements { - // TODO: Lifetime Parameter - left_corner: &str, - horizontal_line: &str, - outer_separator: &str, - hex_inner_separator: &str, - text_inner_separator: &str, - right_corner: &str, +struct BorderElements<'a> { + left_corner: &'a str, + horizontal_line: &'a str, + outer_separator: &'a str, + hex_inner_separator: &'a str, + text_inner_separator: &'a str, + right_corner: &'a str, } // TODO: Revisit name of BorderType and InnerSeparatorStyle From bdd7f8e2a5caf02b67c74ba7e45ebaf0d18d799e Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 02:56:58 +1300 Subject: [PATCH 07/14] Removed leading and trailing spaced with --border none --- src/lib.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 68753508..2f48afee 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -147,16 +147,14 @@ impl BorderStyle { } } - // TODO: Use edge_separator() where appropriate - - fn edge_separator(&self) -> &str { + fn inner_separator(&self) -> &str { match self.border_type { - BorderType::Unicode => "│", + BorderType::Unicode => "┊", BorderType::Ascii => "|", - BorderType::None => "", + BorderType::None => " ", } } - + fn outer_separator(&self) -> &str { match self.border_type { BorderType::Unicode => "│", @@ -164,12 +162,12 @@ impl BorderStyle { BorderType::None => " ", } } - - fn inner_separator(&self) -> &str { + + fn edge_separator(&self) -> &str { match self.border_type { - BorderType::Unicode => "┊", + BorderType::Unicode => "│", BorderType::Ascii => "|", - BorderType::None => " ", + BorderType::None => "", } } } @@ -301,7 +299,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { let _ = write!( &mut self.buffer_line, "{}{}{} ", - self.border_style.outer_separator(), + self.border_style.edge_separator(), formatted_string, self.border_style.outer_separator() ); @@ -340,13 +338,14 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.print_position_indicator(); let _ = writeln!( &mut self.buffer_line, - "{0:1$}{4}{0:2$}{5}{0:3$}{4}{0:3$}{5}", + "{0:1$}{4}{0:2$}{5}{0:3$}{4}{0:3$}{6}", "", 24, 25, 8, self.border_style.inner_separator(), self.border_style.outer_separator(), + self.border_style.edge_separator(), ); self.writer.write_all(&self.buffer_line)?; } @@ -399,7 +398,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 8 - len, 8, self.border_style.inner_separator(), - self.border_style.outer_separator(), + self.border_style.edge_separator(), ); } else { let _ = writeln!( @@ -407,7 +406,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "{0:1$}{2}", "", 16 - len, - self.border_style.outer_separator() + self.border_style.edge_separator() ); } } @@ -423,14 +422,15 @@ impl<'a, Writer: Write> Printer<'a, Writer> { }; let _ = writeln!( &mut self.buffer_line, - "{5}{0}{1:2$}{5}{1:3$}{6}{1:3$}{5}{1:4$}{6}{1:4$}{5}", + "{7}{0}{1:2$}{6}{1:3$}{5}{1:3$}{6}{1:4$}{5}{1:4$}{7}", asterisk, "", 7, 25, 8, - self.border_style.outer_separator(), self.border_style.inner_separator(), + self.border_style.outer_separator(), + self.border_style.edge_separator(), ); } SqueezeAction::Delete => self.buffer_line.clear(), From 5772c4957d2b7524a6a197caec84cb0f22b89eab Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 02:59:15 +1300 Subject: [PATCH 08/14] Finished split of inner_separator into hex and text --- src/lib.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 2f48afee..8247aa13 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -147,7 +147,15 @@ impl BorderStyle { } } - fn inner_separator(&self) -> &str { + fn hex_inner_separator(&self) -> &str { + match self.border_type { + BorderType::Unicode => "┊", + BorderType::Ascii => "|", + BorderType::None => " ", + } + } + + fn text_inner_separator(&self) -> &str { match self.border_type { BorderType::Unicode => "┊", BorderType::Ascii => "|", @@ -304,6 +312,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.border_style.outer_separator() ); } + + // TODO: Replace inner_separator() with appropriate hex or text variant pub fn print_byte(&mut self, b: u8) -> io::Result<()> { if self.idx % 16 == 1 { From 0218766acbe69202ed8c620650aa4cada1cb9f37 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 03:12:00 +1300 Subject: [PATCH 09/14] Trim InnerSeparatorStyle down to Visible and None --- src/bin/hexyl.rs | 6 ++---- src/lib.rs | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index 44c51132..18992f3c 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -128,7 +128,7 @@ fn run() -> Result<(), AnyhowError> { .long("hex-inner-separator") .takes_value(true) .value_name("STYLE") - .possible_values(&["visible", "invisible", "none"]) + .possible_values(&["visible", "none"]) .default_value("visible") .help( "Whether to draw the inner separator for the hex display visibly, invisibly, or not at all", // TODO: Rephrase this @@ -139,7 +139,7 @@ fn run() -> Result<(), AnyhowError> { .long("text-inner-separator") .takes_value(true) .value_name("STYLE") - .possible_values(&["visible", "invisible", "none"]) + .possible_values(&["visible", "none"]) .default_value("visible") .help( "Whether to draw the inner separator for the text display visibly, invisibly, or not at all", // TODO: Rephrase this @@ -262,13 +262,11 @@ fn run() -> Result<(), AnyhowError> { let hex_inner_separator_style = match matches.value_of("hex_inner_separator") { Some("visible") => InnerSeparatorStyle::Visible, - Some("invisible") => InnerSeparatorStyle::Invisible, _ => InnerSeparatorStyle::None }; let text_inner_separator_style = match matches.value_of("text_inner_separator") { Some("visible") => InnerSeparatorStyle::Visible, - Some("invisible") => InnerSeparatorStyle::Invisible, _ => InnerSeparatorStyle::None }; diff --git a/src/lib.rs b/src/lib.rs index 8247aa13..b7432c28 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -90,7 +90,6 @@ pub enum BorderType { pub enum InnerSeparatorStyle { Visible, - Invisible, None, } From 89c5d2cbaf7f4f55cdd12071184da533f536af3c Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 12:44:40 +1300 Subject: [PATCH 10/14] Add --outer-border option --- src/bin/hexyl.rs | 24 ++++++++++++++++++++---- src/lib.rs | 12 ++++++++++-- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/bin/hexyl.rs b/src/bin/hexyl.rs index 18992f3c..a7946136 100644 --- a/src/bin/hexyl.rs +++ b/src/bin/hexyl.rs @@ -16,7 +16,7 @@ use const_format::formatcp; use thiserror::Error as ThisError; -use hexyl::{BorderType, InnerSeparatorStyle, Input, Printer}; +use hexyl::{BorderType, InnerSeparatorStyle, Input, OuterBorderStyle, Printer}; const DEFAULT_BLOCK_SIZE: i64 = 512; @@ -131,7 +131,7 @@ fn run() -> Result<(), AnyhowError> { .possible_values(&["visible", "none"]) .default_value("visible") .help( - "Whether to draw the inner separator for the hex display visibly, invisibly, or not at all", // TODO: Rephrase this + "Whether or not to draw the inner separator for the hex display", // TODO: Rephrase this ), ) .arg( @@ -142,7 +142,18 @@ fn run() -> Result<(), AnyhowError> { .possible_values(&["visible", "none"]) .default_value("visible") .help( - "Whether to draw the inner separator for the text display visibly, invisibly, or not at all", // TODO: Rephrase this + "Whether or not to draw the inner separator for the text display", // TODO: Rephrase this + ), + ) + .arg( + Arg::with_name("outer_border") + .long("outer-border") + .takes_value(true) + .value_name("STYLE") + .possible_values(&["visible", "none"]) + .default_value("visible") + .help( + "Whether or not to draw the outer border", // TODO: Rephrase this ), ) .arg( @@ -269,6 +280,11 @@ fn run() -> Result<(), AnyhowError> { Some("visible") => InnerSeparatorStyle::Visible, _ => InnerSeparatorStyle::None }; + + let outer_border_style = match matches.value_of("outer_border") { + Some("visible") => OuterBorderStyle::Visible, + _ => OuterBorderStyle::None + }; let squeeze = !matches.is_present("nosqueezing"); @@ -286,7 +302,7 @@ fn run() -> Result<(), AnyhowError> { let stdout = io::stdout(); let mut stdout_lock = stdout.lock(); - let mut printer = Printer::new(&mut stdout_lock, show_color, border_type, hex_inner_separator_style, text_inner_separator_style, squeeze); + let mut printer = Printer::new(&mut stdout_lock, show_color, border_type, hex_inner_separator_style, text_inner_separator_style, outer_border_style, squeeze); printer.display_offset(skip_offset + display_offset); printer.print_all(&mut reader).map_err(|e| anyhow!(e))?; diff --git a/src/lib.rs b/src/lib.rs index b7432c28..b0e9c56f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -93,10 +93,16 @@ pub enum InnerSeparatorStyle { None, } +pub enum OuterBorderStyle { + Visible, + None, +} + struct BorderStyle { border_type: BorderType, hex_inner_separator_style: InnerSeparatorStyle, text_inner_separator_style: InnerSeparatorStyle, + outer_border_style: OuterBorderStyle, } impl BorderStyle { @@ -203,6 +209,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { border_type: BorderType, hex_inner_separator_style: InnerSeparatorStyle, text_inner_separator_style: InnerSeparatorStyle, + outer_border_style: OuterBorderStyle, use_squeeze: bool, ) -> Printer<'a, Writer> { Printer { @@ -216,6 +223,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { border_type, hex_inner_separator_style, text_inner_separator_style, + outer_border_style, }, header_was_printed: false, byte_hex_table: (0u8..=u8::max_value()) @@ -509,7 +517,7 @@ mod tests { fn assert_print_all_output(input: Reader, expected_string: String) -> () { let mut output = vec![]; - let mut printer = Printer::new(&mut output, false, BorderType::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); + let mut printer = Printer::new(&mut output, false, BorderType::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, OuterBorderStyle::Visible, true); printer.print_all(input).unwrap(); @@ -554,7 +562,7 @@ mod tests { let mut output = vec![]; let mut printer: Printer> = - Printer::new(&mut output, false, BorderType::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, true); + Printer::new(&mut output, false, BorderType::Unicode, InnerSeparatorStyle::Visible, InnerSeparatorStyle::Visible, OuterBorderStyle::Visible, true); printer.display_offset(0xdeadbeef); printer.print_all(input).unwrap(); From 9df72fa01c7a09b0712470bfbea16524108003f1 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 13:08:34 +1300 Subject: [PATCH 11/14] Replaced all inner_separator() with appropriate hex or text variant --- src/lib.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index b0e9c56f..beff311a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -319,8 +319,6 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.border_style.outer_separator() ); } - - // TODO: Replace inner_separator() with appropriate hex or text variant pub fn print_byte(&mut self, b: u8) -> io::Result<()> { if self.idx % 16 == 1 { @@ -334,7 +332,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { match self.idx % 16 { 8 => { - let _ = write!(&mut self.buffer_line, "{} ", self.border_style.inner_separator()); + let _ = write!(&mut self.buffer_line, "{} ", self.border_style.hex_inner_separator()); } 0 => { self.print_textline()?; @@ -355,12 +353,13 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.print_position_indicator(); let _ = writeln!( &mut self.buffer_line, - "{0:1$}{4}{0:2$}{5}{0:3$}{4}{0:3$}{6}", + "{0:1$}{4}{0:2$}{6}{0:3$}{5}{0:3$}{7}", "", 24, 25, 8, - self.border_style.inner_separator(), + self.border_style.hex_inner_separator(), + self.border_style.text_inner_separator(), self.border_style.outer_separator(), self.border_style.edge_separator(), ); @@ -379,7 +378,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "", 3 * (8 - len), 1 + 3 * 8, - self.border_style.inner_separator(), + self.border_style.hex_inner_separator(), self.border_style.outer_separator(), ); } else { @@ -401,7 +400,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { ); if idx == 8 { - let _ = write!(&mut self.buffer_line, "{}", self.border_style.inner_separator()); + let _ = write!(&mut self.buffer_line, "{}", self.border_style.text_inner_separator()); } idx += 1; @@ -414,7 +413,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "", 8 - len, 8, - self.border_style.inner_separator(), + self.border_style.text_inner_separator(), self.border_style.edge_separator(), ); } else { @@ -439,13 +438,14 @@ impl<'a, Writer: Write> Printer<'a, Writer> { }; let _ = writeln!( &mut self.buffer_line, - "{7}{0}{1:2$}{6}{1:3$}{5}{1:3$}{6}{1:4$}{5}{1:4$}{7}", + "{8}{0}{1:2$}{7}{1:3$}{5}{1:3$}{7}{1:4$}{6}{1:4$}{8}", asterisk, "", 7, 25, 8, - self.border_style.inner_separator(), + self.border_style.hex_inner_separator(), + self.border_style.text_inner_separator(), self.border_style.outer_separator(), self.border_style.edge_separator(), ); From 7fb79a2d5b5778452c847d18fa0d321a89925310 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 13:30:04 +1300 Subject: [PATCH 12/14] BorderStyle now returns appropriate characters for it's configuration --- src/lib.rs | 153 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 99 insertions(+), 54 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index beff311a..32948056 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -106,81 +106,126 @@ struct BorderStyle { } impl BorderStyle { - // TODO: Deal with the new {hex,text}_inner_separator_style fields - fn header_elems(&self) -> Option { - match self.border_type { - BorderType::Unicode => Some(BorderElements { - left_corner: "┌", - horizontal_line: "─", - outer_separator: "┬", - hex_inner_separator: "┬", - text_inner_separator: "┬", - right_corner: "┐", - }), - BorderType::Ascii => Some(BorderElements { - left_corner: "+", - horizontal_line: "-", - outer_separator: "+", - hex_inner_separator: "+", - text_inner_separator: "+", - right_corner: "+", - }), - BorderType::None => None, + match self.outer_border_style { + OuterBorderStyle::Visible => match self.border_type { + BorderType::Unicode => Some(BorderElements { + left_corner: "┌", + horizontal_line: "─", + outer_separator: "┬", + hex_inner_separator: match self.hex_inner_separator_style { + InnerSeparatorStyle::Visible => "┬", + InnerSeparatorStyle::None => "", + }, + text_inner_separator: match self.text_inner_separator_style { + InnerSeparatorStyle::Visible => "┬", + InnerSeparatorStyle::None => "", + }, + right_corner: "┐", + }), + BorderType::Ascii => Some(BorderElements { + left_corner: "+", + horizontal_line: "-", + outer_separator: "+", + hex_inner_separator: match self.hex_inner_separator_style { + InnerSeparatorStyle::Visible => "+", + InnerSeparatorStyle::None => "", + }, + text_inner_separator: match self.text_inner_separator_style { + InnerSeparatorStyle::Visible => "+", + InnerSeparatorStyle::None => "", + }, + right_corner: "+", + }), + BorderType::None => None, + }, + OuterBorderStyle::None => None, } } fn footer_elems(&self) -> Option { - match self.border_type { - BorderType::Unicode => Some(BorderElements { - left_corner: "└", - horizontal_line: "─", - outer_separator: "┴", - hex_inner_separator: "┴", - text_inner_separator: "┴", - right_corner: "┘", - }), - BorderType::Ascii => Some(BorderElements { - left_corner: "+", - horizontal_line: "-", - outer_separator: "+", - hex_inner_separator: "+", - text_inner_separator: "+", - right_corner: "+", - }), - BorderType::None => None, + match self.outer_border_style { + OuterBorderStyle::Visible => match self.border_type { + BorderType::Unicode => Some(BorderElements { + left_corner: "└", + horizontal_line: "─", + outer_separator: "┴", + hex_inner_separator: match self.hex_inner_separator_style { + InnerSeparatorStyle::Visible => "┴", + InnerSeparatorStyle::None => "", + }, + text_inner_separator: match self.text_inner_separator_style { + InnerSeparatorStyle::Visible => "┴", + InnerSeparatorStyle::None => "", + }, + right_corner: "┘", + }), + BorderType::Ascii => Some(BorderElements { + left_corner: "+", + horizontal_line: "-", + outer_separator: "+", + hex_inner_separator: match self.hex_inner_separator_style { + InnerSeparatorStyle::Visible => "+", + InnerSeparatorStyle::None => "", + }, + text_inner_separator: match self.text_inner_separator_style { + InnerSeparatorStyle::Visible => "+", + InnerSeparatorStyle::None => "", + }, + right_corner: "+", + }), + BorderType::None => None, + }, + OuterBorderStyle::None => None, } } fn hex_inner_separator(&self) -> &str { - match self.border_type { - BorderType::Unicode => "┊", - BorderType::Ascii => "|", - BorderType::None => " ", + match self.hex_inner_separator_style { + InnerSeparatorStyle::Visible => match self.border_type { + BorderType::Unicode => "┊", + BorderType::Ascii => "|", + BorderType::None => " ", + }, + InnerSeparatorStyle::None => "", } } fn text_inner_separator(&self) -> &str { - match self.border_type { - BorderType::Unicode => "┊", - BorderType::Ascii => "|", - BorderType::None => " ", + match self.text_inner_separator_style { + InnerSeparatorStyle::Visible => match self.border_type { + BorderType::Unicode => "┊", + BorderType::Ascii => "|", + BorderType::None => " ", + }, + InnerSeparatorStyle::None => "", } } fn outer_separator(&self) -> &str { - match self.border_type { - BorderType::Unicode => "│", - BorderType::Ascii => "|", - BorderType::None => " ", + match self.outer_border_style { + OuterBorderStyle::Visible => match self.border_type { + BorderType::Unicode => "│", + BorderType::Ascii => "|", + BorderType::None => " ", + }, + // TODO: Fix style on hex display + OuterBorderStyle::None => match self.border_type { + BorderType::Unicode => " │ ", + BorderType::Ascii => " | ", + BorderType::None => " ", + }, } } fn edge_separator(&self) -> &str { - match self.border_type { - BorderType::Unicode => "│", - BorderType::Ascii => "|", - BorderType::None => "", + match self.outer_border_style { + OuterBorderStyle::Visible => match self.border_type { + BorderType::Unicode => "│", + BorderType::Ascii => "|", + BorderType::None => "", + }, + OuterBorderStyle::None => "", } } } From 8858f975a4f0d7928a9dca46c91b1f82ca69eac5 Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 22:15:36 +1300 Subject: [PATCH 13/14] --outer-border none now looks somewhat reasonable --- src/lib.rs | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 32948056..b93e0c8f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -203,22 +203,14 @@ impl BorderStyle { } fn outer_separator(&self) -> &str { - match self.outer_border_style { - OuterBorderStyle::Visible => match self.border_type { + match self.border_type { BorderType::Unicode => "│", BorderType::Ascii => "|", BorderType::None => " ", - }, - // TODO: Fix style on hex display - OuterBorderStyle::None => match self.border_type { - BorderType::Unicode => " │ ", - BorderType::Ascii => " | ", - BorderType::None => " ", - }, } } - fn edge_separator(&self) -> &str { + fn left_edge_separator(&self) -> &str { match self.outer_border_style { OuterBorderStyle::Visible => match self.border_type { BorderType::Unicode => "│", @@ -228,6 +220,14 @@ impl BorderStyle { OuterBorderStyle::None => "", } } + + fn right_edge_separator(&self) -> &str { + match self.border_type { + BorderType::Unicode => "│", + BorderType::Ascii => "|", + BorderType::None => "", + } + } } pub struct Printer<'a, Writer: Write> { @@ -359,7 +359,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { let _ = write!( &mut self.buffer_line, "{}{}{} ", - self.border_style.edge_separator(), + self.border_style.left_edge_separator(), formatted_string, self.border_style.outer_separator() ); @@ -406,7 +406,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.border_style.hex_inner_separator(), self.border_style.text_inner_separator(), self.border_style.outer_separator(), - self.border_style.edge_separator(), + self.border_style.right_edge_separator(), ); self.writer.write_all(&self.buffer_line)?; } @@ -459,7 +459,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { 8 - len, 8, self.border_style.text_inner_separator(), - self.border_style.edge_separator(), + self.border_style.right_edge_separator(), ); } else { let _ = writeln!( @@ -467,7 +467,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { "{0:1$}{2}", "", 16 - len, - self.border_style.edge_separator() + self.border_style.right_edge_separator() ); } } @@ -483,7 +483,7 @@ impl<'a, Writer: Write> Printer<'a, Writer> { }; let _ = writeln!( &mut self.buffer_line, - "{8}{0}{1:2$}{7}{1:3$}{5}{1:3$}{7}{1:4$}{6}{1:4$}{8}", + "{8}{0}{1:2$}{7}{1:3$}{5}{1:3$}{7}{1:4$}{6}{1:4$}{9}", asterisk, "", 7, @@ -492,7 +492,8 @@ impl<'a, Writer: Write> Printer<'a, Writer> { self.border_style.hex_inner_separator(), self.border_style.text_inner_separator(), self.border_style.outer_separator(), - self.border_style.edge_separator(), + self.border_style.left_edge_separator(), + self.border_style.right_edge_separator(), ); } SqueezeAction::Delete => self.buffer_line.clear(), From 05ed519594aabea01f88b47d5a8a6e0a7f17330d Mon Sep 17 00:00:00 2001 From: Aaron Rumpler <80610725+Aaron-Rumpler@users.noreply.github.com> Date: Wed, 19 Jan 2022 22:32:01 +1300 Subject: [PATCH 14/14] Fix existing tests --- examples/simple.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/simple.rs b/examples/simple.rs index 7470d879..18a1bbe6 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -1,6 +1,6 @@ use std::io; -use hexyl::{BorderStyle, Printer}; +use hexyl::{BorderType, InnerSeparatorStyle, OuterBorderStyle, Printer}; fn main() { let input = vec![ @@ -13,8 +13,11 @@ fn main() { let show_color = true; let use_squeezing = false; - let border_style = BorderStyle::Unicode; + let border_type = BorderType::Unicode; + let hex_inner_separator_style = InnerSeparatorStyle::Visible; + let text_inner_separator_style = InnerSeparatorStyle::Visible; + let outer_border_style = OuterBorderStyle::Visible; - let mut printer = Printer::new(&mut handle, show_color, border_style, use_squeezing); + let mut printer = Printer::new(&mut handle, show_color, border_type, hex_inner_separator_style, text_inner_separator_style, outer_border_style, use_squeezing); printer.print_all(&input[..]).unwrap(); }