1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
//! Set of structures required to implement a stylesheet
//!
//! In order to provide additional styling information for the
//! formatter, a structs can implement `Stylesheet` and `Style`
//! traits.
//!
use std::fmt;
/// StyleClass is a collection of named variants of style classes
pub enum StyleClass {
/// Message indicating an error.
Error,
/// Message indicating a warning.
Warning,
/// Message indicating an information.
Info,
/// Message indicating a note.
Note,
/// Message indicating a help.
Help,
/// Style for line numbers.
LineNo,
/// Parts of the text that are to be emphasised.
Emphasis,
/// Parts of the text that are regular. Usually a no-op.
None,
}
/// This trait implements a return value for the `Stylesheet::get_style`.
pub trait Style {
/// The method used to write text with formatter
fn paint(&self, text: &str, f: &mut fmt::Formatter<'_>) -> fmt::Result;
/// The method used to write display function with formatter
fn paint_fn<'a>(
&self,
c: Box<dyn FnOnce(&mut fmt::Formatter<'_>) -> fmt::Result + 'a>,
f: &mut fmt::Formatter<'_>,
) -> fmt::Result;
/// The method used by the `Formatter` to display the message in bold font.
fn bold(&self) -> Box<dyn Style>;
}
/// Trait to annotate structs that can provide `Style` implementations for
/// every `StyleClass` variant.
pub trait Stylesheet {
/// Returns a `Style` implementer based on the requested `StyleClass` variant.
fn get_style(&self, class: StyleClass) -> Box<dyn Style>;
}