<?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%3AA6</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%3AA6"/>
	<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:A6"/>
	<updated>2026-07-31T01:51:40Z</updated>
	<subtitle>用户贡献</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wflswiki.zelda-110.link/index.php?title=Module:PageSummary&amp;diff=1053</id>
		<title>Module:PageSummary</title>
		<link rel="alternate" type="text/html" href="https://wflswiki.zelda-110.link/index.php?title=Module:PageSummary&amp;diff=1053"/>
		<updated>2026-02-18T04:07:42Z</updated>

		<summary type="html">&lt;p&gt;240D:C010:132:2:0:0:0:A6：​&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- 供其他 Lua 模块调用的内部函数&lt;br /&gt;
function p._getSummary(pageName)&lt;br /&gt;
    if not pageName or pageName == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;lt;span class=&#039;error&#039;&amp;gt;请输入有效的条目名称。&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local title = mw.title.new(pageName)&lt;br /&gt;
    if not title or not title.exists then&lt;br /&gt;
        return &amp;quot;&amp;lt;span class=&#039;error&#039;&amp;gt;条目“&amp;quot; .. pageName .. &amp;quot;”不存在。&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local content = title:getContent()&lt;br /&gt;
    if not content then&lt;br /&gt;
        return &amp;quot;&amp;lt;span class=&#039;error&#039;&amp;gt;无法获取条目内容。&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 1. 提取首张图片 (匹配常用图片命名空间)&lt;br /&gt;
    -- 注意：不区分大小写，使用简单的正则匹配查找最早出现的文件&lt;br /&gt;
    local firstImage = mw.ustring.match(content, &amp;quot;%[%[%s*[Ff][Ii][Ll][Ee]%s*:([^|%]]+)&amp;quot;)&lt;br /&gt;
        or mw.ustring.match(content, &amp;quot;%[%[%s*[Ii][Mm][Aa][Gg][Ee]%s*:([^|%]]+)&amp;quot;)&lt;br /&gt;
        or mw.ustring.match(content, &amp;quot;%[%[%s*文件%s*:([^|%]]+)&amp;quot;)&lt;br /&gt;
        or mw.ustring.match(content, &amp;quot;%[%[%s*檔案%s*:([^|%]]+)&amp;quot;)&lt;br /&gt;
        or mw.ustring.match(content, &amp;quot;%[%[%s*图片%s*:([^|%]]+)&amp;quot;)&lt;br /&gt;
        or mw.ustring.match(content, &amp;quot;%[%[%s*图像%s*:([^|%]]+)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 2. 纯文本清理流程&lt;br /&gt;
    local text = content&lt;br /&gt;
&lt;br /&gt;
    -- 屏蔽重定向页面&lt;br /&gt;
    if mw.ustring.match(text, &amp;quot;^%s*#REDIRECT&amp;quot;) or mw.ustring.match(text, &amp;quot;^%s*#重定向&amp;quot;) then&lt;br /&gt;
        return &amp;quot;该页面是一个重定向页面。&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 去除 HTML 注释&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;!%-%-.-%-%-&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 去除部分可能干扰正文的 HTML 标签及其内容&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;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;gallery[^&amp;gt;]*&amp;gt;.-&amp;lt;/gallery&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;div[^&amp;gt;]*&amp;gt;.-&amp;lt;/div&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;table[^&amp;gt;]*&amp;gt;.-&amp;lt;/table&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 循环去除模板 {{ ... }} (添加计数器防死循环)&lt;br /&gt;
    local prev, count&lt;br /&gt;
    count = 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; 50&lt;br /&gt;
&lt;br /&gt;
    -- 循环去除表格 {| ... |} &lt;br /&gt;
    count = 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; 30&lt;br /&gt;
&lt;br /&gt;
    -- 去除章节标题 == 标题 ==&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;==+.-==+&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 核心逻辑：由内向外剥离中括号 [[ ... ]]&lt;br /&gt;
    -- 这样可以安全处理诸如 [[File:xx.jpg|thumb|这是一个[[内链]]]] 的嵌套情况&lt;br /&gt;
    count = 0&lt;br /&gt;
    repeat&lt;br /&gt;
        prev = text&lt;br /&gt;
        text = mw.ustring.gsub(text, &amp;quot;%[%[([^%[%]]-)%]%]&amp;quot;, function(inner)&lt;br /&gt;
            local upperInner = mw.ustring.upper(inner)&lt;br /&gt;
            -- 如果是文件、图片或分类，直接整块抹除&lt;br /&gt;
            if mw.ustring.match(upperInner, &amp;quot;^%s*FILE%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(upperInner, &amp;quot;^%s*IMAGE%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(inner, &amp;quot;^%s*文件%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(inner, &amp;quot;^%s*檔案%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(inner, &amp;quot;^%s*图片%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(inner, &amp;quot;^%s*图像%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(upperInner, &amp;quot;^%s*CATEGORY%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(inner, &amp;quot;^%s*分类%s*:&amp;quot;) or&lt;br /&gt;
               mw.ustring.match(inner, &amp;quot;^%s*分類%s*:&amp;quot;) then&lt;br /&gt;
                return &amp;quot;&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            -- 如果是普通内链 [[链接|显示文本]]，保留最后的显示文本&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;
        count = count + 1&lt;br /&gt;
    until text == prev or count &amp;gt; 50&lt;br /&gt;
&lt;br /&gt;
    -- 去除粗体和斜体 (&#039;&#039;&#039; 和 &#039;&#039;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&#039;&#039;+&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 去除残留的单层 HTML 标签 (如 &amp;lt;br&amp;gt;, &amp;lt;span&amp;gt;)&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;&amp;lt;[^&amp;gt;]+&amp;gt;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    -- 合并多余的换行和空格&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;%s+&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    -- 去除开头可能残留的乱码标点（因为移除了前面的信息框，这里容易留下逗号或右括号）&lt;br /&gt;
    text = mw.ustring.gsub(text, &amp;quot;^[%s,%.:;%?!)］】」》”’&amp;gt;|]+&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.text.trim(text)&lt;br /&gt;
&lt;br /&gt;
    -- 3. 截取前约 100 个字符 (由于使用的是 mw.ustring，完美支持中文字符计算)&lt;br /&gt;
    local summary = mw.ustring.sub(text, 1, 100)&lt;br /&gt;
    if mw.ustring.len(text) &amp;gt; 100 then&lt;br /&gt;
        summary = summary .. &amp;quot;...&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- 4. 使用 mw.html 组装最终输出的 UI&lt;br /&gt;
    local container = mw.html.create(&#039;div&#039;)&lt;br /&gt;
        :cssText(&#039;display: flex; gap: 15px; align-items: flex-start; padding: 15px; border: 1px solid #eaecf0; border-radius: 6px; background: #f8f9fa; margin-bottom: 1em;&#039;)&lt;br /&gt;
&lt;br /&gt;
    if firstImage then&lt;br /&gt;
        container:tag(&#039;div&#039;)&lt;br /&gt;
            :cssText(&#039;flex: 0 0 120px; border-radius: 4px; overflow: hidden;&#039;)&lt;br /&gt;
            :wikitext(&amp;quot;[[File:&amp;quot; .. firstImage .. &amp;quot;|120px|frameless]]&amp;quot;)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    container:tag(&#039;div&#039;)&lt;br /&gt;
        :cssText(&#039;flex-grow: 1; font-size: 0.95em; line-height: 1.6; color: #202122;&#039;)&lt;br /&gt;
        :wikitext(summary)&lt;br /&gt;
&lt;br /&gt;
    return tostring(container)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- 供 Wikitext 中 {{#invoke:}} 调用的主函数&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
    -- 优先获取模板传递的参数，如果没有，再尝试获取直接 Invoke 传递的参数&lt;br /&gt;
    local args = frame:getParent().args&lt;br /&gt;
    if not args[1] or args[1] == &amp;quot;&amp;quot; then&lt;br /&gt;
        args = frame.args&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return p._getSummary(args[1])&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:A6</name></author>
	</entry>
</feed>