Модуль:Справочник: различия между версиями
Перейти к навигации
Перейти к поиску
StasR (обсуждение | вклад) Нет описания правки |
StasR (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
local pp = {} | local pp = {} | ||
global = mw.ext.luaglobal | |||
tools = require( 'Модуль:Tools' ) | |||
global.strict( true ) | global.strict( true ) | ||
local function pattern( args, pars ) | |||
return mw.ustring.format( pars, mw.uri.encode( args[2] or '', 'PATH' ) ) | |||
end | |||
local function ruwp( args ) | |||
local name = args[2] | |||
if not name then | |||
local gFio = global.get( 'gFIO' )[1] | |||
if ( gFio.f or '' ) ~= '' then | |||
name = gFio.l .. ', ' .. gFio.f .. ' ' .. gFio.m | |||
else | |||
name = gFio.l | |||
end | |||
end | |||
return '[[ru:' .. name .. '|Википедия]]' | |||
end | |||
local function simpleURL( args, pars ) | |||
return mw.ustring.format( pars, args[2] or '' ) | |||
end | |||
local function podvig( args ) | |||
local id = args[2] or '' | |||
return 'картотека награждений на сайтах ОБД МО «[http://podvignaroda.ru/?#id=' .. id | |||
.. ' Подвиг] / [https://pamyat-naroda.ru/heroes/podvig-chelovek_kartoteka' .. id | |||
.. ' Память] народа»' | |||
end | |||
local function garf( args ) | |||
if args[2] == '7523' and args[3] == '7' then | |||
return 'личное дело (материалы отдела по учету и регистрации награжденных Верховного Совета СССР за 1936-1947 гг. — ГАРФ. Ф. 7523. Оп. 7. Д. ' | |||
.. args[4] .. '. Л. ' .. args[5] .. ')' | |||
else | |||
return 'ГАРФ. Ф. ' .. args[2].. '. Оп. ' .. args[3].. '. Д. ' | |||
.. args[4] .. '. Л. ' .. args[5] | |||
end | |||
end | |||
local list = { | |||
['кто-1'] = { | |||
pars = '[http://www.memo.ru/history/NKVD/kto/biogr/gb%s.htm Н. Петров, К. Скоркин. Кто руководил НКВД, 1934-1941: Справочник]. — М.: Звенья, 1999. ISBN 5-7870-0032-3', | |||
func = pattern, | |||
ctg = 'Персоналии в справочнике Петрова—Скоркина', | |||
online = true, | |||
}, | |||
['кто-2'] = { | |||
pars = '[http://www.memo.ru/history/NKVD/kto2/kto_2-%s.html Н. Петров. Кто руководил органами госбезопасности, 1941-1954: Справочник]. — М.: Звенья, 2010. ISBN 5-7870-0109-9', | |||
func = pattern, | |||
ctg = 'Персоналии в справочнике Петрова', | |||
online = true, | |||
}, | |||
['открытый список'] = { | |||
pars = 'cайт «[[ol:%s|Открытый список]]»', | |||
func = pattern, | |||
ctg = 'Персоналии на сайте «Открытый список»', | |||
online = true, | |||
}, | |||
['википедия'] = { | |||
func = ruwp, | |||
ctg = 'Персоналии в Википедии', | |||
online = true, | |||
min = 0, | |||
}, | |||
['www.centrasia.ru'] = { | |||
pars = 'cайт «[%s ЦентрАзия]»', | |||
func = simpleURL, | |||
ctg = 'Персоналии на сайте «ЦентрАзия»', | |||
online = true, | |||
min = 0, | |||
max = 0, | |||
}, | |||
['www.knowbysight.info'] = { | |||
pars = 'сайте «[%s Справочник по истории КПСС и Советского Союза]»', | |||
func = simpleURL, | |||
ctg = 'Персоналии на сайте «Справочник по истории КПСС и Советского Союза»', | |||
online = true, | |||
min = 0, | |||
max = 0, | |||
}, | |||
['подвиг'] = { | |||
func = podvig, | |||
online = true, | |||
}, | |||
['книга памяти'] = { | |||
pars = '[https://pamyat-naroda.ru/heroes/memorial-chelovek_pechatnoi_knigi_pamyati%s Книга памяти сотрудников органов контрразведки, погибших и пропавших без вести в годы Великой Отечественной войны 1941−1945 гг.] — М.: Граница, 1995. — 543 с.: ил. ISBN 5-86436-072-4', | |||
func = pattern, | |||
ctg = 'Персоналии в «Книге памяти сотрудников контрразведки»', | |||
online = true, | |||
}, | |||
['гарф'] = { | |||
func = garf, | |||
min = 4, | |||
max = 4, | |||
}, | |||
} | |||
pp[''] = function ( frame ) | pp[''] = function ( frame ) | ||
-- local args = tools.checkargs( frame:getParent().args, { true, true } ) | |||
local | local Args = frame:getParent().args | ||
local | -- local Info = global.get( 'gInfo' ) or {} | ||
.. | local args = {} | ||
for u, v in pairs( Args ) do | |||
args[u] = mw.text.trim( v ) | |||
end | |||
local | local what = args[1] | ||
if not | if not what then | ||
return tools.errorMsg( 'справочник', ' | return tools.errorMsg( 'справочник', 'Не указан код справочника', | ||
'Используйте формат {{ справочник | <var>код справочника</var>' | |||
.. ' | <var>параметры (зависят от справочника)</var> }}' ) | |||
end | end | ||
local url = string.match( | local url = string.match( what, '^https?://([^/]+)/' ) | ||
if url then | if url then | ||
what = url | |||
end | end | ||
local descr = list[mw.ustring.lower( what )] | |||
if not descr then | |||
return tools.errorMsg( 'справочник', 'Неизвестный код справочника', | |||
if not | 'Используйте формат {{ справочник | <var>код справочника</var>' | ||
return tools.errorMsg( 'справочник', 'Неизвестный код справочника', | .. ' | <var>параметры (зависят от справочника)</var> }}' ) | ||
end | end | ||
if | local min, max = descr.min or 1, descr.max or 1 | ||
-- #args для frame работает некорректно, поэтому проверяем существование args[min] и несуществование args[max+1] | |||
-- if ( args[2+min] or '' ) == '' or ( args[3+max] or '' ) ~= '' then | |||
if #args < min+1 or #args > max+1 then | |||
return tools.errorMsg( 'справочник', 'Неверное число параметров', | |||
'Для этого типа справочника параметров должно быть от ' .. min .. ' до ' .. max ) | |||
end | end | ||
local res, err = descr.func( args, descr.pars ) | |||
if res then | |||
if descr.ctg then | |||
res = res .. '[[Категория:' .. descr.ctg .. ']]' | |||
end | |||
global.add( 'gInfo', res ) | |||
else | else | ||
return tools.errorMsg( 'справочник', err or 'Ошибка при обработке' ) | |||
end | end | ||
end | |||
return pp | return pp |
Версия от 22:30, 24 января 2018
Для документации этого модуля может быть создана страница Модуль:Справочник/doc
local pp = {}
global = mw.ext.luaglobal
tools = require( 'Модуль:Tools' )
global.strict( true )
local function pattern( args, pars )
return mw.ustring.format( pars, mw.uri.encode( args[2] or '', 'PATH' ) )
end
local function ruwp( args )
local name = args[2]
if not name then
local gFio = global.get( 'gFIO' )[1]
if ( gFio.f or '' ) ~= '' then
name = gFio.l .. ', ' .. gFio.f .. ' ' .. gFio.m
else
name = gFio.l
end
end
return '[[ru:' .. name .. '|Википедия]]'
end
local function simpleURL( args, pars )
return mw.ustring.format( pars, args[2] or '' )
end
local function podvig( args )
local id = args[2] or ''
return 'картотека награждений на сайтах ОБД МО «[http://podvignaroda.ru/?#id=' .. id
.. ' Подвиг] / [https://pamyat-naroda.ru/heroes/podvig-chelovek_kartoteka' .. id
.. ' Память] народа»'
end
local function garf( args )
if args[2] == '7523' and args[3] == '7' then
return 'личное дело (материалы отдела по учету и регистрации награжденных Верховного Совета СССР за 1936-1947 гг. — ГАРФ. Ф. 7523. Оп. 7. Д. '
.. args[4] .. '. Л. ' .. args[5] .. ')'
else
return 'ГАРФ. Ф. ' .. args[2].. '. Оп. ' .. args[3].. '. Д. '
.. args[4] .. '. Л. ' .. args[5]
end
end
local list = {
['кто-1'] = {
pars = '[http://www.memo.ru/history/NKVD/kto/biogr/gb%s.htm Н. Петров, К. Скоркин. Кто руководил НКВД, 1934-1941: Справочник]. — М.: Звенья, 1999. ISBN 5-7870-0032-3',
func = pattern,
ctg = 'Персоналии в справочнике Петрова—Скоркина',
online = true,
},
['кто-2'] = {
pars = '[http://www.memo.ru/history/NKVD/kto2/kto_2-%s.html Н. Петров. Кто руководил органами госбезопасности, 1941-1954: Справочник]. — М.: Звенья, 2010. ISBN 5-7870-0109-9',
func = pattern,
ctg = 'Персоналии в справочнике Петрова',
online = true,
},
['открытый список'] = {
pars = 'cайт «[[ol:%s|Открытый список]]»',
func = pattern,
ctg = 'Персоналии на сайте «Открытый список»',
online = true,
},
['википедия'] = {
func = ruwp,
ctg = 'Персоналии в Википедии',
online = true,
min = 0,
},
['www.centrasia.ru'] = {
pars = 'cайт «[%s ЦентрАзия]»',
func = simpleURL,
ctg = 'Персоналии на сайте «ЦентрАзия»',
online = true,
min = 0,
max = 0,
},
['www.knowbysight.info'] = {
pars = 'сайте «[%s Справочник по истории КПСС и Советского Союза]»',
func = simpleURL,
ctg = 'Персоналии на сайте «Справочник по истории КПСС и Советского Союза»',
online = true,
min = 0,
max = 0,
},
['подвиг'] = {
func = podvig,
online = true,
},
['книга памяти'] = {
pars = '[https://pamyat-naroda.ru/heroes/memorial-chelovek_pechatnoi_knigi_pamyati%s Книга памяти сотрудников органов контрразведки, погибших и пропавших без вести в годы Великой Отечественной войны 1941−1945 гг.] — М.: Граница, 1995. — 543 с.: ил. ISBN 5-86436-072-4',
func = pattern,
ctg = 'Персоналии в «Книге памяти сотрудников контрразведки»',
online = true,
},
['гарф'] = {
func = garf,
min = 4,
max = 4,
},
}
pp[''] = function ( frame )
-- local args = tools.checkargs( frame:getParent().args, { true, true } )
local Args = frame:getParent().args
-- local Info = global.get( 'gInfo' ) or {}
local args = {}
for u, v in pairs( Args ) do
args[u] = mw.text.trim( v )
end
local what = args[1]
if not what then
return tools.errorMsg( 'справочник', 'Не указан код справочника',
'Используйте формат {{ справочник | <var>код справочника</var>'
.. ' | <var>параметры (зависят от справочника)</var> }}' )
end
local url = string.match( what, '^https?://([^/]+)/' )
if url then
what = url
end
local descr = list[mw.ustring.lower( what )]
if not descr then
return tools.errorMsg( 'справочник', 'Неизвестный код справочника',
'Используйте формат {{ справочник | <var>код справочника</var>'
.. ' | <var>параметры (зависят от справочника)</var> }}' )
end
local min, max = descr.min or 1, descr.max or 1
-- #args для frame работает некорректно, поэтому проверяем существование args[min] и несуществование args[max+1]
-- if ( args[2+min] or '' ) == '' or ( args[3+max] or '' ) ~= '' then
if #args < min+1 or #args > max+1 then
return tools.errorMsg( 'справочник', 'Неверное число параметров',
'Для этого типа справочника параметров должно быть от ' .. min .. ' до ' .. max )
end
local res, err = descr.func( args, descr.pars )
if res then
if descr.ctg then
res = res .. '[[Категория:' .. descr.ctg .. ']]'
end
global.add( 'gInfo', res )
else
return tools.errorMsg( 'справочник', err or 'Ошибка при обработке' )
end
end
return pp