Модуль:Документ: различия между версиями

Материал из Кадровый состав НКВД 1935-1939
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
(не показано 16 промежуточных версий этого же участника)
Строка 2: Строка 2:
local global = mw.ext.luaglobal;
local global = mw.ext.luaglobal;
tools = require( 'Модуль:Tools' )  -- нужен в doctools
tools = require( 'Модуль:Tools' )  -- нужен в doctools
refTools = require( 'Модуль:RefTools' )  -- нужен в doctools
local doctools = require 'Module:DocTools'
local doctools = require 'Module:DocTools'
global.strict( true )
global.strict( true )
Строка 9: Строка 10:
local Args, tmp = tools.checkargs( frame:getParent().args,
local Args, tmp = tools.checkargs( frame:getParent().args,
         { ['номер'] = '', ['дата'] = '', ['вид'] = '', ['вид+'] = true,
         { ['номер'] = '', ['дата'] = '', ['вид'] = '', ['вид+'] = true,
--            ['реверс'] = 'нет',
-- 26.07.2017 отказываемся от потока           ['структура'] = 'иерархия',
            ['структура'] = 'иерархия',  
             ['комментарий'] = true, ['сноска'] = true, ['каждому'] = true,
             ['комментарий'] = true, ['сноска'] = true, ['каждому'] = true,  
             ['содержание'] = 'текст', ['заголовок'] = true, ['выключен'] = true,
             ['содержание'] = true, ['заголовок'] = true, ['выключен'] = true,  
             ['публикация'] = true, ['источник'] = true, ['архив'] = true,
             ['публикация'] = true, ['источник'] = true, ['архив'] = true,  
             ['подвиг'] = true, ['указ'] = true, } )
             ['подвиг'] = true, ['указ'] = true, } )
local errorDateAdvice = 'Используйте формат даты '
local errorDateAdvice = 'Используйте формат даты '
Строка 21: Строка 21:
return tools.errorMsg( 'Документ', 'Неизвестный параметр «' .. tmp .. '»', '' )
return tools.errorMsg( 'Документ', 'Неизвестный параметр «' .. tmp .. '»', '' )
     end
     end
       
 
 
local gDoc = global.get( 'gDoc' )
local gDoc = global.get( 'gDoc' )
if gDoc then
if gDoc then
Строка 32: Строка 32:
end
end


local docName = mw.title.getCurrentTitle().text
local DocName = mw.title.getCurrentTitle().text
local name, idx, part, parts = mw.ustring.match( docName, "^(.+) (%([IVX]+%)) [—−-] часть (%d+) из (%d+)$" )
local name, idx, part, parts = mw.ustring.match( DocName, "^(.+) (%([IVX]+%)) [—−-] часть (%d+) из (%d+)$" )
if not name then
if not name then
name, part, parts = mw.ustring.match( docName, "^(.+) [—−-] часть (%d+) из (%d+)$" )
name, part, parts = mw.ustring.match( DocName, "^(.+) [—−-] часть (%d+) из (%d+)$" )
end
end
if not name then
if not name then
name, idx = mw.ustring.match( docName, "^(.+) (%([IVX]+%))$" )
name, idx = mw.ustring.match( DocName, "^(.+) (%([IVX]+%))$" )
end
end
local DocInfo
if idx then
if idx then
docName = 'Имеются [' .. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
DocInfo = 'Имеются [' .. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
prefix = name,
prefix = name,
namespace = 3008,
namespace = 3008,
Строка 47: Строка 48:
.. ' другие документы] с такими же реквизитами.'
.. ' другие документы] с такими же реквизитами.'
name = name .. ' ' .. idx
name = name .. ' ' .. idx
else
docName = nil
end
end
if parts then
if parts then
docName = 'Из-за большого объема настоящий документ разделен на ['  
DocInfo = 'Из-за большого объема настоящий документ разделен на ['
.. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
.. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
prefix = name,
prefix = name,
namespace = 3008,
namespace = 3008,
} ) )
} ) )
.. ' несколько частей]. ' .. ( docName or '' )
.. ' несколько частей]. ' .. ( DocInfo or '' )
end
end
 
