use std::collections::BTreeMap;
use crate::helpers::theme_table::ThemeColors;
pub(crate) struct Themes {
pub(crate) list: Vec<Theme>,
pub(crate) single: bool,
}
pub(crate) struct Theme {
pub(crate) mode: String,
pub(crate) colors: &'static ThemeColors,
pub(crate) replacements: BTreeMap<String, String>,
}
pub(crate) struct TokenStyle {
pub(crate) color: Option<String>,
pub(crate) background: Option<String>,
pub(crate) italic: bool,
pub(crate) bold: bool,
pub(crate) underline: bool,
pub(crate) strikethrough: bool,
}
pub(crate) type StyledLine = Vec<(String, Vec<TokenStyle>)>;
pub(crate) struct CodeToken {
pub(crate) text: String,
pub(crate) style: String,
pub(crate) classes: Vec<String>,
}
pub(crate) struct CodeLine {
pub(crate) classes: Vec<String>,
pub(crate) tokens: Vec<Option<CodeToken>>,
pub(crate) removed: bool,
pub(crate) number: Option<CodeToken>,
}
pub(crate) struct CodeBlock {
pub(crate) lines: Vec<CodeLine>,
pub(crate) language: String,
pub(crate) meta: String,
pub(crate) pre_classes: Vec<String>,
pub(crate) code_classes: Vec<String>,
}
impl CodeBlock {
pub(crate) fn visible_lines(&self) -> Vec<usize> {
(0..self.lines.len())
.filter(|&index| !self.lines[index].removed)
.collect()
}
}
pub(crate) fn add_classes(list: &mut Vec<String>, names: &[String]) {
for name in names {
if !name.is_empty() && !list.contains(name) {
list.push(name.clone());
}
}
}
#[derive(Default)]
pub(crate) struct BlockMarks {
pub(crate) lines: Vec<LineMarks>,
pub(crate) pre: Vec<String>,
pub(crate) words: Vec<String>,
pub(crate) numbers: Option<usize>,
}
pub(crate) type LineMarks = (Vec<(usize, usize)>, Vec<String>);