use std::io::Write;
use crate::error::RenderResult as Result;
use pulldown_cmark::CowStr;
use syntect::util::LinesWithEndings;
use super::state::{HtmlBlockAttrs, StateAndData, StateStack};
use super::write::{write_indent, write_styled};
use super::StateData;
use crate::Settings;
pub(super) fn handle_text<'a, W: Write>(
writer: &mut W,
settings: &Settings,
stack: StateStack,
attrs: HtmlBlockAttrs,
text: CowStr<'a>,
data: StateData<'a>,
) -> Result<StateAndData<StateData<'a>>> {
let HtmlBlockAttrs {
indent,
initial_indent,
style,
} = attrs;
for (n, line) in LinesWithEndings::from(&text).enumerate() {
let line_indent = if n == 0 { initial_indent } else { indent };
write_indent(writer, line_indent)?;
write_styled(writer, &settings.terminal_capabilities, &style, line)?;
}
stack
.current(
HtmlBlockAttrs {
initial_indent: indent,
indent,
style,
}
.into(),
)
.and_data(data)
.ok()
}
pub(super) fn handle_html<'a, W: Write>(
writer: &mut W,
settings: &Settings,
stack: StateStack,
attrs: HtmlBlockAttrs,
html: CowStr<'a>,
data: StateData<'a>,
) -> Result<StateAndData<StateData<'a>>> {
let HtmlBlockAttrs {
indent,
initial_indent,
style,
} = attrs;
for (n, line) in LinesWithEndings::from(&html).enumerate() {
let line_indent = if n == 0 { initial_indent } else { indent };
write_indent(writer, line_indent)?;
write_styled(writer, &settings.terminal_capabilities, &style, line)?;
}
stack
.current(
HtmlBlockAttrs {
initial_indent: indent,
indent,
style,
}
.into(),
)
.and_data(data)
.ok()
}