WIKI公告栏
欢迎各位引航者访问卡拉彼丘WIKI,由于游客访问页面会有一定的页面旧版缓存,建议你登陆B站账号进行浏览,如果您觉得本WIKI有帮助到你,欢迎推荐给身边的引航者。
欢迎各位引航者访问卡拉彼丘WIKI,由于游客访问页面会有一定的页面旧版缓存,建议你登陆B站账号进行浏览,如果您觉得本WIKI有帮助到你,欢迎推荐给身边的引航者。
全站通知:
模块:语音台词
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:语音台词/doc创建
local getArgs = require("Module:Arguments").getArgs
local f = string.format
local p = {}
local function getLangs(args)
local langCount = 1
local enabledLangs = {
{code = 'zh', tdStyle = 'background-color: rgba(255, 192, 203, .3)'},
}
for _, lang in ipairs({
{code = 'ja', tdStyle = 'background-color: rgba(255, 255, 224, .3)'},
{code = 'en', tdStyle = 'background-color: rgba(240, 255, 255, .3)'},
{code = 'ko', tdStyle = ''},
}) do
if args[lang.code] then
langCount = langCount + 1
enabledLangs[langCount] = lang
end
end
if (#args % (1 + langCount * 2) ~= 0) then
error(f(
'匿名参数数量(当前:%d)必须是 (1 + 启用语言数量 (当前:%d) × 2) = %d 的整数倍',
#args, langCount, (1 + langCount * 2)
))
end
return enabledLangs, langCount
end
function p.main(frame)
local mwArgs = getArgs(frame, {
removeBlanks = false,
})
-- MW的参数是通过元表(__index, __pairs, __ipairs)获取的,args本身不包括任何内容,这导致`#`无法获取长度。
-- 此处复制一份,方便后续操作。此外,通过pairs一次性获取所有参数,能够避免频繁与PHP交互。
local args = {}
for k, v in pairs(mwArgs) do
args[k] = v
end
local enabledLangs, langCount = getLangs(args)
local voiceTable = {
'{| class="voice-table"',
}
local function addLine(text)
voiceTable[#voiceTable+1] = text
end
for i = 1, #args, 1 + langCount * 2 do
local name = args[i]
addLine(f('| rowspan="%d" | %s', langCount, name))
for langIdx = 1, langCount do
local lang = enabledLangs[langIdx]
local audioFileName = args[i + langIdx * 2 - 1]
local text = args[i + langIdx * 2]
local audioPlayer = ''
if audioFileName ~= '' then
audioPlayer = '<div style="display: none">[[媒体文件:' .. audioFileName .. ']]</div><div class="media-audio" data-file="' .. audioFileName .. '" data-panel="" data-button="" data-progress="" data-dot="" data-bar="" data-preload="none"></div>'
end
addLine(f('| style="%s" | %s', lang.tdStyle, audioPlayer))
addLine(f(
'| style="%s" %s | %s',
lang.tdStyle, lang.code ~= 'zh' and 'lang="'..lang.code..'"' or '',
text
))
addLine("|-")
end
end
addLine('|}')
return table.concat(voiceTable, "\n")
end
return p