From 627181bcb657a5ded61648feaef9c63bc6bc7a8c Mon Sep 17 00:00:00 2001 From: sharkdp Date: Thu, 23 Aug 2018 23:35:57 +0200 Subject: [PATCH] Always call the syntax highlighter --- src/controller.rs | 10 ++++++---- src/printer.rs | 11 ++++++++++- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/controller.rs b/src/controller.rs index 38cb34a4..8f2bfbf4 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -77,16 +77,18 @@ impl<'b> Controller<'b> { match line_ranges { &Some(ref range) => { if line_number < range.lower { - // skip line + // Call the printer in case we need to call the syntax highlighter + // for this line. However, set `out_of_range` to `true`. + printer.print_line(true, writer, line_number, &line_buffer)?; } else if line_number > range.upper { - // no more lines in range + // no more lines in range, exit early break; } else { - printer.print_line(writer, line_number, &line_buffer)?; + printer.print_line(false, writer, line_number, &line_buffer)?; } } &None => { - printer.print_line(writer, line_number, &line_buffer)?; + printer.print_line(false, writer, line_number, &line_buffer)?; } } diff --git a/src/printer.rs b/src/printer.rs index 854c6ad3..835df002 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -24,6 +24,7 @@ pub trait Printer { fn print_footer(&mut self, handle: &mut Write) -> Result<()>; fn print_line( &mut self, + out_of_range: bool, handle: &mut Write, line_number: usize, line_buffer: &[u8], @@ -49,11 +50,14 @@ impl Printer for SimplePrinter { fn print_line( &mut self, + out_of_range: bool, handle: &mut Write, _line_number: usize, line_buffer: &[u8], ) -> Result<()> { - handle.write(line_buffer)?; + if !out_of_range { + handle.write(line_buffer)?; + } Ok(()) } } @@ -188,6 +192,7 @@ impl<'a> Printer for InteractivePrinter<'a> { fn print_line( &mut self, + out_of_range: bool, handle: &mut Write, line_number: usize, line_buffer: &[u8], @@ -195,6 +200,10 @@ impl<'a> Printer for InteractivePrinter<'a> { let line = String::from_utf8_lossy(&line_buffer); let regions = self.highlighter.highlight(line.as_ref()); + if out_of_range { + return Ok(()); + } + let mut cursor: usize = 0; let mut cursor_max: usize = self.config.term_width; let mut panel_wrap: Option = None;