summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2022-10-22 02:28:03 -0600
committerDan Allen <dan.j.allen@gmail.com>2022-10-22 02:28:03 -0600
commit153c2862dd9a80daad31dc2242ceca6828fbbf68 (patch)
tree5a11f42bc805f97584471a143f979d74e5701de5
parent09f8c3a8d7a19f3ca2f0f4cdb14a00e746cbd9fa (diff)
fix regression that prevented trailing hard break from being removed
-rw-r--r--CHANGELOG.adoc1
-rw-r--r--lib/asciidoctor/pdf/formatted_text/transform.rb7
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