From 587f40bf3257371a2e178cef556e4550a3248dc1 Mon Sep 17 00:00:00 2001 From: yggverse Date: Fri, 27 Sep 2024 00:58:47 +0300 Subject: [PATCH] complete link parser --- .../content/text/gemini/reader/parser/link.rs | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/browser/main/tab/page/content/text/gemini/reader/parser/link.rs b/src/browser/main/tab/page/content/text/gemini/reader/parser/link.rs index a39c84b0..1470e56e 100644 --- a/src/browser/main/tab/page/content/text/gemini/reader/parser/link.rs +++ b/src/browser/main/tab/page/content/text/gemini/reader/parser/link.rs @@ -20,8 +20,8 @@ impl Link { // returns new Link struct or None pub fn from(line: &str, base: &Uri) -> Option { // Init struct members - let alt: Option = None; - let date: Option = None; + let mut alt: Option = None; + let mut date: Option = None; let external: bool; let link: GString; let markup: GString; @@ -29,7 +29,7 @@ impl Link { // Parse line let parsed = Regex::split_simple( - r"^=>\s*([^\s]+)(\s(\d{4}-\d{2}-\d{2}))?(\s(.+))?$", + r"^=>\s*([^\s]+)\s+(\d{4}-\d{2}-\d{2})?\s*(.+)?$", line, RegexCompileFlags::DEFAULT, RegexMatchFlags::DEFAULT, @@ -48,7 +48,7 @@ impl Link { match Uri::parse(&resolved, UriFlags::NONE) { Ok(object) => { // Set external status - external = object.host() == base.host(); + external = object.host() != base.host(); // Set struct URI uri = object; @@ -62,14 +62,23 @@ impl Link { None => return None, } + // Create link name based on external status, date and alt values + let mut name = Vec::new(); + + if external { + name.push("⇖".to_string()); + } + // Date - if let Some(date) = parsed.get(2) { - // date = date.as_str(); + if let Some(this) = parsed.get(2) { + date = Some(GString::from(this.to_string())); + name.push(this.to_string()); } // Alt - if let Some(alt) = parsed.get(3) { - // alt = alt.as_str(); + if let Some(this) = parsed.get(3) { + alt = Some(GString::from(this.to_string())); + name.push(this.to_string()); } // Markup @@ -77,7 +86,7 @@ impl Link { "{}\n", markup_escape_text(&uri.to_str()), // use resolved address for href markup_escape_text(&link), // show original address for title - markup_escape_text(&link), // @TODO + markup_escape_text(&name.join(" ")), )); Some(Self {