From 05d054041be487e3862ceb2820601aa48b6213f4 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 20 Mar 2025 20:51:10 +1300 Subject: [PATCH 1/5] Add support for alt-text. --- lib/rdoc/markdown.kpeg | 11 ++++++++--- lib/rdoc/markup/to_html.rb | 7 ++++++- test/rdoc/test_rdoc_markdown.rb | 4 ++-- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/rdoc/markdown.kpeg b/lib/rdoc/markdown.kpeg index 66a4aa74fd..fe4e74b912 100644 --- a/lib/rdoc/markdown.kpeg +++ b/lib/rdoc/markdown.kpeg @@ -992,9 +992,14 @@ Strike = &{ strike? } "~~" { strike a.join } -# TODO alt text support -Image = "!" ( ExplicitLink | ReferenceLink ):a - { "rdoc-image:#{a[/\[(.*)\]/, 1]}" } +Image = "!" ExplicitLink:a + { + # Extract alt text and URL + alt_text = a[/\{(.*?)\}/, 1] || "" + url = a[/\[(.*?)\]/, 1] || "" + + "rdoc-image:#{url}:#{alt_text}" + } Link = ExplicitLink | ReferenceLink | AutoLink diff --git a/lib/rdoc/markup/to_html.rb b/lib/rdoc/markup/to_html.rb index dd37bf9eb3..cf11dbf8b9 100644 --- a/lib/rdoc/markup/to_html.rb +++ b/lib/rdoc/markup/to_html.rb @@ -98,7 +98,12 @@ def handle_RDOCLINK url # :nodoc: gen_url CGI.escapeHTML(url), CGI.escapeHTML(text) when /^rdoc-image:/ - %[] + url, alt = $'.split(":", 2) # Split the string after "rdoc-image:" into url and alt + if alt + %[#{CGI.escapeHTML(alt)}] + else + %[] + end when /\Ardoc-[a-z]+:/ CGI.escapeHTML($') end diff --git a/test/rdoc/test_rdoc_markdown.rb b/test/rdoc/test_rdoc_markdown.rb index 61098ae2b5..996ae4e8db 100644 --- a/test/rdoc/test_rdoc_markdown.rb +++ b/test/rdoc/test_rdoc_markdown.rb @@ -511,7 +511,7 @@ def test_parse_html_no_html def test_parse_image doc = parse "image ![alt text](path/to/image.jpg)" - expected = doc(para("image rdoc-image:path/to/image.jpg")) + expected = doc(para("image rdoc-image:path/to/image.jpg:alt text")) assert_equal expected, doc end @@ -523,7 +523,7 @@ def test_parse_image_link expected = doc( - para('{rdoc-image:path/to/image.jpg}[http://example.com]')) + para('{rdoc-image:path/to/image.jpg:alt text}[http://example.com]')) assert_equal expected, doc end From 9ef49348e02de1990fde1be13c6fb36789b9cfa9 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Thu, 20 Mar 2025 21:03:40 +1300 Subject: [PATCH 2/5] Use alt text when formatting headers with an `rdoc-image`. --- lib/rdoc/markup/heading.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/rdoc/markup/heading.rb b/lib/rdoc/markup/heading.rb index 02476e5226..d2ae3f5939 100644 --- a/lib/rdoc/markup/heading.rb +++ b/lib/rdoc/markup/heading.rb @@ -66,7 +66,13 @@ def label context = nil # element. def plain_html - self.class.to_html.to_html(text.dup) + text = self.text.dup + + if text.match?(/rdoc-image:[^:]+:(.*)/) + text = text.match(/rdoc-image:[^:]+:(.*)/)[1] + end + + self.class.to_html.to_html(text) end def pretty_print q # :nodoc: From a56019b76b412c1a642285366f85306a4b08c20f Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 21 Mar 2025 11:08:33 +1300 Subject: [PATCH 3/5] Update lib/rdoc/markup/heading.rb Co-authored-by: Stan Lo --- lib/rdoc/markup/heading.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/rdoc/markup/heading.rb b/lib/rdoc/markup/heading.rb index d2ae3f5939..693320953f 100644 --- a/lib/rdoc/markup/heading.rb +++ b/lib/rdoc/markup/heading.rb @@ -68,8 +68,8 @@ def label context = nil def plain_html text = self.text.dup - if text.match?(/rdoc-image:[^:]+:(.*)/) - text = text.match(/rdoc-image:[^:]+:(.*)/)[1] + if matched = text.match(/rdoc-image:[^:]+:(.*)/) + text = matched[1] end self.class.to_html.to_html(text) From 474bd3106e8c3e4a8b1fa4754d5e01d461015f26 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 21 Mar 2025 11:10:28 +1300 Subject: [PATCH 4/5] Add test. --- test/rdoc/test_rdoc_markup_heading.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/rdoc/test_rdoc_markup_heading.rb b/test/rdoc/test_rdoc_markup_heading.rb index de92af91a0..5dd60ed3ab 100644 --- a/test/rdoc/test_rdoc_markup_heading.rb +++ b/test/rdoc/test_rdoc_markup_heading.rb @@ -26,4 +26,9 @@ def test_plain_html assert_equal 'Hello Friend!', @h.plain_html end + def test_plain_html_using_image_alt_as_text + h = RDoc::Markup::Heading.new 1, 'rdoc-image:foo.png:Hello World' + + assert_equal 'Hello World', h.plain_html + end end From 70dae6ef163e22711953fb02abe7f6086ab73188 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 21 Mar 2025 11:12:31 +1300 Subject: [PATCH 5/5] Don't emit empty alt. --- lib/rdoc/markup/to_html.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/rdoc/markup/to_html.rb b/lib/rdoc/markup/to_html.rb index cf11dbf8b9..60894de98c 100644 --- a/lib/rdoc/markup/to_html.rb +++ b/lib/rdoc/markup/to_html.rb @@ -99,7 +99,7 @@ def handle_RDOCLINK url # :nodoc: gen_url CGI.escapeHTML(url), CGI.escapeHTML(text) when /^rdoc-image:/ url, alt = $'.split(":", 2) # Split the string after "rdoc-image:" into url and alt - if alt + if alt && !alt.empty? %[#{CGI.escapeHTML(alt)}] else %[]