Модуль:Tables/Test2

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация
 local p = {}
 
function p.AutoNumBox2(frame)
    
    local g = frame:getParent().args[1]
    local NumStr = tonumber (frame:getParent().args['Старт'] or "1");
    g = g:gsub(".*{|(.*)|}.*", "%1")
    local Titul = g:sub(1, (g:find ("\n!") or 1) - 1)
    g = g:sub((g:find ("\n!") or 1))
    g = g:gsub("||", "\n|")
    local Pos0 = 0
    while g:find("|%-[^|]*(|[^\n]*\n)", Pos0 + 1) ~= nil do
        Pos1, Pos2 = g:find("|%-[^|]*(|[^\n]*\n)", Pos0 + 1)
        while g:find("|", Pos1 + 1) ~= nil and g:find("|", Pos1 + 1) < Pos2 do 
            Pos1 = g:find("|", Pos1 + 1) 
        end    
        if g:find("%d", Pos1) ~= nil and g:find("%d", Pos1) < Pos2 then
            Pos3, Pos4 = g:find("%d+", Pos1)    
            g = g:sub(1, Pos3 - 1)..NumStr..g:sub(Pos4 + 1)
            NumStr = NumStr + 1
        end
        Pos0 = Pos2
    end
    return "{|"..Titul..g.."|}" 
end

-- **********************************************************
function p.AutoNumBox(frame)
    
    local g = frame:getParent().args[1]
    local NumStr = tonumber (frame:getParent().args['Старт'] or "1");
    local Pattern = "$#Pj/S.l0'_Y4O.rEEcRmd<HmJcw"

    g = g:gsub(".*{|(.*)|}.*", "%1")
    g = g:gsub("(|%-[^|]*|[^\n%d]*)%d*([^\n]*||)", "%1" .. Pattern .. "%2")
    g = g:gsub("(|%-[^|]*|[^|%d]*)%d*([^|]*\n)", "%1" .. Pattern .. "%2")    
    
    while g:find (Pattern) ~= nil do
        g = g:gsub(Pattern, NumStr, 1)
        NumStr = NumStr + 1
    end 
    
    return "{|"..g .."|}"

end

-- **********************************************************
function p.AutoNumBox3 ( frame )
    local g = frame:getParent().args[1]
    local NumStr = tonumber (frame:getParent().args['Старт'] or "1");

    g = g:gsub("^%s- -{{", "", 1)
    g = g:gsub("}}%s- -$", "", 1)
    local Pos = 0
    while string.find(g, "|%-", Pos + 1) ~= nil do
--do return   Pos..      string.sub(g, 1, Pos) end
        Pos = string.find(g, "|%-", Pos + 1)
        Pos1 = string.find(g, "|[^}]", Pos + 1)
        if Pos1 == nil  then return g end
--do return   Pos1..", "..Pos1..", "..      string.sub(g, 1, Pos) end
        Pos2 = (string.find(g, "|%s*|", Pos1 + 1) or 1/0)
        Pos3 = (string.find(g, "\n", Pos1 + 1) or 1/0)
--        if Pos2 == nil and Pos3 == nil then return g end
--do return   Pos2..", "..Pos3..", "..      string.sub(g, 1, Pos) end
        if Pos2 > Pos3 then Pos4 = Pos3
        elseif Pos2 < Pos3 then Pos4 = Pos2
        else return g end
        Pos5 = string.find(string.sub(g, 1, Pos4-1), "|[^|]*$")
--do return   Pos4..", "..Pos5..", "..string.reverse(string.sub(g, 1, Pos3))..", "..  string.len(g) ..", "..  string.sub(g, 1, Pos3) end
--do return   string.find(string.sub(g, 1, Pos3-1), "|", 1)  .."," .. string.sub(g, 2, Pos3-1) end
--            Pos6 =  string.len(g) + Pos4 - Pos5 + 1
--do return   Pos4..", "..Pos5..", "..Pos6..", "..  string.len(g) ..", "..  string.sub(g, 1, Pos6) end
        g = string.sub(g, 1, Pos5)..NumStr..string.sub(g, Pos4)
        Pos = Pos4
        NumStr = NumStr + 1    
    end
--[[    
    pattern = "|%s*#%s*%s*|"
    while string.find (g, pattern) ~= nil do
        g = g:gsub(pattern, "|"..NumStr.."\n".."|", 1)
        NumStr = NumStr + 1
    end 
--]]
    return g
end

