Модуль:Документ
Перейти к навигации
Перейти к поиску
Для документации этого модуля может быть создана страница Модуль:Документ/doc
local pp = {}
local global = mw.ext.luaglobal;
tools = require( 'Модуль:Tools' ) -- нужен в doctools
local doctools = require 'Module:DocTools'
global.strict( true )
pp[''] = function ( frame )
local Args, tmp = tools.checkargs( frame:getParent().args,
{ ['номер'] = 'б/н', ['дата'] = '', ['вид'] = '', ['вид+'] = true,
['реверс'] = 'нет', ['структура'] = 'иерархия',
['комментарий'] = true, ['сноска'] = true, ['каждому'] = true,
['содержание'] = true, ['заголовок'] = true, ['выключен'] = true,
['публикация'] = true, ['источник'] = true, ['архив'] = true, } )
local errorDateAdvice = 'Используйте формат даты '
.. '«<var>ЧЧ</var>.<var>ММ</var>.<var>ГГГГ</var>» или '
.. '«<var>ММ</var>.<var>ГГГГ</var>» или «<var>ГГГГ</var>»'
if not Args then
return tools.errorMsg( 'Документ', 'Неизвестный параметр «' .. tmp .. '»', '' )
end
local gDoc = global.get( 'gDoc' )
if gDoc then
return tools.errorMsg ( 'Документ', 'Повторное использование шаблона «Документ»' )
end
local docOff = Args['выключен']
if mw.ustring.lower( docOff or '' ) == 'да' then
docOff = 'Формирование сведений о персоналиях на основании данного документа отключено'
end
local docName = mw.title.getCurrentTitle().text
local name, idx, part, parts = mw.ustring.match( docName, "^(.+) (%([IVX]+%)) [—−-] часть (%d+) из (%d+)$" )
if not name then
name, part, parts = mw.ustring.match( docName, "^(.+) [—−-] часть (%d+) из (%d+)$" )
end
if not name then
name, idx = mw.ustring.match( docName, "^(.+) (%([IVX]+%))$" )
end
if idx then
docName = 'Имеются [' .. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
prefix = name,
namespace = 3008,
} ) )
.. ' другие документы] с такими же реквизитами.'
name = name .. ' ' .. idx
else
docName = nil
end
if parts then
docName = 'Из-за большого объема настоящий документ разделен на ['
.. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
prefix = name,
namespace = 3008,
} ) )
.. ' несколько частей]. ' .. ( docName or '' )
end
local docNumber = Args['номер']
local docDate = tools.parseDate( Args['дата'] )
if not docDate then
return tools.errorMsg ( 'Документ', 'Неправильный формат даты документа', errorDateAdvice )
end
local types = mw.loadData( 'Модуль:Документ/Виды документов' )
local docType = tools.db( types, tools.noPhrase( Args['вид'] ) )
if not docType then
return tools.errorMsg ( 'Документ',
'Параметр «вид» должен указывать один из допустимых видов документов',
'Перечень допустимых видов документов см. [[Project:Виды документов|тут]]' )
end
local docTypeName = docType.hdr
if Args['вид+'] then
docTypeName = docTypeName .. ' ' .. Args['вид+']
end
local defSort = docType.sort .. string.sub(docDate .. '----------', 1, 7 )
if mw.ustring.len( docNumber ) < 5 then
defSort = defSort .. mw.ustring.sub( '----' .. docNumber, -4, -1 )
end
frame:callParserFunction{ name = 'DEFAULTSORT', args = defSort }
local docReversOld = mw.ustring.lower( Args['реверс'] )
if docReversOld == 'да' then
docReversOld = true
elseif docReversOld == 'нет' then
docReversOld = false
else
return tools.errorMsg ( 'Документ',
'Параметр «реверс» может иметь значения «да» или «нет»',
'Значение «да» указывается для документов, восстановленных по '
.. ' вторичным источникам' )
end
--[==[
--]==]
local docRevers = mw.ustring.lower( Args['содержание'] or '' )
if docRevers == '' then
if docReversOld then
docRevers = 'реверс'
else
docRevers = 'текст'
end
end
local docOrigin = {
['реверс'] = 'содержание документа восстановлено на основании биографических справок',
['извлечение'] = 'извлечение из документа, приводится в изложении',
['текст'] = 'содержание документа приводится в изложении',
}
docOrigin = docOrigin[docRevers]
if not docOrigin then
return tools.errorMsg ( 'Документ',
'Параметр «содержание» может иметь значения «реверс», «извлечение» или «текст»',
'Значение «реверс» указывается для документов, восстановленных по'
.. ' биографическим справкам, «извлечение» или «текст» — при '
.. ' при воспроизведении текста документа' )
end
local docStream = mw.ustring.lower( Args['структура'] )
if docStream == 'поток' then
docStream = true
elseif docStream == 'иерархия' then
docStream = false
else
return tools.errorMsg ( 'Документ',
'Параметр «структура» может иметь значения «поток» или «иерархия»',
'Значение «поток» указывается для документов, в которых рубрики '
.. ' не образуют вложенность' )
end
local out = ''
if docName then
out = '<p class="nkvd-doc-parts>' .. docName .. '</p>'
end
if docOff then
out = out .. '<p class="nkvd-doc-off>' .. docOff .. '</p>[[Категория:Выключенные документы]]'
end
out = out .. [[
<p class="nkvd-doc-header">]] .. docTypeName .. [[</p>
<p class="nkvd-doc-attr">от <b>]] .. tools.reparseDate( docDate ) .. [[</b>
№ <b>]] .. docNumber .. [[</b></p>
]]
if Args['заголовок'] then
out = out .. '<p class="nkvd-doc-name">' .. Args['заголовок'] .. '</p>'
end
out = out .. [[
<p class="nkvd-doc-subheader">(]] .. docOrigin
out = out .. ')' .. doctools.endRecord( Args )
local cargo = frame:expandTemplate{ title = 'Таблица документов' }
global.set( 'gDoc', {
off = docOff ~= nil,
date = docDate,
stream = docStream,
revers = true, -- docRevers == 'реверс', -- менее жесткие проверки -- хотя для модуля Персона тут всегда было TRUE
notEmpty = false, -- «Была персона» для иерархии
publication = Args['публикация'],
source = Args['источник'],
archive = Args['архив'],
n2h = {}, -- number to header
h2v = {}, -- header to value
Log = ''
} )
if Args['каждому'] then
global.set( 'gUniref-Документ', Args['каждому'] )
end
if string.len(docDate) < 4 then
tmp = 'без даты'
elseif string.len(docDate) == 4 then
tmp = 'за ??.' .. docDate
else
tmp = ' за ' .. string.sub( docDate, 6, 7 ) .. '.' .. string.sub( docDate, 1, 4 )
end
out = out .. '[[Категория:' .. docType.ctg .. ' ' .. tmp .. ']]'
return out
end
--[[------------------------------------------------------------------------]]--
pp['Отладка'] = function ( frame )
local Doc = global.get( 'gDoc' )
local x = mw.dumpObject( Doc )
Doc.Log = ''
global.set( 'gDoc', Doc )
return x
end
return pp