Модуль:Конец анкеты/ФИО — различия между версиями

Материал из Кадровый состав НКВД 1935-1939
Перейти к: навигация, поиск
 
 
Строка 4: Строка 4:
  
  
local function printattr( onefio, n ) -- должна печатать "хвосты" (индекс тезки, предупрежедние об отсутствии перенаправления и стандартное завершение параметра персоны)
+
local function printattr( onefio, n ) -- должна печатать "хвосты" (индекс тезки, предупреждение об отсутствии перенаправления и стандартное завершение параметра персоны)
 
local out = {}
 
local out = {}
if onefio[4] ~= '' then
+
if onefio.d  then
out = { ' <span class="nkvd-idx">' .. onefio[4] .. '</span>' }
+
out = { ' <span class="nkvd-idx">' .. onefio.d .. '</span>' }
 
end
 
end
 
if n ~= 1 then
 
if n ~= 1 then
Строка 22: Строка 22:
 
end
 
end
 
end
 
end
table.insert( out, tools.commonParams( onefio[5], onefio[6], onefio[7] ) )
+
table.insert( out, tools.commonParams( onefio.a, onefio.r, onefio.s ) )
 
return table.concat( out )
 
return table.concat( out )
 
end
 
end
Строка 29: Строка 29:
 
local function printFio( fio, n )
 
local function printFio( fio, n )
 
local onefio = fio[n]
 
local onefio = fio[n]
local out = { '<b>' .. onefio[1] .. '</b>' }
+
local out = { '<b>' .. onefio.l .. '</b>' }
 
if onefio.group == 'F' then
 
if onefio.group == 'F' then
 
table.insert( out, printattr( onefio, n )  )
 
table.insert( out, printattr( onefio, n )  )
 
local list = {}
 
local list = {}
 
for i = 1, onefio.size-1 do
 
for i = 1, onefio.size-1 do
table.insert( list, '<b>' .. fio[n+i][1] .. '</b>' .. printattr( fio[n+i], 2 ) )
+
table.insert( list, '<b>' .. fio[n+i].l .. '</b>' .. printattr( fio[n+i], 2 ) )
 
end
 
end
 
table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
 
table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
 
end
 
end
if onefio[2] ~= '' then
+
if onefio.i ~= '' then
table.insert( out, ', ' .. onefio[2] )
+
table.insert( out, ', ' .. onefio.i )
 
if onefio.group == 'I' then
 
if onefio.group == 'I' then
 
table.insert( out, printattr( onefio, n )  )
 
table.insert( out, printattr( onefio, n )  )
 
local list = {}
 
local list = {}
 
for i = 1, onefio.size-1 do
 
for i = 1, onefio.size-1 do
table.insert( list, fio[n+i][2] .. printattr( fio[n+i], 2 ) )
+
table.insert( list, fio[n+i].i .. printattr( fio[n+i], 2 ) )
 
end
 
end
 
table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
 
table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
 
end
 
end
if onefio[3] ~= '' then
+
if onefio.o ~= '' then
table.insert( out, ' ' .. onefio[3] )
+
table.insert( out, ' ' .. onefio.o )
 
if onefio.group == 'O' or onefio.group == 'IO' then
 
if onefio.group == 'O' or onefio.group == 'IO' then
 
table.insert( out, printattr( onefio, n )  )
 
table.insert( out, printattr( onefio, n )  )
Строка 55: Строка 55:
 
for i = 1, onefio.size-1 do
 
for i = 1, onefio.size-1 do
 
if onefio.group == 'O' then
 
if onefio.group == 'O' then
table.insert( list, fio[n+i][3] .. printattr( fio[n+i], 2 ) )
+
table.insert( list, fio[n+i].o .. printattr( fio[n+i], 2 ) )
 
else
 
else
 
table.insert( list,
 
table.insert( list,
fio[n+i][2] .. ' ' .. fio[n+i][3] .. printattr( fio[n+i], 2 ) )
+
fio[n+i].i .. ' ' .. fio[n+i].o .. printattr( fio[n+i], 2 ) )
 
end
 
end
 
end
 
end
Строка 72: Строка 72:
  
  
return function (gOut) -- return gender, fioForJournals OR nil, error
+
-- return function (gOut) -- return gender, fioForJournals OR nil, error
 +
return function () -- return gender, text, where OR nil, error
 
local gFio =  global.get( 'gFIO' )
 
local gFio =  global.get( 'gFIO' )
 
local out = {}
 
local out = {}
Строка 80: Строка 81:
 
local gender = global.get( 'gGender' ) or 0
 
local gender = global.get( 'gGender' ) or 0
 
local fa, im, ot, idx, tmp
 
local fa, im, ot, idx, tmp
local fioForJournals = {}
+
-- local fioForJournals = {}
 +
-- local where = {}
 
local lastFio = 1
 
local lastFio = 1
 
for i, fio in ipairs( gFio ) do
 
