diff options
| author | Dan Allen <dan.j.allen@gmail.com> | 2022-05-26 15:31:51 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-05-26 15:31:51 -0600 |
| commit | 5aee1f6277b2c791be2132ebedc2db1ccd30c1db (patch) | |
| tree | 4b489bc479af5e29ce9e3b6850999afd757ef514 | |
| parent | d679ff1066326d37b91bb8285a36666033098873 (diff) | |
resolves #2059 fix width of multi-word phrase with background and border offset (PR #2212)
| -rw-r--r-- | CHANGELOG.adoc | 1 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb | 8 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/formatted_text/inline_text_aligner.rb | 13 | ||||
| -rw-r--r-- | spec/formatted_text_formatter_spec.rb | 9 | ||||
| -rw-r--r-- | spec/reference/arrange-block-at-top-does-not-fit.pdf | bin | 100471 -> 100474 bytes | |||
| -rw-r--r-- | spec/reference/arrange-block-at-top-fits.pdf | bin | 135790 -> 135801 bytes | |||
| -rw-r--r-- | spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf | bin | 99203 -> 99176 bytes | |||
| -rw-r--r-- | spec/reference/arrange-block-below-top-does-not-fit.pdf | bin | 98825 -> 98828 bytes | |||
| -rw-r--r-- | spec/reference/arrange-block-below-top-fits.pdf | bin | 132396 -> 132424 bytes | |||
| -rw-r--r-- | spec/reference/text-formatter-marked-phrase-word-spacing.pdf | bin | 0 -> 19757 bytes |
10 files changed, 25 insertions, 6 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 51b5a470..aa7ac359 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -10,6 +10,7 @@ For a detailed view of what has changed, refer to the {url-repo}/commits/main[co Bug Fixes:: * do not filter TOC entries without an ID when computing the TOC extent (#2210) +* fix width of multi-word phrase with background and border offset (#2059) == 2.0.4 (2022-05-25) - @mojavelinux diff --git a/lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb b/lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb index c96e6cdb..220a9830 100644 --- a/lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb +++ b/lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb @@ -5,8 +5,12 @@ Prawn::Text::Formatted::Fragment.prepend (Module.new do # Prevent fragment from being written by discarding the text, optionally forcing the width to 0 def conceal force_width_to_zero = false - @text = '' - @width = 0 if force_width_to_zero + if force_width_to_zero + @width = 0 + @text = '' + else + @text = ' ' * space_count # preserve space_count so width is still computed correctly + end end # Don't strip soft hyphens when repacking unretrieved fragments diff --git a/lib/asciidoctor/pdf/formatted_text/inline_text_aligner.rb b/lib/asciidoctor/pdf/formatted_text/inline_text_aligner.rb index d7b9086c..79c8ae26 100644 --- a/lib/asciidoctor/pdf/formatted_text/inline_text_aligner.rb +++ b/lib/asciidoctor/pdf/formatted_text/inline_text_aligner.rb @@ -9,11 +9,16 @@ module Asciidoctor::PDF::FormattedText text = fragment.text x = fragment.left y = fragment.baseline - align = fragment.format_state[:align] - if (align == :center || align == :right) && (gap_width = fragment.width - (document.width_of text)) != 0 - x += gap_width * (align == :center ? 0.5 : 1) + align = (format_state = fragment.format_state)[:align] + if align == :center || align == :right + gap_width = (format_state.key? :width) ? + fragment.width - (document.width_of text) : + (format_state[:border_offset] || 0) * 2 + x += gap_width * (align == :center ? 0.5 : 1) if gap_width > 0 + end + document.word_spacing fragment.word_spacing do + document.draw_text! text, at: [x, y], kerning: document.default_kerning? end - document.draw_text! text, at: [x, y] fragment.conceal end end diff --git a/spec/formatted_text_formatter_spec.rb b/spec/formatted_text_formatter_spec.rb index 48d25db5..7712c042 100644 --- a/spec/formatted_text_formatter_spec.rb +++ b/spec/formatted_text_formatter_spec.rb @@ -596,6 +596,15 @@ describe Asciidoctor::PDF::FormattedText::Formatter do end end + it 'should preserve word spacing in multi-word phrase that has a border offset', visual: true do + pdf_theme = { role_wild_background_color: 'CCCCCC', role_wild_border_offset: 1.5 } + to_file = to_pdf_file <<~EOS, 'text-formatter-marked-phrase-word-spacing.pdf', pdf_theme: pdf_theme + To tame the [.wild]#extremely wild and dangerous wolpertingers#, we needed to build a *charm*. + But ultimate victory could only be won if we divined the true name of the warlock. + EOS + (expect to_file).to visually_match 'text-formatter-marked-phrase-word-spacing.pdf' + end + it 'should not warn if text contains invalid markup in scratch document' do # NOTE: this assertion will fail if the message is logged multiple times (expect do diff --git a/spec/reference/arrange-block-at-top-does-not-fit.pdf b/spec/reference/arrange-block-at-top-does-not-fit.pdf Binary files differindex 5563beae..c6d4f6e2 100644 --- a/spec/reference/arrange-block-at-top-does-not-fit.pdf +++ b/spec/reference/arrange-block-at-top-does-not-fit.pdf diff --git a/spec/reference/arrange-block-at-top-fits.pdf b/spec/reference/arrange-block-at-top-fits.pdf Binary files differindex 483c3b8b..f9c7d982 100644 --- a/spec/reference/arrange-block-at-top-fits.pdf +++ b/spec/reference/arrange-block-at-top-fits.pdf diff --git a/spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf b/spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf Binary files differindex 53ed4775..4052bfc4 100644 --- a/spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf +++ b/spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf diff --git a/spec/reference/arrange-block-below-top-does-not-fit.pdf b/spec/reference/arrange-block-below-top-does-not-fit.pdf Binary files differindex 64009725..40a188fe 100644 --- a/spec/reference/arrange-block-below-top-does-not-fit.pdf +++ b/spec/reference/arrange-block-below-top-does-not-fit.pdf diff --git a/spec/reference/arrange-block-below-top-fits.pdf b/spec/reference/arrange-block-below-top-fits.pdf Binary files differindex 1672a594..d730b182 100644 --- a/spec/reference/arrange-block-below-top-fits.pdf +++ b/spec/reference/arrange-block-below-top-fits.pdf diff --git a/spec/reference/text-formatter-marked-phrase-word-spacing.pdf b/spec/reference/text-formatter-marked-phrase-word-spacing.pdf Binary files differnew file mode 100644 index 00000000..d9e2bbf5 --- /dev/null +++ b/spec/reference/text-formatter-marked-phrase-word-spacing.pdf |
