borrow link def url if on single line
This commit is contained in:
parent
c7b3aa560b
commit
1dde9e57e2
2 changed files with 18 additions and 3 deletions
|
@ -268,7 +268,7 @@ pub struct Parser<'s> {
|
|||
tree: tree::Branch<block::Node, block::Atom>,
|
||||
inlines: span::InlineSpans<'s>,
|
||||
inline_parser: Option<inline::Parser<span::InlineCharsIter<'s>>>,
|
||||
link_definitions: std::collections::HashMap<&'s str, String>,
|
||||
link_definitions: std::collections::HashMap<&'s str, CowStr<'s>>,
|
||||
|
||||
_tree_data: block::Tree,
|
||||
}
|
||||
|
@ -286,8 +286,11 @@ impl<'s> Parser<'s> {
|
|||
e.kind
|
||||
{
|
||||
let tag = e.span.of(src);
|
||||
// TODO borrow url string if single inline
|
||||
let url = branch.take_inlines().map(|sp| sp.of(src).trim()).collect();
|
||||
let url = match branch.count_children() {
|
||||
0 => "".into(),
|
||||
1 => branch.take_inlines().next().unwrap().of(src).trim().into(),
|
||||
_ => branch.take_inlines().map(|sp| sp.of(src).trim()).collect(),
|
||||
};
|
||||
defs.insert(tag, url);
|
||||
}
|
||||
}
|
||||
|
|
12
src/tree.rs
12
src/tree.rs
|
@ -50,6 +50,18 @@ pub struct Branch<C: 'static, A: 'static> {
|
|||
}
|
||||
|
||||
impl<C, A> Branch<C, A> {
|
||||
/// Count number of direct children nodes.
|
||||
pub fn count_children(&self) -> usize {
|
||||
let mut head = self.head;
|
||||
let mut count = 0;
|
||||
while let Some(h) = head {
|
||||
let n = &self.nodes[h.index()];
|
||||
head = n.next;
|
||||
count += 1;
|
||||
}
|
||||
count
|
||||
}
|
||||
|
||||
/// Retrieve all inlines until the end of the current container. Panics if any upcoming node is
|
||||
/// not an inline node.
|
||||
pub fn take_inlines(&mut self) -> impl Iterator<Item = Span> + '_ {
|
||||
|
|
Loading…
Reference in a new issue