[][src]Function parse_hyperlinks::parser::take_hyperlink

pub fn take_hyperlink(i: &str) -> IResult<&str, (String, String, String)>

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;
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, ("a".to_string(),"b".to_string(),"c".to_string()));
let (i, r) = take_hyperlink(i).unwrap();
assert_eq!(r, ("d".to_string(),"e".to_string(),"".to_string()));
let (i, r) = take_hyperlink(i).unwrap();
assert_eq!(r, ("f".to_string(),"g".to_string(),"h".to_string()));
let (i, r) = take_hyperlink(i).unwrap();
assert_eq!(r, ("i".to_string(),"j".to_string(),"".to_string()));
let (i, r) = take_hyperlink(i).unwrap();
assert_eq!(r, ("k".to_string(),"l".to_string(),"m".to_string()));

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.