Модуль:Документ

Материал из Кадровый состав НКВД 1935-1939
Перейти к навигации Перейти к поиску

Для документации этого модуля может быть создана страница Модуль:Документ/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 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 docOff then
		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