mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 03:40:06 +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
|