aboutsummaryrefslogtreecommitdiff
path: root/src/util/formatting
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/formatting')
-rw-r--r--src/util/formatting/color.rs1
-rw-r--r--src/util/formatting/mod.rs57
-rw-r--r--src/util/formatting/truncate.rs1
3 files changed, 54 insertions, 5 deletions
diff --git a/src/util/formatting/color.rs b/src/util/formatting/color.rs
index 6907805..ac78b9c 100644
--- a/src/util/formatting/color.rs
+++ b/src/util/formatting/color.rs
@@ -1,3 +1,4 @@
+/// The basic 16 IRC color codes
pub enum Color {
White = 00,
Black = 01,
diff --git a/src/util/formatting/mod.rs b/src/util/formatting/mod.rs
index 5cfdfa8..a20b48f 100644
--- a/src/util/formatting/mod.rs
+++ b/src/util/formatting/mod.rs
@@ -1,9 +1,31 @@
+//! Tools for formatting irc messages
+
mod truncate;
mod color;
pub use truncate::*;
pub use color::*;
+/// Turn strings bold, italic,underline, strikethrough, and monospace.
+///
+/// The Formatting trait is implemented on `String` and `&str` for your convenience
+///
+/// # Format a string
+/// ```
+/// use catinator::util::Formatting;
+///
+/// let text = "this should be bold";
+/// assert_eq!("\x02this should be bold\x02", text.bold())
+/// ```
+///
+/// # Use raw formatting code
+/// ```
+/// use catinator::util::Formatting;
+///
+/// let text = "this should be bold";
+/// let result = format!("{}{}", String::BOLD, text);
+/// assert_eq!("\x02this should be bold", result)
+/// ```
pub trait Formatting<'r> {
const BOLD: &'r str = "\x02";
const ITALIC: &'r str = "\x1D";
@@ -12,11 +34,11 @@ pub trait Formatting<'r> {
const MONOSPACE: &'r str = "\x11";
const COLOR: &'r str = "\x03";
- fn bold(self) -> Self;
- fn italic(self) -> Self;
- fn underline(self) -> Self;
- fn strikethrough(self) -> Self;
- fn monospace(self) -> Self;
+ fn bold(self) -> String;
+ fn italic(self) -> String;
+ fn underline(self) -> String;
+ fn strikethrough(self) -> String;
+ fn monospace(self) -> String;
// fn color(self, color: Color) -> Self;
}
@@ -65,6 +87,31 @@ impl<'r> Formatting<'r> for String {
// }
}
+impl<'r> Formatting<'r> for &str {
+ fn bold(self) -> String {
+ format!("{}{}{}", Self::BOLD, self, Self::BOLD)
+ }
+
+ fn italic(self) -> String {
+ format!("{}{}{}", Self::ITALIC, self, Self::ITALIC)
+ }
+
+ fn underline(self) -> String {
+ format!("{}{}{}", Self::UNDERLINE, self, Self::UNDERLINE)
+ }
+
+ fn strikethrough(self) -> String {
+ format!("{}{}{}", Self::STRIKETHROUGH, self, Self::STRIKETHROUGH)
+ }
+
+ fn monospace(self) -> String {
+ format!("{}{}{}", Self::MONOSPACE, self, Self::MONOSPACE)
+ }
+
+ // TODO implement color codes
+ // fn color(mut self, foreground: Option<Color>, background: Option<Color>) -> Self { }
+}
+
#[cfg(all(test, feature = "bench"))]
mod bench {
use super::*;
diff --git a/src/util/formatting/truncate.rs b/src/util/formatting/truncate.rs
index c1b6257..80caa23 100644
--- a/src/util/formatting/truncate.rs
+++ b/src/util/formatting/truncate.rs
@@ -1,4 +1,5 @@
/// Truncates a string after a certain number of characters.
+///
/// Function always tries to truncate on a word boundary.
/// Reimplemented from gonzobot.
pub fn truncate(text: &str, len: usize) -> String {