blob: daf5e9b6879873e27baf586cf6c819434ddab5bf (
plain) (
blame)
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
|
---@class ServerHints
---@field server Server
local ServerHints = {}
ServerHints.__index = ServerHints
function ServerHints.new(server)
return setmetatable({ server = server }, ServerHints)
end
---@param language string
---@return boolean
function ServerHints:is_language_equal(language)
local match_start, match_end = self.server.name:find(language, 1, true)
-- This is somewhat... arbitrary
return match_start ~= nil
and (match_end - match_start) >= 2 -- the match need to be at least 2 in length
-- match needs to start in the beginning - if it's not, then the total string lengths cannot differ too much
and (match_start == 1 or (match_start < 3 and (math.abs(#self.server.name - #language) < 4)))
end
function ServerHints:get_hints()
local hints = {}
if self.server.languages then
for _, language in ipairs(self.server.languages) do
if not self:is_language_equal(language) then
hints[#hints + 1] = language
end
end
end
return hints
end
function ServerHints:__tostring()
local hints = self:get_hints()
if #hints == 0 then
return ""
end
return "(" .. table.concat(hints, ", ") .. ")"
end
return ServerHints
|