Module:Cite:修订间差异
武外梗百科 爱国好学自强图新的百科全书
更多操作
无编辑摘要 |
无编辑摘要 |
||
| (未显示同一用户的1个中间版本) | |||
| 第2行: | 第2行: | ||
function p.include(frame) | function p.include(frame) | ||
local | local pageName = mw.text.trim(frame.args[1] or frame.args.page or "") | ||
local section = mw.text.trim(frame.args[2] or frame.args.section or "") | local section = mw.text.trim(frame.args[2] or frame.args.section or "") | ||
if pageName == "" or section == "" then return "" end | |||
local title = mw.title.new(pageName) | |||
if not title or not title.exists then return "" end | |||
local title = mw.title.new( | |||
if not title or not title.exists then | |||
local content = title:getContent() | local content = title:getContent() | ||
if not content then | if not content then return "" end | ||
-- 更安全的 section 提取:用 string.find 避免 gmatch 边缘 bug | |||
local safeSection = mw.text.encode(section) -- 或手动逃逸 | |||
local pattern = "\n(==+)%s*" .. mw.ustring.gsub(safeSection, "([%-%[%]%.%(%)%*%+%?%^%$])", "%%%1") .. "%s*%1%s*\n" | |||
local startPos, endPos = content:find(pattern) | |||
if not startPos then | if not startPos then | ||
pattern = "^(==+)%s*" .. mw.ustring.gsub(safeSection, "([%-%[%]%.%(%)%*%+%?%^%$])", "%%%1") .. "%s*%1%s*\n" | |||
startPos, endPos = content:find(pattern) | |||
end | end | ||
if not endPos then return "" end | |||
local level = endPos - startPos + 1 -- 简化 level 计算 | |||
local after = content:sub(endPos + 1) | |||
-- 用 split 代替 gmatch,避免潜在无限 | |||
-- | |||
local lines = {} | local lines = {} | ||
for line in | for line in (after .. "\n"):gmatch("(.-)\n") do | ||
local eqs, name = line:match("^(%=+)%s*(.-)%s*%1%s*$") | |||
local | if eqs and #eqs <= level then break end | ||
if | |||
table.insert(lines, line) | table.insert(lines, line) | ||
end | end | ||
local body = table.concat(lines, "\n") | local body = table.concat(lines, "\n") | ||
local hatnote = '<div style="color:#555;font-size:80%;font-style:italic;margin-bottom:0.5em;"> 主条目:[[' .. pageName .. ']]</div>' | |||
local hatnote = '<div style="color:#555;font-size: | |||
return hatnote .. "\n\n" .. body | return hatnote .. "\n\n" .. body | ||
end | end | ||
return p | return p | ||
2026年2月17日 (二) 16:50的最新版本
此模块的文档可以在Module:Cite/doc创建
local p = {}
function p.include(frame)
local pageName = mw.text.trim(frame.args[1] or frame.args.page or "")
local section = mw.text.trim(frame.args[2] or frame.args.section or "")
if pageName == "" or section == "" then return "" end
local title = mw.title.new(pageName)
if not title or not title.exists then return "" end
local content = title:getContent()
if not content then return "" end
-- 更安全的 section 提取:用 string.find 避免 gmatch 边缘 bug
local safeSection = mw.text.encode(section) -- 或手动逃逸
local pattern = "\n(==+)%s*" .. mw.ustring.gsub(safeSection, "([%-%[%]%.%(%)%*%+%?%^%$])", "%%%1") .. "%s*%1%s*\n"
local startPos, endPos = content:find(pattern)
if not startPos then
pattern = "^(==+)%s*" .. mw.ustring.gsub(safeSection, "([%-%[%]%.%(%)%*%+%?%^%$])", "%%%1") .. "%s*%1%s*\n"
startPos, endPos = content:find(pattern)
end
if not endPos then return "" end
local level = endPos - startPos + 1 -- 简化 level 计算
local after = content:sub(endPos + 1)
-- 用 split 代替 gmatch,避免潜在无限
local lines = {}
for line in (after .. "\n"):gmatch("(.-)\n") do
local eqs, name = line:match("^(%=+)%s*(.-)%s*%1%s*$")
if eqs and #eqs <= level then break end
table.insert(lines, line)
end
local body = table.concat(lines, "\n")
local hatnote = '<div style="color:#555;font-size:80%;font-style:italic;margin-bottom:0.5em;"> 主条目:[[' .. pageName .. ']]</div>'
return hatnote .. "\n\n" .. body
end
return p