Moduł obsługuje Szablony {{Ilustrowany}} oraz {{Ilustrowany_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 nazwaS = "M. Arcta Słownik ilustrowany języka polskiego"
	local stronaI = "M. Arcta słownik ilustrowany języka polskiego - Tom %s.djvu"
	local tytul_t = "[[M. Arcta Słownik ilustrowany języka polskiego]]"
	local wydawnictwo_t = "M. Arct"
	local rok_t = "1916"
	local miejsce_t = "Warszawa"
	local zrodlo_t = "[[commons:File:M. Arcta słownik ilustrowany języka polskiego - Tom %s.djvu|Skany na Commons]]"
	local autor_t = "[[Autor:Michał Arct|Michał Arct]]"
	local lic_t = '{{TekstPD|Michał Arct}}'
	local separator = "<br%s?[/]?><br%s?[/]?>"
	local obejma = "'''"
	local num_stron = 0
	local omijaj = {}
-- /parametry
	local blad_k = "\n[[Kategoria:M. Arcta Słownik ilustrowany języka polskiego "
	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 = frame.args[8]
	local info_wikitext = frame.args[9]
	local tom = frame.args[10]
	zrodlo_t = zrodlo_t:format(tom)
	stronaI = stronaI:format(tom)
	local nazwaI = stronaI
	if litera_t == nil or litera_t == "" then
		litera_t =  mw.ustring.upper(mw.ustring.sub(string.gsub(slowo, '%d?%p?%s?', ''), 1, 1))
	end
-- 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
	if info_wikitext ~= nil and info_wikitext ~= '' then
		info_wikitext = '\n__NOEDITSECTION__\n<div id="obcych_info">\n' .. info_wikitext .. '\n</div>\n'
	else
		info_wikitext = ''
	end
	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.format('%0' .. num_stron .. 'd', tonumber(strona) - 1)
	for i, v in ipairs( omijaj ) do
    	if strona_rp == string.format('%0' .. num_stron .. 'd', tonumber(omijaj[#omijaj+1-i])) then
    		strona_rp = string.format('%0' .. num_stron .. 'd', tonumber(strona_rp) - 1)
    	end
	end

	local strona_rn = string.format('%0' .. num_stron .. 'd', tonumber(strona) + 1)
	for i, v in ipairs( omijaj ) do
    	if strona_rn == string.format('%0' .. num_stron .. 'd', tonumber(v)) then
    		strona_rn = string.format('%0' .. num_stron .. 'd', 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.format('%0' .. num_stron .. 'd', 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.format('%0' .. num_stron .. 'd', tonumber(v)) then
    				strona_rnd[licznik] = string.format('%0' .. num_stron .. 'd', 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.format('%0' .. num_stron .. 'd', tonumber(strona_rnd[licznik]) + 1)
		end
	end
	--/dodatkowe strony
	-- Tytuł do indeksu
	slowo_r = mw.ustring.gsub( slowo_r, '({{[tT]ytuł[_ ]do[_ ]indeksu|[^|]-}})', "'''%1'''<nowiki/>"  )
	-- /Tytuł do indeksu
	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
	--
	slowo_rlink,link_len = string.gsub( slowo_r, '\n%[%[[^\n]*%]%]({{tab}}' .. obejma  .. string.gsub(slowo, '([-()])','%%%1') .. obejma .. ')', '\n%1')
	--
	local pocz = string.find( slowo_rlink, '\n{{tab}}' .. obejma  .. slowo .. obejma, 1, true)
	if pocz == nil then
		--łata dla Korekta
		slowo_rlink = string.gsub( slowo_r, '\n%[%[[^\n]*%]%]({{tab}}' .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|'  .. slowo .. '}}' .. obejma .. ')', '\n%1')
		pocz = string.find( slowo_rlink, '\n{{tab}}' .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|' .. mw.text.encode( slowo, '-()' ) .. '}}' .. obejma)
		--/korekta
		if pocz == nil then
			--łata dla TdI
			slowo_rlink = string.gsub( slowo_r, '\n%[%[[^\n]*%]%]({{tab}}' .. obejma .. '{{[tT]ytuł[_ ]do[_ ]indeksu|'  .. slowo .. '}}' .. obejma .. ')', '\n%1')
			pocz = string.find( slowo_rlink, '\n{{tab}}' .. obejma .. '{{[tT]ytuł[_ ]do[_ ]indeksu|' .. mw.text.encode( slowo, '-()' ) .. '}}' .. obejma)
			--/TdI
			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
	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)
		slowo_p = string.gsub( slowo_p, '\n%[%[[^\n]*%]%]', '\n')
		local pocz_p = string.find(string.reverse( "\n" .. slowo_p ), obejma .. "}}bat{{\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?|.-|', '' )
				--usunięcie {{Tytuł do indeksu}} w poprzedni
				slowo_p = string.gsub( slowo_p, '{{[tT]ytuł[_ ]do[_ ]indeksu|', '')
				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?|.-|', '' )
--usunięcie {{Tytuł do indeksu}} w następny
		slowo_n = string.gsub( slowo_n, '{{[tT]ytuł[_ ]do[_ ]indeksu|', '')
		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="' .. strona_rn .. '" to="' .. 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="' .. strona .. '" to="' .. strona .. '" onlysection="nic" />'
	local slowo_t = '{{JustowanieStart}}' .. trans_t .. '\n' .. 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=[[' .. nazwaS.. '/Indeks ' .. litera_t .. '|' .. litera_t .. ' – wykaz haseł]]<br />[[' .. nazwaS .. '/' ..  litera_t .. ' (całość)|' .. litera_t .. ' – całość]]}}'
	local tresc = dane_t .. '\n' .. slowo_t .. info_wikitext .. '\n{{clear}}\n' .. lic_t
	return frame:preprocess{ text = tresc }
end

function p.litera ( frame )
	--parametry Stron Indeksu
	local nazwaS = "M. Arcta Słownik ilustrowany języka polskiego"
	local stronaI = "M. Arcta słownik ilustrowany języka polskiego - Tom %s.djvu"
	local tytul_t = "[[M. Arcta Słownik ilustrowany języka polskiego|Słownik ilustrowany języka polskiego]]"
	local wydawnictwo_t = "M. Arct"
	local rok_t = "1916"
	local miejsce_t = "Warszawa"
	local zrodlo_t = "[[commons:File:M. Arcta słownik ilustrowany języka polskiego - Tom %s.djvu|Skany na Commons]]"
	local autor_t = "[[Autor:Michał Arct|Michał Arct]]"
	local lic_t = '{{TekstPD|Michał Arct}}'
	local kategorie = "\n[[Kategoria:M. Arcta Słownik ilustrowany języka polskiego|**]]"
	local separator = "<br%s?[/]?><br%s?[/]?>"
	local obejma = "'''"
	local num_stron = 0
	local omijaj = {}
	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]
	local naglowek_imp = frame.args[7]
	local info_wikitext = frame.args[8]
	local tom = frame.args[9]
	local minwidth = frame.args[10]
	zrodlo_t = zrodlo_t:format(tom)
	stronaI = stronaI:format(tom)
	local nazwaI = stronaI
	-- 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 = '[[' .. nazwaS .. '/' .. dt_inne .. ' (całość)|' .. dt_inne .. ' – całość]]'
	else
		dt_inne = '[[' .. nazwaS .. '/' .. litera .. ' (całość)|' .. litera .. ' – całość]]'
	end
	if info_wikitext ~= nil and info_wikitext ~= '' then
		info_wikitext = '\n__NOEDITSECTION__\n<div id="obcych_info">\n' .. info_wikitext .. '\n</div>\n'
	else
		info_wikitext = ''
	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.format('%0' .. num_stron .. 'd', stronan)):getContent()
		if strona_raw then
			local strona_r = "\n" ..  strona_raw
			-- Tytuł do indeksu
			strona_r = mw.ustring.gsub( strona_r, '{{[tT]ytuł[_ ]do[_ ]indeksu|([^|]-)}}', "'''%1''' "  )
			-- /Tytuł do indeksu
			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
			strona_r = string.gsub( strona_r, '%[%[.-%]%]', '') --obrazki

			local strona_rr = mw.ustring.gsub( strona_r, "\n{{[Tt]ab}}" .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|%d?%p?%s?(' .. litera .. ')', "\n{{Tab}}" .. obejma  .. '%1' )
			local pocz_h = mw.ustring.find(strona_rr, "\n{{[Tt]ab}}" .. obejma .. '%d?%p?%s?'  .. litera ..'.-' .. obejma)
			transk[#hasla] = '<pages index="' .. nazwaI .. '" from="' .. string.format('%0' .. num_stron .. 'd', stronan) .. '" to="' .. string.format('%0' .. num_stron .. 'd', stronan) .. '" onlysection="nic" />'
			while pocz_h ~= nil do
				strona_r = mw.ustring.sub(strona_r, pocz_h + mw.ustring.len('{{tab}}' .. obejma) + 1)
				local kon_h = mw.ustring.find(strona_r, obejma)
				table.insert (hasla, mw.ustring.sub(strona_r, 1, kon_h - 1))
				local pocz_sep = mw.ustring.find(strona_r, separator)
				if pocz_sep == nil then
					pocz_sep = mw.ustring.len(strona_r) - 5
				end
				strona_r = mw.ustring.sub(strona_r, pocz_sep)
				strona_rr = mw.ustring.gsub( strona_r, "\n{{[Tt]ab}}" .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|%d?%p?%s?(' .. litera .. ')', "\n{{Tab}}" .. obejma  .. '%1' )
				pocz_h = mw.ustring.find(strona_rr, "\n{{[Tt]ab}}" .. 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 )
	local litera_sec = litera
	if naglowek_imp ~= nil and naglowek_imp ~= '' then
		litera_sec = naglowek_imp
	end

	if strona_raw.exists then
		naglowek = '<pages index="' .. nazwaI .. '" from="' .. strona_od .. '" to="' .. strona_od .. '" onlysection="' .. litera_sec .. '" />'
	end
	if naglowek == nil or naglowek == "" then
		-- jeżeli brak nagłówka lub brak strony z nagłówkiem stwórz własny
		naglowek = '{{C|' .. litera .. '.|w=30px}}'
	end
	if #litera>2 and (naglowek_imp == '' or naglowek_imp == nil) then --jeżeli dla > 1 litery
		naglowek = '{{C|1=<span style="cursor: help;" title="Zawiera ' .. #hasla .. ' haseł.">Indeks haseł: \'\'' .. hasla[1] .. ' - ' .. hasla[#hasla] .. '\'\'.</span>|w=30px}}'
	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 tresc = ""
	tresc = tresc .. '<div style="padding-left:10px; padding-right:10px;">' .. '' .. naglowek  .. '<br>\n{{kolumny|4|'
	for i,v in ipairs(hasla) do
		local v_bezKorekta = string.gsub( v, '{{[kK]ore?k?t?a?|.-|', '' )
		v_bezKorekta = string.gsub( v_bezKorekta, '}}', '' )
		if transk[i - 1] then
			tresc = tresc .. transk[i - 1] .. '\n\n'
		end
		tresc = tresc .. "[[../" .. v_bezKorekta .. "|" .. v .. "]]\n\n" 
	end
	if minwidth~=nil and minwidth~="" then
		tresc = tresc .. '|style=min-width:' .. minwidth
	end
   	tresc = tresc .. '}}\n<div>' .. info_wikitext .. '</div></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 = tresc_I }
end

return p