-
Notifications
You must be signed in to change notification settings - Fork 0
/
text_util.lua
59 lines (47 loc) · 1.36 KB
/
text_util.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
local font = resource.load_font('Roboto-Regular.ttf')
function write_centered(text, size, x_pos, y, r, g, b, a)
local width = font:width(text, size)
local x = x_pos - width / 2
font:write(x, y, text, size, r, g, b, a)
end
function split_newlines(str)
local t = {}
local function helper(line)
table.insert(t, line)
return ""
end
helper((str:gsub("(.-)\r?\n", helper)))
return t
end
function wrap_text(text, font, size, width)
local lines = split_newlines(text)
local wrapped_lines = {}
for i, line in ipairs(lines) do
local current_line = ''
for word in line:gmatch("%S+") do
if current_line == '' then
current_line = word
else
local check_line = current_line .. ' ' .. word
local check_width = font:width(check_line, size)
if check_width < width then
current_line = check_line
else
table.insert(wrapped_lines, current_line)
current_line = word
end
end
end
if line ~= '' then
table.insert(wrapped_lines, current_line)
end
end
return wrapped_lines
end
function size_text_to_width(text, font, width, max_size)
local text_width = font:width(text, max_size)
local ratio = width / text_width
local new_size = math.min(max_size, max_size * ratio)
local y_offset = (max_size - new_size) / 2
return new_size, y_offset
end