| 行 1: |
行 1: |
| | local p = {} | | local p = {} |
| | | | |
| − | function p.getParentSection(frame) | + | function p.getParentTitle(frame) |
| − | -- 获取当前页面 原始 内容 | + | -- 获取当前页面内容 |
| | local currentTitle = mw.title.getCurrentTitle() | | local currentTitle = mw.title.getCurrentTitle() |
| | local content = currentTitle:getContent() or "" | | local content = currentTitle:getContent() or "" |
| | | | |
| | -- 解析章节结构 | | -- 解析章节结构 |
| − | local stack = {} -- 用于 跟踪 章节层级 | + | local parentStack = {} -- 用于 维护父 章节层级 |
| − | local found = false | + | local result = nil |
| | | | |
| | for line in content:gmatch("[^\r\n]+") do | | for line in content:gmatch("[^\r\n]+") do |
| − | local level, name = line:match("^(=+)([^=]+)=+$") | + | -- 匹配章节标题 |
| | + | local level, title = line:match("^(=+)([^=]+)=+$") |
| | if level then | | if level then |
| − | level = #level | + | level = #level -- 计算标题级别 |
| − | name = mw.text.trim(name) | + | title = mw.text.trim(title) -- 去除前后空格 |
| | | | |
| | -- 检查是否包含我们的模板 | | -- 检查是否包含我们的模板 |
| − | if name:find("{{GetParentSec}}") then | + | if title:find("{{GetParentSec}}") then |
| − | -- 返回栈顶 的父章节 (如果有) | + | -- 找到模板调用,获取最近 的父章节 |
| − | found = true | + | if #parentStack > 0 then |
| − | break | + | result = parentStack[#parentStack].title |
| | + | else |
| | + | result = "" -- 没有父章节 |
| | + | end |
| | end | | end |
| | | | |
| − | -- 维护章节栈 | + | -- 维护 父 章节栈 |
| − | while #stack > 0 and stack[#stack].level >= level do | + | while #parentStack > 0 and parentStack[#parentStack].level >= level do |
| − | table.remove(stack) | + | table.remove(parentStack) |
| | end | | end |
| − | table.insert(stack, {level = level, name = name}) | + | table.insert(parentStack, {level = level, title = title}) |
| | end | | end |
| | end | | end |
| | | | |
| − | if found and #stack > 0 then | + | return result or "" |
| − | return stack[#stack].name
| |
| − | else
| |
| − | return "" -- 返回空字符串避免破坏标题格式
| |
| − | end
| |
| | end | | end |
| | | | |
| | return p | | return p |