html2md/
quotes.rs

1use crate::markup5ever_rcdom;
2
3use super::StructuredPrinter;
4use super::TagHandler;
5
6use markup5ever_rcdom::Handle;
7
8#[derive(Default)]
9pub struct QuoteHandler {
10    start_pos: usize,
11}
12
13impl TagHandler for QuoteHandler {
14    fn handle(&mut self, _tag: &Handle, printer: &mut StructuredPrinter) {
15        self.start_pos = printer.data.len();
16        printer.insert_newline();
17    }
18
19    fn after_handle(&mut self, printer: &mut StructuredPrinter) {
20        // replace all newlines with newline + >
21        let quote = "> ";
22        let mut index = printer.data.len();
23        while index > self.start_pos {
24            if printer.data.as_bytes().get(index) == Some(&b'\n') {
25                printer.insert_str(index + 1, quote);
26            }
27            index -= 1;
28        }
29
30        printer.insert_str(self.start_pos + 1, quote);
31
32        printer.insert_newline();
33        printer.insert_newline();
34    }
35}