[−][src]Function parse_hyperlinks::parser::take_hyperlink
pub fn take_hyperlink(
i: &str
) -> IResult<&str, (Cow<'_, str>, Cow<'_, str>, Cow<'_, str>)>
Consumes the input until it finds a Markdown or RestructuredText hyperlink. Returns
Ok(remaining_input, (link_name, link_destination, link_title). The parser finds stand alone links
and link references. ReStructuredText's anonymous links are not supported.
use parse_hyperlinks::parser::take_hyperlink; use std::borrow::Cow; let i = r#"[a]: b 'c' .. _d: e ---[f](g 'h')---`i <j>`_--- ---<a href="l" title="m">k</a>"#; let (i, r) = take_hyperlink(i).unwrap(); assert_eq!(r, (Cow::from("a"), Cow::from("b"), Cow::from("c"))); let (i, r) = take_hyperlink(i).unwrap(); assert_eq!(r, (Cow::from("d"), Cow::from("e"), Cow::from(""))); let (i, r) = take_hyperlink(i).unwrap(); assert_eq!(r, (Cow::from("f"), Cow::from("g"), Cow::from("h"))); let (i, r) = take_hyperlink(i).unwrap(); assert_eq!(r, (Cow::from("i"), Cow::from("j"), Cow::from(""))); let (i, r) = take_hyperlink(i).unwrap(); assert_eq!(r, (Cow::from("k"), Cow::from("l"), Cow::from("m")));
The parser might silently consume some additional bytes after the actual finding: This happens,
when directly after a finding a md_link_ref or rst_link_ref appears. These must be ignored,
as they are only allowed at the beginning of a line. The skip has to happen at this moment, as
the next parser does not know if the first byte it gets, is it at the beginning of a line or
not.