模块:精魄表美化
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:精魄表美化/doc创建
-- 定义 startsWith 辅助函数
local function startsWith(str, prefix)
return str:sub(1, #prefix) == prefix
end
local function applyColorRule(text, color, applyColors)
-- 定义颜色样式
local colorStyles = {
green = 'color:#4f4;',
red = 'color:#f33;'
}
-- 检查是否有有效的颜色并且是否应用颜色
if not colorStyles[color] or not applyColors then return text end
-- 使用 gsub 遍历并替换所有带符号的数字部分(包括 +, -, % 和 /s)
return (text:gsub("([%+%-]?%d+%.?%d*%%?/?s?)", function(num)
-- 将整个匹配项用颜色样式包裹
return '<span style="' .. colorStyles[color] .. '">' .. num .. '</span>'
end))
end
-- 定义替换模式
local replacements = {
["火焚耐性"] = "{{i|火焚耐性}}火焚耐性",
["雷蛰耐性"] = "{{i|雷蛰耐性}}雷蛰耐性",
["寒冻耐性"] = "{{i|寒冻耐性}}寒冻耐性",
["毒伤耐性"] = "{{i|毒伤耐性}}毒伤耐性",
["火焚攻击"] = "{{i|火焚}}火焚攻击",
["雷蛰攻击"] = "{{i|雷蛰}}雷蛰攻击",
["寒冻攻击"] = "{{i|寒冻}}寒冻攻击",
["毒伤攻击"] = "{{i|毒伤}}毒伤攻击",
["移动速度"] = "{{i|移动速度}}移动速度",
["气力恢复"] = "{{i|气力恢复}}气力恢复",
["伤害减免"] = "{{i|伤害减免}}伤害减免",
["伤害加成"] = "{{i|伤害加成}}伤害加成",
["法术"] = "{{i|法术}}法术",
["暴击伤害"] = "{{i|暴击伤害}}暴击伤害",
["暴击率"] = "{{i|暴击率}}暴击率",
["防御"] = "{{i|防御}}防御",
["法力"] = "{{i|法力}}法力",
["生命"] = "{{i|生命}}生命"
}
-- 初始化 M 表
local M = {}
function M.main(frame)
local args = frame.args
local input = args[1] or ''
local eff = mw.ustring.lower(args.eff or '') == 'true'
-- 分割输入为各个部分
local parts = mw.text.split(input, ',')
local output = {}
for _, part in ipairs(parts) do
-- 去除首尾空格
part = part:match("^%s*(.-)%s*$")
-- 保存原始文本用于后续处理
local originalPart = part
-- 移除 GRW 前缀,不论 eff 是否为 true
if startsWith(originalPart, 'G') or startsWith(originalPart, 'R') or startsWith(originalPart, 'W') then
part = part:sub(2)
end
-- 如果部分包含数字,并且 eff 为 true,则应用颜色规则
if part:match("%d") and eff then
local color = nil
-- 检查是否有前缀 G, R, W 并相应设置颜色(这部分已经在前面移除了前缀)
if startsWith(originalPart, 'G') then
color = 'green'
elseif startsWith(originalPart, 'R') then
color = 'red'
elseif startsWith(originalPart, 'W') then
color = nil
else
-- 如果部分包含负号,则默认为红色,否则为绿色
if part:find('-') then
color = 'red'
else
color = 'green'
end
end
part = applyColorRule(part, color, eff)
end
-- 处理 i 标记,仅当 eff 为 true 时应用
if eff then
-- 应用 i 攻击 和 i 气力 的特殊替换
part = part:gsub('i(攻击)', '{{i|攻击}}攻击')
part = part:gsub('i(气力)', '{{i|气力}}气力')
-- 对于其他需要替换的关键字,使用 replacements 表
for key, replacement in pairs(replacements) do
part = part:gsub(key, replacement)
end
else
-- 移除 i 标记,保留原始文本
part = part:gsub('i(攻击)', '攻击')
part = part:gsub('i(气力)', '气力')
end
-- 将处理后的部分插入到输出表中
table.insert(output, part)
end
-- 将所有处理过的部分用逗号连接起来,去掉可能存在的结尾逗号
local result = table.concat(output, ', ')
result = result:gsub(',$', '')
return result
end
return M