Moduł obsługuje Szablony {{Staropolski}} oraz {{Staropolski_L}}.


local p = {}

function strona_istnieje (nazwaS)
	local strona = mw.title.makeTitle( 'Strona', nazwaS )
	if strona.exists then
		return true
	end
	return false
end

function p.haslo( frame )
--parametry Stron Indeksu
	local nazwaI = "M. Arcta Słownik Staropolski"
	local stronaI = "M. Arcta Słownik Staropolski.djvu"
	local tytul_t = "[[M. Arcta Słownik Staropolski]]"
	local wydawnictwo_t = "M. Arct"
	local rok_t = "ok. 1920"
	local miejsce_t = "Warszawa"
	local zrodlo_t = "[[commons:File:M. Arcta Słownik Staropolski.djvu|skany na Commons]]"
	local autor_t = "[[Autor:Antoni Krasnowolski|Antoni Krasnowolski]],<br>[[Autor:Władysław Niedźwiedzki|Władysław Niedźwiedzki]]"
	local lic_t = '{{MixPD|a1=Antoni Krasnowolski|a2=Władysław Niedźwiedzki}}'
	local separator = "<br%s?[/]?><br%s?[/]?>"
	local obejma = "'''"
	local num_stron = 4
	local omijaj = {503, 504, 505, 506}
-- /parametry
	local blad_k = "\n[[Kategoria:M. Arcta Słownik Staropolski "
	local strona = frame.args[1]
	local slowo = frame.args[2]
	local wikipedia = frame.args[3]
	local wiktionary = frame.args[4]
	local nastepny_s = frame.args[6]
	local slowo_p = frame.args[5]
	local dodatkowe_strony = frame.args[7]
	local litera_t =  mw.ustring.sub(string.gsub(slowo, '%d?%p?%s?', ''), 1, 1)
-- parametry  opcjonalne
	if wiktionary == nil or wiktionary == "" then
		wiktionary = mw.ustring.lower(string.gsub(slowo, '^%d%p%s', ''))
	end
	if wikipedia == ".brak." then
		wikipedia = ""
	end
	if wiktionary == ".brak." then
		wiktionary = ""
	end
