summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsharkdp <davidpeter@web.de>2020-04-21 19:08:19 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2020-04-22 23:55:28 +0200
commit27974616bfe7ec0c132fc259fdce1b471c99c93e (patch)
treec6ef48e26891944c87aedd39db40689cd572429b
parent319ab779ee6bc8954e7beb2ae34c43d9f327322e (diff)
Initial verison of PrettyPrinter builder
-rw-r--r--examples/simple.rs20
-rw-r--r--src/bin/bat/config.rs3
-rw-r--r--src/lib.rs2
-rw-r--r--src/pretty_printer.rs44
4 files changed, 53 insertions, 16 deletions
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<bool> {
+ let controller = Controller::new(&self.config, &self.assets);
+ controller.run()
+ }
+}