manual/text/text_box_overflow.rb
# frozen_string_literal: true
require 'prawn/manual_builder'
Prawn::ManualBuilder::Chapter.new do
title 'Text Box Overflow'
text do
prose <<~TEXT
The <code>text_box</code> method accepts both <code>:width</code> and
<code>:height</code> options. So what happens if the text doesn't fit the
box?
The default behavior is to truncate the text but this can be changed with
the <code>:overflow</code> option. Available modes are
<code>:expand</code> (the box will increase to fit the text) and
<code>:shrink_to_fit</code> (the text font size will be shrunk to fit).
If <code>:shrink_to_fit</code> mode is used with the
<code>:min_font_size</code> option set, the font size will not be reduced
to less than the value provided even if it means truncating some text.
If the <code>:disable_wrap_by_char</code> is set to <code>true</code>
then any text wrapping done while using the <code>:shrink_to_fit</code>
mode will not break up the middle of words.
TEXT
end
example new_page: true do
string = 'This is the sample text used for the text boxes. See how it ' \
'behave with the various overflow options used.'
text string
y_position = cursor - 20
%i[truncate expand shrink_to_fit].each_with_index do |mode, i|
text_box string,
at: [i * 150, y_position],
width: 100,
height: 50,
overflow: mode
end
string = 'If the box is too small for the text, :shrink_to_fit ' \
'can render the text in a really small font size.'
move_down 120
text string
y_position = cursor - 20
[nil, 8, 10, 12].each_with_index do |value, index|
text_box string,
at: [index * 150, y_position],
width: 50,
height: 50,
overflow: :shrink_to_fit,
min_font_size: value
end
end
end