@@ -1,5 +1,4 @@
1−use std::fs::File;
2−use std::io::{self, BufRead, BufReader, Write};
1+use std::io::{self, BufRead, Write};
32
43use app::Config;
54use assets::HighlightingAssets;
@@ -9,8 +8,6 @@ use line_range::LineRange;
98use output::OutputType;
109use printer::{InteractivePrinter, Printer, SimplePrinter};
1110
12−const THEME_PREVIEW_FILE: &[u8] = include_bytes!("../assets/theme_preview.rs");
13−
1411pub struct Controller<'a> {
1512 config: &'a Config<'a>,
1613 assets: &'a HighlightingAssets,
@@ -26,13 +23,13 @@ impl<'b> Controller<'b> {
2623 let writer = output_type.handle()?;
2724 let mut no_errors: bool = true;
2825
29− for filename in &self.config.files {
26+ for input_file in &self.config.files {
3027 let result = if self.config.loop_through {
3128 let mut printer = SimplePrinter::new();
32− self.print_file(&mut printer, writer, *filename)
29+ self.print_file(&mut printer, writer, *input_file)
3330 } else {
34− let mut printer = InteractivePrinter::new(&self.config, &self.assets, *filename);
35− self.print_file(&mut printer, writer, *filename)
31+ let mut printer = InteractivePrinter::new(&self.config, &self.assets, *input_file);
32+ self.print_file(&mut printer, writer, *input_file)
3633 };
3734
3835 if let Err(error) = result {
@@ -48,28 +45,15 @@ impl<'b> Controller<'b> {
4845 &self,
4946 printer: &mut P,
5047 writer: &mut Write,
51− filename: InputFile<'a>,
48+ input_file: InputFile<'a>,
5249 ) -> Result<()> {
5350 let stdin = io::stdin();
54− {
55− let reader: Box<BufRead> = match filename {
56− InputFile::StdIn => Box::new(stdin.lock()),
57− InputFile::Ordinary(filename) => {
58− let file = File::open(filename)?;
59−
60− if file.metadata()?.is_dir() {
61− return Err(format!("'{}' is a directory.", filename).into());
62− }
51+ let reader = input_file.get_reader(&stdin)?;
6352
64− Box::new(BufReader::new(file))
65− }
66− InputFile::ThemePreviewFile => Box::new(THEME_PREVIEW_FILE),
67− };
53+ printer.print_header(writer, input_file)?;
54+ self.print_file_ranges(printer, writer, reader, &self.config.line_range)?;
55+ printer.print_footer(writer)?;
6856
69− printer.print_header(writer, filename)?;
70− self.print_file_ranges(printer, writer, reader, &self.config.line_range)?;
71− printer.print_footer(writer)?;
72− }
7357 Ok(())
7458 }
7559