Модуль:Публикация
Материал из Occultica
Версия от 12:36, 28 декабря 2016; ru>Jack who built the house (отмена по запросу в той же теме)
Для документации этого модуля может быть создана страница Модуль:Публикация/doc
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, ' : [<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 = '[пер. с '..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']..' ; '..a['soauthors']..' ; '..otvetstvennye(a) -- осн.автор + соавторы elseif is(a['authormain']) and is(a['soauthors']) then return a['authormain']..' ; '..a['soauthors'] -- осн.aвтор + ответственные elseif is(a['authormain']) and is(a['otvetstv'][1]) then return a['authormain']..' ; '..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)..' ; '..otvetstvennye(a) -- соавторы + ответственные elseif is(a['soauthors']) and is(a['otvetstv'][1]) then return a['soauthors'] ..' ; '..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, ' ; ') end -- доп. авторы function authors(a,lng) local str = {} local an = function (n) if is(a['authorname'][n]) then return a['authorname'][n]..' ' 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