ФЭНДОМ


local s = {}
function s.parts(p)
 
-- Запись параметров вызова в массив. Формат индексов: "массив['параметр'][номер части/заглавия/автора]", например: "ws['wsource'][2]" (p.args[9]) это "часть2 викитека".
	local ws = {
		wsource		= {p.args[1], p.args[9],  p.args[17], p.args[25], p.args[33]},	-- викитека / часть№ викитека
		wSource		= {p.args[2], p.args[10], p.args[18], p.args[26], p.args[34]},	-- Викитека / часть№ Викитека
		}
	local h  = {
		title		= {p.args[3], p.args[11], p.args[19], p.args[27], p.args[35]},	-- заглавие№	/ часть№
		link		= {p.args[4], p.args[12], p.args[20], p.args[28], p.args[36]},	-- ссылка 	  	/ часть№ ссылка
		arcdate		= {p.args[5], p.args[13], p.args[21], p.args[29], p.args[37]},	-- архив дата 	/ часть№ архив дата
		arclink		= {p.args[6], p.args[14], p.args[22], p.args[30], p.args[38]}, 	-- архив 	  	/ часть№ архив
		utitle		= {p.args[7], p.args[15], p.args[23], p.args[31], p.args[39]},	-- подзаголовок / часть№ подзаголовок
		info		= {p.args[8], p.args[16], p.args[24], p.args[32], p.args[40]},	-- инфо  		/ часть№ инфо
		lang		= p.args[42],													-- язык  		/ часть язык
		lang_		= p.args[43],													-- -язык 		/ -часть язык
		material	= p.args[41],													-- материал 	/ часть материал
		}
	local oh = {
		title		= {p.args[44], p.args[50], p.args[56], p.args[62], p.args[68]},	-- оригинал 		/ часть№ оригинал
		link		= {p.args[45], p.args[51], p.args[57], p.args[63], p.args[69]},	-- оригинал ссылка  / часть№ оригинал ссылка
		arcdate		= {p.args[46], p.args[52], p.args[58], p.args[64], p.args[70]},	-- архив дата 		/ часть№ оригинал архив дата
		arclink		= {p.args[47], p.args[53], p.args[59], p.args[65], p.args[71]},	-- оригинал архив 	/ часть№ оригинал архив
		utitle		= {p.args[48], p.args[54], p.args[60], p.args[66], p.args[72]},	-- оригинал подзаголовок / часть№ оригинал подзаголовок
		info		= {p.args[49], p.args[55], p.args[61], p.args[67], p.args[73]},	-- оригинал инфо 	/ часть№ оригинал инфо
		lang		= p.args[74],													-- оригинал язык 	/ часть оригинал язык
		lang_		= p.args[75],													-- -оригинал язык 	/ -часть оригинал язык
		}
	local vid		= p.args[76]													-- вид 	 / часть вид
	local volumes	= p.args[77]													-- томов / часть томов
	local a  = {
		authormain	= p.args[78],													-- основной автор 	/ часть основной автор
		soauthors	= p.args[80],													-- соавторы 		/ часть соавторы
		author		= {p.args[82], p.args[79], p.args[86], p.args[89], p.args[91]},	-- автор№ 			/ часть автор№
		authorname	= {p.args[83], p.args[84], p.args[88], p.args[90], p.args[92]},	-- автор№ имя 		/ часть автор№ имя
		otvetstv	= {p.args[81], p.args[93], p.args[94], p.args[95], p.args[96]}, -- ответственный№ 	/ часть ответственный№
		authorlink	= {'', p.args[85], p.args[87]},									-- автор2 линк, автор3 линк / часть автор2 линк, часть автор3 линк
		}
	local lng = onevar(h['lang'], h['lang_'])
	h.lngstr, oh.lngstr = lngstr(h, oh)  -- строки вывода языка и языка оригинала
 
 
