summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsharkdp <davidpeter@web.de>2020-04-22 22:05:54 +0200
committerDavid Peter <sharkdp@users.noreply.github.com>2020-04-22 23:55:28 +0200
commit53a973e9dd9ecf102d7bcc345846f2632585159a (patch)
treebac424456c5a4c3752e10a3b9b16e7ac9a89d6dc
parentcba9df746e9a719c59563962ff815210d8304833 (diff)
Add syntaxes and themes method
-rw-r--r--examples/advanced.rs2
-rw-r--r--examples/list_syntaxes_and_themes.rs18
-rw-r--r--src/assets.rs4
-rw-r--r--src/pretty_printer.rs9
4 files changed, 30 insertions, 3 deletions
diff --git a/examples/advanced.rs b/examples/advanced.rs
index ec90c160..ec9fb59c 100644
--- a/examples/advanced.rs
+++ b/examples/advanced.rs
@@ -1,5 +1,5 @@
/// A program that prints its own source code using the bat library
-use bat::{LineRange, PrettyPrinter, WrappingMode, PagingMode};
+use bat::{LineRange, PagingMode, PrettyPrinter, WrappingMode};
fn main() {
PrettyPrinter::new()
diff --git a/examples/list_syntaxes_and_themes.rs b/examples/list_syntaxes_and_themes.rs
new file mode 100644
index 00000000..27db6d4f
--- /dev/null
+++ b/examples/list_syntaxes_and_themes.rs
@@ -0,0 +1,18 @@
+/// A simple program that prints its own source code using the bat library
+use bat::PrettyPrinter;
+
+fn main() {
+ let printer = PrettyPrinter::new();
+
+ println!("Syntaxes:");
+ for syntax in printer.syntaxes() {
+ println!("- {} ({})", syntax.name, syntax.file_extensions.join(", "));
+ }
+
+ println!();
+
+ println!("Themes:");
+ for theme in printer.themes() {
+ println!("- {}", theme);
+ }
+}
diff --git a/src/assets.rs b/src/assets.rs
index cc6f0d98..11756672 100644
--- a/src/assets.rs
+++ b/src/assets.rs
@@ -164,8 +164,8 @@ impl HighlightingAssets {
self.syntax_set.syntaxes()
}
- pub fn themes(&self) -> impl Iterator<Item = &String> {
- self.theme_set.themes.keys()
+ pub fn themes(&self) -> impl Iterator<Item = &str> {
+ self.theme_set.themes.keys().map(|s| s.as_ref())
}
pub(crate) fn get_theme(&self, theme: &str) -> &Theme {
diff --git a/src/pretty_printer.rs b/src/pretty_printer.rs
index 27794201..807ddb18 100644
--- a/src/pretty_printer.rs
+++ b/src/pretty_printer.rs
@@ -2,6 +2,7 @@ use std::ffi::OsStr;
use std::io::Read;
use console::Term;
+use syntect::parsing::SyntaxReference;
use crate::{
assets::HighlightingAssets,
@@ -201,6 +202,14 @@ impl<'a> PrettyPrinter<'a> {
self
}
+ pub fn themes(&self) -> impl Iterator<Item = &str> {
+ self.assets.themes()
+ }
+
+ pub fn syntaxes(&self) -> impl Iterator<Item = &SyntaxReference> {
+ self.assets.syntaxes().iter()
+ }
+
/// Pretty-print all specified inputs. This method will "use" all stored inputs.
/// If you want to call 'print' multiple times, you have to call the appropriate
/// input_* methods again.