mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 02:30:05 +08:00
53 lines
1.0 KiB
Lua
53 lines
1.0 KiB
Lua
---@class Text
|
|
---@field lines string[]
|
|
---@field hl Highlight[]
|
|
---@field lineNr number
|
|
---@field current string
|
|
local Text = {}
|
|
Text.__index = Text
|
|
|
|
function Text:new()
|
|
local this = { lines = {}, hl = {}, lineNr = 0, current = "" }
|
|
setmetatable(this, self)
|
|
return this
|
|
end
|
|
|
|
function Text:nl()
|
|
table.insert(self.lines, self.current)
|
|
self.current = ""
|
|
self.lineNr = self.lineNr + 1
|
|
end
|
|
|
|
function Text:render(str, group, opts)
|
|
str = str:gsub("[\n]", " ")
|
|
if type(opts) == "string" then
|
|
opts = { append = opts }
|
|
end
|
|
opts = opts or {}
|
|
|
|
if group then
|
|
if opts.exact ~= true then
|
|
group = "Trouble" .. group
|
|
end
|
|
local from = string.len(self.current)
|
|
---@class Highlight
|
|
local hl
|
|
hl = {
|
|
line = self.lineNr,
|
|
from = from,
|
|
to = from + string.len(str),
|
|
group = group,
|
|
}
|
|
table.insert(self.hl, hl)
|
|
end
|
|
self.current = self.current .. str
|
|
if opts.append then
|
|
self.current = self.current .. opts.append
|
|
end
|
|
if opts.nl then
|
|
self:nl()
|
|
end
|
|
end
|
|
|
|
return Text
|