Module:PageSummary:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第8行: | 第8行: | ||
local content = title:getContent() | local content = title:getContent() | ||
-- 1. | -- 1. 提取第一张图(提取动作在清理前完成) | ||
local firstImage = string.match(content, "%[%[([Ff]ile:.-)[|%]]") or | local firstImage = string.match(content, "%[%[([Ff]ile:.-)[|%]]") or | ||
string.match(content, "%[%[([Ii]mage:.-)[|%]]") or | string.match(content, "%[%[([Ii]mage:.-)[|%]]") or | ||
| 第14行: | 第14行: | ||
string.match(content, "%[%[(图像:.-)[|%]]") | string.match(content, "%[%[(图像:.-)[|%]]") | ||
-- 2. | -- 2. 处理内容:预加载 1000 字符 | ||
local rawText = mw.ustring.sub(content, 1, 1000) | |||
local rawText = mw.ustring.sub(content, 1, | |||
-- A. | -- A. 高级清理图片:处理带有长描述和嵌套链接的图片 | ||
-- 循环匹配 [[File: ... ]] 结构,尽量处理嵌套情况 | |||
local function stripImages(text) | |||
-- 匹配 [[(File|文件|Image|图像): ... ]] | |||
rawText = string.gsub(rawText, "%[ | -- 此正则通过排除法尽可能多地包含字符,直到匹配到对应的闭合括号 | ||
local patterns = {"%[%[[Ff]ile:.-%]%]", "%[%[[Ii]mage:.-%]%]", "%[%[文件:.-%]%]", "%[%[图像:.-%]%]" } | |||
for _, pat in ipairs(patterns) do | |||
while string.find(text, pat) do | |||
text = string.gsub(text, pat, "") | |||
end | |||
end | |||
return text | |||
end | |||
rawText = stripImages(rawText) | |||
-- B. 移除 Wiki 列表符号 (*, #, :, ;) | |||
rawText = string.gsub(rawText, "\n%s*[*#:]+", " ") | |||
-- | -- C. 移除标题符号 == 标题 == | ||
rawText = string.gsub(rawText, "\n==+.-==+", " ") | rawText = string.gsub(rawText, "\n==+.-==+", " ") | ||
-- | -- D. 移除模板 {{...}} | ||
local limit = 15 | |||
local limit = | |||
while string.find(rawText, "{{.-}}") and limit > 0 do | while string.find(rawText, "{{.-}}") and limit > 0 do | ||
rawText = string.gsub(rawText, "{{[^{}]+}}", "") | rawText = string.gsub(rawText, "{{[^{}]+}}", "") | ||
| 第37行: | 第45行: | ||
end | end | ||
-- | -- E. 移除引用 <ref> 和 注释 | ||
rawText = string.gsub(rawText, "<ref.-</ref>", "") | |||
rawText = string.gsub(rawText, "<ref.->", "") | |||
rawText = string.gsub(rawText, "<!%-%-.-%-%->", "") | |||
-- F. 清理多余的空白符、换行符和特殊占位符(如 ) | |||
rawText = string.gsub(rawText, " ", " ") | |||
rawText = string.gsub(rawText, "\n", " ") | rawText = string.gsub(rawText, "\n", " ") | ||
rawText = string.gsub(rawText, "%s+", " ") | |||
local cleanText = mw.text.trim(rawText) | local cleanText = mw.text.trim(rawText) | ||
-- 3. | -- 3. 截断逻辑:150 字 | ||
local targetLen = | local targetLen = 150 | ||
local summary = "" | local summary = "" | ||
if mw.ustring.len(cleanText) <= targetLen then | if mw.ustring.len(cleanText) <= targetLen then | ||
| 第50行: | 第66行: | ||
local restText = mw.ustring.sub(cleanText, targetLen + 1) | local restText = mw.ustring.sub(cleanText, targetLen + 1) | ||
-- | -- 链接延展逻辑 | ||
local lastOpen = 0 | local lastOpen = 0 | ||
local lastClose = 0 | local lastClose = 0 | ||
| 第77行: | 第93行: | ||
end | end | ||
-- 4. | -- 4. 渲染 | ||
local container = mw.html.create('div') | local container = mw.html.create('div') | ||
:css({ | :css({ | ||
| 第85行: | 第101行: | ||
}) | }) | ||
-- | -- 原生格式图片 | ||
if firstImage then | if firstImage then | ||
container:wikitext('[[' .. firstImage .. '|150px|right|link=' .. pageName .. ']]') | container:wikitext('[[' .. firstImage .. '|150px|right|link=' .. pageName .. ']]') | ||
end | end | ||
-- | -- 标题 | ||
container:tag('div') | container:tag('div') | ||
:css({ | :css({ | ||
['font-size'] = '1.4em', | ['font-size'] = '1.4em', | ||
['font-weight'] = 'bold', | ['font-weight'] = 'bold', | ||
['margin-bottom'] = ' | ['margin-bottom'] = '8px' | ||
}) | }) | ||
:wikitext('[[' .. pageName .. ']]') | :wikitext('[[' .. pageName .. ']]') | ||
-- | -- 摘要文本 | ||
container:tag('div') | container:tag('div') | ||
:css({ | :css({ | ||