use super::StructuredPrinter;
use super::TagHandler;
use markup5ever_rcdom::{Handle, NodeData};
#[derive(Default)]
pub struct CodeHandler {
code_type: String,
}
impl CodeHandler {
fn do_handle(&mut self, printer: &mut StructuredPrinter, start: bool) {
if self.code_type == "code"
&& match printer.parent_chain.last() {
Some(s) => s == "pre",
_ => false,
}
{
return;
}
match self.code_type.as_ref() {
"pre" => {
if start {
printer.insert_newline();
}
printer.append_str("\n```\n");
if !start {
printer.insert_newline();
}
}
"code" | "samp" => printer.append_str("`"),
_ => (),
}
}
}
impl TagHandler for CodeHandler {
fn handle(&mut self, tag: &Handle, printer: &mut StructuredPrinter) {
self.code_type = match tag.data {
NodeData::Element { ref name, .. } => name.local.to_string(),
_ => String::new(),
};
self.do_handle(printer, true);
}
fn after_handle(&mut self, printer: &mut StructuredPrinter) {
self.do_handle(printer, false);
}
}