summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2022-08-27 23:54:30 -0600
committerDan Allen <dan.j.allen@gmail.com>2022-08-28 01:35:39 -0600
commit2620612965cbcd25c1a2c4748466d54d64c0c7e2 (patch)
treefd0637e2a8b28fe9a9226f6c14e0b4073aa5fd1f /lib
parent603dd2d46cb744adbdfd1326c13a7cb6b9b4ffa5 (diff)
simplify logic to apply text transform to first line
Diffstat (limited to 'lib')
-rw-r--r--lib/asciidoctor/pdf/ext/prawn/extensions.rb20
1 files changed, 3 insertions, 17 deletions
diff --git a/lib/asciidoctor/pdf/ext/prawn/extensions.rb b/lib/asciidoctor/pdf/ext/prawn/extensions.rb
index c8190fe8..02d176a3 100644
--- a/lib/asciidoctor/pdf/ext/prawn/extensions.rb
+++ b/lib/asciidoctor/pdf/ext/prawn/extensions.rb
@@ -500,26 +500,12 @@ module Asciidoctor
end
if first_line_text_transform
# NOTE: applying text transform here could alter the wrapping, so isolate first line and shrink it to fit
- first_printed_line = (box.instance_variable_get :@printed_lines)[0]
- unless first_printed_line == fragments[0][:text]
- original_fragments, fragments = fragments, []
- original_fragments.reduce '' do |traced, fragment|
- fragments << fragment
- # NOTE: we could just do a length comparison here
- if (traced += fragment[:text]).start_with? first_printed_line
- fragment[:text] = fragment[:text][0...-(traced.length - first_printed_line.length)]
- break
- end
- traced
- end
- end
- fragments.each {|fragment| fragment[:text] = transform_text fragment[:text], first_line_text_transform }
+ first_line_fragments = (box.instance_variable_get :@arranger).consumed
+ fragments = first_line_fragments.map {|fragment| fragment.merge text: (transform_text fragment[:text], first_line_text_transform) }
first_line_options[:overflow] = :shrink_to_fit
if remaining_fragments
@final_gap = true
- if first_line_options[:align] == :justify && (box.instance_variable_get :@arranger).consumed[-1]&.[](:text) != ?\n
- first_line_options[:force_justify] = true
- end
+ first_line_options[:force_justify] = true if first_line_options[:align] == :justify && first_line_fragments[-1][:text] != ?\n
end
end
if text_indent