-- **********************************************************
function p.AutoNumSort(frame)
    
    local args = frame:getParent().args
    local Column = tonumber(args['Столбцов'] or "0")
        if Column == 0 then return "Невозможно определить количество столбцов" end 
    local TempSort = (args['Сортировка'] or "0")
    local SortColumn = tonumber(string.match(TempSort, "%d*"))
        if SortColumn > Column then SortColumn = 0 end
    local SortAsNumber = string.match(TempSort, "#") ~= nil
    local SortAscend = true
        if SortColumn > 0 then 
            if SortAsNumber 
    		then SortAscend = string.find(TempSort, "<") ~= nil
            else SortAscend = string.find(TempSort, ">") == nil end
        end
-- do return Column end    

    local Strings={}
    local TempString = {}

    local NumCell = 0
    while args[NumCell + 1] ~= nil or NumCell%Column ~= 0 do 
        NumCell = NumCell + 1
    	table.insert(TempString, (args[NumCell] or ""))
        if NumCell%Column == 0 then
            if SortColumn > 1 then
                if SortAsNumber 
                then TempString.Key = tonumber(TempString[SortColumn]:gsub(",", "."):gsub("[^%d%.]", "") or 0)
                else TempString.Key = (TempString[SortColumn] or "") end
            else
                TempString.Key = tonumber(NumCell)
            end
            TempString.Group = TempString[1]:gsub("[^a-zA-Zа-яА-Я0-9]", "") 
            table.insert(Strings, TempString)
            TempString = {}
        end  
    end 
 
    local function SortString(a, b)  
        if a.Group < b.Group then return true end
        if a.Group > b.Group then return false end
        if SortAscend then return a.Key < b.Key 
        else return b.Key < a.Key end
    end  

-- Сортировка внутри группы
    table.sort(Strings, SortString)

-- Формироание HTML-таблицы

    local HtmlBuilder = require('Module:HtmlBuilder')    
    local HTML = HtmlBuilder.create('table')

    HTML.attr('class', (args['Оформление'] or "standard"))

-- Название таблицы
    if args['Название'] then
        HTML.tag('caption').wikitext(args['Название'])
    end

    local TempRow
-- Строка заголовков    
    TempRow = HTML.tag('tr')
    TempRow.tag('th')
        .css('width', (args['Ширина1'] or ""))
        .wikitext(args['Заголовок1'] or "№")
    for i = 2, Column do
        TempRow.tag('th')
            .css('width', (args["Ширина"..i] or ""))
            .wikitext(args["Заголовок"..i] or "Заголовок"..i)
    end

    local Aligns = {(args['Выравнивание1'] or "center")}
    for i = 2, Column do Aligns[i] = (args["Выравнивание"..i] or "left") end
-- Строки данных       
    local HideNum = 0
	local NumStr = tonumber (args['Старт'] or "1") - 1
    local Backlight = (frame.args['Подсветка'] or "class='bright'"):gsub("\"", "'")
    
	for Index, TempString in pairs(Strings) do
        TempRow = HTML.tag('tr')

--      Стиль оформления строк
        if string.find(TempString[1], "%$") ~= nil then TempRow.attr('class', 'shadow')
        elseif string.find(TempString[1], "%%") ~= nil then TempRow.attr('class', 'bright')
        elseif string.find(TempString[1], "@") ~= nil then TempRow.attr('class', 'dark')
        elseif string.find(TempString[1], "%+") ~= nil then 
            for Part in string.gmatch(Backlight, "[%w]*=%s*'[^']*'") do
                TempRow.attr(string.match(Part, "([^=]*)="), string.match(Part, "'([^']*)'")) 
            end
        end
        if string.find(TempString[1], "!") ~= nil then TempRow.attr('style', 'font-weight:bold') end

--      Вывод номера строки
        if string.find(TempString[1], "-") ~= nil then 
            HideNum = HideNum + 0.000001
            TempRow.tag('td')
                .tag('span')
                .attr('style', 'display: none; speak: none;')
                .wikitext( tonumber(NumStr + HideNum))
        else
            NumStr = NumStr + 1
            TempRow.tag('td')
                .attr('align', Aligns[1])
                .wikitext(tonumber(NumStr))
        end
--      Вывод ячеек строки
		for i = 2, Column do
            TempRow.tag('td')
                .attr('align', Aligns[i])
                .wikitext(TempString[i])
		end
    end 

    return tostring(HTML)
end
 
--[[
Участник:Temirov1960/Тест 
--]]
return p