Модуль: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