Модуль:Tables/Test
Перейти к навигации
Перейти к поиску
Документация
Этому модулю не хватает документации. |
local p = {}
Statistical_01 = {
['17 Лет Октября'] = {
{2002, 153, '<ref>[http://std.gmcrosstata.ru/webapi/jsf/tableView/customiseTable.xhtml Всероссийская перепись населения 2002 года]</ref>'},
{2010, 174, '<ref>[http://adg.gks.ru/webpages/Численность%20населения%20в%20Республике%20Адыгея.pdf Окончательные итоги ВПН-2010]</ref>'} },
['Абадзехская'] = {
{1979, 4554, 'http://www.webgeo.ru/db/1979/rus-kavkaz.htm Всесоюзная перепись населения 1979 г.'},
{1979, 4554, '<ref>[http://www.webgeo.ru/db/1979/rus-kavkaz.htm Всесоюзная перепись населения 1979 г.]</ref>'},
{2002, 4008, '<ref>[http://www.perepis2002.ru/ct/doc/1_TOM_01_04.xls ВПН-2002: Том. 1, таблица 4]</ref>'},
{2010, 3623, '<ref>[http://adg.gks.ru/webpages/Численность%20населения%20в%20Республике%20Адыгея.pdf Окончательные итоги ВПН-2010]</ref>'} },
['Адамий'] = {
{2002, 1192, '<ref>[http://std.gmcrosstata.ru/webapi/jsf/tableView/customiseTable.xhtml Всероссийская перепись населения 2002 года]</ref>'},
{2010, 1354, '<ref>[http://adg.gks.ru/webpages/Численность%20населения%20в%20Республике%20Адыгея.pdf Окончательные итоги ВПН-2010]</ref>'} }
}
-- **********************************************************
-- Вызов через шаблон {{НумерацияТаблицы}}
-- Заменяет число в первой яейке на номер строки
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="<table class = '"..Style.."'>"
-- Строка заголовков
g = g.."<tr>"
---- Заголовок столба с номерами строк
g = g.."<th"; if Width0 ~= nil then g = g.." width='"..Width0 end; g = g.."'>"
g = g..Title0.."</th>"
---- Остальные заголовки
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].."</th>"
end
g = g.."</tr>"
-- Строки данных
J = 1
while args[(J-1)*Column+1] ~= nil do
g = g.."<tr><td align='"..Align0.."'>"..NumStr.."</td>"
for i = 1, Column do
if args[(J-1)*Column+i] == nil then
g = g.."<td></td>"
else
g = g.."<td align='"..Aligns[i].."'>"..args[(J-1)*Column+i].."</td>"
end
end
g = g.."</tr>"
NumStr = NumStr + 1
J = J + 1
end
g = g.."</table>"
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 = {}
-- args[10]="<ref>[http://www.perepis2002.ru/ct/doc/1_TOM_01_04.xls ВПН-2002: Том. 1, таблица 4]</ref>"
local Igor = args[10]--""..Statistical_01['17 Лет Октября'][1][3]
-- Igor = "л"..Igor
-- do return mw.ustring.find(Igor, "2002", 1, false)==mil end
--frame:callParserFunction{ name = '#tag:ref', args = {
-- 'some text', name = 'foo', group = ''
--} }
do return frame:callParserFunction{ name = '#tag:ref', args = {
Statistical_01['Абадзехская'][1][3]} } end
do return
mw.ustring.codepoint(Igor, 1, 1).."= "..
mw.ustring.char(mw.ustring.codepoint(Igor, 1, 1))..", "..
mw.ustring.codepoint(Igor, 2, 2).."= "..
mw.ustring.char(mw.ustring.codepoint(Igor, 2, 2))..", "..
mw.ustring.codepoint(Igor, 3, 3).."= "..
mw.ustring.char(mw.ustring.codepoint(Igor, 3, 3))..", "..
mw.ustring.codepoint(Igor, 4, 4).."= "..
mw.ustring.char(mw.ustring.codepoint(Igor, 4, 4))..", "..
mw.ustring.codepoint(Igor, 5, 5).."= "..
mw.ustring.char(mw.ustring.codepoint(Igor, 5, 5))..", "..
mw.ustring.codepoint(Igor, 6, 6).."= "..
mw.ustring.char(mw.ustring.codepoint(Igor, 6, 6))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 7, 7))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 8, 8))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 9, 9))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 10, 10))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 11, 11))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 12, 12))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 13, 13))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 14, 14))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 15, 15))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 16, 16))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 17, 17))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 18, 18))..", "..
mw.ustring.char(mw.ustring.codepoint(Igor, 19, 19))..", "..
mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 1, 1)..", "..
mw.ustring.char(mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 1, 1))..", "..
mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 2, 2)..", "..
mw.ustring.char(mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 2, 2))..", "..
mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 3, 3)..", "..
mw.ustring.char(mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 3, 3))..", "..
mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 4, 4)..", "..
mw.ustring.char(mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 4, 4))..", "..
mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 5, 5)..", "..
mw.ustring.char(mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 5, 5))..", "..
mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 6, 6)..", "..
mw.ustring.char(mw.ustring.codepoint(Statistical_01['Абадзехская'][1][3], 6, 6))..", "..
""
end
-- do return mw.ustring.len(args[10]), mw.ustring.len(Statistical_01['Абадзехская'][2][3]) end
-- do return Igor end
do return mw.ustring.len(Igor), mw.ustring.len(Statistical_01['Абадзехская'][2][3]) end
local NumCell = 0
while args[NumCell + 1] ~= nil or NumCell%Column ~= 0 do
NumCell = NumCell + 1
-- table.insert(TempString, ("<ref>[http://www.perepis2002.ru/ct/doc/1_TOM_01_04.xls ВПН-2002: Том. 1, таблица 4]</ref>"))
table.insert(TempString, (args[NumCell] or ""))
if NumCell%Column == 0 then
if SortAsNumber then TempString.Key = tonumber(TempString[SortColumn]:gsub(",", "."):gsub("[^%d%.]", "") or 0)
elseif SortColumn > 1 then
TempString.Key = (TempString[SortColumn] or "")
TempString.Key = mw.ustring.gsub(TempString.Key, "ё", "её")
TempString.Key = mw.ustring.gsub(TempString.Key, "Ё", "ЖЁ")
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 a.Group < b.Group end
if SortDescend then a, b = b, a end
if SortAsNumber or (SortColumn < 2) then
return a.Key < b.Key
else
local LenA = string.len(a.Key)
local LenB = string.len(b.Key)
for i = 1, (LenA < LenB) and LenA or LenB do
if mw.ustring.codepoint(a.Key, i, i) ~= mw.ustring.codepoint(b.Key, i, i) then
return mw.ustring.codepoint(a.Key, i, i) < mw.ustring.codepoint(b.Key, i, i)
end
end
return LenA < LenB
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
return p
-- Участник:Temirov1960/Тест