define title based on first Header tag match

This commit is contained in:
yggverse 2026-03-09 04:50:35 +02:00
parent 8400ed2b6a
commit 3df4a79e0a
3 changed files with 16 additions and 7 deletions

View file

@ -39,9 +39,6 @@ impl Markdown {
base: &Uri, base: &Uri,
markdown: &str, markdown: &str,
) -> Result<Self, Error> { ) -> Result<Self, Error> {
// Init default values
let mut title = None;
// Init HashMap storage (for event controllers) // Init HashMap storage (for event controllers)
let mut links: HashMap<TextTag, Uri> = HashMap::new(); let mut links: HashMap<TextTag, Uri> = HashMap::new();
@ -110,7 +107,7 @@ impl Markdown {
// Render markdown tags // Render markdown tags
// * keep in order! // * 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 // Parse single-line markdown tags
/*'l: for line in markdown.lines() { /*'l: for line in markdown.lines() {

View file

@ -59,13 +59,15 @@ impl Tags {
base: &Uri, base: &Uri,
link_color: &RGBA, link_color: &RGBA,
links: &mut HashMap<TextTag, Uri>, links: &mut HashMap<TextTag, Uri>,
) { ) -> Option<String> {
// * keep in order! // * keep in order!
self.header.render(buffer); let title = self.header.render(buffer); // @TODO strip raw tags
self.quote.render(buffer); self.quote.render(buffer);
reference::render_images_links(&buffer, base, &link_color, links); reference::render_images_links(&buffer, base, &link_color, links);
reference::render_images(&buffer, base, &link_color, links); reference::render_images(&buffer, base, &link_color, links);
reference::render_links(&buffer, base, &link_color, links); reference::render_links(&buffer, base, &link_color, links);
title
} }
} }

View file

@ -64,7 +64,9 @@ impl Header {
} }
/// Apply title `Tag` to given `TextBuffer` /// Apply title `Tag` to given `TextBuffer`
pub fn render(&self, buffer: &TextBuffer) { pub fn render(&self, buffer: &TextBuffer) -> Option<String> {
let mut raw_title = None;
let table = buffer.tag_table(); let table = buffer.tag_table();
assert!(table.add(&self.h1)); assert!(table.add(&self.h1));
@ -81,6 +83,12 @@ impl Header {
.captures_iter(&full_content) .captures_iter(&full_content)
.collect(); .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() { for cap in matches.into_iter().rev() {
let full_match = cap.get(0).unwrap(); let full_match = cap.get(0).unwrap();
@ -102,6 +110,8 @@ impl Header {
_ => buffer.insert_with_tags(&mut start_iter, &cap["title"], &[]), _ => buffer.insert_with_tags(&mut start_iter, &cap["title"], &[]),
} }
} }
raw_title
} }
} }