From 2521a45f5fdb0345b3572d8753c1640ad2487af7 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Sat, 10 Sep 2016 18:20:14 -0600 Subject: tighten prawn-svg version range; allow prawn-svg to restore font Avoid using the following versions of prawn-svg: * 0.24.0 * 0.25.0 * 0.25.1 These versions did not properly restore the font after drawing the SVG. As a result, an SVG containing text objects could alter the document font. --- asciidoctor-pdf.gemspec | 2 +- lib/asciidoctor-pdf/converter.rb | 4 ++-- lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb | 9 +++------ 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/asciidoctor-pdf.gemspec b/asciidoctor-pdf.gemspec index 211810b4..2012011b 100644 --- a/asciidoctor-pdf.gemspec +++ b/asciidoctor-pdf.gemspec @@ -44,7 +44,7 @@ An extension for Asciidoctor that converts AsciiDoc documents to PDF using the P s.add_runtime_dependency 'prawn-table', '0.2.2' s.add_runtime_dependency 'prawn-templates', '0.0.3' # Prawn SVG >= 0.22.1 requires Ruby >= 2.0.0, so we must cast a wider net to support Ruby 1.9.3 - s.add_runtime_dependency 'prawn-svg', '>= 0.21.0' + s.add_runtime_dependency 'prawn-svg', '>= 0.21.0', '< 0.26.0' s.add_runtime_dependency 'prawn-icon', '1.1.0' s.add_runtime_dependency 'safe_yaml', '~> 1.0.4' s.add_runtime_dependency 'thread_safe', '~> 0.3.5' diff --git a/lib/asciidoctor-pdf/converter.rb b/lib/asciidoctor-pdf/converter.rb index bd168ed3..42146f45 100644 --- a/lib/asciidoctor-pdf/converter.rb +++ b/lib/asciidoctor-pdf/converter.rb @@ -873,8 +873,8 @@ class Converter < ::Prawn::Document # TODO layout SVG without using keep_together (since we know the dimensions already); always render caption keep_together do |box_height = nil| svg_obj.instance_variable_set :@prawn, self - # NOTE wrap call to draw in save_font to workaround mogest/prawn-svg#80 (fixed in prawn-svg > 0.25.1) - save_font { svg_obj.draw } + # NOTE prawn-svg 0.24.0, 0.25.0, & 0.25.1 didn't restore font after call to draw (see mogest/prawn-svg#80) + svg_obj.draw if box_height && (link = node.attr 'link', nil, false) link_annotation [(abs_left = svg_obj.position[0] + bounds.absolute_left), y, (abs_left + rendered_w), (y + rendered_h)], Border: [0, 0, 0], diff --git a/lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb b/lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb index 65916e7b..8683ea60 100644 --- a/lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb +++ b/lib/asciidoctor-pdf/formatted_text/inline_image_renderer.rb @@ -26,13 +26,10 @@ module InlineImageRenderer image_left = fragment.left + ((fragment.width - data[:image_width]) / 2.0) case data[:image_format] when 'svg' + (image_obj = data[:image_obj]).options[:at] = [image_left, image_top] # NOTE prawn-svg messes with the cursor; use float to workaround - # NOTE wrap call to draw in save_font to workaround mogest/prawn-svg#80 (fixed in prawn-svg > 0.25.1) - pdf.save_font do - pdf.float do - data[:image_obj].tap {|obj| obj.options[:at] = [image_left, image_top] }.draw - end - end + # NOTE prawn-svg 0.24.0, 0.25.0, & 0.25.1 didn't restore font after call to draw (see mogest/prawn-svg#80) + pdf.float { image_obj.draw } else pdf.embed_image data[:image_obj], data[:image_info], at: [image_left, image_top], width: data[:image_width] end -- cgit v1.2.3