變更 - 知沅教育出版社偶梦课程教研所

變更

增加 140 位元組 、 2025年4月30日 (三) 21:38
無編輯摘要
第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