-- Форматирование основных значений ----------------------------------------------
 
	-- заглавия с доп. инфой и названиями на языке оригинала, до 5 шт. частей
	local headers = ''
	if is(h['title'][1]) 						then headers=header(1, h, ws)
		if is(oh['title'][1]) 					then headers=headers..  ' = '..header(1, oh) end  -- oh - оригинальные названия
   		if is(h['title'][2]) 					then headers=headers..  ' ; '..header(2, h, ws)
   			if is(oh['title'][2]) 				then headers=headers..  ' = '..header(2, oh) end
   			if is(h['title'][3]) 				then headers=headers..  ' ; '..header(3, h, ws)
   	    		if is(oh['title'][3]) 			then headers=headers..  ' = '..header(3, oh) end
        		if is(h['title'][4]) 			then headers=headers..  ' ; '..header(4, h, ws)
        			if is(oh['title'][4])  		then headers=headers..  ' = '..header(4, oh) end
    				if is(h['title'][5]) 		then headers=headers..  ' ; '..header(5, h, ws)
          				if is(oh['title'][5]) 	then headers=headers..  ' = '..header(5, oh) end
    end end end end end
    -- вид
 	if is(vid) 		then vid =  ' : '..vid  end
	-- томов
 	if is(volumes) 	then volumes = ' : '.._volumes(volumes, lng, a)  end
	-- доп. инфа об авторах
	local otvetstvennie = ''; if is(a['authormain']) or is(a['author'][2]) or is(a['soauthors']) or is(a['otvetstv'][1]) 	then otvetstvennie = ' / '..extauthors(a, lng)  end
 
 
	-- возврат результата
	return headers..vid..volumes..otvetstvennie
end
--------------------------------------------------------------------------------------------
 
 
-- Локальные функции -----------------------------
 
-- проверка существования переменной. возврат её, или nil если пустая
function is(var)
	if (var == '' or var == nil) then return nil  else return var end
end
 
-- выбор приоритетной переменной из двух. если есть обе - первой. если нет обоих - ''
function onevar(var1,var2)
    if (var1 and var1 ~= '') then return var1  elseif (var2 and var2 ~= '') then return var2  else return '' end
end
 
-- создание ссылки на ВП, ВТ, или интернет
function link(anchor, wplink, wslink, inetlink)
	local str = ''
	if is(anchor) then
		if     is(wplink) 	then str = '[['..wplink..'|'..anchor..']]'
		elseif is(wslink) 	then str = '[[:s:'..wslink..'|'..anchor..']]'
		elseif is(inetlink) then str = '['..inetlink..' '..anchor..']'
		else str = anchor end
	end
	return str
end
 
-- Заглавие со ссылкой, инфа
function header(n, h, ws)  -- n - номер заглавия;  h - массив с заглавиями; ws - ссылка на викитеку
	local title, ilink = h['title'][n], h['link'][n]
	local material, arcdate, arclink, utitle, info, lngstr = h['material'], h['arcdate'][n], h['arclink'][n], h['utitle'][n], h['info'][n], h['lngstr']
	local str = {}
	-- заглавие со ссылкой
	if is(ws) 	then ws = onevar(ws['wsource'][n], ws['wSource'][n]) end
	table.insert(str,  link(title, nil, ws, ilink))
	-- материал
    if n == 1 		then table.insert(str,  mat(material))  end
    -- подзаголовок, инфо
    if is(utitle) 	then table.insert(str,  ' : '..utitle)  end
    if is(info) 	then table.insert(str,  ' : '..info) 	 end
    -- язык
    if n == 1 and is(h['lang'])	then table.insert(str,  ' : '..lngstr)  end
    -- ссылка на архив
    if is(arcdate) and is(arclink) 	then table.insert(str, '&nbsp;: [<span title="архивировано из первоисточника">['..arclink..' арх.] '..mw.getContentLanguage():formatDate('j xg Y',arcdate)..'</span>]') end
    return table.concat(str)
end
 
-- язык
function lngstr(h, oh)
	local l, ol = '', ''
	-- язык
	if 		is(h['lang_']) 	then l  = '<span style=display:none>'..h['lang_']..'</span>'
	elseif 	is(h['lang']) 	then l  = mw.getCurrentFrame():expandTemplate{title='lg',args={h['lang'],'[]'}}   end  -- вызов {{lg|lang|[]}}
    -- оригинал язык
	if 		is(oh['lang_']) then ol = '<span style=display:none>'..oh['lang_']..'</span>'
	elseif 	is(oh['lang']) 	then ol = '[пер. с&nbsp;'..mw.getCurrentFrame():expandTemplate{title='lg',args={oh['lang']}}..']'  end -- вызов {{lg|lang}}
	return l, ol
end
 
