Модуль:ЭЛ

Материал из Викитеки — свободной библиотеки

Для документации этого модуля может быть создана страница Модуль:ЭЛ/Документация

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;