Módulo:NF
Ir a la navegación
Ir a la búsqueda
La documentación para este módulo puede ser creada en Módulo:NF/doc
Error de secuencia de órdenes: Error de Lua: Error interno: El intérprete ha finalizado con la señal "-129".
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 = mw.wikibase.getEntityObject() 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:Intersexuales]] [[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'] --]] = 'Intersexuales', ['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 no binarias', ['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', } -- 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]]' -- unknow 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]]' -- unknow 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]]' -- unknow 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]]' -- unknow 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, '') cognomen = cognomen:gsub(unkval, ''):gsub(notval, '') praenomen = praenomen:gsub(unkval, ''):gsub(notval, '') 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