Skip to content

Commit

Permalink
Add alt and title to markdown images
Browse files Browse the repository at this point in the history
  • Loading branch information
hecrj committed Feb 4, 2025
1 parent a6e64ea commit 4d14048
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 17 deletions.
9 changes: 5 additions & 4 deletions examples/markdown/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ impl Markdown {
let preview = markdown::view_with(
self.content.items(),
&self.theme,
&MarkdownViewer {
&CustomViewer {
images: &self.images,
now: self.now,
},
Expand Down Expand Up @@ -251,21 +251,22 @@ impl Markdown {
}
}

struct MarkdownViewer<'a> {
struct CustomViewer<'a> {
images: &'a HashMap<markdown::Url, Image>,
now: Instant,
}

impl<'a> markdown::Viewer<'a, Message> for MarkdownViewer<'a> {
impl<'a> markdown::Viewer<'a, Message> for CustomViewer<'a> {
fn on_link_clicked(url: markdown::Url) -> Message {
Message::LinkClicked(url)
}

fn image(
&self,
_settings: markdown::Settings,
_title: &markdown::Text,
url: &'a markdown::Url,
_title: &'a str,
_alt: &markdown::Text,
) -> Element<'a, Message> {
if let Some(Image::Ready { handle, fade_in }) = self.images.get(url) {
center_x(
Expand Down
39 changes: 26 additions & 13 deletions widget/src/markdown.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,9 @@ pub enum Item {
/// The destination URL of the image.
url: Url,
/// The title of the image.
title: Text,
title: String,
/// The alternative text of the image.
alt: Text,
},
}

Expand Down Expand Up @@ -374,7 +376,7 @@ impl Highlighter {
parser: iced_highlighter::Stream::new(
&iced_highlighter::Settings {
theme: iced_highlighter::Theme::Base16Ocean,
token: language.to_string(),
token: language.to_owned(),
},
),
language: language.to_owned(),
Expand Down Expand Up @@ -488,7 +490,7 @@ fn parse_with<'a>(
))
} else {
let _ = RefCell::borrow_mut(&broken_links)
.insert(broken_link.reference.to_string());
.insert(broken_link.reference.into_string());

None
}
Expand Down Expand Up @@ -559,10 +561,12 @@ fn parse_with<'a>(

None
}
pulldown_cmark::Tag::Image { dest_url, .. }
if !metadata && !table =>
{
image = Url::parse(&dest_url).ok();
pulldown_cmark::Tag::Image {
dest_url, title, ..
} if !metadata && !table => {
image = Url::parse(&dest_url)
.ok()
.map(|url| (url, title.into_string()));
None
}
pulldown_cmark::Tag::List(first_item) if !metadata && !table => {
Expand Down Expand Up @@ -700,13 +704,18 @@ fn parse_with<'a>(
)
}
pulldown_cmark::TagEnd::Image if !metadata && !table => {
let url = image.take()?;
let title = Text::new(spans.drain(..).collect());
let (url, title) = image.take()?;
let alt = Text::new(spans.drain(..).collect());

let state = state.borrow_mut();
let _ = state.images.insert(url.clone());

produce(state, &mut stack, Item::Image { url, title }, source)
produce(
state,
&mut stack,
Item::Image { url, title, alt },
source,
)
}
pulldown_cmark::TagEnd::CodeBlock if !metadata && !table => {
#[cfg(feature = "highlighter")]
Expand Down Expand Up @@ -1001,7 +1010,9 @@ where
Renderer: core::text::Renderer<Font = Font> + 'a,
{
match item {
Item::Image { title, url } => viewer.image(settings, title, url),
Item::Image { url, title, alt } => {
viewer.image(settings, url, &title, alt)

Check failure on line 1014 in widget/src/markdown.rs

View workflow job for this annotation

GitHub Actions / all

this expression creates a reference which is immediately dereferenced by the compiler
}
Item::Heading(level, text) => {
viewer.heading(settings, level, text, index)
}
Expand Down Expand Up @@ -1194,13 +1205,15 @@ where
fn image(
&self,
settings: Settings,
title: &Text,
url: &'a Url,
title: &'a str,
alt: &Text,
) -> Element<'a, Message, Theme, Renderer> {
let _url = url;
let _title = title;

container(
rich_text(title.spans(settings.style))
rich_text(alt.spans(settings.style))
.on_link_clicked(Self::on_link_clicked),
)
.padding(settings.spacing.0)
Expand Down

0 comments on commit 4d14048

Please sign in to comment.