diff --git a/assets/syntax_set b/assets/syntax_set index 98d63ba5..03855ec5 100644 Binary files a/assets/syntax_set and b/assets/syntax_set differ diff --git a/src/main.rs b/src/main.rs index 10e242e3..a7ca8c92 100644 --- a/src/main.rs +++ b/src/main.rs @@ -169,7 +169,7 @@ fn print_file>( filename: P, line_changes: &Option, ) -> Result<()> { - let reader = BufReader::new(File::open(filename.as_ref())?); + let mut reader = BufReader::new(File::open(filename.as_ref())?); let syntax = match options.language { Some(language) => syntax_set.find_syntax_by_token(language), None => syntax_set.find_syntax_for_file(filename.as_ref())?, @@ -206,10 +206,21 @@ fn print_file>( OptionsStyle::Plain => {} }; - for (idx, maybe_line) in reader.lines().enumerate() { - let line_nr = idx + 1; - let line = maybe_line.unwrap_or_else(|_| "".into()); - let regions = highlighter.highlight(&line); + let mut line_nr = 1; + let mut line_buffer = String::new(); + loop { + line_buffer.clear(); + let num_bytes = reader.read_line(&mut line_buffer); + + let line = match num_bytes { + Ok(0) => { + break; + } + Ok(_) => &line_buffer, + Err(_) => "\n", + }; + + let regions = highlighter.highlight(line); let line_change = if let Some(ref changes) = *line_changes { match changes.get(&(line_nr as u32)) { @@ -225,12 +236,12 @@ fn print_file>( match options.style { // Show only content for plain style - OptionsStyle::Plain => writeln!( + OptionsStyle::Plain => write!( handle, "{}", as_terminal_escaped(®ions, options.true_color, options.colored_output) )?, - _ => writeln!( + _ => write!( handle, "{} {} {} {}", colors.line_number.paint(format!("{:4}", line_nr)), @@ -243,6 +254,8 @@ fn print_file>( as_terminal_escaped(®ions, options.true_color, options.colored_output) )?, } + + line_nr += 1; } // Show bars for all but plain style @@ -358,7 +371,7 @@ impl HighlightingAssets { let mut syntax_set = SyntaxSet::new(); let syntax_dir = config_dir.join("syntax"); - let _ = syntax_set.load_syntaxes(syntax_dir, false); + let _ = syntax_set.load_syntaxes(syntax_dir, true); syntax_set.load_plain_text_syntax(); Ok(HighlightingAssets {