use termimad::MadSkin;
#[derive(Debug, Clone)]
pub struct MarkdownRenderer {
skin: MadSkin,
}
impl MarkdownRenderer {
pub fn new() -> Self {
let skin = MadSkin::default();
Self { skin }
}
pub fn with_theme() -> Self {
let skin = MadSkin::default();
Self { skin }
}
pub fn render(&self, markdown: &str) {
self.skin.print_text(markdown);
}
pub fn render_to_string(&self, markdown: &str) -> String {
let fmt_text = self.skin.text(markdown, None);
fmt_text.to_string()
}
}
impl Default for MarkdownRenderer {
fn default() -> Self {
Self::new()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_markdown_renderer_creation() {
let renderer = MarkdownRenderer::new();
let result = renderer.render_to_string("# Test");
assert!(result.contains("Test"));
}
#[test]
fn test_basic_markdown_rendering() {
let renderer = MarkdownRenderer::new();
let markdown = "# Header\nSome **bold** text\n```rust\nlet x = 5;\n```";
let output = renderer.render_to_string(markdown);
assert!(output.contains("Header"));
}
#[test]
fn test_themed_renderer() {
let renderer = MarkdownRenderer::with_theme();
let result = renderer.render_to_string("# Themed Test");
assert!(result.contains("Themed Test"));
}
}