use regex::Regex;
pub fn extract_links(text: &str) -> Vec<String> {
let url_re = Regex::new(r#"(?i)\b(https?|ftp|gopher|gemini)://[^\s<>"']+"#).unwrap();
url_re
.find_iter(text)
.map(|m| m.as_str().to_string())
.collect()
}
pub fn link_ranges(body: &str) -> Vec<Vec<(usize, usize)>> {
let url_re = Regex::new(r#"(?i)\b(https?|ftp|gopher|gemini)://[^\s<>"']+"#).unwrap();
body.lines()
.map(|line| {
let mut ranges = Vec::new();
for m in url_re.find_iter(line) {
let prefix = &line[..m.start()];
let start = prefix.chars().count();
let url = m.as_str();
let end = start + url.chars().count() - 1;
ranges.push((start, end));
}
ranges
})
.collect()
}