Bahaipedia
Bahaipediaدانشنامه بهائی
Menú
Cambios recientes
Haga su pregunta
Página al azar
Categorías
Ayuda en Wikipedia
En otros proyectos
Herramientas
Lo que enlaza aquí
Cambios relacionados
Subir archivo
Páginas especiales
Versión para imprimir
Enlace permanente
Información de la página
Módulo
Discusión
Ver historial
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Navigation
Navigation
Navegación
Navigation
ナビゲーション
Điều hướng
导航
Navegação
ناوبری
Навигация
Cambios recientes
Haga su pregunta
Página al azar
Categorías
Ayuda en Wikipedia
En otros proyectos
Learn more
Weitere Informationen
Aprender más
En savoir plus
詳しく読む
Tìm hiểu thêm
了解更多
Saiba mais
یاد بگیرید بیشتر
Узнать больше
Fe bahá’í
Bahá’u’lláh
‘Abdu’l-Bahá
Principios bahá’ís
Tools
Werkzeuge
Herramientas
Outils
ツール
Công cụ
工具
Ferramentas
ابزارها
Инструменты
Lo que enlaza aquí
Cambios relacionados
Subir archivo
Páginas especiales
Versión para imprimir
Enlace permanente
Información de la página
Translations
Übersetzungen
Traducciones
Traductions
各言語版
Bản dịch
翻译
Traduções
به زبان‌های دیگر
Переводы

Módulo:NF

De Bahaipedia
Saltar a:navegación, buscar

La documentación para este módulo puede ser creada en Módulo:NF/doc

local p = {}

local function error ( msg )
	return '<strong class="error">Error: ' .. msg .. '</strong>'
		.. '[[Categoría:Wikipedia:Artículos con problema en la plantilla NF]]'
end

local function safereadtable ( ... )
	local arg = {...}
	local key = arg and arg[1]
	for i = 2, #arg do
		local val = arg[i]
		if key == nil or val == nil then
			key = nil
			break
		else
			key = key[val]
		end
	end
	return key
end

--[[
	@name	catSexGenderIdentity
	@global	none
	@param	none
	@return	wikitext (categories)
	@descr	Genera las categorías relacionadas con el sexo o género de una
			persona en función de los datos obtenidos de Wikidata según su
			propiedad P21.
--]]

