diff options
| author | Dan Allen <dan.j.allen@gmail.com> | 2022-10-22 02:28:03 -0600 |
|---|---|---|
| committer | Dan Allen <dan.j.allen@gmail.com> | 2022-10-22 02:28:03 -0600 |
| commit | 153c2862dd9a80daad31dc2242ceca6828fbbf68 (patch) | |
| tree | 5a11f42bc805f97584471a143f979d74e5701de5 | |
| parent | 09f8c3a8d7a19f3ca2f0f4cdb14a00e746cbd9fa (diff) | |
fix regression that prevented trailing hard break from being removed
| -rw-r--r-- | CHANGELOG.adoc | 1 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/formatted_text/transform.rb | 7 |
2 files changed, 6 insertions, 2 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 1867a686..8b118aa1 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -31,6 +31,7 @@ Improvements:: * process `pre-wrap` role in text formatter * drop support for the unmaintained payment font (`pf`) for use in font-based icons +* refactor formatted text transform to simplify how inner space is collapsed; verify only inner hard breaks are preserved Bug Fixes:: diff --git a/lib/asciidoctor/pdf/formatted_text/transform.rb b/lib/asciidoctor/pdf/formatted_text/transform.rb index 6e4e8ef7..bc5db0c9 100644 --- a/lib/asciidoctor/pdf/formatted_text/transform.rb +++ b/lib/asciidoctor/pdf/formatted_text/transform.rb @@ -8,8 +8,9 @@ module Asciidoctor DummyText = ?\u0000 ZeroWidthSpace = ?\u200b + LF = ?\n + InnerLF = LF + ZeroWidthSpace # without trailing character, use of fallback font can change line height DoubleSpace = ' ' - LF = ?\n + ZeroWidthSpace # without trailing character, use of fallback font can change line height CharEntityTable = { amp: '&', apos: ?', gt: '>', lt: '<', nbsp: ?\u00a0, quot: '"' } CharRefRx = /&(?:(#{CharEntityTable.keys.join '|'})|#(?:(\d\d\d{0,4})|x(\h\h\h{0,3})));/ HexColorRx = /^#\h\h\h\h{0,3}$/ @@ -156,6 +157,7 @@ module Asciidoctor def apply parsed, fragments = [], inherited = nil, normalize_space: nil previous_fragment_is_text = false previous_fragment_end_with_space = false + last_node = parsed[-1] # NOTE: we use each since using inject is slower than a manual loop parsed.each do |node| case node[:type] @@ -223,7 +225,8 @@ module Asciidoctor fragments << fragment previous_fragment_is_text = previous_fragment_end_with_space = false else # :br - text = @merge_adjacent_text_nodes && previous_fragment_is_text ? %(#{fragments.pop[:text]}#{LF}) : LF + lf = node == last_node ? LF : InnerLF + text = @merge_adjacent_text_nodes && previous_fragment_is_text ? %(#{fragments.pop[:text]}#{lf}) : lf fragments << (clone_fragment inherited, text: text) previous_fragment_is_text = previous_fragment_end_with_space = true end |
