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 {