-- материал
function mat(str)
	if not is(str) then return '' end
	local m = {	'Видеозапись','Videorecording', 'Звукозапись','Sound recording', 'Изоматериал','Graphic', 'Карты','Cartographic material', 'Кинофильм','Motion picture', 'Комплект','Kit', 'Микроформа','Microform', 'Мультимедиа','Multimedia', 'Ноты','Music', 'Предмет','Object', 'Рукопись','Manuscript', 'Текст','Text', 'Шрифт Брайля','Braille', 'Электронный ресурс','Electronic resource' }
	str = mw.ustring.upper(mw.ustring.sub(str, 1,1))..mw.ustring.lower(mw.ustring.sub(str, 2))  -- Регистр: 1 буква заглавная
	for _, s in ipairs(m) do
		if (str == s) then return ' ['..s..']' end
	end	return ''
end
 
-- томов
function _volumes(volumes, lng, a)
	if not is(volumes) then return '' end
	str = mw.getCurrentFrame():expandTemplate{title='бсокр',args={lng, 'в томах', volumes}}
 	return str
end
 
 
-- авторы/ответственные
function extauthors(a, lng)
	-- aвтор2, или aвтор2 + cоавторы
	if     is(a['author'][2]) or (is(a['author'][2]) and is(a['soauthors'])) 	then return authors(a, lng)
	-- осн.автор + соавторы + ответственные
	elseif is(a['authormain']) and is(a['soauthors']) and is(a['otvetstv'][1]) 	then return a['authormain']..'&nbsp;; '..a['soauthors']..'&nbsp;; '..otvetstvennye(a)
	-- осн.автор + соавторы
	elseif is(a['authormain']) and is(a['soauthors']) 							then return a['authormain']..'&nbsp;; '..a['soauthors']
	-- осн.aвтор + ответственные
	elseif is(a['authormain']) and is(a['otvetstv'][1]) 						then return a['authormain']..'&nbsp;; '..otvetstvennye(a)
	-- осн.автор, или осн.автор + автор2
	elseif is(a['authormain']) or (is(a['authormain']) and is(a['author'][2])) 	then return a['authormain']
	-- автор2 + ответственные
	elseif is(a['author'][2]) and is(a['otvetstv'][1]) 							then return authors(a, lng)..'&nbsp;; '..otvetstvennye(a)
	-- соавторы + ответственные
	elseif is(a['soauthors']) and is(a['otvetstv'][1]) 							then return a['soauthors'] ..'&nbsp;; '..otvetstvennye(a)
	-- соавторы
	elseif is(a['soauthors']) 													then return a['soauthors']
	-- ответственные
	elseif is(a['otvetstv'][1]) 												then return otvetstvennye(a)
	end
end
 
-- ответственные
function otvetstvennye(a)
	local str = {}
	if is(a['otvetstv'][1]) 				then table.insert(str,  a['otvetstv'][1])
		if is(a['otvetstv'][2]) 			then table.insert(str,  a['otvetstv'][2])
			if is(a['otvetstv'][3]) 		then table.insert(str,  a['otvetstv'][3])
				if is(a['otvetstv'][4]) 	then table.insert(str,  a['otvetstv'][4])
					if is(a['otvetstv'][5]) then table.insert(str,  a['otvetstv'][5])
	end end end end end
	return table.concat(str, '&nbsp;; ')
end
 
-- доп. авторы
function authors(a,lng)
	local str = {}
	local an = function (n) 	if is(a['authorname'][n])  then return a['authorname'][n]..'&nbsp;'  else return ''  end end
	if is(a['author'][1]) 					then table.insert(str,  an(1)..a['author'][1])
		if is(a['author'][2]) 				then table.insert(str,  ', '..link(an(2)..a['author'][2], a['authorlink'][2]))
			if is(a['author'][3]) 			then table.insert(str,  ', '..link(an(3)..a['author'][3], a['authorlink'][3]))
				-- 4-го и 5-го автора в тэг <abbr> 'и другие'
				if is(a['author'][4]) 		then local idr = an(4) .. a['author'][4]
					if is(a['author'][5]) 	then idr = idr .. ', '..an(5)..a['author'][5]  end
					table.insert(str,  mw.getCurrentFrame():expandTemplate{title='бсокр',args={lng, 'и другие', idr}}) -- вызов {{бсокр|lang|и другие}}
	end end end end
	return table.concat(str)
end
 
return s

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики