模块:GetParentSec - 知沅教育出版社偶梦课程教研所

模块:GetParentSec

鹤訓讨论 | 贡献2025年4月30日 (三) 21:46的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

此模块的文档可以在模块:GetParentSec/doc创建

local p = {}

function p.getParentSection(frame)
    -- 获取调用位置的行号
    local callLine = frame:getParent():getTitle() 
    
    -- 获取当前页面内容
    local currentTitle = mw.title.getCurrentTitle()
    local content = currentTitle:getContent() or ""
    
    -- 解析章节结构
    local parentStack = {}
    local lineNumber = 0
    
    for line in content:gmatch("[^\r\n]+") do
        lineNumber = lineNumber + 1
        
        -- 匹配章节标题
        local level, title = line:match("^(=+)([^=]+)=+$")
        if level then
            level = #level
            title = mw.text.trim(title)
            
            -- 维护父章节栈
            while #parentStack > 0 and parentStack[#parentStack].level >= level do
                table.remove(parentStack)
            end
            table.insert(parentStack, {level = level, title = title, line = lineNumber})
            
            -- 检查是否是当前调用行
            if tostring(lineNumber) == callLine then
                if #parentStack > 1 then  -- 有父章节
                    return parentStack[#parentStack-1].title
                else
                    return ""  -- 没有父章节
                end
            end
        end
    end
    
    return ""
end

return p