local docNumber = Args['номер']
local docNumber = Args['номер']
local docDate =  Args['дата']
if docNumber == '~' then
docNumber = mw.ustring.match( DocName, ' № ([^ ]+) ' ) or mw.ustring.match( DocName, ' № ([^ ]+)$' )
if not docNumber and not string.find(DocName, '№', 1, true ) then
docNumber = '-'
end
end
if docDate == '~' then
docDate = mw.ustring.match( DocName, ' от (%d%d%.%d%d%.%d%d%d%d)' )
end
if not docDate or not docNumber then
return tools.errorMsg ( 'Документ', 'Для даты или номера документа использовано значение «~», но заголовок разобрать не удалось' )
end
if docNumber == '-' then
if docNumber == '-' then
docNumber = ''
docNumber = ''
end
end


local docDate = tools.parseDate( Args['дата'] )
docDate = tools.parseDate( docDate )
if not docDate then
if not docDate then
return tools.errorMsg ( 'Документ', 'Неправильный формат даты документа', errorDateAdvice )
return tools.errorMsg ( 'Документ', 'Неправильный формат даты документа', errorDateAdvice )
Строка 71: Строка 85:
local types = mw.loadData( 'Модуль:Документ/Виды документов' )
local types = mw.loadData( 'Модуль:Документ/Виды документов' )
local docType = tools.db( types, tools.noPhrase( Args['вид'] ) )
local docType = tools.db( types, tools.noPhrase( Args['вид'] ) )
 
if not docType then
if not docType then
return tools.errorMsg ( 'Документ',  
return tools.errorMsg ( 'Документ',
'Параметр «вид» должен указывать один из допустимых видов документов',  
'Параметр «вид» должен указывать один из допустимых видов документов',
'Перечень допустимых видов документов см. [[Project:Виды документов|тут]]' )
'Перечень допустимых видов документов см. [[Модуль:Документ/Виды документов|тут]]' )
end
end
local docTypeName = docType.hdr
local docTypeName = docType.hdr
if Args['вид+'] then
local vovCtg
docTypeName = docTypeName .. ' ' .. Args['вид+']
tmp = Args['вид+']
if tmp then
if tmp == '~' then
tmp = mw.ustring.match( DocName, '^Приказ войскам ([^№]+) №' )
if not tmp then
local weapon
weapon, tmp = mw.ustring.match( DocName, '^Приказ командующего (артиллерией) ([^№]+) №' )
if not weapon then
weapon, tmp = mw.ustring.match( DocName, '^Приказ командующего (бронетанковыми и механизированными войсками) ([^№]+) №' )
end
if not weapon then
return tools.errorMsg ( 'Документ', 'Для параметра «вид+» использовано значение «~», но заголовок разобрать не удалось' )
end
docType = tools.db( types, tools.noPhrase( 'приказ командующего' ) )
docTypeName = docType.hdr
vovCtg = 'Приказы ' .. tmp
tmp = weapon .. ' ' .. tmp
else
vovCtg = 'Приказы ' .. tmp
end
end
docTypeName = docTypeName .. ' ' .. tmp
end
end
--- local defSort = docType.sort .. string.sub(docDate .. '----------', 1, 7 )
--- local defSort = docType.sort .. string.sub(docDate .. '----------', 1, 7 )
Строка 85: Строка 120:
--- defSort = defSort .. mw.ustring.sub( '----' .. docNumber, -4, -1 )
--- defSort = defSort .. mw.ustring.sub( '----' .. docNumber, -4, -1 )
--- end
--- end
local defSort = string.sub(docDate .. '----------', 1, 10 )
 
frame:callParserFunction{ name = 'DEFAULTSORT', args = defSort .. mw.title.getCurrentTitle().text }
-- local defSort = string.sub(docDate .. '----------', 1, 10 )
local docReversOld = false -- mw.ustring.lower( Args['реверс'] )
local defSort = string.char( 0x30 + tonumber( '0' .. string.sub( docDate, 9, 10 ) ) )
-- if docReversOld == 'да' then
frame:callParserFunction{ name = 'DEFAULTSORT', args = ' ' .. defSort .. mw.title.getCurrentTitle().text }
-- docReversOld = true
 
