html2md/
quotes.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use super::StructuredPrinter;
use super::TagHandler;

use markup5ever_rcdom::Handle;

#[derive(Default)]
pub struct QuoteHandler {
    start_pos: usize,
}

impl TagHandler for QuoteHandler {
    fn handle(&mut self, _tag: &Handle, printer: &mut StructuredPrinter) {
        self.start_pos = printer.data.len();
        printer.insert_newline();
    }

    fn after_handle(&mut self, printer: &mut StructuredPrinter) {
        // replace all newlines with newline + >
        let quote = "> ";
        let mut index = printer.data.len();
        while index > self.start_pos {
            if printer.data.as_bytes().get(index).copied() == Some(b'\n') {
                printer.insert_str(index + 1, quote);
            }
            index -= 1;
        }

        printer.insert_str(self.start_pos + 1, quote);
        printer.insert_newline();
    }
}