]> git.r.bdr.sh - rbdr/gema_texto/commitdiff
Fix regression where .gmi wasn't being replaced to .html
authorRuben Beltran del Rio <redacted>
Mon, 13 Jan 2025 17:35:46 +0000 (18:35 +0100)
committerRuben Beltran del Rio <redacted>
Mon, 13 Jan 2025 17:35:46 +0000 (18:35 +0100)
Cargo.lock
Cargo.toml
README.md
src/html_renderer.rs

index daf6010c9fc6f4aabea127f298d75f067747114d..16c047dcc206eda35deac61d0e5a6a66aa6bfcfc 100644 (file)
@@ -4,4 +4,4 @@ version = 4
 
 [[package]]
 name = "gema_texto"
 
 [[package]]
 name = "gema_texto"
-version = "1.0.0"
+version = "1.0.1"
index 04e42831bf762a16654a457f9d95d91016c5ca82..f1c8751fc62f28530722cd12c847c16e41cde6fe 100644 (file)
@@ -1,6 +1,6 @@
 [package]
 name = "gema_texto"
 [package]
 name = "gema_texto"
-version = "1.0.0"
+version = "1.0.1"
 edition = "2021"
 license = "AGPL-3.0-or-later"
 description = "Library to parse gemtext and render HTML"
 edition = "2021"
 license = "AGPL-3.0-or-later"
 description = "Library to parse gemtext and render HTML"
index 7497cf1cfc4634113e1e26b4f73ab2c19f912320..272070e066918f9ce9b62c41a62f350847c76912 100644 (file)
--- a/README.md
+++ b/README.md
@@ -8,7 +8,8 @@ for those projects. Here's how each line is handled:
 
 - Headings and the content under them is wrapped in a `<section>` tag.
 - All text lines are `<p>`, even empty ones.
 
 - Headings and the content under them is wrapped in a `<section>` tag.
 - All text lines are `<p>`, even empty ones.
-- URLs are wrapped in a `<p>`
+- URLs are wrapped in a `<p>` and .gmi files are changed to .html unless the
+    URL starts with gemini:
 - Alt Text is supported for preformatted-toggles, and is written as
     the aria-label of the `<pre>` tag.
 - Consecutive list items are wrapped in a `<ul>` and rendered as `<li>` tags.
 - Alt Text is supported for preformatted-toggles, and is written as
     the aria-label of the `<pre>` tag.
 - Consecutive list items are wrapped in a `<ul>` and rendered as `<li>` tags.
index e513533afd86c09ebe30cce136979c975ae48776..503337bf069cdfdab2516c98dd37c61806d9dcb3 100644 (file)
@@ -99,8 +99,14 @@ fn line_content(line: &GeminiLine) -> String {
     match line {
         GeminiLine::Text(content, false) => format!("<p>{content}</p>"),
         GeminiLine::Link(url, text) => {
     match line {
         GeminiLine::Text(content, false) => format!("<p>{content}</p>"),
         GeminiLine::Link(url, text) => {
-            let display = if text.is_empty() { url } else { text };
-            format!("<p class=\"a\"><a href=\"{url}\">{display}</a></p>")
+            let processed_url;
+            if !url.starts_with("gemini:") && url.ends_with(".gmi") {
+                processed_url = url.replace(".gmi", ".html");
+            } else {
+                processed_url = url.to_string();
+            }
+            let display = if text.is_empty() { &processed_url } else { text };
+            format!("<p class=\"a\"><a href=\"{processed_url}\">{display}</a></p>")
         }
         GeminiLine::Heading(level, content) => format!("<h{level}>{content}</h{level}>"),
         GeminiLine::ListItem(content) => format!("<li>{content}</li>"),
         }
         GeminiLine::Heading(level, content) => format!("<h{level}>{content}</h{level}>"),
         GeminiLine::ListItem(content) => format!("<li>{content}</li>"),
@@ -223,12 +229,18 @@ mod tests {
     #[test]
     fn test_links() {
         let input = vec![
     #[test]
     fn test_links() {
         let input = vec![
+            GeminiLine::Link("gemini://hi.gmi".to_string(), "Example".to_string()),
+            GeminiLine::Link("/hi.gmi/kidding".to_string(), "Example".to_string()),
+            GeminiLine::Link("/hi.gmi".to_string(), "Example".to_string()),
             GeminiLine::Link("https://example.com".to_string(), "Example".to_string()),
             GeminiLine::Link("https://rust-lang.org".to_string(), String::new()),
         ];
         assert_eq!(
             render_html(&input),
             GeminiLine::Link("https://example.com".to_string(), "Example".to_string()),
             GeminiLine::Link("https://rust-lang.org".to_string(), String::new()),
         ];
         assert_eq!(
             render_html(&input),
-            "<p class=\"a\"><a href=\"https://example.com\">Example</a></p>\n\
+            "<p class=\"a\"><a href=\"gemini://hi.gmi\">Example</a></p>\n\
+             <p class=\"a\"><a href=\"/hi.gmi/kidding\">Example</a></p>\n\
+             <p class=\"a\"><a href=\"/hi.html\">Example</a></p>\n\
+             <p class=\"a\"><a href=\"https://example.com\">Example</a></p>\n\
              <p class=\"a\"><a href=\"https://rust-lang.org\">https://rust-lang.org</a></p>\n"
         );
     }
              <p class=\"a\"><a href=\"https://rust-lang.org\">https://rust-lang.org</a></p>\n"
         );
     }