Moduł:Ilustrowany
Ten moduł wykorzystuje dość skomplikowane cechy mechanizmów MediaWiki. Nie zaleca się jego modyfikacji osobom niedoświadczonym.
Osoba proponująca zmiany powinna być przygotowana do naprawienia wszelkich niepożądanych ubocznych efektów swoich działań. Eksperymenty należy prowadzić w brudnopisie. Moduł nadzorowany jest przez Wikiskryba:Zdzislaw |
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