I am trying to create a book system. I am finding a way to split the text of the book into multiple pages. The book consists of multiple TextLabels with a fixed size written in a fixed font size.
What I have so far doesn’t fully split the text, it leaves behind a few words.
local TextService = game:GetService("TextService")
local current_text = {}
local function split_text(text: string): ()
local split_by_space = string.split(text, " ")
for index = 1, #split_by_space do
local substring = table.concat(split_by_space, " ", 1, index)
local text_size = TextService:GetTextSize(
substring,
50,
Enum.Font.Fondamento,
Vector2.new(338, 600)
)
if text_size.Y >= 600 then
table.insert(current_text, table.concat(split_by_space, " ", 1, index - 1))
local remaining_text = {}
table.move(split_by_space, index, #split_by_space, 1, remaining_text)
split_text(table.concat(remaining_text, " "))
break
end
end
end
split_text("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
print(current_text)
The output is:
{
[1] = “Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea”,
[2] = “commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim”
}
which does not include the last 3 words.