diff --git a/examples/simple.rs b/examples/simple.rs index a0d7afa1..0a6b3d0d 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -1,22 +1,12 @@ /// A simple program that prints its own source code using the bat library -use bat::{ - config::{Config, InputFile, OrdinaryFile}, - Controller, HighlightingAssets, -}; +use bat::PrettyPrinter; use std::ffi::OsStr; fn main() { let path_to_this_file = OsStr::new(file!()); - let config = Config { - files: vec![InputFile::Ordinary(OrdinaryFile::from_path( - path_to_this_file, - ))], - colored_output: true, - true_color: true, - ..Default::default() - }; - let assets = HighlightingAssets::from_binary(); - - Controller::new(&config, &assets).run().expect("no errors"); + PrettyPrinter::new() + .file(path_to_this_file) + .run() + .expect("no errors"); } diff --git a/src/bin/bat/config.rs b/src/bin/bat/config.rs index 5fc60dc0..889ec5d4 100644 --- a/src/bin/bat/config.rs +++ b/src/bin/bat/config.rs @@ -43,7 +43,8 @@ pub fn generate_config_file() -> bat::errors::Result<()> { } } - let default_config = r#"# This is `bat`s configuration file. Each line either contains a comment or + let default_config = + r#"# This is `bat`s configuration file. Each line either contains a comment or # a command-line option that you want to pass to `bat` by default. You can # run `bat --help` to get a list of all possible configuration options. diff --git a/src/lib.rs b/src/lib.rs index 5ef4b8f8..7f36c2e0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,6 +13,7 @@ mod less; pub(crate) mod line_range; mod output; mod preprocessor; +pub mod pretty_printer; pub(crate) mod printer; pub(crate) mod style; pub(crate) mod syntax_mapping; @@ -22,4 +23,5 @@ pub(crate) mod wrap; pub use assets::HighlightingAssets; pub use assets_metadata::AssetsMetadata; pub use controller::Controller; +pub use pretty_printer::PrettyPrinter; pub use printer::{InteractivePrinter, Printer, SimplePrinter}; diff --git a/src/pretty_printer.rs b/src/pretty_printer.rs new file mode 100644 index 00000000..7d8ba97b --- /dev/null +++ b/src/pretty_printer.rs @@ -0,0 +1,44 @@ +use std::ffi::OsStr; + +use crate::{ + config::{Config, InputFile, OrdinaryFile}, + errors::Result, + Controller, HighlightingAssets, +}; + +pub struct PrettyPrinter<'a> { + config: Config<'a>, + assets: HighlightingAssets, +} + +impl<'a> PrettyPrinter<'a> { + pub fn new() -> Self { + let mut config = Config::default(); + + config.colored_output = true; + config.true_color = true; + + PrettyPrinter { + config, + assets: HighlightingAssets::from_binary(), + } + } + + pub fn file(&'a mut self, path: &'a OsStr) -> &'a mut Self { + self.config + .files + .push(InputFile::Ordinary(OrdinaryFile::from_path(path))); + self + } + + /// Whether or not the output should be colorized (default: true) + pub fn colored_output(&mut self, yes: bool) -> &mut Self { + self.config.colored_output = yes; + self + } + + pub fn run(&'a self) -> Result { + let controller = Controller::new(&self.config, &self.assets); + controller.run() + } +}