diff --git a/src/app/browser/window/tab/item/page/content/text/markdown.rs b/src/app/browser/window/tab/item/page/content/text/markdown.rs index 34be39c0..d45af4ce 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown.rs @@ -39,9 +39,6 @@ impl Markdown { base: &Uri, markdown: &str, ) -> Result { - // Init default values - let mut title = None; - // Init HashMap storage (for event controllers) let mut links: HashMap = HashMap::new(); @@ -110,7 +107,7 @@ impl Markdown { // Render markdown tags // * keep in order! - tags.render(&buffer, &base, &link_color.0, &mut links); + let title = tags.render(&buffer, &base, &link_color.0, &mut links); // Parse single-line markdown tags /*'l: for line in markdown.lines() { diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs index d911b98c..7b1d065f 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs @@ -59,13 +59,15 @@ impl Tags { base: &Uri, link_color: &RGBA, links: &mut HashMap, - ) { + ) -> Option { // * keep in order! - self.header.render(buffer); + let title = self.header.render(buffer); // @TODO strip raw tags self.quote.render(buffer); reference::render_images_links(&buffer, base, &link_color, links); reference::render_images(&buffer, base, &link_color, links); reference::render_links(&buffer, base, &link_color, links); + + title } } diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs index 44ae5f68..b171cc82 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs @@ -64,7 +64,9 @@ impl Header { } /// Apply title `Tag` to given `TextBuffer` - pub fn render(&self, buffer: &TextBuffer) { + pub fn render(&self, buffer: &TextBuffer) -> Option { + let mut raw_title = None; + let table = buffer.tag_table(); assert!(table.add(&self.h1)); @@ -81,6 +83,12 @@ impl Header { .captures_iter(&full_content) .collect(); + for cap in matches.iter() { + if raw_title.is_none() && !cap["title"].trim().is_empty() { + raw_title = Some(cap["title"].into()) + } + } + for cap in matches.into_iter().rev() { let full_match = cap.get(0).unwrap(); @@ -102,6 +110,8 @@ impl Header { _ => buffer.insert_with_tags(&mut start_iter, &cap["title"], &[]), } } + + raw_title } }