From 01d6fb5a1f79ff1ef48cc69b42d8a91ef9a6d2f1 Mon Sep 17 00:00:00 2001
From: Ben Bridle <ben@derelict.engineering>
Date: Fri, 14 Mar 2025 12:55:00 +1300
Subject: Add optional labels to internal links

Internal links can have labels in the same manner as with external
links, by separating the label and path from each other with a ::
token.
---
 src/line.rs | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

(limited to 'src/line.rs')

diff --git a/src/line.rs b/src/line.rs
index b60b55c..5ef940f 100644
--- a/src/line.rs
+++ b/src/line.rs
@@ -81,6 +81,15 @@ impl ToString for Line {
     }
 }
 
+fn internal_link(inside: String) -> Option<Token> {
+    if let Some((label, path)) = inside.split_once("::") {
+        let label = label.trim().to_string();
+        let path = path.trim().to_string();
+        Some( Token::InternalLink { label, path } )
+    } else {
+        Some( Token::InternalLink { label: String::new(), path: inside })
+    }
+}
 
 fn external_link(inside: String) -> Option<Token> {
     if let Some((label, path)) = inside.split_once("::") {
@@ -101,7 +110,7 @@ const DELIMITERS: [(fn(String)->Option<Token>, &str, &str, &str); 6] = [
     ( make!(Token::Italic),       "_",  "_",  "_" ),
     ( make!(Token::Monospace),    "`",  "`",  "`" ),
     ( make!(Token::Math),         "$",  "$",  "$" ),
-    ( make!(Token::InternalLink), "{",  "}",  "{}" ),
+    ( internal_link,              "{",  "}",  "{}" ),
     ( external_link,              "<",  ">",  "<>" ),
 ];
 
-- 
cgit v1.2.3-70-g09d2