summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarat Radchenko <marat@slonopotamus.org>2024-05-12 16:16:47 +0300
committerGitHub <noreply@github.com>2024-05-12 16:16:47 +0300
commit9d2cfc2561034f4ce2ec4fabdaadbe2c4489e9c2 (patch)
tree9af88b8812d9951b5da86dc84d85ccf30a2dc705
parent59bd1302a3d478347e203aa74e3dbb9c050d8c5d (diff)
resolves #470 do not crash on an SVG image inside table cell (#473)
closes #471
-rw-r--r--CHANGELOG.adoc1
-rw-r--r--lib/asciidoctor-epub3/converter.rb11
-rw-r--r--spec/fixtures/image-in-table/book.adoc9
-rw-r--r--spec/fixtures/image-in-table/circle.svg3
-rw-r--r--spec/image_spec.rb7
5 files changed, 30 insertions, 1 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc
index 822a584..771f7ce 100644
--- a/CHANGELOG.adoc
+++ b/CHANGELOG.adoc
@@ -8,6 +8,7 @@ For a detailed view of what has changed, refer to the {uri-repo}/commits/master[
== Unreleased
* fix crash when section title contains inline anchor (#472)
+* fix crash on an SVG image inside table cell (#470)
== 2.1.0 (2024-02-04) - @slonopotamus
diff --git a/lib/asciidoctor-epub3/converter.rb b/lib/asciidoctor-epub3/converter.rb
index 652e7f0..257d3b0 100644
--- a/lib/asciidoctor-epub3/converter.rb
+++ b/lib/asciidoctor-epub3/converter.rb
@@ -76,6 +76,10 @@ module Asciidoctor
EPUB_EXTENSION_RX = /\.epub$/i.freeze
+ # This is a workaround for https://github.com/asciidoctor/asciidoctor/issues/4380
+ # Currently, there is no access to parent cell from inner document
+ PARENT_CELL_FIELD_NAME = :@epub3_parent_cell
+
QUOTE_TAGS = begin
tags = {
monospaced: ['<code>', '</code>', true],
@@ -796,6 +800,7 @@ document.addEventListener('DOMContentLoaded', function(event, reader) {
else
case cell.style
when :asciidoc
+ cell.inner_document.instance_variable_set(PARENT_CELL_FIELD_NAME, cell)
cell_content = %(<div class="embed">#{cell.content}</div>)
when :verse
cell_content = %(<div class="verse">#{cell.text}</div>)
@@ -1156,7 +1161,11 @@ document.addEventListener('DOMContentLoaded', function(event, reader) {
return nil if node.nil?
return node unless get_chapter_filename(node).nil?
- node = node.parent
+ node = if node.instance_variable_defined?(PARENT_CELL_FIELD_NAME)
+ node.instance_variable_get(PARENT_CELL_FIELD_NAME)
+ else
+ node.parent
+ end
end
end
diff --git a/spec/fixtures/image-in-table/book.adoc b/spec/fixtures/image-in-table/book.adoc
new file mode 100644
index 0000000..400621f
--- /dev/null
+++ b/spec/fixtures/image-in-table/book.adoc
@@ -0,0 +1,9 @@
+= Image in table
+:doctype: book
+
+== Chapter
+
+|===
+a|
+image::circle.svg[]
+|===
diff --git a/spec/fixtures/image-in-table/circle.svg b/spec/fixtures/image-in-table/circle.svg
new file mode 100644
index 0000000..3e8733f
--- /dev/null
+++ b/spec/fixtures/image-in-table/circle.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 600">
+ <circle cx="400" cy="300" r="250" stroke-width="20" stroke="#f00" fill="#ff0" />
+</svg>
diff --git a/spec/image_spec.rb b/spec/image_spec.rb
index e178af8..4200e24 100644
--- a/spec/image_spec.rb
+++ b/spec/image_spec.rb
@@ -81,6 +81,13 @@ describe 'Asciidoctor::Epub3::Converter - Image' do
expect(chapter.content).to include '<img src="square.png" alt="invalid&quot;" width="25em" />'
end
+ # Test for https://github.com/asciidoctor/asciidoctor-epub3/issues/470
+ it 'supports image inside table cell' do
+ book, = to_epub fixture_file('image-in-table/book.adoc')
+ chapter = book.item_by_href '_chapter.xhtml'
+ expect(chapter).not_to be_nil
+ end
+
# If this test fails for you, make sure you're using gepub >= 1.0.11
it 'adds SVG attribute to EPUB manifest if chapter contains SVG images' do
book, = to_epub fixture_file('svg/book.adoc')