diff --git a/src/main.rs b/src/main.rs
index 255d0df..f9d4e6a 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -214,21 +214,36 @@ fn main() {
let link_re = Regex::new(r"\[\[(?[^\[\]]+)\]\]").unwrap();
for page in page_map.values() {
let original_content = content_map.get(&page.id).unwrap();
-
for cap in link_re.captures_iter(original_content.as_str()) {
- let name = String::from(cap.name("link").unwrap().as_str().trim().to_lowercase());
+ let link_content = cap.name("link").unwrap().as_str();
+ let page_id = match link_content.split_once("|") {
+ // It's a named wikilink
+ Some((fst, _snd)) => fst,
- let incoming_pages = incoming_map.get_mut(&name).unwrap();
+ // It's a regular wikilink
+ None => link_content,
+ }.trim().to_lowercase();
+
+ let incoming_pages = incoming_map.get_mut(&page_id).unwrap();
incoming_pages.push(page);
}
content_map.insert(page.id.clone(), link_re.replace_all(original_content.as_str(), |caps: &Captures| {
- let permalink = page_map.get(&caps.name("link").unwrap().as_str().trim().to_lowercase())
+ let link_content = caps.name("link").unwrap().as_str();
+ let (page_id, link_text) = match link_content.split_once("|") {
+ // It's a named wikilink
+ Some((fst, snd)) => (fst.trim().to_lowercase(), snd),
+
+ // It's a regular wikilink
+ None => (link_content.trim().to_lowercase(), link_content)
+ };
+
+ let permalink = page_map.get(&page_id)
.unwrap()
.permalink.as_str();
- format!("{}", permalink, &caps["link"])
+ format!("{}", permalink, link_text)
}).to_string());
}