Moduł:TOC

Z Wikibooks, biblioteki wolnych podręczników.
 Dokumentacja modułu [stwórz] [odśwież]
-- Funkcje pomocnicze do tworzenia spisu treści.
-- Lua info: https://en.wikipedia.org/wiki/Wikipedia:Lua
-- mw.*: https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Scribunto_libraries
local p = {}

-- link z from (dla kategorii)
function p.linkKategoria(page, from)
	local url = tostring(mw.uri.fullUrl(page, 'from='..from ))
	return '['.. url .. ' ' .. from .. ']'
end

--[[ Funkcja do generowania linków dwuliterowych w rozwiniętym spisie treści.

Używane w: https://pl.wikipedia.org/wiki/Szablon:Spis_treści_kategoria/rozwinięty

Generowane linki składają się z dwóch liter. Obie mogą pochodzić z jednego alfabetu:
{{#invoke:TOC|linkiAA|strona=Test|alfabet=abcdefghijklmnopqrstuvwxyz}}

Lub z dwóch różnych:
{{#invoke:TOC|linkiAA|strona=Test|alfabet1=abcćdeęfghijklłmnńoópqrsśtuvwxyzźż|alfabet2=aąbcćdeęfghijklłmnńoópqrsśtuvwxyzźż}}

Wywołanie testowe (w konsoli debugowania):
=p.linkiAA({args={strona='Test', alfabet='abcdefghijklnopqrstuvwxyz'}})
=p.linkiAA({args={strona='Test', alfabet1='abcćdeęfghijklłmnńoópqrsśtuvwxyzźż', alfabet2='aąbcćdeęfghijklłmnńoópqrsśtuvwxyzźż'}})
]]--
function p.linkiAA(frame)
	local strona = frame.args.strona
	local alfabet1, alfabet2
	if frame.args['alfabet'] ~= nil then
		alfabet1 = frame.args.alfabet
		alfabet2 = frame.args.alfabet
	else
		alfabet1 = frame.args.alfabet1
		alfabet2 = frame.args.alfabet2
	end
	
	local result = ''
	for litera1 in alfabet1:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
		result = result .. '\n\'\'\''.. mw.ustring.upper(litera1) ..'\'\'\''
		for litera2 in alfabet2:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
			result = result .. ' ' .. p.linkKategoria(strona, mw.ustring.upper(litera1) .. litera2)
		end
	end
	return result
end

--[[ Funkcja do generowania linków jednoliterowych w spisie treści.

Używane w: https://pl.wikipedia.org/wiki/Szablon:Spis_treści_kategoria/rozwinięty

Generowane linki składają się z jednej litery (znaku). Wywołanie:
{{#invoke:TOC|linkiA|strona=Test|alfabet=abcdefghijklmnopqrstuvwxyz}}
{{#invoke:TOC|linkiA|strona=Test|alfabet=0123456789}}

Wywołanie testowe (w konsoli debugowania):
=p.linkiA({args={strona='Test', alfabet='abcdefghijklnopqrstuvwxyz'}})
]]--
function p.linkiA(frame)
	local strona = frame.args.strona
	local alfabet1 = frame.args.alfabet

	local result = ''
	for litera1 in alfabet1:gmatch("[%z\1-\127\194-\244][\128-\191]*") do
		result = result .. p.linkKategoria(strona, mw.ustring.upper(litera1)) .. ' '
	end
	return result
end

return p