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,
markdown: &str,
) -> Result<Self, Error> {
// Init default values
let mut title = None;
// Init HashMap storage (for event controllers)
let mut links: HashMap<TextTag, Uri> = 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() {

View file

@ -59,13 +59,15 @@ impl Tags {
base: &Uri,
link_color: &RGBA,
links: &mut HashMap<TextTag, Uri>,
) {
) -> Option<String> {
// * 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
}
}

View file

@ -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<String> {
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
}
}