Module:PageSummary
武外梗百科 爱国好学自强图新的百科全书
更多操作
此模块的文档可以在Module:PageSummary/doc创建
local p = {}
-- 核心逻辑:使用简单的索引查找替代昂贵的正则表达式
function p.getSummaryAndImage(frame)
local pageName = frame.args[1] or ""
local title = mw.title.new(pageName)
if not title or not title.exists then return "" end
local content = title:getContent()
if not content then return "" end
-- 1. 预切割:只拿最前面的 400 字符,从源头掐断计算量
local raw = mw.ustring.sub(content, 1, 400)
-- 2. 提取图片 (仅提取文件名,不涉及复杂解析)
local firstImage = string.match(raw, "%[%[[Ff]ile:([^|%]%s]+)") or
string.match(raw, "%[%[文件:([^|%]%s]+)")
-- 3. 极速清理:只做简单的字符替换,不做嵌套识别
-- 移除引用、注释、标题符、列表符
local clean = raw
clean = string.gsub(clean, "<ref.-</ref>", "")
clean = string.gsub(clean, "<ref.->", "")
clean = string.gsub(clean, "<!%-%-.-%-%->", "")
clean = string.gsub(clean, "\n==+.-==+", " ")
clean = string.gsub(clean, "\n%s*[*#:]+", " ")
-- 移除图片和模板(不递归,直接找第一个闭合括号就切断)
-- 这种处理方式虽然可能留下残余的“}}”或“]]”,但绝对保护 CPU
clean = string.gsub(clean, "%[%[[^%]%[]+%]%]", "")
clean = string.gsub(clean, "{{[^{}]+}}", "")
-- 清理换行和空格
clean = string.gsub(clean, "\n", " ")
clean = string.gsub(clean, "%s+", " ")
clean = mw.text.trim(clean)
-- 4. 强制截断 150 字
local summary = mw.ustring.sub(clean, 1, 150)
-- 最后的安全阀:清理末尾残留的括号碎片
summary = string.gsub(summary, "[%[%]{}<>]+$", "")
if mw.ustring.len(clean) > 150 then summary = summary .. "..." end
-- 5. 渲染
local container = mw.html.create('div'):css({['margin-bottom']='20px', ['display']='flow-root'})
if firstImage then
container:wikitext('[[' .. firstImage .. '|130px|right|link=' .. pageName .. ']]')
end
container:tag('div')
:css({['font-size']='1.2em', ['font-weight']='bold', ['margin-bottom']='4px'})
:wikitext('[[' .. pageName .. ']]')
container:tag('div')
:css({['line-height']='1.5', ['color']='#333', ['font-size']='14px'})
:wikitext(summary)
return tostring(container)
end
return p