打开/关闭搜索
搜索
打开/关闭菜单
331
1.7K
131
11.8K
星露谷物语扩展百科
导航
首页
最近更改
随机页面
交流群
互通站
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
创建账号
登录
查看“︁模块:Quote”︁的源代码
来自星露谷物语扩展百科
查看
阅读
查看源代码
查看历史
associated-pages
模块
讨论
更多操作
←
模块:Quote
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:已验证邮箱用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} -- 内部函数:分割引文文本 local function splitQuote(text) -- 快速检查:如果文本为空,返回空结果 if not text or text == "" then return "", "" end -- 使用更高效的方式:先找第一个冒号,再检查是否有第二个 local firstColonPos = mw.ustring.find(text, ":") if not firstColonPos then return "", text -- 没有冒号,整个文本作为引文内容 end -- 检查是否有第二个冒号(从第一个冒号之后开始查找) local secondColonPos = mw.ustring.find(text, ":", firstColonPos + 1) if secondColonPos then return "", text -- 有多个冒号,整个文本作为引文内容 end -- 现在确定只有一个冒号,检查冒号前面是否有中文逗号或中文句号 local beforeColon = mw.ustring.sub(text, 1, firstColonPos - 1) if mw.ustring.find(beforeColon, "[,。]") then return "", text -- 不符合条件,整个文本作为引文内容 end -- 分割文本 local afterColon = mw.ustring.sub(text, firstColonPos + 1) -- 处理特例:'''123:'''456 格式 -- 检查冒号后是否紧跟着三个单引号(一次性检查,避免重复调用sub) local afterColonStart = mw.ustring.sub(afterColon, 1, 3) if afterColonStart == "'''" then -- 移除冒号后的三个单引号 afterColon = mw.ustring.sub(afterColon, 4) -- 在冒号前添加三个单引号 beforeColon = beforeColon .. "'''" elseif mw.ustring.sub(afterColon, 1, 1) == "*" then -- 处理冒号后文本开头的星号(合并到上面的条件中,减少字符串操作) afterColon = "<span>*</span>" .. mw.ustring.sub(afterColon, 2) end return beforeColon, afterColon end -- 主要的 squote 函数,处理整个引文模板逻辑 function p.squote(frame) local text = frame.args[1] or "引文" local source = frame.args[2] or "" local textStyle = frame.args.text or "" -- 分割引文 local quoteBefore, quoteAfter = splitQuote(text) -- 获取上一次的说话人(从全局变量中) local quoteLast = frame:callParserFunction('#var', {'quote_last'}) or "" -- 检查是否需要清除说话人名称 local shouldClearBefore = false if quoteBefore ~= "" and quoteBefore == quoteLast then -- 检查引文内容是否包含性别标记 local hasGenderMarker = mw.ustring.find(quoteAfter, "(男)") or mw.ustring.find(quoteAfter, "(女)") if not hasGenderMarker then shouldClearBefore = true end end -- 构建HTML结果 local result = {} table.insert(result, '<table class="quotetable">') table.insert(result, '<tr>') table.insert(result, '<td rowspan="2" class="decorativesquote">') table.insert(result, '</td>') -- 构建引文文本单元格 local textClass = "squotetext" if textStyle == "english" then textClass = textClass .. "english" end table.insert(result, '<td class="' .. textClass .. '">') -- 添加说话人和引文内容 if quoteBefore ~= "" and not shouldClearBefore then table.insert(result, quoteBefore .. ':') -- 设置当前说话人为下次使用 frame:callParserFunction('#vardefine', {'quote_last', quoteBefore}) end table.insert(result, '"') if quoteAfter ~= "" then table.insert(result, quoteAfter) else table.insert(result, text) -- 如果没有成功分割,使用原文本 end table.insert(result, '"') table.insert(result, '</td></tr>') -- 添加来源行(如果提供了来源) if source ~= "" then table.insert(result, '<tr>') local sourceClass = "quotesource" if textStyle == "english" then sourceClass = sourceClass .. "english" end table.insert(result, '<td class="' .. sourceClass .. '">— ' .. source) table.insert(result, '</td></tr>') end table.insert(result, '</table>') return table.concat(result) end return p
该页面嵌入的页面:
模块:Documentation
(
查看源代码
)
模块:Documentation/styles.css
(
查看源代码
)
模块:ProcessArgs
(
查看源代码
)
模块:Quote/doc
(
查看源代码
)
模块:STConversion
(
查看源代码
)
模块:Static
(
查看源代码
)
模块:TSLoader
(
查看源代码
)
返回
模块:Quote
。
查看“︁模块:Quote”︁的源代码
来自星露谷物语扩展百科