for i, fio in ipairs( gFio ) do
fa, im, ot, idx = unpack( fio, 1, 4 )
+
-- fa, im, ot, idx = unpack( fio, 1, 4 )
 +
fa, im, ot, idx = fio.l, (fio.i or ''), (fio.o or ''), (fio.d or '')
 +
-- where[i] = 'nLast="' .. fa .. '" AND nFirst' .. tools.cargoString( fio.f )
 +
-- .. ' AND nMiddle' .. tools.cargoString( fio.m )
 +
-- .. ' AND nDisambig' .. tools.cargoString( idx ) .. ' AND nPrecision IS NULL'
  
 
tmp = 0
 
tmp = 0
Строка 107: Строка 113:
 
fio.fiot = fio.fiot .. ' ' .. idx
 
fio.fiot = fio.fiot .. ' ' .. idx
 
end
 
end
table.insert( fioForJournals, fio.fiot )
+
-- table.insert( fioForJournals, fio.fiot )
 
if i ~= 1 then
 
if i ~= 1 then
if fa == gFio[lastFio][1] then
+
if fa == gFio[lastFio].l then
 
tmp = 'F'
 
tmp = 'F'
 
else
 
else
 
tmp = ''
 
tmp = ''
 
end
 
end
if im == gFio[lastFio][2] then
+
if im == gFio[lastFio].i then
 
tmp = tmp .. 'I'
 
tmp = tmp .. 'I'
 
end
 
end
if ot == gFio[lastFio][3] then
+
if ot == gFio[lastFio].o then
 
tmp = tmp .. 'O'
 
tmp = tmp .. 'O'
 
end
 
end
Строка 124: Строка 130:
 
or gFio[lastFio].group == 'I' and tmp == 'FO'
 
or gFio[lastFio].group == 'I' and tmp == 'FO'
 
or gFio[lastFio].group == 'O' and tmp == 'FI'
 
or gFio[lastFio].group == 'O' and tmp == 'FI'
or gFio[lastFio].group == 'IO' and fa == gFio[lastFio][1] then -- F FI FO
+
or gFio[lastFio].group == 'IO' and fa == gFio[lastFio].l then -- F FI FO
 
gFio[lastFio].size = gFio[lastFio].size + 1
 
gFio[lastFio].size = gFio[lastFio].size + 1
 
else
 
else
Строка 163: Строка 169:
 
out = out .. 'Пол ' .. genders[gender] .. '. '
 
out = out .. 'Пол ' .. genders[gender] .. '. '
 
end
 
end
table.insert( gOut, out )
+
-- table.insert( gOut, out )
return gender, fioForJournals
+
-- return gender, fioForJournals
 +
-- where = table.concat( where, ' OR ' )
 +
-- return gender, out, where
 +
return gender, out
 
end
 
end

Текущая версия на 00:49, 27 февраля 2017

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

local global = mw.ext.luaglobal
local tools = require( 'Модуль:Tools' )
local genders = { 'мужской', 'женский', 'странный' }


local function printattr( onefio, n ) -- должна печатать "хвосты" (индекс тезки, предупреждение об отсутствии перенаправления и стандартное завершение параметра персоны)
	local out = {}
	if onefio.d  then
		out = { ' <span class="nkvd-idx">' .. onefio.d .. '</span>' }
	end
	if n ~= 1 then
		if mw.title.new( onefio.fiot ).id == 0 then
			table.insert( out, ' [' .. tostring( mw.uri.fullUrl( onefio.fiot, {
					action = 'edit',
					preload = 'Template:Redirect_pattern',
					editintro = 'Template:Redirect_editnotice',
					['preloadparams[]'] = mw.title.getCurrentTitle().prefixedText
					} ) )
				.. ' <i class="fa fa-warning fa-lg" style="color: #f05f1a;"'
				.. ' title="Создайте страницу-перенаправление для ссылок на псевдоним"></i>]'
				.. '[[Категория:Персоналии с псевдонимами без перенаправления]]' )
		end
	end
	table.insert( out, tools.commonParams( onefio.a, onefio.r, onefio.s ) )
	return table.concat( out )
end


