|
|
|
@ -86,34 +86,25 @@ fn print_file(
|
|
|
|
|
printer: &mut Printer,
|
|
|
|
|
filename: Option<&str>,
|
|
|
|
|
) -> Result<()> {
|
|
|
|
|
printer.print_header(filename)?;
|
|
|
|
|
|
|
|
|
|
let highlighter = HighlightLines::new(syntax, theme);
|
|
|
|
|
match filename {
|
|
|
|
|
None => {
|
|
|
|
|
let stdin = io::stdin(); // TODO: this is not always needed
|
|
|
|
|
print_file_ranges(
|
|
|
|
|
printer,
|
|
|
|
|
stdin.lock(),
|
|
|
|
|
highlighter,
|
|
|
|
|
&printer.config.line_range,
|
|
|
|
|
)?;
|
|
|
|
|
}
|
|
|
|
|
Some(filename) => print_file_ranges(
|
|
|
|
|
printer,
|
|
|
|
|
BufReader::new(File::open(filename)?),
|
|
|
|
|
highlighter,
|
|
|
|
|
&printer.config.line_range,
|
|
|
|
|
)?,
|
|
|
|
|
let stdin = io::stdin(); // TODO: this is not always needed
|
|
|
|
|
{
|
|
|
|
|
let reader: Box<BufRead> = match filename {
|
|
|
|
|
None => Box::new(stdin.lock()),
|
|
|
|
|
Some(filename) => Box::new(BufReader::new(File::open(filename)?)),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let highlighter = HighlightLines::new(syntax, theme);
|
|
|
|
|
|
|
|
|
|
printer.print_header(filename)?;
|
|
|
|
|
print_file_ranges(printer, reader, highlighter, &printer.config.line_range)?;
|
|
|
|
|
printer.print_footer()?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printer.print_footer()?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn print_file_ranges<T: BufRead>(
|
|
|
|
|
fn print_file_ranges<'a>(
|
|
|
|
|
printer: &mut Printer,
|
|
|
|
|
mut reader: T,
|
|
|
|
|
mut reader: Box<BufRead + 'a>,
|
|
|
|
|
mut highlighter: HighlightLines,
|
|
|
|
|
line_ranges: &Option<LineRange>,
|
|
|
|
|
) -> Result<()> {
|
|
|
|
|