- 欢迎来到THBWiki!如果您是第一次来到这里,请点击右上角注册一个帐户
- 有任何意见、建议、求助、反馈都可以在 讨论板 提出
- THBWiki以专业性和准确性为目标,如果你发现了任何确定的错误或疏漏,可在登录后直接进行改正
模块:tttools
Jump to navigation
Jump to search
模块文档[创建]
-- 本模块包含翻译表系统相关的工具函数
local tttools = {}
-- #ttt 函数的第二个参数 (段落名) 取 = 表示第一个标题之前的部分
-- 如果要用模板来还原, 这个等号会被解析为一个名称为空字符串的参数, 其值也是空字符串
-- 以下函数可以将出现这种情况的参数还原为标准形式
-- 例如 { '页面名', '5-14', 'zh', '其他匿名参数', [''] = '', ['其他命名参数'] = 'xxx' }
-- ==> { '页面名', '=', '5-14', 'zh', '其他匿名参数', ['其他命名参数'] = 'xxx' }
function tttools.normalize_args(args)
local new = {}
for k, v in pairs(args) do
new[k] = v
end
if new[''] == '' then
new[''] = nil
for i = #new, 2, -1 do
new[i + 1] = new[i]
end
new[2] = '='
end
return new
end
-- 获取翻译表内容, 可以传入最多 4 个参数的列表, 与 #tttt 函数的后 4 个参数用法相同
-- 返回值为形如 { ['#'] = '行号', ['?'] = '类型', ['代号1'] = '内容1', ... } 的表组成的列表
-- 内容中的模板会被解析, 内容最后的一个换行会被保留
function tttools.get_content(args)
local frame = mw.getCurrentFrame()
-- #tttt 的模板留空, 就无法解析, 会以 {{|?=...|#=...|...}} 的形式输出, 可以从中提取内容
local text = frame:callParserFunction('#tttt:', args)
local parsed = {}
for block in text:gmatch('{{(.-)}}') do -- 文本中的模板已被解析, 这里不会出现嵌套模板
-- 将 [[...|...]] 中的 | 临时换为控制字符
block = block:gsub('%[%[.-%]%]', function(link)
return link:gsub('|', '\1')
end)
local row = {}
for k, v in block:gmatch('|([^=]+)=([^|]*)') do
row[k] = v:gsub('\1', '|')
end
table.insert(parsed, row)
end
return parsed
end
return tttools