Jump to content

Module:RemoveMiddleColumn: Difference between revisions

From Untitled Monster Game
imported>Ziebster
No edit summary
imported>Ziebster
No edit summary
 
(One intermediate revision by the same user not shown)
Line 4: Line 4:
     local text = frame.args[1] or ""
     local text = frame.args[1] or ""
     if text == "" then return "" end
     if text == "" then return "" end
   
     local lines = {}
     local lines = {}
     for line in text:gmatch("([^\n]*)\n?") do
     for line in text:gmatch("([^\n]*)\n?") do
         table.insert(lines, line)
         table.insert(lines, line)
     end
     end
   
     local result = {}
     local result = {}
     local in_table = false
     local i = 1
      
     while i <= #lines do
    for _, line in ipairs(lines) do
         local trimmed = lines[i]:match("^%s*(.-)%s*$") or ""
         local trimmed = line:match("^%s*(.-)%s*$") or ""
       
         if trimmed:match("^<section") or trimmed:match("^</section") then
         if trimmed:match("^<section") or trimmed:match("^</section") then
             table.insert(result, line)
             table.insert(result, lines[i])
       
         elseif trimmed:match("^%{%|") then
         elseif trimmed:match("^%{%|") then
            in_table = true
             table.insert(result, lines[i])
             table.insert(result, line)
       
         elseif trimmed:match("^|%}") then
         elseif trimmed:match("^|%}") then
            in_table = false
             table.insert(result, lines[i])
             table.insert(result, line)
         elseif trimmed:match("^|%-") then
       
            table.insert(result, lines[i])
         elseif in_table then
        elseif trimmed:match("^!") then
            if trimmed:match("^|%-") then
            local headers = {}
                table.insert(result, line)
            while i <= #lines and lines[i]:match("^%s*!") do
           
                table.insert(headers, lines[i])
            elseif trimmed:match("^!") then
                i = i + 1
                -- Header line - skip 2nd column
            end
                local cells = {}
            i = i - 1
                local remaining = line
            if #headers == 3 then
                while remaining:find("!!") do
                table.insert(result, headers[1])
                    local pre, post = remaining:match("^(.-)!!(.*)$")
                 table.insert(result, headers[3])
                    local cell = pre:match("^%s*!%s*(.-)$") or ""
            end
                    table.insert(cells, cell)
        elseif trimmed:match("^|") and not trimmed:match("^|%-") and not trimmed:match("^|%}") then
                    remaining = "!!" .. post
            local cells = {}
                end
            while i <= #lines and lines[i]:match("^%s*|") and not lines[i]:match("^%s*|%-") and not lines[i]:match("^%s*|%}") do
                -- last cell
                 table.insert(cells, lines[i])
                local cell = remaining:match("^%s*!%s*(.-)$") or ""
                 i = i + 1
                table.insert(cells, cell)
            end
               
            i = i - 1
                local new_cells = {}
            if #cells == 3 then
                for i = 1, #cells do
                table.insert(result, cells[1])
                    if i ~= 2 then
                 table.insert(result, cells[3])
                        table.insert(new_cells, "!'''" .. cells[i])
                    end
                end
                 if #new_cells > 0 then
                    table.insert(result, table.concat(new_cells, " !!''' "))
                end
           
            elseif trimmed:match("^|") then
                -- Data row - skip 2nd column
                local cells = {}
                local remaining = line
                while remaining:find("||") do
                    local pre, post = remaining:match("^(.-)||(.*)$")
                    local cell = pre:match("^%s*|%s*(.-)$") or ""
                    table.insert(cells, cell)
                    remaining = "||" .. post
                end
                -- last cell
                local cell = remaining:match("^%s*|%s*(.-)$") or ""
                 table.insert(cells, cell)
                  
                local new_cells = {}
                for i = 1, #cells do
                    if i ~= 2 then
                        table.insert(new_cells, "|" .. cells[i])
                    end
                end
                if #new_cells >= 2 then
                    table.insert(result, table.concat(new_cells, " || "))
                end
           
            else
                 table.insert(result, line)
             end
             end
         else
         else
             table.insert(result, line)
             table.insert(result, lines[i])
         end
         end
        i = i + 1
     end
     end
   
     return table.concat(result, "\n")
     return table.concat(result, "\n")
end
end


return p
return p

Latest revision as of 14:53, 30 December 2025

Example Usage:

{{Device Disambiguation|Example}}

local p = {}

function p.slim(frame)
    local text = frame.args[1] or ""
    if text == "" then return "" end
    local lines = {}
    for line in text:gmatch("([^\n]*)\n?") do
        table.insert(lines, line)
    end
    local result = {}
    local i = 1
    while i <= #lines do
        local trimmed = lines[i]:match("^%s*(.-)%s*$") or ""
        if trimmed:match("^<section") or trimmed:match("^</section") then
            table.insert(result, lines[i])
        elseif trimmed:match("^%{%|") then
            table.insert(result, lines[i])
        elseif trimmed:match("^|%}") then
            table.insert(result, lines[i])
        elseif trimmed:match("^|%-") then
            table.insert(result, lines[i])
        elseif trimmed:match("^!") then
            local headers = {}
            while i <= #lines and lines[i]:match("^%s*!") do
                table.insert(headers, lines[i])
                i = i + 1
            end
            i = i - 1
            if #headers == 3 then
                table.insert(result, headers[1])
                table.insert(result, headers[3])
            end
        elseif trimmed:match("^|") and not trimmed:match("^|%-") and not trimmed:match("^|%}") then
            local cells = {}
            while i <= #lines and lines[i]:match("^%s*|") and not lines[i]:match("^%s*|%-") and not lines[i]:match("^%s*|%}") do
                table.insert(cells, lines[i])
                i = i + 1
            end
            i = i - 1
            if #cells == 3 then
                table.insert(result, cells[1])
                table.insert(result, cells[3])
            end
        else
            table.insert(result, lines[i])
        end
        i = i + 1
    end
    return table.concat(result, "\n")
end

return p