fix: fix format and process function behaviours
This commit is contained in:
parent
1b95485ae6
commit
a57a6e47ab
@ -3,7 +3,9 @@ local type_check = require("Trans.util.debug").type_check
|
||||
M.__index = M
|
||||
M.lines = {}
|
||||
M.highlight = {}
|
||||
M.size = 0
|
||||
M.height = 0
|
||||
M.width = 0
|
||||
M.interval = ' '
|
||||
|
||||
|
||||
function M:new()
|
||||
@ -31,10 +33,9 @@ function M:insert(items)
|
||||
items = { items, 'table' },
|
||||
}
|
||||
|
||||
self.size = self.size + 1 -- line数加一
|
||||
self.height = self.height + 1 -- line数加一
|
||||
|
||||
local line = {
|
||||
space = (' '):rep(items.interval),
|
||||
indent = items.indent,
|
||||
highlight = items.highlight,
|
||||
}
|
||||
@ -52,8 +53,8 @@ function M:insert(items)
|
||||
end
|
||||
end
|
||||
|
||||
self.highlight[self.size] = highlight
|
||||
self.lines[self.size] = line
|
||||
self.highlight[self.height] = highlight
|
||||
self.lines[self.height] = line
|
||||
end
|
||||
|
||||
---Usage:
|
||||
@ -78,9 +79,11 @@ function M:data()
|
||||
if l.indent then
|
||||
line = (' '):rep(l.indent)
|
||||
end
|
||||
|
||||
if l.highlight then
|
||||
line = line .. table.concat(l, l.space)
|
||||
line = line .. table.concat(l, self.interval)
|
||||
highlight[1] = { name = l.highlight, _start = 1, _end = -1 }
|
||||
|
||||
else
|
||||
line = line .. l[1]
|
||||
|
||||
@ -90,7 +93,7 @@ function M:data()
|
||||
end
|
||||
|
||||
for i = 2, #l do
|
||||
line = line .. l.space .. l[i]
|
||||
line = line .. self.interval .. l[i]
|
||||
if hl[i] then
|
||||
local _end = #line
|
||||
table.insert(highlight, { name = hl[i], _start = _end - #l[i], _end = _end })
|
||||
@ -98,11 +101,37 @@ function M:data()
|
||||
end
|
||||
end
|
||||
|
||||
-- return line, highlights
|
||||
lines[index] = line
|
||||
local len = #line
|
||||
if self.width < len then
|
||||
self.width = len
|
||||
end
|
||||
highlights[index] = highlight
|
||||
end
|
||||
return lines, highlights
|
||||
end
|
||||
|
||||
function M:attach(bufnr, winid)
|
||||
local height = vim.api.nvim_win_get_height(winid)
|
||||
local width = vim.api.nvim_win_get_width(winid)
|
||||
|
||||
vim.api.nvim_win_set_height(winid, self.height)
|
||||
local lines, hls = self:data()
|
||||
vim.api.nvim_buf_set_lines(bufnr, 0, -1, false, lines)
|
||||
|
||||
for line, l_hl in ipairs(hls) do
|
||||
for _, hl in ipairs(l_hl) do
|
||||
vim.api.nvim_buf_add_highlight(bufnr, -1, hl.name, line - 1, hl._start, hl._end)
|
||||
end
|
||||
end
|
||||
|
||||
if self.height < height then
|
||||
vim.api.nvim_win_set_height(winid, self.height)
|
||||
end
|
||||
|
||||
if self.width < width then
|
||||
vim.api.nvim_win_set_width(winid, self.width)
|
||||
end
|
||||
end
|
||||
|
||||
return M
|
||||
|
@ -1,6 +1,6 @@
|
||||
local M = {}
|
||||
|
||||
M.to_content = function (field)
|
||||
M.component = function (field)
|
||||
-- TODO
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
local M = {}
|
||||
|
||||
M.to_content = function (field)
|
||||
M.component = function (field)
|
||||
-- TODO
|
||||
end
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
local M = {}
|
||||
|
||||
M.to_content = function (field)
|
||||
M.component = function (field)
|
||||
-- TODO
|
||||
end
|
||||
|
||||
|
@ -1,7 +1,47 @@
|
||||
local M = {}
|
||||
|
||||
M.to_content = function (field)
|
||||
local tag_map = {
|
||||
zk = '中考',
|
||||
gk = '高考',
|
||||
ky = '考研',
|
||||
cet4 = '四级',
|
||||
cet6 = '六级',
|
||||
ielts = '雅思',
|
||||
toefl = '托福',
|
||||
gre = 'GRE',
|
||||
}
|
||||
|
||||
---从查询结果中获取字符串
|
||||
---@param field table 查询的结果
|
||||
---@return component? component 提取的组件信息[包含多个组件]
|
||||
M.component = function(field)
|
||||
-- TODO
|
||||
if field.tag and field.tag ~= '' then
|
||||
local ref = {
|
||||
{ '标签:', 'TransRef' },
|
||||
}
|
||||
|
||||
local tags = {
|
||||
needformat = true,
|
||||
highlight = 'TransTag',
|
||||
indent = 4,
|
||||
}
|
||||
|
||||
for _tag in vim.gsplit(field.tag, ' ', true) do
|
||||
if _tag ~= '' then
|
||||
local tag = tag_map[_tag]
|
||||
|
||||
if tag then
|
||||
table.insert(tags, tag)
|
||||
else
|
||||
error('add tag_map for [' .. _tag .. ']')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return { ref, tags }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
return M
|
||||
|
@ -25,13 +25,13 @@ local icon = require("Trans.conf.loader").loaded_conf.ui.icon
|
||||
-- -- { phonetic, 'TransPhonetic' },
|
||||
-- }
|
||||
|
||||
---@alias stuff
|
||||
---| 'data' # 所有组件的信息
|
||||
|
||||
---@alias items
|
||||
---| 'string[]' # 所有组件的信息
|
||||
---| 'needformat?'# 是否需要格式化
|
||||
---| 'highlight?' # 整个组件的高亮
|
||||
---| 'indent?' # 每行整体的缩进
|
||||
---| 'interval?' # 每个组件的间隔
|
||||
---@alias component stuff[]
|
||||
|
||||
---@alias component items[]
|
||||
---从查询结果中获取字符串
|
||||
---@param field table 查询的结果
|
||||
---@return component component 提取的组件信息[包含多个组件]
|
||||
@ -41,7 +41,7 @@ M.component = function(field)
|
||||
{ field.word, 'TransWord' },
|
||||
}
|
||||
|
||||
if display.phnoetic and field.phonetic ~= '' then
|
||||
if display.phnoetic and field.phonetic and field.phonetic ~= '' then
|
||||
table.insert(
|
||||
data,
|
||||
{ '[' .. field.phonetic .. ']', 'TransPhonetic' }
|
||||
|
@ -1,6 +1,6 @@
|
||||
local M = {}
|
||||
|
||||
M.to_content = function (field)
|
||||
M.component = function (field)
|
||||
-- TODO
|
||||
end
|
||||
|
||||
|
@ -10,8 +10,8 @@ M.conf = {
|
||||
window = {
|
||||
cursor = {
|
||||
border = 'rounded',
|
||||
width = 30,
|
||||
height = 30,
|
||||
width = 40,
|
||||
height = 20,
|
||||
},
|
||||
float = {
|
||||
border = 'rounded',
|
||||
@ -29,11 +29,11 @@ M.conf = {
|
||||
order = {
|
||||
offline = {
|
||||
'Title',
|
||||
-- 'Tag',
|
||||
-- 'Pos',
|
||||
-- 'Exchange',
|
||||
-- 'Translation',
|
||||
-- 'Definition',
|
||||
'Tag',
|
||||
'Pos',
|
||||
'Exchange',
|
||||
'Translation',
|
||||
'Definition',
|
||||
},
|
||||
-- online = {
|
||||
-- -- TODO
|
||||
@ -67,6 +67,13 @@ M.conf = {
|
||||
TransDefinition = {
|
||||
fg = '#bc8cff',
|
||||
},
|
||||
TransCursorWin = {
|
||||
link = 'Normal',
|
||||
},
|
||||
|
||||
TransCursorBorder = {
|
||||
link = 'FloatBorder',
|
||||
}
|
||||
},
|
||||
icon = {
|
||||
star = '⭐',
|
||||
|
@ -69,7 +69,7 @@
|
||||
- `vsplit` 在左边或者右边分屏
|
||||
|
||||
- 高度(height):
|
||||
- `value > 1` 实际高度
|
||||
- `value > 1` 最大高度
|
||||
- `0 <= value <= 1` 相对高度
|
||||
- `0 < value` 无限制
|
||||
|
||||
|
@ -2,89 +2,78 @@ local type_check = require("Trans.util.debug").type_check
|
||||
|
||||
-- NOTE :中文字符及占两个字节宽,但是在lua里是3个字节长度
|
||||
-- 为了解决中文字符在lua的长度和neovim显示不一致的问题
|
||||
local function get_width(str)
|
||||
if type(str) ~= 'string' then
|
||||
vim.pretty_print(str)
|
||||
error('str!')
|
||||
end
|
||||
return vim.fn.strdisplaywidth(str)
|
||||
end
|
||||
local get_width = vim.fn.strdisplaywidth
|
||||
|
||||
local function format(win_width, items)
|
||||
local size = #items
|
||||
local tot_width = 0
|
||||
|
||||
for i = 1, size do
|
||||
if type(items[i]) == 'string' then
|
||||
items[i] = { items[i] }
|
||||
end
|
||||
tot_width = tot_width + get_width(items[i][1]) + 4
|
||||
end
|
||||
|
||||
|
||||
-- 判断宽度是否超过最大宽度
|
||||
if tot_width > win_width + 4 then
|
||||
-- 放不下则需要分成多行
|
||||
local lines = {}
|
||||
|
||||
-- 行内字符串按照宽度排序
|
||||
table.sort(items, function(a, b)
|
||||
local wa, wb = 0, 0
|
||||
if type(a) == 'string' then
|
||||
wa = get_width(a)
|
||||
a = { a }
|
||||
else
|
||||
wa = get_width(a[1])
|
||||
end
|
||||
if type(b) == 'string' then
|
||||
wb = get_width(b)
|
||||
b = { b }
|
||||
else
|
||||
wb = get_width(b[1])
|
||||
end
|
||||
return wa > wb
|
||||
return get_width(a[1]) > get_width(b[1])
|
||||
end)
|
||||
|
||||
local size = #items
|
||||
local width = win_width - get_width(items[1][1])
|
||||
local cols = 0
|
||||
for i = 2, size do
|
||||
width = width - 4 - get_width(items[i][1])
|
||||
if width < 0 then
|
||||
cols = i
|
||||
break
|
||||
end
|
||||
local cols = 1
|
||||
win_width = win_width - get_width(items[1][1])
|
||||
while win_width > 0 and cols < size do
|
||||
cols = cols + 1
|
||||
win_width = win_width - get_width(items[cols][1]) + 4
|
||||
end
|
||||
cols = cols - 1
|
||||
|
||||
|
||||
if cols == 0 then
|
||||
return items
|
||||
else
|
||||
local lines = {}
|
||||
local rows = math.floor(size / cols)
|
||||
local rows = math.ceil(size / cols)
|
||||
local rest = size % cols
|
||||
if rest == 0 then
|
||||
rest = cols
|
||||
end
|
||||
|
||||
local max_width = get_width(items[1][1])
|
||||
for i = 1, rows do
|
||||
local index = rows - i + 1
|
||||
lines[index] = {
|
||||
interval = items.interval,
|
||||
local index = 1 -- 当前操作的字符串下标
|
||||
for i = rows, 1, -1 do -- 当前操作的行号
|
||||
lines[i] = {
|
||||
highlight = items.highlight,
|
||||
indent = items.indent,
|
||||
}
|
||||
|
||||
items[i][1] = items[i][1] .. (' '):rep(max_width - get_width(items[i][1]))
|
||||
lines[index][1] = items[i]
|
||||
local item = items[index]
|
||||
item[1] = item[1] .. (' '):rep(max_width - get_width(item[1]))
|
||||
lines[i][1] = items[index]
|
||||
index = index + 1
|
||||
end
|
||||
|
||||
local index = rows + 1
|
||||
|
||||
for col = 2, cols do
|
||||
max_width = get_width(items[index])
|
||||
max_width = get_width(items[index][1])
|
||||
local _end = col > rest and rows - 1 or rows
|
||||
|
||||
for i = 1, _end do
|
||||
local idx = _end - i + 1 -- 当前操作的行数
|
||||
local item_idx = index + i - 1
|
||||
local item = items[item_idx]
|
||||
for i = _end, 1, -1 do
|
||||
local item = items[index]
|
||||
item[1] = item[1] .. (' '):rep(max_width - get_width(item[1]))
|
||||
|
||||
|
||||
lines[idx][col] = item
|
||||
lines[i][col] = item
|
||||
index = index + 1
|
||||
end
|
||||
index = index + _end
|
||||
end
|
||||
|
||||
return lines
|
||||
return lines, true
|
||||
else
|
||||
return items
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function process(opts)
|
||||
type_check {
|
||||
opts = { opts, 'table' },
|
||||
@ -95,19 +84,19 @@ local function process(opts)
|
||||
}
|
||||
|
||||
if opts.field == nil then
|
||||
local lines = {'no tranlation'}
|
||||
local lines = { '⚠️ 本地没有找到相关释义' }
|
||||
vim.api.nvim_buf_set_lines(opts.bufnr, 0, -1, false, lines)
|
||||
return
|
||||
end
|
||||
|
||||
vim.api.nvim_win_set_height(opts.winid, 1)
|
||||
vim.api.nvim_win_set_width(opts.winid, get_width(lines[1]))
|
||||
|
||||
else
|
||||
local content = require('Trans.component.content'):new()
|
||||
|
||||
for _, v in ipairs(opts.order) do
|
||||
local component = require("Trans.component." .. 'offline' --[[ opts.engine ]] .. '.' .. v).component(opts.field)
|
||||
-- vim.pretty_print(component)
|
||||
|
||||
if component then
|
||||
for _, items in ipairs(component) do
|
||||
|
||||
if items.needformat then
|
||||
local formatted_items, split = format(opts.win.width, items)
|
||||
if split then
|
||||
for _, itms in ipairs(formatted_items) do
|
||||
@ -116,27 +105,33 @@ local function process(opts)
|
||||
else
|
||||
content:insert(formatted_items)
|
||||
end
|
||||
|
||||
else
|
||||
content:insert(items)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
local lines, __highlight = content:data()
|
||||
vim.api.nvim_buf_set_lines(opts.bufnr, 0, -1, false, lines)
|
||||
|
||||
|
||||
for line, l_hl in ipairs(__highlight) do
|
||||
for _, hl in ipairs(l_hl) do
|
||||
vim.api.nvim_buf_add_highlight(opts.bufnr, -1, hl.name, line, hl._start, hl._end)
|
||||
end
|
||||
|
||||
content:attach(opts.bufnr, opts.winid)
|
||||
|
||||
end
|
||||
|
||||
vim.api.nvim_buf_set_option(opts.bufnr, 'modifiable', false)
|
||||
vim.api.nvim_buf_set_option(opts.bufnr, 'filetype', 'Trans')
|
||||
|
||||
vim.api.nvim_win_set_option(opts.winid, 'winhl', 'Normal:TransCursorWin,FloatBorder:TransCursorBorder')
|
||||
if opts.win.style == 'cursor' then
|
||||
vim.api.nvim_create_autocmd(
|
||||
{ 'InsertEnter', 'CursorMoved', 'BufLeave', }, {
|
||||
buffer = 0,
|
||||
once = true,
|
||||
callback = function ()
|
||||
callback = function()
|
||||
if vim.api.nvim_win_is_valid(opts.winid) then
|
||||
vim.api.nvim_win_close(opts.winid, true)
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
@ -2,14 +2,17 @@ local type_check = require("Trans.util.debug").type_check
|
||||
local query = require("Trans.api").query
|
||||
|
||||
local function get_select()
|
||||
local s_start = vim.fn.getpos("'<")
|
||||
local s_end = vim.fn.getpos("'>")
|
||||
if s_start[2] ~= s_start[2] then
|
||||
error('TODO: multiline translate')
|
||||
local s_start = vim.fn.getpos("v")
|
||||
local s_end = vim.fn.getpos(".")
|
||||
local n_lines = math.abs(s_end[2] - s_start[2]) + 1
|
||||
local lines = vim.api.nvim_buf_get_lines(0, s_start[2] - 1, s_end[2], false)
|
||||
lines[1] = string.sub(lines[1], s_start[3], -1)
|
||||
if n_lines == 1 then
|
||||
lines[n_lines] = string.sub(lines[n_lines], 1, s_end[3] - s_start[3] + 1)
|
||||
else
|
||||
lines[n_lines] = string.sub(lines[n_lines], 1, s_end[3])
|
||||
end
|
||||
local lin = vim.api.nvim_buf_get_lines(0, s_start[2] - 1, s_end[2], false)[1]
|
||||
local word = string.sub(lin, s_start[3], s_end[3])
|
||||
return word
|
||||
return table.concat(lines, '\n')
|
||||
end
|
||||
|
||||
local query_wrapper = function(opts)
|
||||
@ -21,15 +24,15 @@ local query_wrapper = function(opts)
|
||||
local word = ''
|
||||
|
||||
if opts.method == 'input' then
|
||||
---@diagnostic disable-next-line: param-type-mismatch
|
||||
word = vim.fn.input('请输入您要查询的单词:') -- TODO Use Telescope with fuzzy finder
|
||||
|
||||
elseif opts.method == 'n' then
|
||||
word = vim.fn.expand('<cword>')
|
||||
|
||||
elseif opts.mehotd == 'v' then
|
||||
elseif opts.method == 'v' then
|
||||
word = get_select()
|
||||
-- TODO : other method
|
||||
|
||||
else
|
||||
error('invalid method' .. opts.method)
|
||||
end
|
||||
|
@ -21,6 +21,7 @@ local function get_opts(opts)
|
||||
opts.engine = { opts.engine }
|
||||
end
|
||||
|
||||
|
||||
if opts.win then
|
||||
local width, height = opts.win.width, opts.win.height
|
||||
if width and width > 0 and width <= 1 then
|
||||
@ -35,6 +36,7 @@ local function get_opts(opts)
|
||||
return vim.tbl_extend('force', default_conf, opts)
|
||||
end
|
||||
|
||||
|
||||
-- EXAMPLE :
|
||||
-- require('Trans').translate({
|
||||
-- method = 'input', -- 不填则自动判断mode获取查询的单词
|
||||
@ -52,6 +54,7 @@ end
|
||||
-- })
|
||||
|
||||
|
||||
|
||||
local function create_win(win)
|
||||
local bufnr = vim.api.nvim_create_buf(false, true)
|
||||
|
||||
@ -81,6 +84,7 @@ local function create_win(win)
|
||||
return bufnr, winid
|
||||
end
|
||||
|
||||
|
||||
local function translate(opts)
|
||||
vim.validate {
|
||||
opts = { opts, 'table', true }
|
||||
|
@ -1,190 +0,0 @@
|
||||
local M = {}
|
||||
local type_check = require("Trans.util.debug").type_check
|
||||
|
||||
-- NOTE :中文字符及占两个字节宽,但是在lua里是3个字节长度
|
||||
-- 为了解决中文字符在lua的长度和neovim显示不一致的问题
|
||||
function string:width()
|
||||
return vim.fn.strdisplaywidth(self)
|
||||
end
|
||||
|
||||
local s_to_b = true -- 从小到大排列
|
||||
|
||||
local m_win_width -- 需要被格式化窗口的高度
|
||||
local m_fields -- 待格式化的字段
|
||||
local m_tot_width -- 所有字段加起来的长度(不包括缩进和间隔)
|
||||
local m_item_width -- 每个字段的宽度
|
||||
local m_interval -- 每个字段的间隔
|
||||
local m_size -- 字段的个数
|
||||
|
||||
local function caculate_format()
|
||||
local width = m_win_width - m_item_width[1]
|
||||
local cols = 0
|
||||
for i = 2, m_size do
|
||||
width = width - m_item_width[i] - m_interval
|
||||
if width < 0 then
|
||||
cols = i - 1
|
||||
break
|
||||
else
|
||||
cols = i
|
||||
end
|
||||
end
|
||||
|
||||
return math.ceil(m_size / cols), cols
|
||||
end
|
||||
|
||||
local function format_to_line()
|
||||
local line = m_fields[1]
|
||||
if m_size == 1 then
|
||||
--- Center Align
|
||||
local space = math.floor((m_win_width - m_item_width[1]) / 2)
|
||||
line = (' '):rep(space) .. line
|
||||
else
|
||||
local space = math.floor((m_win_width - m_tot_width) / m_size - 1)
|
||||
for i = 2, m_size do
|
||||
line = line .. (' '):rep(space) .. m_fields[i]
|
||||
end
|
||||
end
|
||||
return line
|
||||
end
|
||||
|
||||
local function sort_tables()
|
||||
table.sort(m_item_width, function(a, b)
|
||||
return a > b
|
||||
end)
|
||||
|
||||
table.sort(m_fields, function(a, b)
|
||||
return a:width() > b:width() -- 需要按照width排序
|
||||
end)
|
||||
end
|
||||
|
||||
local function format_to_multilines(rows, cols)
|
||||
local lines = {}
|
||||
|
||||
local rest = m_size % cols
|
||||
if rest == 0 then
|
||||
rest = cols
|
||||
end
|
||||
|
||||
local s_width = m_item_width[1] -- 列中最宽的字符串宽度
|
||||
for i = 1, rows do
|
||||
local idx = s_to_b and rows - i + 1 or i
|
||||
lines[idx] = {}
|
||||
|
||||
local space = (' '):rep(s_width - m_item_width[i])
|
||||
local item = m_fields[i] .. space
|
||||
|
||||
lines[idx][1] = item
|
||||
lines[idx].interval = m_interval
|
||||
end
|
||||
|
||||
|
||||
local index = rows + 1 -- 最宽字符的下标
|
||||
|
||||
for j = 2, cols do -- 以列为单位遍历
|
||||
s_width = m_item_width[index]
|
||||
local stop = (j > rest and rows - 1 or rows)
|
||||
for i = 1, stop do
|
||||
local idx = s_to_b and stop - i + 1 or i -- 当前操作的行数
|
||||
local item_idx = index + i - 1 -- 当前操作的字段数
|
||||
local space = (' '):rep(s_width - m_item_width[item_idx]) -- 对齐空格
|
||||
local item = m_fields[item_idx] .. space
|
||||
|
||||
lines[idx][j] = item -- 插入图标
|
||||
end
|
||||
index = index + stop -- 更新最宽字符的下标
|
||||
end
|
||||
|
||||
return lines -- TODO : evaluate the width
|
||||
end
|
||||
|
||||
local function formatted_lines()
|
||||
local lines = {}
|
||||
-- NOTE : 判断能否格式化成一行
|
||||
if m_tot_width + (m_size * m_indent) > m_win_width then
|
||||
sort_tables()
|
||||
--- NOTE : 计算应该格式化成多少行和列
|
||||
local rows, cols = caculate_format()
|
||||
lines = format_to_multilines(rows, cols)
|
||||
else
|
||||
lines[1] = format_to_line()
|
||||
end
|
||||
|
||||
return lines
|
||||
end
|
||||
|
||||
-- EXAMPLE : 接受的形式
|
||||
-- local content = {
|
||||
-- { word, 'TransWord' },
|
||||
-- { phonetic, 'TransPhonetic' },
|
||||
-- collins,
|
||||
-- oxford
|
||||
-- -- { phonetic, 'TransPhonetic' },
|
||||
-- NOTE :
|
||||
-- 可选的:
|
||||
-- 1. highlight 整个content的高亮
|
||||
-- 2. indent 缩进
|
||||
-- 2. space 各个组件的及间隔
|
||||
-- }
|
||||
|
||||
|
||||
-- EXAMPLE : 返回的形式
|
||||
-- local lines = {
|
||||
-- { items, opts },
|
||||
-- { items, opts },
|
||||
-- { items, opts },
|
||||
-- -- items: string[]
|
||||
-- -- opts {
|
||||
-- -- highlight
|
||||
-- -- indent
|
||||
-- -- }
|
||||
-- }
|
||||
|
||||
|
||||
---@alias formatted_items table
|
||||
---将组件格式化成相应的vim支持的lines格式
|
||||
---@param win_size string 窗口的宽度和高度
|
||||
---@param component table 需要格式化的字段
|
||||
---@return formatted_items[] lines
|
||||
M.format = function(win_width, component)
|
||||
type_check {
|
||||
style = { style, { 'string' } },
|
||||
component = { component, { 'table' } },
|
||||
}
|
||||
|
||||
local length = 0
|
||||
local width = 0
|
||||
local item_size = {}
|
||||
for i, v in ipairs(fields) do
|
||||
width = v:width()
|
||||
item_size[i] = width
|
||||
length = length + width
|
||||
end
|
||||
|
||||
m_win_width = win_width
|
||||
m_fields = fields
|
||||
m_size = #m_fields
|
||||
m_tot_width = length
|
||||
m_item_width = item_size
|
||||
|
||||
return formatted_lines()
|
||||
end
|
||||
|
||||
|
||||
---合并多个数组, 第一个数组将会被使用
|
||||
---@param ... string[] 需要被合并的数组
|
||||
---@return table res 合并后的数组
|
||||
M.extend_array = function(...)
|
||||
local arrays = { ... }
|
||||
local res = arrays[1]
|
||||
local index = #res
|
||||
for i = 2, #arrays do
|
||||
for _, value in ipairs(arrays[i]) do
|
||||
res[index] = value
|
||||
index = index + 1
|
||||
end
|
||||
end
|
||||
return res
|
||||
end
|
||||
|
||||
|
||||
return M
|
@ -1,19 +0,0 @@
|
||||
---@diagnostic disable: missing-return, unused-local
|
||||
local M = {}
|
||||
local type_check = require("Trans.util.debug").type_check
|
||||
|
||||
---解析宽度
|
||||
---@param width integer
|
||||
---@return integer
|
||||
M.width = function (width)
|
||||
-- TODO
|
||||
end
|
||||
|
||||
---解析宽度
|
||||
---@param height integer
|
||||
---@return integer
|
||||
M.height = function (height)
|
||||
-- TODO
|
||||
end
|
||||
|
||||
return M
|
Loading…
x
Reference in New Issue
Block a user