Модуль:Wikidata/Software

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Документация

Содержит функции форматирования для свойств и квалификаторов о программном обеспечении.

formatVersionClaim

АльтернативаformatStatementDefault()для форматирования номера версии и даты её выхода.

Используется в шаблоне{{wikidata|p348}}.

Пример вызова:

{{#invoke:Wikidata|formatStatements|claim-module=Wikidata/Software|claim-function=formatVersionClaim|...}}

formatExtension

АльтернативаformatDatavalue()для форматирования расширений файлов.

Используется в шаблоне{{wikidata|p1195}}.

Пример вызова:

{{#invoke:Wikidata|formatStatements|data-module=Wikidata/Software|data-function=formatVersionClaim|...}}

catForDate

Кроме того, содержит функциюcatForDate,которая добавляет категорию[[Начало категории в ГГГГ году]]при помощи шаблона вида{{#invoke:Wikidata/Software|catForDate|{{Wikidata|p571|параметры шаблона Wikidata/p571}}|Начало категории}}.Функция ищет год, который либо викифицирован, либо просто передан числом. После функция формирует и возвращает категорию.

localp={}

--Property:P348
functionp.formatVersionClaim(context,options,statement)
localsnak=context.formatSnak(options,statement.mainsnak)
ifnotsnakthensnak=''end

if(statement.qualifiers)then
--Operation system/Platform
localos_data=statement.qualifiers.P306orstatement.qualifiers.P400
if(os_data)then
localos_str=''
fori,os_iteminipairs(os_data)do
os_str=os_str..context.formatSnak(options,os_item)
ifi<#os_datathen
os_str=os_str..', '
end
end
snak=os_str..': '..snak
end

--Name
if(statement.qualifiers.P1476)then
snak=snak..' «'..context.formatSnak(options,statement.qualifiers.P1476[1])..'»'
end

--Date of release
if(statement.qualifiers.P577)then
snak=snak..' ('..context.formatSnak(options,statement.qualifiers.P577[1])..')'
elseif(statement.qualifiers.P585)then
snak=snak..' ('..context.formatSnak(options,statement.qualifiers.P585[1])..')'
end
end

--References
if(options.references)then
snak=snak..context.formatRefs(options,statement);
end

returnsnak
end

--Property:P348
functionp.formatVersionProperty(context,options)
if(notcontext)thenerror('context not specified');end;
if(notoptions)thenerror('options not specified');end;
if(notoptions.entity)thenerror('options.entity missing');end;

-- Выбор фильтра по типу версии
localtypeFilter=options.property;
ifoptions.type=='all'then
-- ничего не делаем
elseifoptions.type=='stable'then
typeFilter=typeFilter..'[p548:q12355314,p548:q2804309,p548:q15726348,p548:q20631656]'
elseifoptions.type=='unstable'then
typeFilter=typeFilter..'[p548][!p548:q12355314][!p548:q15726348][!p548:q2804309][!p548:q20631656]'
elseifoptions.type=='alpha'then
typeFilter=typeFilter..'[p548:q2122918]'
elseifoptions.type=='beta'then
typeFilter=typeFilter..'[p548:q3295609]'
elseifoptions.type=='rc'then
typeFilter=typeFilter..'[p548:q1072356]'
elseifoptions.type=='test'then
typeFilter=typeFilter..'[p548][!p548:q2122918][!p548:q3295609][!p548:q1072356][!p548:q12355314][!p548:q15726348][!p548:q2804309][!p548:q20631656]'
else
typeFilter=typeFilter..'[!p548]'
end

-- Получение нужных утверждений
localWDS=require('Module:WikidataSelectors');
localclaims=WDS.filter(options.entity.claims,typeFilter);

ifclaims==nilthen
return''
end

-- Обход всех заявлений утверждения и с накоплением оформленых предпочтительных
-- заявлений в таблице
localformattedClaims={}

fori,claiminipairs(claims)do
localformattedStatement=p.formatVersionClaim(context,options,claim)
-- здесь может вернуться либо оформленный текст заявления
-- либо строка ошибки nil похоже никогда не возвращается
ifformattedStatementthen
formattedStatement='<span class= "wikidata-claim" data-wikidata-property-id= "'..string.upper(options.property)..' "data-wikidata-claim-id=" '..claim.id..' ">'..formattedStatement..'</span>'
table.insert(formattedClaims,formattedStatement)
end
end

-- создание текстовой строки со списком оформленых заявлений из таблицы
localout=mw.text.listToText(formattedClaims,options.separator,options.conjunction)
ifout~=''then
ifoptions.beforethen
out=options.before..out
end
ifoptions.afterthen
out=out..options.after
end
end

returnout
end

--Property:P1195
functionp.formatExtension(context,options,value)
localdot=''
ifstring.sub(value,1,1)~='.'then
dot='.'
end
return'<code>'..dot..value..'</code>'
end

returnp