-- /opcjonalne
	local strona_raw = mw.title.makeTitle( 'Strona', stronaI .. '/' .. strona )
	if not strona_raw.exists then
		return "<br>Brak strony [[Strona:" .. stronaI .. "/" .. strona .. "]], która powinna zwierać hasło '''''" .. slowo .. "'''''." .. blad_k .. "(Błąd brak strony)]]"
	end	

	table.sort( omijaj )	
	local strona_rp = string.rep( "0", num_stron - string.len(tostring((tonumber(strona) - 1))) ) .. tostring((tonumber(strona) - 1))
	for i, v in ipairs( omijaj ) do
    	if strona_rp == string.rep( "0", num_stron - string.len(tostring((tonumber(omijaj[#omijaj+1-i])))) ) .. tostring((tonumber(omijaj[#omijaj+1-i]))) then
    		strona_rp = string.rep( "0", num_stron - string.len(tostring((tonumber(strona_rp) - 1))) ) .. tostring((tonumber(strona_rp) - 1))
    	end
	end

	local strona_rn = string.rep( "0", num_stron - string.len(tostring((tonumber(strona) + 1))) ) .. tostring((tonumber(strona) + 1))	
	for i, v in ipairs( omijaj ) do
    	if strona_rn == string.rep( "0", num_stron - string.len(tostring((tonumber(v)))) ) .. tostring((tonumber(v))) then
    		strona_rn = string.rep( "0", num_stron - string.len(tostring((tonumber(strona_rn) + 1))) ) .. tostring((tonumber(strona_rn) + 1))
    	end
	end

	local slowo_r = "\n" .. strona_raw:getContent()
	local strona_raw_p = mw.title.makeTitle( 'Strona', stronaI .. '/' .. strona_rp )
	if strona_raw_p.exists then
		slowo_r = strona_raw_p:getContent() .. slowo_r
	end
	local strona_raw_n = mw.title.makeTitle( 'Strona', stronaI .. '/' .. strona_rn )
	if strona_raw_n.exists then
		slowo_r = slowo_r .. '\127NSSN\127' .. strona_raw_n:getContent()  --dodany znacznik kolejnej strony
	end
	--jeśli hasło jest dłuższe niż strona bieżąca i następna o liczbę stron w zmiennej 'dodatkowe_strony'
	local strona_rnd = {}
	if dodatkowe_strony ~= nil and dodatkowe_strony ~= "" then
		strona_rnd[1] = string.rep( "0", num_stron - string.len(tostring((tonumber(strona_rn) + 1))) ) .. tostring((tonumber(strona_rn) + 1))	
		for  licznik = 1, dodatkowe_strony do
			--sprawdź czy nie są do ominięcia
			for i, v in ipairs( omijaj ) do
    			if strona_rnd[licznik] == string.rep( "0", num_stron - string.len(tostring((tonumber(v)))) ) .. tostring((tonumber(v))) then
    				strona_rnd[licznik] = string.rep( "0", num_stron - string.len(tostring((tonumber(strona_rnd[licznik]) + 1))) ) .. tostring((tonumber(strona_rnd[licznik]) + 1))
    			end
			end
			local strona_raw_nd = mw.title.makeTitle( 'Strona', stronaI .. '/' .. strona_rnd[licznik] )
			if strona_raw_nd.exists then
				slowo_r = slowo_r .. '\127NSSN\127' .. strona_raw_nd:getContent()  --dodany znacznik kolejnej strony
			end
			strona_rnd[licznik + 1] = string.rep( "0", num_stron - string.len(tostring((tonumber(strona_rnd[licznik]) + 1))) ) .. tostring((tonumber(strona_rnd[licznik]) + 1))	
		end
	end
	--/dodatkowe strony
	slowo_r = string.gsub( slowo_r, '<[nN][oO][iI][nN][cC][lL][uU][dD][eE]>.-</[nN][oO][iI][nN][cC][lL][uU][dD][eE]>', '') --usunięcie z zawartości "unparsed" sekcje <noinclude>
	slowo_r = "\n" .. string.gsub( slowo_r, '<[sS][eE][cC][tT][iI][oO][nN] (.-)/>', '\n<section %1/>\n') -- nie usuwam znaczników section, wydzielam je do nowych linii

	local pocz = string.find( slowo_r, '\n' .. obejma  .. slowo .. obejma, 1, true)
	if pocz == nil then
		--łata dla Korekta
		pocz = string.find( slowo_r, '\n' .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|' .. slowo .. '}}' .. obejma)
		--/korekta
		if pocz == nil then
			return "<br>Nie znaleziono hasła '''''" .. slowo .. "''''' na stronie [[Strona:" .. stronaI .. "/" .. strona .. "]]." .. blad_k .. "(Błąd brak hasła)]]"
		end
	end
-- slowo_p sprawdzenie czy słowo poprzednie znajduje się na stronie
	if slowo_p == nil or slowo_p == "" then
		slowo_p = string.sub( slowo_r, 1, pocz - 1)
		local pocz_p = string.find(string.reverse( "\n" .. slowo_p ), obejma .. "\n")
		if pocz_p == nil then
			-- komunikat gdy poprzednia nie jest sprofreadowana
			slowo_p = ""
		else
			slowo_p = string.sub( slowo_p, string.len( slowo_p ) - pocz_p + string.len(obejma) - 1)
			pocz_p = string.find( slowo_p, obejma)
			if pocz_p == nil then
				slowo_p = ""
			else
				slowo_p = string.sub( slowo_p, 1, pocz_p - 1)
				--usunięcie {{Korekta}} w poprzedni
				slowo_p = string.gsub( slowo_p, '{{[kK]ore?k?t?a?|.-|', '' )
				slowo_p = string.gsub( slowo_p, '}}', '' )
				--/Korekta
			end
		end
	end
--/slowo_p	
	slowo_r = string.sub( slowo_r, pocz + 1)
	local kon = string.find( slowo_r, separator, 2)
	local slowo_n
	if kon == nil then
			return "<br>Nie znaleziono kontynuacji hasła '''''" .. slowo .. "''''' ze strony [[Strona:" .. stronaI .. "/" .. strona .. "]], na stronie [[Strona:" .. stronaI .. "/" .. strona_rn .. "]]." .. blad_k .. "(Błąd kontynuacji)]]"
	else
		--slowo_n
		slowo_n = string.sub( slowo_r, kon  +1 ) --+ string.len(separator .. obejma)
		local kon_n = string.find(slowo_n, obejma .. '.-' .. obejma)
		if kon_n == nil then
				--komunikat dla braku sproofreadowanej strony następnej, w przypadku gdy tam znajduje się następne hasło (na razie nastepny=strona indeksu głównego
				slowo_n = nil
		else
			slowo_n = string.sub(slowo_n, kon_n + string.len(obejma))
		end
		--/slowo_n
	end
--slowo_n
	if (nastepny_s == nil or nastepny_s == "") and slowo_n~= nil then
		slowo_n = string.sub( slowo_n, 1, string.find( slowo_n, obejma) - 1)
--usunięcie {{Korekta}} w następny
		slowo_n = string.gsub( slowo_n, '{{[kK]ore?k?t?a?|.-|', '' )
		slowo_n = string.gsub( slowo_n, '}}', '' )
--Korekta
	else
		slowo_n = nastepny_s
	end
--/slowo_n
	
	slowo_r = string.sub( slowo_r, 1, kon - 1)
	
-- sprawdzenie czy treść hasła najduje się na stronie "strona" oraz kontunuacja na "strona_rn" - w tym przypadku dodanie znacznika strony kolejnej do treści i usunie znacznika \127NSSN\127
	local trans_t2 = ''
	if string.find( slowo_r, "\127NSSN\127") then
		-- jeżeli dodatkowe strony ponad następną
		local strona_rn_to
		if #strona_rnd > 0 then
			strona_rn_to = strona_rnd[#strona_rnd - 1]
		else
			strona_rn_to = strona_rn 
		end
		-- /dodatkowe
		trans_t2 = '<pages index="' .. nazwaI .. '" from="' .. stronaI .. '/' .. strona_rn .. '" to="' .. stronaI .. '/' .. strona_rn_to .. '" onlysection="nic" />'
		slowo_r = string.gsub( slowo_r, "%s?\127NSSN\127", " ")
	end

	slowo_r = string.gsub( slowo_r, '\n?<section (.-)/>\n?', '<section %1/>') -- nie usuwam znaczników section, przywracam znaczniki bez \n
--sprawdzam czy w treści znajduje się przypis
	if string.find( slowo_r, "<[rR][eE][fF]") or string.find(slowo_r, "{{[pP]w") or mw.ustring.find( slowo_r, "{{[bB]łąd w druku") or string.find( slowo_r, "{{[bB]wd") then
		lic_t = '{{Przypisy}}' .. '\n' .. lic_t --frame:expandTemplate{ title = 'Przypisy', args = {} } .. '\n' .. lic_t
	end

	local trans_t = '<pages index="' .. nazwaI .. '" from="' .. stronaI .. '/' .. strona .. '" to="' .. stronaI .. '/' .. strona .. '" onlysection="nic" />'
	local slowo_t = '{{JustowanieStart}}' .. trans_t .. '\n{{tab}}' .. slowo_r .. trans_t2 .. '{{JustowanieKoniec}}'
	local dane_t = '{{Dane tekstu|autor=' .. autor_t ..'|tytuł=' .. tytul_t .. '|wydawca=' .. wydawnictwo_t .. '|rok wydania=' .. rok_t .. '|miejsce wydania=' .. miejsce_t .. '|strona indeksu=' .. nazwaI .. '|źródło=' .. zrodlo_t .. '|poprzedni=../' .. slowo_p .. '|następny=../' .. slowo_n .. '|wikipedia=' ..  wikipedia .. '|wiktionary=' ..  wiktionary .. '|inne=[[' .. nazwaI.. '/Indeks ' .. litera_t .. '|' .. litera_t .. ' – wykaz haseł]]<br>[[' .. nazwaI .. '/' ..  litera_t .. ' (całość)|' .. litera_t .. ' – całość]]}}'
	local tresc = dane_t .. '\n' .. slowo_t .. '\n{{clear}}\n' .. lic_t
	return frame:preprocess{ text = tresc }
end

function p.litera ( frame )
	--parametry Stron Indeksu
	local nazwaI = "M. Arcta Słownik Staropolski"
	local stronaI = "M. Arcta Słownik Staropolski.djvu"
	local tytul_t = "[[M. Arcta Słownik Staropolski|Słownik Staropolski]]"
	local wydawnictwo_t = "M. Arct"
	local rok_t = "ok. 1920"
	local miejsce_t = "Warszawa"
	local zrodlo_t = "[[commons:File:M. Arcta Słownik Staropolski.djvu|Skany na Commons]]"
	local autor_t = "[[Autor:Antoni Krasnowolski|Antoni Krasnowolski]]<br>[[Autor:Władysław Niedźwiedzki|Władysław Niedźwiedzki]]"
	local kategorie = "\n[[Kategoria:M. Arcta Słownik Staropolski|**]]"
	local lic_t = '{{MixPD|a1=Antoni Krasnowolski|a2=Władysław Niedźwiedzki}}'
	local separator = "<br%s?[/]?><br%s?[/]?>"
	local obejma = "'''"
	local num_stron = 4
	local omijaj = {503, 504, 505, 506}
	table.sort( omijaj )	
	-- /parametry
	local blad_k = "\n[[Kategoria:Strony z błędami skryptów]]"
	local strona_od = frame.args[1]
	local strona_do = frame.args[2]	
	local litera = frame.args[3]
	local litera_p = frame.args[4]
	local litera_n = frame.args[5]
	local dt_inne = frame.args[6]
 	-- parametry opcjonalne
 	if litera_p~=nil and litera_p~="" then
 		litera_p = '../Indeks ' .. litera_p
 	end
 	if litera_n~=nil and litera_n~="" then
 		litera_n = '../Indeks ' .. litera_n
 	end
 	if dt_inne ~= nil and dt_inne ~= "" then
 		dt_inne = '[[' .. nazwaI.. '/' .. dt_inne .. ' (całość)|' .. dt_inne .. ' – całość]]'
 	else
 		dt_inne = '[[' .. nazwaI.. '/' .. litera .. ' (całość)|' .. litera .. ' – całość]]'
 	end
	local hasla={}
	local transk={}
	local stronan = tonumber(strona_od)
	local stronan_do = tonumber(strona_do)
	while stronan <= stronan_do do
        local strona_raw = mw.title.makeTitle( 'Strona', stronaI .. '/' .. string.rep( "0", num_stron - string.len(tostring(stronan)) ) .. tostring(stronan) )
        if strona_raw.exists then
        	local strona_r = "\n" .. strona_raw:getContent()
			strona_r = string.gsub( strona_r, '<[nN][oO][iI][nN][cC][lL][uU][dD][eE]>.-</[nN][oO][iI][nN][cC][lL][uU][dD][eE]>', '') --usunięcie z zawartości "unparsed" sekcje <noinclude>
        	strona_r = string.gsub( strona_r, '<[sS][eE][cC][tT][iI][oO][nN] (.-)/>', '\n<section %1/>\n') -- nie usuwam znaczników section, wydzielam je do nowych linii
        	local strona_rr = string.gsub( strona_r, "\n" .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|%d?%p?%s?(' .. litera .. ')', "\n" .. obejma  .. '%1' )
        	local pocz_h = string.find(strona_rr, "\n" .. obejma .. '%d?%p?%s?'  .. litera ..'.-' .. obejma)
    	    transk[#hasla] = '<pages index="' .. nazwaI .. '" from="' .. stronaI .. '/' .. string.rep( "0", num_stron - string.len(tostring(stronan)) ) .. tostring(stronan) .. '" to="' .. stronaI .. '/' .. string.rep( "0", num_stron - string.len(tostring(stronan)) ) .. tostring(stronan) .. '" onlysection="nic" />' 
        	while pocz_h ~= nil do
        		strona_r = string.sub(strona_r, pocz_h + string.len(obejma) + 1)
        		local kon_h = string.find(strona_r, obejma)
        		table.insert (hasla, string.sub(strona_r, 1, kon_h - 1))
        		local pocz_sep = string.find(strona_r, separator)
        		if pocz_sep == nil then
        			pocz_sep = string.len(strona_r) - 5
        		end
        		strona_r = string.sub(strona_r, pocz_sep)
        		strona_rr = string.gsub( strona_r, "\n" .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|%d?%p?%s?(' .. litera .. ')', "\n" .. obejma  .. '%1' )
        		pocz_h = string.find(strona_rr, "\n" .. obejma .. '%d?%p?%s?'  .. litera ..'.-' .. obejma)
        	end
        end
		stronan = stronan + 1
		for i, v in ipairs( omijaj ) do
			if stronan == v then
				stronan = stronan + 1
			end
		end
    end
    local naglowek
    strona_raw = mw.title.makeTitle( 'Strona', stronaI .. '/' .. strona_od )
    if strona_raw.exists then
    	naglowek = '<pages index="' .. nazwaI .. '" from="' .. stronaI .. '/' .. strona_od .. '" to="' .. stronaI .. '/' .. strona_od .. '" onlysection="' .. litera .. '" />'
    end
    if naglowek == nil or naglowek == "" then
    	-- jeżeli brak nagłówka lub brak strony z nagłówkiem stwórz własny
    	naglowek = '<center><big><big><big><big>' .. litera .. '.</big></big></big></big></center>'
    end
    if #litera>2 then --jeżeli dla > 1 litery
    	naglowek = '<center><big><big><span style="cursor: help;" title="Zawiera ' .. #hasla .. ' haseł.">Indeks haseł: \'\'' .. hasla[1] .. ' - ' .. hasla[#hasla] .. '\'\'.</span></big></big></center>'
    end
    local dane_t = '{{Dane tekstu|autor=' .. autor_t ..'|tytuł=' .. tytul_t .. '|wydawca=' .. wydawnictwo_t .. '|rok wydania=' .. rok_t .. '|miejsce wydania=' .. miejsce_t .. '|strona indeksu=' .. nazwaI .. '|źródło=' .. zrodlo_t .. '|poprzedni=' .. litera_p .. '|następny=' .. litera_n .. '|inne=' .. dt_inne .. '}}'
	local wierszy = math.ceil( #hasla/4 )
    local tresc = ""
   	tresc = tresc .. '<div>' .. '<table align="center"><tr><td colspan="4">' .. naglowek  .. '<br></td></tr>\n<tr>'
    for i,v in ipairs(hasla) do
    	if (i % (wierszy)) == 1 then
			tresc = tresc .. '\n<td width="25%" valign="top" style="padding-left:10px; padding-right:10px;">'
		end
		local v_bezKorekta = string.gsub( v, '{{[kK]ore?k?t?a?|.-|', '' )
		v_bezKorekta = string.gsub( v_bezKorekta, '}}', '' )
		tresc = tresc .. "[[" .. nazwaI .. "/" .. v_bezKorekta .. "|" .. v .. "]] \n\n" 
		if transk[i - 1] then
			tresc = tresc .. transk[i - 1]
		end
	   	if (i % (wierszy)) == 0 then
			tresc = tresc .. '</td>'
		end	
	end

   	tresc = tresc .. '</td></tr></table></div>' .. '\n{{clear}}\n'
   	--sprawdzam czy w treści znajduje się przypis
	if string.find( tresc, "<[rR][eE][fF]") or string.find(tresc, "{{[pP]w") or mw.ustring.find( tresc, "{{[bB]łąd w druku") or string.find( tresc, "{{[bB]wd") then
		lic_t = '{{Przypisy}}' .. '\n' .. lic_t
	end
    local tresc_I = dane_t .. '<br>\n' .. tresc .. lic_t ..  kategorie
	return ((frame:preprocess{ text = '{{NAMESPACENUMBER}}' } == '1') and '<pre>' .. mw.text.nowiki( tresc_I ) .. '</pre>' or frame:preprocess{ text = tresc_I })

end

return p