function p.catSexGenderIdentity()
	local wd = nil
	if wd and
		-- wd:formatPropertyValues( 'P31' ).value == 'ser humano'
		-- wd.claims.P31[1].mainsnak.datavalue.value.id == 'Q5'
		safereadtable(wd, 'claims', 'P31', 1, 'mainsnak', 'datavalue', 'value', 'id') == 'Q5'
	then
		--[==[ Main categories are:
				[[Categoría:Hombres]]
				[[Categoría:Mujeres]]
				[[Categoría:Personas intersexo]]
				[[Categoría:Mujeres transgénero]]
				[[Categoría:Hombres transgénero]]
				[[Categoría:Personas no binarias]]
				[[Categoría:Personas no categorizadas por sexo]]
		--]==]
		--[==[ valid sex/genders located in Wikidata: ]==]--
		local validsexgenders = {
		--	-- see https://www.wikidata.org/wiki/Property:P21#P2302
		--	['IDENTIFIER']	--[[ ['TEXT LABEL'] --]]			= 'CATEGORY',
			['Q6581097']	--[[ ['masculino'] --]]				= 'Hombres',
			['Q6581072']	--[[ ['femenino'] --]]				= 'Mujeres',
			['Q1097630']	--[[ ['intersexual'] --]]			= 'Personas intersexo',
			['Q189125']		--[[ ['transgénero'] --]]			= nil,
			['Q1052281']	--[[ ['mujer transgénero'] --]]		= 'Mujeres transgénero',
			['Q2449503']	--[[ ['hombre transgénero'] --]]	= 'Hombres transgénero',
			['Q48270']		--[[ ['género no-binario'] --]]		= 'Personas no binarias',
			['Q1399232']	--[[ ['fa'afafine'] --]]			= 'Personas no binarias', -- third gender in Samoan culture
			['Q3277905']	--[[ ['māhū'] --]]					= 'Personas no binarias', -- third gender in traditional Hawaiian, Kanaka and Maohi cultures
			['Q746411']		--[[ ['kathoey'] --]]				= 'Personas no binarias', -- third gender in Thai culture
			['Q350374']		--[[ ['fakaleiti'] --]]				= 'Personas no binarias', -- third gender in Tongan culture
			['Q660882']		--[[ ['hijra'] --]]					= 'Personas no binarias', -- third gender of South Asian cultures
			['Q44148']		--[[ ['macho'] --]]					= nil, -- non-human
			['Q43445']		--[[ ['hembra'] --]]				= nil, -- non-human
			-- 'unknown value' or 'valor desconocido'
			-- 'no value' or 'sin valor'
			['Q207959']		--[[ ['androginia'] --]]			= nil,
			['Q301702']		--[[ ['dos espíritus'] --]]			= 'Personas no binarias', -- third gender in the indigenous North American cultures
			['Q27679766']	--[[ ['transmasculino'] --]]		= 'Hombres transgénero',
			['Q27679684']	--[[ ['transfemenino'] --]]			= 'Mujeres transgénero',
			['Q3177577']	--[[ ['muxe'] --]]					= 'Mujeres transgénero', -- third gender in Zapotec culture
			['Q28873047']	--[[ ['organismo intersexual'] --]]	= nil, -- non-human
			['Q505371']		--[[ ['agénero'] --]]				= 'Personas no binarias',
			['Q12964198']	--[[ ['genderqueer'] --]]			= 'Personas no binarias',
			['Q18116794']	--[[ ['género fluido'] --]]			= 'Personas de género fluido',
			['Q1289754']	--[[ ['neutro'] --]]				= 'Personas no binarias',
			['Q179294']		--[[ ['eunuco'] --]]				= 'Hombres',
			['Q7130936']	--[[ ['pangénero'] --]]				= 'Personas no binarias',
			['Q64017034']	--[[ ['cogenitor'] --]]				= nil, -- fictional, non-human
			['Q52261234']	--[[ ['sexo neutro'] --]]			= 'Personas no binarias',
			['Q16674976']	--[[ ['hermafroditismo'] --]]		= nil, -- non-human
			['Q15145779']	--[[ ['mujer cisgénero'] --]]		= 'Mujeres',
			['Q15145778']	--[[ ['hombre cisgénero'] --]]		= 'Hombres',
			['Q96000630']   --[[ ['X-gender'] --]]				= 'Personas no binarias',
			['Q104717073']  --[[ ['persona intersexo'] --]]     = 'Personas intersexo',
		}
	--	local sexgenderval = wd.claims.P21[1].mainsnak.datavalue.value.id -- wd:formatPropertyValues( 'P21' ).value
		local sexgenderval = safereadtable( wd, 'claims', 'P21', 1, 'mainsnak', 'datavalue', 'value', 'id')
		local sexgendercat = validsexgenders[ sexgenderval ] or 'Personas no categorizadas por sexo'
		return '[[Categoría:' .. sexgendercat .. ']]'
	end
	return ''  -- non-human
end

--[[
	@name	catLivingStatus
	@global	require('Módulo:Roman')
	@param	birthdate, deathdate, no errors
	@return	wikitext (categories and [optionally] errors)
	@descr	Genera las categorías relacionadas con el nacimiento y fallecimiento
			de una persona, así como identifica si está viva, en función de los
			datos proporcionados como parámetro o los obtenidos automáticamente
			de Wikidata según sus propiedades P569 y P570.
	@aux	filterBirthDate, filterLiveState, filterDeathDate, getDateStruct
--]]

local function filterBirthDate( value )
	return mw.ustring.match( mw.ustring.upper( value ), "MISSING" )
		or mw.ustring.match( mw.ustring.upper( value ), "UNKNOWN" )
		or mw.ustring.match( value, "%?" )
		or mw.ustring.match( value, "año desconocido" )
		or mw.ustring.match( value, "valor desconocido" )
end

local function filterLiveState( value )
	return mw.ustring.match( mw.ustring.upper( value ), "LIVING" )
		or mw.ustring.match( mw.ustring.upper( value ), "VIVA" )
end

local function filterDeathDate( value )
	return filterLiveState( value )
		or filterBirthDate( value )
end

local function getDateStruct( wd, arg, prop, filter )
	local result, number, margin -- string, integer, precision-like value
	local value
	local ModuloRoman = require('Módulo:Roman')
	local convertArabicToRoman = ModuloRoman._Numeral -- convertArabicToRoman
	local convertRomanToArabic = ModuloRoman.toArabic -- convertRomanToArabic
	if arg and arg ~= '' then
		value = mw.text.trim( arg )
	elseif wd and
		-- wd:formatPropertyValues( 'P31' ).value == 'ser humano'
		-- wd.claims.P31[1].mainsnak.datavalue.value.id == 'Q5'
		safereadtable(wd, 'claims', 'P31', 1, 'mainsnak', 'datavalue', 'value', 'id') == 'Q5'
	then
		value = wd:formatPropertyValues( prop ).value
	end

	if value and value ~= '' then
		local err, val
		if filter and type(filter) == 'function' then
			err, val = pcall( filter, value )
		end
		if err and val then
			margin = value -- 
			number = 0
			result = '' -- not nil, it is valid but filtered
		elseif mw.ustring.match( value, "milenio" ) then
			local m = mw.ustring.match( value, "(%a+) milenio" ) -- 'el MM milenio', roman
			if m then
				margin = 1000
				number = ( convertRomanToArabic( m ) - 1 ) * margin
				result = 'el ' .. m .. ' milenio'
			else
				m = mw.ustring.match( value, "(%d+). milenio" ) -- WD:'mm. milenio AED'
				if m then
					margin = 1000
					number = ( tonumber( m ) - 1 ) * margin
					result = 'el ' .. convertArabicToRoman( m ) .. ' milenio'
				else
					result = nil -- error
				end
			end
		elseif mw.ustring.match( value, "siglo" ) then
			local c = mw.ustring.match( value, "(%d+)%. siglo" ) -- WD:'cc. siglo AED'
			if c then
				margin = 100
				number = ( tonumber( c ) - 1 ) * margin
				result = 'el siglo ' .. convertArabicToRoman( c )
			else
				c = mw.ustring.match( value, "siglo (%a+)" ) -- 'el siglo CC', roman
				if c then
					margin = 100
					number = ( convertRomanToArabic( c ) - 1 ) * margin
					result = 'el siglo ' .. c
				else
					result = nil -- error
				end
			end
		elseif mw.ustring.match( value, "años" )
			or mw.ustring.match( value, "%d+s" ) then
			local d = mw.ustring.match( value, "años (%d+)" ) -- 'años yyyy'
					or mw.ustring.match( value, "(%d+)s" ) -- WD:'2020s AED'
			if d then
				margin = 10
				number = tonumber( d )
				result = 'los años ' .. number
			else
				result = nil -- error
			end
		else
			local y = mw.ustring.match( value, "^%d+ %a+ (%d+)" ) -- 'dd mmm aaaa'
				   or mw.ustring.match( value, "^%a+ (%d+)" ) -- 'mmm aaaa'
				   or mw.ustring.match( value, "^(%d+)" ) -- 'aaaa'
			if y then
				margin = 1
				number = tonumber( y )
				result = number
			else
				result = nil -- error
			end
		end

		if result
		and (  mw.ustring.match( value, "a%. C%." )
			or mw.ustring.match( value, "a%.%se%.%sc%." )
			or mw.ustring.match( value, "^%-" )
			or mw.ustring.match( value, "AEC" )
			or mw.ustring.match( value, "BCE?$" ) ) then
			number = -number
			result = result .. ' a. C.'
		end
	else
		result = false -- empty value
	end
	return result, number, margin
end

function p.catLivingStatus( birthdate, deathdate, noerrors )
	local wd = mw.wikibase.getEntityObject()
	local categories, errors = '', ''
	-- Birth date
	local result1, number1, margin1 = getDateStruct(wd, birthdate, 'P569', filterBirthDate)
	-- Death date
	local result2, number2, margin2 = getDateStruct(wd, deathdate, 'P570', filterDeathDate)
	-- Living status
	local living
	if	( result2 == '' and not filterLiveState( margin2 ) )
	or	( result2 ~= '' and result2 )
	then
		living = false -- sure
	elseif result1 and result1 ~= '' then
		if number1 < 0 then
			living = false -- sure
		elseif number1 then
			living = true -- maybe
			local curYear = tonumber(os.date( "%Y" ))
			local maxLive = (number1 + margin1 + 130)
			if curYear > maxLive then
				living = false
			end
		end
	end
	-- Categories
	if result1 == nil then
		errors = error('fecha de nacimiento no válida')
		categories = categories .. '[[Categoría:Nacidos en año desconocido]]' -- unknown because not valid
	elseif result1 == false then
		errors = errors .. '[[Categoría:Wikipedia:Artículos con plantilla NF sin fechas]]'
		categories = categories .. '[[Categoría:Nacidos en año desconocido]]' -- unknown because not set
	elseif result1 == '' then
		categories = categories .. '[[Categoría:Nacidos en año desconocido]]' -- known to be unknown
	else -- valid value
		categories = categories .. '[[Categoría:Nacidos en ' .. result1 .. ']]'
	end
	if result2 == nil then
		errors = error('fecha de fallecimiento no válida')
		-- categories = categories .. '[[Categoría:Fallecidos en año desconocido]]' -- unknown because not valid
	elseif result2 == false then
		if living then
			categories = categories .. '[[Categoría:Personas vivas]]'
		elseif living == false then -- can be unknown
			errors = errors .. '[[Categoría:Wikipedia:Artículos con plantilla NF sin fechas]]'
		end
	elseif result2 == '' then
		if filterLiveState( margin2 ) then
			if living == false then
				categories = categories .. '[[Categoría:Fallecidos en año desconocido]]' -- unknown because not set
				errors = errors .. '[[Categoría:Wikipedia:Artículos con plantilla NF sin fechas]]'
				errors = errors .. '[[Categoría:Wikipedia:Artículos con problema en la plantilla NF]]'
			end
		else
			categories = categories .. '[[Categoría:Fallecidos en año desconocido]]' -- known to be unknown
		end
	else -- valid value
		categories = categories .. '[[Categoría:Fallecidos en ' .. result2 .. ']]'
	end
	if noerrors then
		return categories
	end
	return categories .. errors
end

--[[
	@name	sortKey
	@global	none
	@param	value
	@return	string
	@descr	Genera la clave de ordenación del nombre de una persona, a través de
			los datos obtenidos automáticamente de Wikidata según sus diferentes
			propiedades.
--]]

function p.sortKey( value )
	local wd = mw.wikibase.getEntityObject()
	local sortkey = ''
	if value and value ~= '' then
		sortkey = value
	elseif wd and
		-- wd:formatPropertyValues( 'P31' ).value == 'ser humano'
		-- wd.claims.P31[1].mainsnak.datavalue.value.id == 'Q5'
		safereadtable(wd, 'claims', 'P31', 1, 'mainsnak', 'datavalue', 'value', 'id') == 'Q5'
	then
		local givenname = wd:formatPropertyValues( 'P734' ).value
		local familyname = wd:formatPropertyValues( 'P735' ).value
		local secondfamilyname = wd:formatPropertyValues( 'P1950' ).value
		-- local birthname = wd:formatPropertyValues( 'P1477' ).value
		if familyname and familyname~= '' then
			sortkey = familyname
			if secondfamilyname and secondfamilyname ~= '' then
				sortkey = sortkey .. ' ' .. secondfamilyname
			end
			if givenname and givenname ~= '' then
				sortkey = sortkey .. ', ' .. givenname
			end
		else
			-- try roman format
			local nomen = wd:formatPropertyValues( 'P2359' ).value
			local cognomen = wd:formatPropertyValues( 'P2365' ).value
			local praenomen = wd:formatPropertyValues( 'P2358' ).value
			local unkval, notval = 'valor desconocido', 'sin valor'
			nomen = nomen:gsub(unkval, ''):gsub(notval, ''):gsub('^, ', ''):gsub(', , ', ', ')
			cognomen = cognomen:gsub(unkval, ''):gsub(notval, ''):gsub('^, ', ''):gsub(', , ', ', ')
			praenomen = praenomen:gsub(unkval, ''):gsub(notval, ''):gsub('^, ', ''):gsub(', , ', ', ')
			if nomen and nomen ~= '' then
				sortkey = nomen
				if cognomen and cognomen ~= '' then
					sortkey = sortkey .. ' ' .. cognomen
				end
				if praenomen and praenomen ~= '' then
					sortkey = sortkey .. ', ' .. praenomen
				end
			end
		end
	end
	return sortkey
end

--[[
	@main
	@global	require('Módulo:Argumentos')
			require('Módulo:Control de autoridades')
			require('Módulo:Roman')
--]]

function p.main ( frame )
	local getArgs = require('Módulo:Argumentos').obtenerArgumentosConValor
	local args = getArgs( frame )

	-- Authority control
	local authorityControl = require('Módulo:Control de autoridades').authorityControl
	local result = authorityControl(frame) .. '\n' -- frame:preprocess('{{Control de autoridades}}\n')
	local ns = mw.title.getCurrentTitle().namespace
	if ns ~= 0 then
		return result
	end

	-- Sex/Gender
	result = result .. p.catSexGenderIdentity()

	-- Living status
	result = result .. p.catLivingStatus( args and args[1], args and args[2] )

	-- Sort key
	local sortkey = p.sortKey( args and args[3] )
	if sortkey and sortkey ~= '' then
		result = result .. frame:preprocess('{{ORDENAR:' .. sortkey .. '}}\n')
	end

	-- NF
	return result
end

return p
Obtenido de «https://es.bahaipedia.org/index.php?title=Módulo:NF&oldid=112»
Esta página se editó por última vez el 12 feb 2023 a las 09:29.
El contenido está disponible bajo la licencia Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License a menos que se indique lo contrario.
Política de privacidad
Acerca de Bahaipedia
Descargos
Powered by MediaWiki