use ratatui_core::style::Style;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum AlertKind {
Note,
Tip,
Important,
Warning,
Caution,
}
impl AlertKind {
pub const fn label(self) -> &'static str {
match self {
Self::Note => "Note",
Self::Tip => "Tip",
Self::Important => "Important",
Self::Warning => "Warning",
Self::Caution => "Caution",
}
}
}
pub trait StyleSheet: Clone + Send + Sync + 'static {
fn heading(&self, level: u8) -> Style {
match level {
1 => Style::new().on_cyan().bold().underlined(),
2 => Style::new().cyan().bold(),
3 => Style::new().cyan().bold().italic(),
4 => Style::new().light_cyan().italic(),
5 => Style::new().light_cyan().italic(),
_ => Style::new().light_cyan().italic(),
}
}
fn code(&self) -> Style {
Style::new().white().on_black()
}
fn link(&self) -> Style {
Style::new().blue().underlined()
}
fn blockquote(&self) -> Style {
Style::new().green()
}
fn heading_meta(&self) -> Style {
Style::new().dim()
}
fn metadata_block(&self) -> Style {
Style::new().light_yellow()
}
fn heading_marker(&self, level: u8) -> &str {
match level {
1 => "#",
2 => "##",
3 => "###",
4 => "####",
5 => "#####",
_ => "######",
}
}
fn code_block_fence(&self) -> &str {
"```"
}
fn html(&self) -> Style {
Style::new().dim()
}
fn math_inline(&self) -> Style {
Style::new().italic().magenta()
}
fn math_display(&self) -> Style {
Style::new().magenta()
}
fn footnote_ref(&self) -> Style {
Style::new().dim().italic()
}
fn footnote_def(&self) -> Style {
Style::new().dim()
}
fn definition_term(&self) -> Style {
Style::new().bold()
}
fn definition_description(&self) -> Style {
Style::default()
}
fn alert(&self, kind: AlertKind) -> Style {
use ratatui_core::style::Color;
match kind {
AlertKind::Note => Style::new().fg(Color::Blue),
AlertKind::Tip => Style::new().fg(Color::Green),
AlertKind::Important => Style::new().fg(Color::Magenta),
AlertKind::Warning => Style::new().fg(Color::Yellow),
AlertKind::Caution => Style::new().fg(Color::Red),
}
}
fn alert_icon(&self, kind: AlertKind) -> &str {
match kind {
AlertKind::Note => "\u{2139}\u{FE0F}",
AlertKind::Tip => "\u{1F4A1}",
AlertKind::Important => "\u{2757}",
AlertKind::Warning => "\u{26A0}\u{FE0F}",
AlertKind::Caution => "\u{1F534}",
}
}
fn alert_label(&self, kind: AlertKind) -> &str {
kind.label()
}
fn table_header(&self) -> Style {
Style::new().bold().cyan()
}
fn table_cell(&self) -> Style {
Style::default()
}
fn table_border(&self) -> Style {
Style::new().dark_gray()
}
fn image_alt(&self) -> Style {
Style::new().dim().italic()
}
}
#[derive(Clone, Copy, Debug, Default)]
pub struct DefaultStyleSheet;
impl StyleSheet for DefaultStyleSheet {}