Moduł:Obcych

Z Wikiźródeł, wolnej biblioteki

Moduł obsługuje Szablony {{Obcych}} oraz {{Obcych_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łowniczek wyrazów obcych"
	local stronaI = "M. Arcta Słowniczek wyrazów obcych.djvu"
	local tytul_t = "[[M. Arcta Słowniczek wyrazów obcych]]"
	local wydawnictwo_t = "M. Arct"
	local rok_t = "1899"
	local miejsce_t = "Warszawa"
	local zrodlo_t = "[[commons:File:M. Arcta Słowniczek wyrazów obcych.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 = 3
	local omijaj = {}
-- /parametry
	local blad_k = "\n[[Kategoria:M. Arcta Słowniczek wyrazów obcych "
	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]
	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, '({{Tytuł 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

	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?|[^|]-|' .. mw.text.encode( slowo, '-()' ) .. '}}' .. obejma)
		--/korekta
		if pocz == nil then
			--łata dla TdI
			pocz = string.find( slowo_r, '\n' .. 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)
		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?|.-|', '' )
				--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="' .. 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 .. info_wikitext .. '\n{{clear}}\n' .. lic_t
	return frame:preprocess{ text = tresc }
end

function p.litera ( frame )
	--parametry Stron Indeksu
	local nazwaI = "M. Arcta Słowniczek wyrazów obcych"
	local stronaI = "M. Arcta Słowniczek wyrazów obcych.djvu"
	local tytul_t = "[[M. Arcta Słowniczek wyrazów obcych|Słowniczek wyrazów obcych]]"
	local wydawnictwo_t = "M. Arct"
	local rok_t = "1899"
	local miejsce_t = "Warszawa"
	local zrodlo_t = "[[commons:File:M. Arcta Słowniczek wyrazów obcych.djvu|Skany na Commons]]"
	local autor_t = "[[Autor:Michał Arct|Michał Arct]]"
	local kategorie = "\n[[Kategoria:M. Arcta Słowniczek wyrazów obcych|**]]"
	local lic_t = '{{TekstPD|Michał Arct}}'
	local separator = "<br%s?[/]?><br%s?[/]?>"
	local obejma = "'''"
	local num_stron = 3
	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]
 	-- 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
	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))
        if strona_raw.exists then
        	local strona_r = "\n" .. strona_raw:getContent()
        	-- Tytuł do indeksu
			strona_r = mw.ustring.gsub( strona_r, '{{Tytuł 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
        	local strona_rr = mw.ustring.gsub( strona_r, "\n" .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|%d?%p?%s?(' .. litera .. ')', "\n" .. obejma  .. '%1' )
        	local pocz_h = mw.ustring.find(strona_rr, "\n" .. obejma .. '%d?%p?%s?'  .. litera ..'.-' .. obejma)
    	    transk[#hasla] = '<pages index="' .. nazwaI .. '" from="' .. stronaI .. '/' .. string.format('%0' .. num_stron .. 'd', stronan) .. '" to="' .. stronaI .. '/' .. 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(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" .. obejma .. '{{[kK]ore?k?t?a?|[^|]-|%d?%p?%s?(' .. litera .. ')', "\n" .. obejma  .. '%1' )
        		pocz_h = mw.ustring.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 )
    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="' .. stronaI .. '/' .. strona_od .. '" to="' .. stronaI .. '/' .. 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 = '<center><big><big><big><big>' .. litera .. '.</big></big></big></big></center>'
    end
    if #litera>2 and (naglowek_imp == '' or naglowek_imp == nil) 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  or 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 or wierszy == 1 then
			tresc = tresc .. '</td>'
		end	
	end
   	tresc = tresc .. '</td></tr><tr><td colspan="4">' .. info_wikitext .. '</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 = tresc_I }

end

return p