Модуль:ЭЛ
Для документации этого модуля может быть создана страница Модуль:ЭЛ/Документация
local el = {};
function el.make_double_linked_list(t, s_next, s_prev)
local n_index = 1;
local first = t[n_index];
local prev = first;
prev[s_prev] = nil;
while true do
n_index = n_index + 1;
local curr = t[n_index];
prev[s_next] = curr;
if curr == nil then
break;
end;
curr[s_prev] = prev;
prev = curr;
end;
return first, prev;
end;
function el.index_article_list(list)
local data = {article = {}};
data.first, data.last = el.make_double_linked_list(list, "next", "prev");
list = nil; -- больше не нужен
-- Индексируем статьи по имени
local article = data.first;
repeat
local list = data.article[article.title];
if list == nil then
data.article[article.title] = { count = 1, [1] = article };
else
list.count = list.count + 1;
list[list.count] = article;
end;
article = article.next;
until article == nil;
return data;
end;
return el;