use crate::gemini_parser::GeminiLine;
+use std::path::Path;
/// Renders HTML from a vector of `GeminiLine` elements.
///
match line {
GeminiLine::Text(content, false) => format!("<p>{content}</p>"),
GeminiLine::Link(url, text) => {
- let processed_url;
- if !url.starts_with("gemini:") && url.ends_with(".gmi") {
- processed_url = url.replace(".gmi", ".html");
+ let path = Path::new(url);
+ let processed_url = if !url.starts_with("gemini:")
+ && path
+ .extension()
+ .map_or(false, |ext| ext.eq_ignore_ascii_case("gmi"))
+ {
+ url.replace(".gmi", ".html")
} else {
- processed_url = url.to_string();
- }
- let display = if text.is_empty() { &processed_url } else { text };
+ 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}>"),