local function printFio( fio, n )
	local onefio = fio[n]
	local out = { '<b>' .. onefio.l .. '</b>' }
	if onefio.group == 'F' then
		table.insert( out, printattr( onefio, n )  )
		local list = {}
		for i = 1, onefio.size-1 do
			table.insert( list, '<b>' .. fio[n+i].l .. '</b>' .. printattr( fio[n+i], 2 ) )
		end
		table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
	end
	if onefio.i ~= '' then
		table.insert( out, ', ' .. onefio.i )
		if onefio.group == 'I' then
			table.insert( out, printattr( onefio, n )  )
			local list = {}
			for i = 1, onefio.size-1 do
				table.insert( list, fio[n+i].i .. printattr( fio[n+i], 2 ) )
			end
			table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
		end
		if onefio.o ~= '' then
			table.insert( out, ' ' .. onefio.o )
			if onefio.group == 'O' or onefio.group == 'IO' then
				table.insert( out, printattr( onefio, n )  )
				local list = {}
				for i = 1, onefio.size-1 do
					if onefio.group == 'O' then
						table.insert( list, fio[n+i].o .. printattr( fio[n+i], 2 ) )
					else
						table.insert( list,
							fio[n+i].i .. ' ' .. fio[n+i].o .. printattr( fio[n+i], 2 ) )
					end
				end
				table.insert( out, ' (' .. table.concat( list, ', ' ) .. ')' )
			end
		end
	end
	if not onefio.group then
		table.insert( out, printattr( onefio, n )  )
	end
	return table.concat( out )
end


-- return function (gOut) -- return gender, fioForJournals	 OR nil, error
return function () -- return gender, text, where	 OR nil, error
	local gFio =  global.get( 'gFIO' )
	local out = {}
	if not gFio then
		return false, tools.errorMsg( 'Конец анкеты', 'В анкете не было шаблона {{ ФИО }}' )
	end
	local gender = global.get( 'gGender' ) or 0
	local fa, im, ot, idx, tmp
--	local fioForJournals = {}
--	local where = {}
	local lastFio = 1
	for i, fio in ipairs( gFio ) do
--		fa, im, ot, idx = unpack( fio, 1, 4 )
		fa, im, ot, idx = fio.l, (fio.i or ''), (fio.o or ''), (fio.d or '')
--		where[i] = 'nLast="' .. fa .. '" AND nFirst' .. tools.cargoString( fio.f )
--			.. ' AND nMiddle' .. tools.cargoString( fio.m )
--			.. ' AND nDisambig' .. tools.cargoString( idx ) .. ' AND nPrecision IS NULL'

		tmp = 0
		if mw.ustring.sub( ot, -2, -1 ) == 'ич' or mw.ustring.sub( ot, -3, -1 ) == 'глы'
				 or mw.ustring.sub( ot, -3, -1 ) == 'аде' then
			tmp = 1
		elseif  mw.ustring.sub( ot, -2, -1 ) == 'на' or mw.ustring.sub( ot, -3, -1 ) == 'ызы' then
			tmp = 2
		end
		if gender == 0 then
			gender = tmp
		elseif gender ~= 0 and tmp ~= 0 and gender ~= tmp then
			gender = 3
		end
		fio.fiot = fa
		if im ~= '' then
			fio.fiot = fa .. ', ' .. im
			if ot ~= '' then
				fio.fiot = fio.fiot .. ' ' .. ot
			end
		end
		if idx ~= '' then
			fio.fiot = fio.fiot .. ' ' .. idx
		end
--		table.insert( fioForJournals, fio.fiot )
		if i ~= 1 then
			if fa == gFio[lastFio].l then
				tmp = 'F'
			else
				tmp = ''
			end
			if im == gFio[lastFio].i then
				tmp = tmp .. 'I'
			end
			if ot == gFio[lastFio].o then
				tmp = tmp .. 'O'
			end
			if gFio[lastFio].group then
				if 		   gFio[lastFio].group == 'F' and tmp == 'IO'
						or gFio[lastFio].group == 'I' and tmp == 'FO'
						or gFio[lastFio].group == 'O' and tmp == 'FI'
						or gFio[lastFio].group == 'IO' and fa == gFio[lastFio].l then -- F FI FO
					gFio[lastFio].size = gFio[lastFio].size + 1
				else
					table.insert( out, printFio( gFio, lastFio ) )
					lastFio = i
				end
			else
				if tmp == 'F' then
					gFio[lastFio].group = 'IO'
					gFio[lastFio].size = 2
				elseif tmp == 'FI' then
					gFio[lastFio].group = 'O'
					gFio[lastFio].size = 2
				elseif tmp == 'FO' then
					gFio[lastFio].group = 'I'
					gFio[lastFio].size = 2
				elseif tmp == 'IO' then
					gFio[lastFio].group = 'F'
					gFio[lastFio].size = 2
				else
					table.insert( out, printFio( gFio, lastFio ) )
					lastFio = i
				end
			end
		end
	end
	table.insert( out, printFio( gFio, lastFio ) )
	if gender == 2 then
		tmp = 'она'
	else
		tmp = 'он'
	end
	out = table.concat( out, ', <i>' .. tmp .. ' же</i> ' ) .. '. '
	if gender == 0 or gender == 3 then
		out = out .. '[[Категория:Персоналии с проблемами пола]]'
	end
	if gender == 3 then -- М и Ж не пишем.
		out = out .. 'Пол ' .. genders[gender] .. '. '
	end
--	table.insert( gOut, out )
--	return gender, fioForJournals
--	where = table.concat( where, ' OR ' )
--	return gender, out, where
	return gender, out
end