<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://wflswiki.zelda-110.link/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=240D%3AC010%3A132%3A2%3A0%3A0%3A0%3ABA</id>
	<title>武外梗百科 - 用户贡献 [zh]</title>
	<link rel="self" type="application/atom+xml" href="https://wflswiki.zelda-110.link/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=240D%3AC010%3A132%3A2%3A0%3A0%3A0%3ABA"/>
	<link rel="alternate" type="text/html" href="https://wflswiki.zelda-110.link/wiki/Special:%E7%94%A8%E6%88%B7%E8%B4%A1%E7%8C%AE/240D:C010:132:2:0:0:0:BA"/>
	<updated>2026-07-30T20:34:19Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wflswiki.zelda-110.link/index.php?title=Module:PageSummary&amp;diff=1058</id>
		<title>Module:PageSummary</title>
		<link rel="alternate" type="text/html" href="https://wflswiki.zelda-110.link/index.php?title=Module:PageSummary&amp;diff=1058"/>
		<updated>2026-02-18T05:27:10Z</updated>

		<summary type="html">&lt;p&gt;240D:C010:132:2:0:0:0:BA：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- 高性能清理函数&lt;br /&gt;
local function smartClean(text)&lt;br /&gt;
    if not text then return &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    -- 1. 预处理：去掉 HTML 注释、脚注、数学公式等标签块&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;ref[^&amp;gt;]*&amp;gt;.-&amp;lt;/ref&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;ref[^&amp;gt;]-/&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;math[^&amp;gt;]*&amp;gt;.-&amp;lt;/math&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 2. 去除表格 (MediaWiki 表格以 {| 开始，|} 结束)&lt;br /&gt;
    -- 使用非贪婪匹配，重复执行以处理多个表格&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;{|[^{}]*|}&amp;quot;, &amp;quot;&amp;quot;) -- 先处理最内层不含嵌套的&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;{|.-|}&amp;quot;, &amp;quot;&amp;quot;)     -- 扩展清理&lt;br /&gt;
