Module:Sandbox/Ave/Moe
跳到导航
跳到搜索
- -- 初始化模块
- local getArgs = require('Module:Arguments').getArgs
- local moe = {}
- local moePoint = {}
- -- 对分割符进行处理
- function split(str, splitter)
- local splitCount = getSplitCount(str, splitter)
- if splitCount == 1 then
- local head = str:gsub("(" .. splitter .. ").*", "")
- local category = "[[Category:" .. head .. "]]"
- local start, finish = string.find(str, "%" .. splitter)
- if start then
- local tail = string.sub(str, start + 1)
- if splitter == "&" then
- if tail == "斜体" or tail == "i" or tail == "em" then
- return "<i>[[" .. head .. "]]</i>" .. category
- elseif tail == "粗体" or tail == "b" then
- return "<b>[[" .. head .. "]]</b>" .. category
- elseif tail == "删除" or tail == "删除线" or tail == "划掉" or tail == "s" or tail == "del" then
- return "<s>[[" .. head .. "]]</s>" .. category
- elseif tail == "双线" or tail == "双横线" or tail == "双删除线" then
- return '<div style="text-decoration:line-through;text-decoration-style:double;display:inline-block;">' .. head .. "</div>" .. category
- elseif tail == "下划线" or tail == "u" then
- return "<u>[[" .. head .. "]]</u>" .. category
- elseif tail == "双下划线" then
- return '<div style="text-decoration:underline;text-decoration-style:double;display:inline-block;">' .. head .. "</div>" .. category
- elseif tail == "虚线" then
- return '<span style="border-bottom:dashed 0.05em;display:inline-block;">[[' ..head .. "]]</span>" .. category -- 存在异常,出现了错误换行
- elseif tail == "波浪" or tail == "波浪线" or tail == "wave" then
- return '<div style="text-decoration:wavy underline;display:inline-block;">[[' ..head .. "]]</div>" .. category
- elseif tail == "黑幕" then
- return "{{黑幕|[[" .. head .. "]]}}" .. category
- elseif tail == "模糊" or tail == "黑雾" or tail == "毛玻璃" or tail == "glass" then
- return "{{文字模糊|[[" .. head .. "]]|哼,果然还是好奇呢|time=70}}" .. category
- else
- return "[[" .. head .. "|" .. tail .. "]]" .. category
- end
- elseif splitter == "$" then
- if tail == "斜体" or tail == "i" or tail == "em" then
- return "<i>[[" .. head .. "]]</i>" .. category
- elseif tail == "粗体" or tail == "b" then
- return "<b>[[" .. head .. "]]</b>" .. category
- elseif tail == "删除" or tail == "删除线" or tail == "划掉" or tail == "s" or tail == "del" then
- return "<s>[[" .. head .. "]]</s>" .. category
- elseif tail == "双线" or tail == "双横线" or tail == "双删除线" then
- return '<div style="text-decoration:line-through;text-decoration-style:double;display:inline-block;">' .. head .. "</div>" .. category
- elseif tail == "下划线" or tail == "u" then
- return "<u>[[" .. head .. "]]</u>" .. category
- elseif tail == "双下划线" then
- return '<div style="text-decoration:underline;text-decoration-style:double;display:inline-block;">' .. head .. "</div>" .. category
- elseif tail == "虚线" then
- return '<span style="border-bottom:dashed 0.05em;display:inline-block;">[[' ..head .. "]]</span>" .. category -- 存在异常,出现了错误换行
- elseif tail == "波浪" or tail == "波浪线" or tail == "wave" then
- return '<div style="text-decoration:wavy underline;display:inline-block;">[[' ..head .. "]]</div>" .. category
- elseif tail == "黑幕" then
- return "{{黑幕|[[" .. head .. "]]}}" .. category
- elseif tail == "模糊" or tail == "黑雾" or tail == "毛玻璃" or tail == "glass" then
- return "{{文字模糊|[[" .. head .. "]]|哼,果然还是好奇呢|time=70}}" .. category
- else
- return "[[" .. tail .. "]]" .. category
- end
- end
- end
- elseif splitCount == 2 then
- return "77977"
- end
- end
- function checkFirstSplit(str)
- local startA = string.find(str, "[,,]")
- local startB = string.find(str, "[·/]")
- if startA and startB then
- return startA < startB and "A" or "B"
- elseif not (startA or startB) then
- return "C"
- elseif not startA then
- return "B"
- else
- return "A"
- end
- end
- -- 预处理模块,将分隔符全部处理为方便后续判断的符号
- function pretreat(str, splitter)
- local specials = {",", ",", "·", "/"}
- local first = nil
- for _, special in ipairs(specials) do
- if string.find(str, special, 1, true) then
- first = special
- break
- end
- end
- for _, special in ipairs(specials) do
- str = string.gsub(str, special, splitter)
- end
- return str
- end
- -- 获取目标字符串中有几个分割符
- function getSplitCount(str, splitter)
- local count = 0
- for i = 1, #str do
- if string.sub(str, i, i) == splitter then
- count = count + 1
- end
- end
- return count
- end
- -- 获取表的长度
- function getTableLenth(tab)
- local count = 0
- for _ in pairs(tab) do
- count = count + 1
- end
- return count
- end
- -- 主函数,用于分析传入的参数中是否包含分隔符[,,]或[·/],将接收到的所有参数依次压入moe中
- function moe.analysis(point)
- local points = getArgs(point)
- for pos = 1, getTableLenth(points) do
- local str = points[pos]
- for i = 1, #str do
- if checkFirstSplit(str) == "A" then
- return split(pretreat(str, "&"), "&")
- --return table.insert(moePoint, split(pretreat(str, "&"), "&")) -- 使用","或","分割的场合
- elseif checkFirstSplit(str) == "B" then
- return split(pretreat(str, "$"), "$")
- --return table.insert(moePoint, split(pretreat(str, "$"), "$")) -- 使用"·"或"/"分割的场合
- else
- return table.insert(moePoint, str) -- 如果没有分隔符,则直接压入
- end
- end
- end
- return table.concat(moePoint, "、") -- 取出表内所有元素并合并为一个大字符串输出
- end
- return moe