Модуль:Tables
Найду переключалку еода, буит норм выглядеть. --Ленивое КотЭ (обсуждение) 14:34, 10 июня 2013 (MSK)
local p = {}
-- ********************************************************** -- Вызов через шаблон Шаблон:НумерацияТаблицы -- Заменяет число в первой яейке на номер строки function p.AutoNumBox2(frame)
local g = frame:getParent().args[1] local NumStr = tonumber (frame:getParent().args['Старт'] or "1"); if g == nil then return "Нет данных" end 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 NumStr = tonumber (frame.args['Старт'] or "1"); local g = frame.args[1] g = g:gsub("^%s- -{{", "", 1) g = g:gsub("}}%s- -$", "", 1) 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.AutoNum ( frame )
local args = frame.args; local Style = (frame.args['Оформление'] or "standard"); local Column = tonumber (frame.args['Столбцов'] or "0"); local NumStr = tonumber (frame.args['Старт'] or "1"); local Title0 = (frame.args['Заголовок0'] or "№") local Titles = {} for i = 1, Column do Titles[i] =(frame.args["Заголовок"..i] or "Заголовок"..i) end local Width0 = (frame.args['Ширина0']); local Widths = {} for i = 1, Column do Widths[i] =(frame.args["Ширина"..i]) end local Align0 = (frame.args['Выравнивание0'] or "center") local Aligns = {} for i = 1, Column do Aligns[i] =(frame.args["Выравнивание"..i] or "left") end
local g="
" -- Строка заголовков g = g..""Заголовок столба с номерами строк
g = g.."<th"; if Width0 ~= nil then g = g.." width='"..Width0 end; g = g.."'>"g = g..Title0..""
Остальные заголовки
for i = 1, Column do g = g.."<th"; if Widths[i] ~= nil then g = g.." width='"..Widths[i] end; g = g.."'>"g = g..Titles[i].."" end g = g.."" -- Строки данных J = 1 while args[(J-1)*Column+1] ~= nil do g = g..""
for i = 1, Column do if args[(J-1)*Column+i] == nil theng = g..""
elseg = g..""
end endg = g.."" NumStr = NumStr + 1 J = J + 1 end g = g.."
"..NumStr.." | "..args[(J-1)*Column+i].." |
"
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 SortDescend if SortAsNumber then SortDescend = string.find(TempSort, "<") == nil else SortDescend = string.find(TempSort, ">") ~= nil 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 SortAsNumber then
TempString.Key=mw.ustring.gsub(TempString[SortColumn], ",", ".")
TempString.Key=mw.ustring.gsub(TempString.Key, "<span.*color.*","")
TempString.Key=mw.ustring.gsub(TempString.Key, "(%d)%s(%d)","%1%2")
TempString.Key = tonumber(string.match(TempString.Key, "(%d+)") or 0)
elseif SortColumn > 1 then
TempString.Key = (TempString[SortColumn] or "")
-- Возможность сортировки по скрытому ключу
TempString.Key = mw.ustring.gsub(TempString.Key, '
-- Сортировка строк по группам и ключу
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 = (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
return p