From: Ruben Beltran del Rio Date: Sun, 16 Apr 2023 14:41:52 +0000 (+0200) Subject: Replace gemini links X-Git-Tag: 1.0.0~3 X-Git-Url: https://git.r.bdr.sh/rbdr/page/commitdiff_plain/0e3bcda2ce1ba4bff5d457e48a82db6e6289aad6 Replace gemini links --- diff --git a/src/file_handler/file_strategies/gemini.rs b/src/file_handler/file_strategies/gemini.rs index 04e2b6a..1c8a111 100644 --- a/src/file_handler/file_strategies/gemini.rs +++ b/src/file_handler/file_strategies/gemini.rs @@ -75,7 +75,8 @@ impl FileHandlerStrategy for Strategy { let relative_path = file.path.strip_prefix(&source).unwrap(); - let complete_destination = destination.join(relative_path); + let mut complete_destination = destination.join(relative_path); + complete_destination.set_extension("html"); let destination_parent = complete_destination.parent().unwrap(); create_dir_all(destination_parent).unwrap(); diff --git a/src/gemini_parser.rs b/src/gemini_parser.rs index 5c20426..d0715f1 100644 --- a/src/gemini_parser.rs +++ b/src/gemini_parser.rs @@ -8,9 +8,12 @@ pub fn parse(source: &str) -> String { for line in lines { let mut line_type = LineType::Text; - if line.len() > 2 { - let end = line.char_indices().map(|(i, _)| i).nth(2).unwrap(); - line_type = identify_line(&(line[..end]), is_preformatted); + if line.char_indices().count() > 2 { + let mut end = line.len(); + if line.char_indices().count() > 3 { + end = line.char_indices().map(|(i, _)| i).nth(3).unwrap(); + } + line_type = identify_line(&line[..end], is_preformatted); } match line_type { LineType::PreformattedToggle => is_preformatted = !is_preformatted, @@ -72,7 +75,14 @@ fn get_full_line_content(line_type: &LineType, line: &str) -> String { match line_type { LineType::Text => format!("

{}

\n", line.trim()), LineType::Blank => "
\n".to_string(), - LineType::Link => format!("
{}
\n", get_link_address(line), get_link_content(line)), + LineType::Link => { + let url = get_link_address(line); + if url.starts_with("gemini:") { + format!("
{}
\n", url, get_link_content(line)) + } else { + format!("
{}
\n", url.replace(".gmi", ".html"), get_link_content(line)) + } + }, LineType::Heading1 => format!("

{}

\n", line[1..].trim()), LineType::Heading2 => format!("

{}

\n", line[2..].trim()), LineType::Heading3 => format!("

{}

\n", line[3..].trim()),