&lt;br /&gt;
    -- 3. 递归剥离模板 {{...}}&lt;br /&gt;
    -- 性能优化：限制循环次数，防止死循环&lt;br /&gt;
    local prev, count = &amp;quot;&amp;quot;, 0&lt;br /&gt;
    repeat&lt;br /&gt;
        prev = text&lt;br /&gt;
        text = mw.ustring.gsub(text, &amp;quot;{{[^{}]-}}&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
        count = count + 1&lt;br /&gt;
    until text == prev or count &amp;gt; 10&lt;br /&gt;
&lt;br /&gt;
    -- 4. 剥离图片、分类等 [[File:xxx]]&lt;br /&gt;
    -- 逻辑：匹配所有中括号，如果是媒体文件则删掉，如果是普通链接则保留文字&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;%[%[([^%[%]]-)%]%]&amp;quot;, function(inner)&lt;br /&gt;
        local l_inner = mw.ustring.lower(inner)&lt;br /&gt;
        if l_inner:match(&amp;quot;^file:&amp;quot;) or l_inner:match(&amp;quot;^image:&amp;quot;) or &lt;br /&gt;
           l_inner:match(&amp;quot;^category:&amp;quot;) or l_inner:match(&amp;quot;^文件:&amp;quot;) or &lt;br /&gt;
           l_inner:match(&amp;quot;^图像:&amp;quot;) or l_inner:match(&amp;quot;^分类:&amp;quot;) then&lt;br /&gt;
            return &amp;quot;&amp;quot; -- 丢弃附件&lt;br /&gt;
        end&lt;br /&gt;
        -- 保留链接文字：[[A|B]] -&amp;gt; B, [[A]] -&amp;gt; A&lt;br /&gt;
        local parts = mw.text.split(inner, &amp;quot;|&amp;quot;)&lt;br /&gt;
        return parts[#parts]&lt;br /&gt;
    end)&lt;br /&gt;
&lt;br /&gt;
    -- 5. 清理剩余的格式字符&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&#039;&#039;+&amp;quot;, &amp;quot;&amp;quot;)         -- 去掉粗斜体&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;==+.-==+&amp;quot;, &amp;quot;&amp;quot;)    -- 去掉标题&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;\n%s*[*#:]+&amp;quot;, &amp;quot; &amp;quot;) -- 列表转空格&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;\n+&amp;quot;, &amp;quot; &amp;quot;)        -- 换行转空格&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;%s+&amp;quot;, &amp;quot; &amp;quot;)        -- 压缩多余空格&lt;br /&gt;
&lt;br /&gt;
    return mw.text.trim(text)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.getSummaryAndImage(frame)&lt;br /&gt;
    local pageName = frame.args[1] or &amp;quot;&amp;quot;&lt;br /&gt;
    local title = mw.title.new(pageName)&lt;br /&gt;
    if not title or not title.exists then return &amp;quot;&amp;quot; end&lt;br /&gt;
&lt;br /&gt;
    -- 性能优化：只读取前 2000 个字符进行解析，而不是全篇，防止超大页面卡死&lt;br /&gt;
    local content = mw.ustring.sub(title:getContent() or &amp;quot;&amp;quot;, 1, 2000)&lt;br /&gt;
&lt;br /&gt;
    -- 1. 提取第一张图（直接在原文找，不干扰摘要）&lt;br /&gt;
    local firstImage = mw.ustring.match(content, &amp;quot;%[%[%s*[Ff]ile%s*:([^|%]%s]+)&amp;quot;) or &lt;br /&gt;
                       mw.ustring.match(content, &amp;quot;%[%[%s*文件%s*:([^|%]%s]+)&amp;quot;) or&lt;br /&gt;
                       mw.ustring.match(content, &amp;quot;%[%[%s*[Ii]mage%s*:([^|%]%s]+)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 2. 提取摘要&lt;br /&gt;
    local cleanText = smartClean(content)&lt;br /&gt;
    local targetLen = 140&lt;br /&gt;
    local summary = mw.ustring.sub(cleanText, 1, targetLen)&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.len(cleanText) &amp;gt; targetLen then&lt;br /&gt;
        summary = summary .. &amp;quot;...&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 3. 渲染 UI&lt;br /&gt;
    local container = mw.html.create(&#039;div&#039;):css({&lt;br /&gt;
        [&#039;margin-bottom&#039;] = &#039;20px&#039;,&lt;br /&gt;
        [&#039;padding&#039;] = &#039;15px&#039;,&lt;br /&gt;
        [&#039;border&#039;] = &#039;1px solid #e2e2e2&#039;,&lt;br /&gt;
        [&#039;border-radius&#039;] = &#039;8px&#039;,&lt;br /&gt;
        [&#039;background-color&#039;] = &#039;#fff&#039;,&lt;br /&gt;
        [&#039;box-shadow&#039;] = &#039;0 2px 5px rgba(0,0,0,0.05)&#039;,&lt;br /&gt;
        [&#039;display&#039;] = &#039;flow-root&#039;&lt;br /&gt;
    })&lt;br /&gt;
&lt;br /&gt;
    -- 标题&lt;br /&gt;
    container:tag(&#039;div&#039;)&lt;br /&gt;
        :css({[&#039;font-size&#039;] = &#039;1.2em&#039;, [&#039;font-weight&#039;] = &#039;bold&#039;, [&#039;margin-bottom&#039;] = &#039;8px&#039;, [&#039;color&#039;] = &#039;#000&#039;})&lt;br /&gt;
        :wikitext(&#039;[[&#039; .. pageName .. &#039;]]&#039;)&lt;br /&gt;
&lt;br /&gt;
    -- 正文容器&lt;br /&gt;
    local body = container:tag(&#039;div&#039;):css({[&#039;font-size&#039;] = &#039;14px&#039;, [&#039;line-height&#039;] = &#039;1.6&#039;, [&#039;color&#039;] = &#039;#444&#039;})&lt;br /&gt;
&lt;br /&gt;
    -- 图片右浮动&lt;br /&gt;
    if firstImage then&lt;br /&gt;
        body:wikitext(&#039;[[File:&#039; .. firstImage .. &#039;|100px|right|link=&#039; .. pageName .. &#039;]]&#039;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    body:wikitext(summary)&lt;br /&gt;
&lt;br /&gt;
    return tostring(container)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>240D:C010:132:2:0:0:0:BA</name></author>
	</entry>
</feed>