diff options
| author | Marat Radchenko <marat@slonopotamus.org> | 2024-05-12 16:16:47 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-12 16:16:47 +0300 |
| commit | 9d2cfc2561034f4ce2ec4fabdaadbe2c4489e9c2 (patch) | |
| tree | 9af88b8812d9951b5da86dc84d85ccf30a2dc705 | |
| parent | 59bd1302a3d478347e203aa74e3dbb9c050d8c5d (diff) | |
resolves #470 do not crash on an SVG image inside table cell (#473)
closes #471
| -rw-r--r-- | CHANGELOG.adoc | 1 | ||||
| -rw-r--r-- | lib/asciidoctor-epub3/converter.rb | 11 | ||||
| -rw-r--r-- | spec/fixtures/image-in-table/book.adoc | 9 | ||||
| -rw-r--r-- | spec/fixtures/image-in-table/circle.svg | 3 | ||||
| -rw-r--r-- | spec/image_spec.rb | 7 |
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"" 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') |
