rhtml2md/
anchors.rs

1use super::TagHandler;
2use super::StructuredPrinter;
3
4use markup5ever_rcdom::{Handle,NodeData};
5
6#[derive(Default)]
7pub struct AnchorHandler {
8    start_pos: usize,
9    url: String
10}
11
12impl TagHandler for AnchorHandler {
13
14    fn handle(&mut self, tag: &Handle, printer: &mut StructuredPrinter) {
15        self.start_pos = printer.data.len();
16
17        // try to extract a hyperlink
18        self.url = match tag.data {
19             NodeData::Element { ref attrs, .. } => {
20                let attrs = attrs.borrow();
21                let href = attrs.iter().find(|attr| attr.name.local.to_string() == "href");
22                match href {
23                    Some(link) => link.value.to_string(),
24                    None => String::new()
25                }
26             }
27             _ => String::new()
28        };
29    }
30
31    fn after_handle(&mut self, printer: &mut StructuredPrinter) {
32        // add braces around already present text, put an url afterwards
33        printer.insert_str(self.start_pos, "[");
34        printer.append_str(&format!("]({})", self.url))
35    }
36}