Module:PageSummary:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 |
无编辑摘要 |
||
| 第25行: | 第25行: | ||
until text == prev or count > 10 | until text == prev or count > 10 | ||
-- 2. | -- 2. 使用安全占位符保护普通链接,同时剔除图片 | ||
-- | -- 我们使用一个绝对唯一的纯字母字符串作为占位符,避免正则转义问题 | ||
repeat | repeat | ||
prev = text | prev = text | ||
| 第38行: | 第37行: | ||
return "" | return "" | ||
end | end | ||
-- | -- 将普通链接内容包裹在安全占位符内 | ||
return " | return "LINKSTART" .. inner .. "LINKEND" | ||
end) | end) | ||
until text == prev | until text == prev | ||
-- 3. 清理剩余的 Wikitext | -- 3. 清理剩余的 Wikitext 格式杂质 | ||
text = mw.ustring.gsub(text, "\n==+.-==+", " ") | text = mw.ustring.gsub(text, "\n==+.-==+", " ") | ||
text = mw.ustring.gsub(text, "\n%s*[*#:]+", " ") | text = mw.ustring.gsub(text, "\n%s*[*#:]+", " ") | ||
| 第49行: | 第48行: | ||
text = mw.ustring.gsub(text, "%s+", " ") | text = mw.ustring.gsub(text, "%s+", " ") | ||
-- 4. | -- 4. 恢复链接(精准替换占位符,不使用带 % 的正则) | ||
text = mw.ustring.gsub(text, " | text = mw.ustring.gsub(text, "LINKSTART", "[[") | ||
text = mw.ustring.gsub(text, "LINKEND", "]]") | |||
return mw.text.trim(text) | return mw.text.trim(text) | ||
| 第61行: | 第61行: | ||
local rawContent = title:getContent() or "" | local rawContent = title:getContent() or "" | ||
local limitedContent = mw.ustring.sub(rawContent, 1, 2000) | local limitedContent = mw.ustring.sub(rawContent, 1, 2000) | ||
-- 1. | -- 1. 提取缩略图文件名 | ||
local firstImage = mw.ustring.match(limitedContent, "%[%[%s*[Ff]ile%s*:([^|%]%s\n]+)") or | local firstImage = mw.ustring.match(limitedContent, "%[%[%s*[Ff]ile%s*:([^|%]%s\n]+)") or | ||
mw.ustring.match(limitedContent, "%[%[%s*文件%s*:([^|%]%s\n]+)") or | mw.ustring.match(limitedContent, "%[%[%s*文件%s*:([^|%]%s\n]+)") or | ||
mw.ustring.match(limitedContent, "%[%[%s*[Ii]mage%s*:([^|%]%s\n]+)") | mw.ustring.match(limitedContent, "%[%[%s*[Ii]mage%s*:([^|%]%s\n]+)") | ||
-- 2. | -- 2. 执行清理 | ||
local cleanText = cleanContent(limitedContent) | local cleanText = cleanContent(limitedContent) | ||
-- 3. | -- 3. 安全截断 | ||
local targetLen = 150 | local targetLen = 150 | ||
local summary = "" | local summary = "" | ||
| 第79行: | 第78行: | ||
summary = cleanText | summary = cleanText | ||
else | else | ||
summary = mw.ustring.sub(cleanText, 1, targetLen) .. "..." | summary = mw.ustring.sub(cleanText, 1, targetLen) .. "..." | ||
-- | -- 闭合加粗 | ||
local _, opens = mw.ustring.gsub(summary, "'''", "") | local _, opens = mw.ustring.gsub(summary, "'''", "") | ||
if opens % 2 ~= 0 then summary = summary .. "'''" end | if opens % 2 ~= 0 then summary = summary .. "'''" end | ||
-- | -- 闭合链接:如果截断在了 LINKSTART...LINKEND 之间 | ||
-- 我们先恢复链接,再检查截断 | |||
summary = mw.ustring.gsub(summary, "LINKSTART", "[[") | |||
summary = mw.ustring.gsub(summary, "LINKEND", "]]") | |||
if mw.ustring.match(summary, "%[%[[^%]]*$") then | if mw.ustring.match(summary, "%[%[[^%]]*$") then | ||
summary = mw.ustring.gsub(summary, "%[%[[^%]]*$", "") .. "..." | summary = mw.ustring.gsub(summary, "%[%[[^%]]*$", "") .. "..." | ||
| 第95行: | 第97行: | ||
local res = mw.html.create('div'):css({['display'] = 'flow-root', ['line-height'] = '1.6'}) | local res = mw.html.create('div'):css({['display'] = 'flow-root', ['line-height'] = '1.6'}) | ||
res:tag('div') | res:tag('div') | ||
:css({['font-size'] = '1.2em', ['font-weight'] = 'bold', ['margin-bottom'] = '5px'}) | :css({['font-size'] = '1.2em', ['font-weight'] = 'bold', ['margin-bottom'] = '5px'}) | ||
:wikitext('[[' .. pageName .. ']]') | :wikitext('[[' .. pageName .. ']]') | ||
if firstImage then | if firstImage then | ||
res:wikitext('[[File:' .. firstImage .. '|120px|right|link=' .. pageName .. ']]') | res:wikitext('[[File:' .. firstImage .. '|120px|right|link=' .. pageName .. ']]') | ||
end | end | ||
-- | -- 确保此时占位符已经全部被替换 | ||
summary = mw.ustring.gsub(summary, "LINKSTART", "[[") | |||
summary = mw.ustring.gsub(summary, "LINKEND", "]]") | |||
res:wikitext(summary) | res:wikitext(summary) | ||