-- elseif docReversOld == 'нет' then
local docRevers = mw.ustring.lower( Args['содержание'] )
-- 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 = {
local docOrigin = {
['реверс'] =    'содержание документа восстановлено на основании биографических справок',
['реверс'] =    'содержание документа восстановлено на основании биографических справок',
Строка 115: Строка 134:
docOrigin = docOrigin[docRevers]
docOrigin = docOrigin[docRevers]
if not docOrigin then
if not docOrigin then
return tools.errorMsg ( 'Документ',  
return tools.errorMsg ( 'Документ',
'Параметр «содержание» может иметь значения «реверс», «извлечение» или «текст»',  
'Параметр «содержание» может иметь значения «реверс», «извлечение» или «текст»',
'Значение «реверс» указывается для документов, восстановленных по'
'Значение «реверс» указывается для документов, восстановленных по'
.. ' биографическим справкам, «извлечение» или «текст» — при '
.. ' биографическим справкам, «извлечение» или «текст» — при '
Строка 122: Строка 141:
end
end


local docStream = mw.ustring.lower( Args['структура'] )
-- 26.07.2017 отказываемся от потока local docStream = mw.ustring.lower( Args['структура'] )
local docStream = 'иерархия'
if docStream == 'поток' then
if docStream == 'поток' then
docStream = true
docStream = true
Строка 128: Строка 148:
docStream = false
docStream = false
else
else
return tools.errorMsg ( 'Документ',  
return tools.errorMsg ( 'Документ',
'Параметр «структура» может иметь значения «поток» или «иерархия»',  
'Параметр «структура» может иметь значения «поток» или «иерархия»',
'Значение «поток» указывается для документов, в которых рубрики '
'Значение «поток» указывается для документов, в которых рубрики '
.. ' не образуют вложенность' )
.. ' не образуют вложенность' )
end
end
 
local out = ''
local out = ''
if docName then
if DocInfo then
out = '<p class="nkvd-doc-parts>' .. docName .. '</p>'
out = '<p class="nkvd-doc-parts>' .. DocInfo .. '</p>'
end
end
if docOff then
if docOff then
out = out .. '<p class="nkvd-doc-off>' .. docOff .. '</p>[[Категория:Выключенные документы]]'
out = out .. '<p class="nkvd-doc-off>' .. docOff .. '</p>[[Категория:Выключенные документы]]'
end
end
if vovCtg then
out = out .. '[[Категория:' .. vovCtg .. '|' .. string.sub(docDate,4,4) .. docDate .. ']]'
end
local ukdate = Args['указ']
local ukdate = Args['указ']
if ukdate then
if ukdate then
Строка 148: Строка 172:
.. tools.reparseDate( ukdate ) .. [[</b></p>]]
.. tools.reparseDate( ukdate ) .. [[</b></p>]]
end
end
 
out = out .. [[
out = out .. [[
<p class="nkvd-doc-header">]] .. docTypeName .. [[</p>]]
<p class="nkvd-doc-header">]] .. docTypeName .. [[</p>]]
Строка 156: Строка 180:
tmp = {}
tmp = {}
if docNumber ~= '' then
if docNumber ~= '' then
tmp[#tmp+1] =  [[№ <b>]] .. docNumber .. [[</b>]]  
tmp[#tmp+1] =  [[№ <b>]] .. docNumber .. [[</b>]]
if docType.ctg == 'Указы Президиума Верховного Совета СССР' and string.sub( docNumber, 1, 2 ) == '60' then
tmp[#tmp] = '<abbr title="До середины 1943 года указы не имели собственной нумерации; указан номер канцелярского дела с материалами указа.">' .. tmp[#tmp] .. '</abbr>'
end
end
end
if docDate then
if docDate then
tmp[#tmp+1] =  [[<b>]] .. tools.reparseDate( docDate ) .. [[</b>]]
tmp[#tmp+1] =  [[<b>]] .. tools.textDate( docDate ) .. [[</b>]]
end
end
out = out .. table.concat( tmp, ', &nbsp; ' ) .. [[</p>
out = out .. table.concat( tmp, ', &nbsp; ' ) .. [[</p>
Строка 181: Строка 208:
<p class="nkvd-doc-subheader">(]] .. docOrigin
<p class="nkvd-doc-subheader">(]] .. docOrigin
out = out .. ')' .. doctools.endRecord( Args )
out = out .. ')' .. doctools.endRecord( Args )
 
local cargo = frame:expandTemplate{ title = 'Таблица документов' }
local cargo = frame:expandTemplate{ title = 'Таблица документов' }
 
global.set( 'gDoc', {  
global.set( 'gDoc', {
off = docOff ~= nil,
off = docOff ~= nil,
date = docDate,  
date = docDate,
stream = docStream,
stream = docStream,
revers = true, -- docRevers == 'реверс', -- менее жесткие проверки -- хотя для модуля Персона тут всегда было TRUE
revers = true, -- docRevers == 'реверс', -- менее жесткие проверки -- хотя для модуля Персона тут всегда было TRUE
Строка 199: Строка 226:
Log = ''
Log = ''
} )
} )
if Args['каждому'] then  
-- if Args['каждому'] then
global.set( 'gUniref-Документ', Args['каждому'] )
-- global.set( 'gUniref-Документ', Args['каждому'] )
end
-- end
global.set( 'gUniref-Документ', refTools.collect( Args, 'каждому' ) )
 
if docDate == '' then
if docDate == '' then
tmp = 'без даты'
tmp = 'без даты'
Строка 211: Строка 239:
end
end
out = out .. '[[Категория:' .. docType.ctg .. ' ' .. tmp .. ']]'
out = out .. '[[Категория:' .. docType.ctg .. ' ' .. tmp .. ']]'
return out
return out
end
end


Строка 221: Строка 249:
Doc.Log = ''
Doc.Log = ''
global.set( 'gDoc', Doc )
global.set( 'gDoc', Doc )
return x
return x
end
end
return pp
return pp

Версия от 12:06, 6 октября 2020

Для документации этого модуля может быть создана страница Модуль:Документ/doc

local pp = {}
local global = mw.ext.luaglobal;
tools = require( 'Модуль:Tools' )  -- нужен в doctools
refTools = require( 'Модуль:RefTools' )  -- нужен в doctools
local doctools = require 'Module:DocTools'
global.strict( true )


pp[''] = function ( frame )
	local Args, tmp = tools.checkargs( frame:getParent().args,
        { ['номер'] = '', ['дата'] = '', ['вид'] = '', ['вид+'] = true,
-- 26.07.2017 отказываемся от потока            ['структура'] = 'иерархия',
            ['комментарий'] = 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
	local DocInfo
	if idx then
		DocInfo = 'Имеются [' .. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
				prefix = name,
				namespace = 3008,
			} ) )
			.. ' другие документы] с такими же реквизитами.'
		name = name .. ' ' .. idx
	end
	if parts then
		DocInfo = 'Из-за большого объема настоящий документ разделен на ['
			.. tostring( mw.uri.fullUrl( 'Special:PrefixIndex', {
				prefix = name,
				namespace = 3008,
			} ) )
			.. ' несколько частей]. ' .. ( DocInfo or '' )
	end

	local docNumber = Args['номер']
	local docDate =  Args['дата']
	if docNumber == '~' then
		docNumber = mw.ustring.match( DocName, ' № ([^ ]+) ' ) or mw.ustring.match( DocName, ' № ([^ ]+)$' )
		if not docNumber and not string.find(DocName, '№', 1, true ) then
			docNumber = '-'
		end
	end
	if docDate == '~' then
		docDate = mw.ustring.match( DocName, ' от (%d%d%.%d%d%.%d%d%d%d)' )
	end
	if not docDate or not docNumber then
		return tools.errorMsg ( 'Документ', 'Для даты или номера документа использовано значение «~», но заголовок разобрать не удалось' )
	end


	if docNumber == '-' then
		docNumber = ''
	end

	docDate = tools.parseDate( docDate )
	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 ( 'Документ',
			'Параметр «вид» должен указывать один из допустимых видов документов',
			'Перечень допустимых видов документов см. [[Модуль:Документ/Виды документов|тут]]' )
	end
	local docTypeName = docType.hdr
	local vovCtg
	tmp = Args['вид+']
	if tmp then
		if tmp == '~' then
			tmp = mw.ustring.match( DocName, '^Приказ войскам ([^№]+) №' )
			if not tmp then
				local weapon
				weapon, tmp = mw.ustring.match( DocName, '^Приказ командующего (артиллерией) ([^№]+) №' )
				if not weapon then
					weapon, tmp = mw.ustring.match( DocName, '^Приказ командующего (бронетанковыми и механизированными войсками) ([^№]+) №' )
				end
				if not weapon then
					return tools.errorMsg ( 'Документ', 'Для параметра «вид+» использовано значение «~», но заголовок разобрать не удалось' )
				end
				docType = tools.db( types, tools.noPhrase( 'приказ командующего' ) )
				docTypeName = docType.hdr
				vovCtg = 'Приказы ' .. tmp
				tmp = weapon .. ' ' .. tmp
			else
				vovCtg = 'Приказы ' .. tmp
			end
		end
		docTypeName = docTypeName .. ' ' .. tmp
	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

--	local defSort = string.sub(docDate .. '----------', 1, 10 )
	local defSort = string.char( 0x30 + tonumber( '0' .. string.sub( docDate, 9, 10 ) ) )
	frame:callParserFunction{ name = 'DEFAULTSORT', args = ' ' .. defSort .. mw.title.getCurrentTitle().text }

	local docRevers = mw.ustring.lower( Args['содержание'] )

	local docOrigin = {
		['реверс'] =     'содержание документа восстановлено на основании биографических справок',
		['извлечение'] = 'извлечение из документа, приводится в изложении',
		['текст'] =      'содержание документа приводится в изложении',
	}
	docOrigin = docOrigin[docRevers]
	if not docOrigin then
		return tools.errorMsg ( 'Документ',
			'Параметр «содержание» может иметь значения «реверс», «извлечение» или «текст»',
			'Значение «реверс» указывается для документов, восстановленных по'
				.. ' биографическим справкам, «извлечение» или «текст» — при '
				.. ' при воспроизведении текста документа' )
	end

-- 26.07.2017 отказываемся от потока 	local docStream = mw.ustring.lower( Args['структура'] )
	local docStream = 'иерархия'
	if docStream == 'поток' then
		docStream = true
	elseif docStream == 'иерархия' then
		docStream = false
	else
		return tools.errorMsg ( 'Документ',
			'Параметр «структура» может иметь значения «поток» или «иерархия»',
			'Значение «поток» указывается для документов, в которых рубрики '
				.. ' не образуют вложенность' )
	end

	local out = ''
	if DocInfo then
		out = '<p class="nkvd-doc-parts>' .. DocInfo .. '</p>'
	end
	if docOff then
		out = out .. '<p class="nkvd-doc-off>' .. docOff .. '</p>[[Категория:Выключенные документы]]'
	end
	if vovCtg then
		out = out .. '[[Категория:' .. vovCtg .. '|' .. string.sub(docDate,4,4) .. docDate .. ']]'
	end

	local ukdate = Args['указ']
	if ukdate then
		ukdate = tools.parseDate( ukdate )
		out = out .. [[
<p class="nkvd-griph">Утвержден Указом Президиума Верховного Совета СССР от <b>]]
			.. tools.reparseDate( ukdate ) .. [[</b></p>]]
	end

	out = out .. [[
<p class="nkvd-doc-header">]] .. docTypeName .. [[</p>]]
	if docDate ~= '' or docNumber ~= '' then
		out = out .. [[
<p class="nkvd-doc-attr">]]
		tmp = {}
		if docNumber ~= '' then
			tmp[#tmp+1] =  [[№ <b>]] .. docNumber .. [[</b>]]
			if docType.ctg == 'Указы Президиума Верховного Совета СССР' and string.sub( docNumber, 1, 2 ) == '60' then
				tmp[#tmp] = '<abbr title="До середины 1943 года указы не имели собственной нумерации; указан номер канцелярского дела с материалами указа.">' .. tmp[#tmp] .. '</abbr>'
			end
		end
		if docDate then
			tmp[#tmp+1] =  [[<b>]] .. tools.textDate( docDate ) .. [[</b>]]
		end
		out = out .. table.concat( tmp, ', &nbsp; ' ) .. [[</p>
]]
	end
	if Args['заголовок']  then
		out = out .. '<p class="nkvd-doc-name">' .. Args['заголовок'] .. '</p>'
	end
	local source, podvig = Args['источник'], Args['подвиг']
	tmp = ''
	if podvig then
		if string.sub( podvig, -1, -1 ) == '+' then
			tmp = '[[Категория:Наградные листы просмотрены]]'
			podvig = string.sub( podvig, 1, -2 )
		else
		end
		podvig = '«[http://podvignaroda.ru/?#id=' .. podvig
			.. ' Подвиг народа]»'
	end
	out = out .. tmp .. [[
<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 = source,
			podvig = podvig,
			ukdate = ukdate,
			archive = Args['архив'],
			n2h = {},      -- number to header
			h2v = {},      -- header to value
			Log = ''
		} )
--	if Args['каждому'] then
--		global.set( 'gUniref-Документ', Args['каждому'] )
--	end
	global.set( 'gUniref-Документ', refTools.collect( Args, 'каждому' ) )

	if docDate == '' 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