Модуль:Песочница/D6194c-1cc/CiteGost/Subst

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

local NS_MODULE = 828 --: https://www.mediawiki.org/wiki/Extension_default_namespaces
local moduleNamespace = mw.site.namespaces[NS_MODULE].name

local formatter = require(moduleNamespace .. ':Песочница/D6194c-1cc/WDFormatV2')
local f = formatter.f

local template
local currentFrame = mw.getCurrentFrame()
local parentFrame = currentFrame:getParent()
local selfTitle = currentFrame:getTitle()
if parentFrame then
	template = parentFrame:getTitle()
else
	template = selfTitle
end
local ok, templateInfo = pcall(mw.loadData, selfTitle .. '/args:' .. template)
local templateArgs
if ok then
	templateArgs = templateInfo.argsToTemplate
end
if not templateArgs then
	templateArgs = {}
	setmetatable(templateArgs, {
		__index = function(t, key)
			return key
		end
	})
end


local function removeCommaFromPerson(source, processedData, result)
	local text = result.text
	local familyName, initials = mw.ustring.match(text, '^([^,%[%]]+), *(.+)$')
	if not initials or not familyName then
		text = text:gsub(',', ',')
	else
		text = initials:gsub(',', ',') .. ' ' .. familyName
	end
	result.text = text
	result.wikitext = text
end

local function escapeComma(source, processedData, result)
	result.text = result.text:gsub(',', ',')
	result.wikitext = result.wikitext:gsub(',', ',')
end

local function hasVolumesCount(source)
	if not source.partsCount then
		return false
	end
	return (source.partsCount.unitEntity == 'Q1238720')
end

local function publishedInHasVolumesCount(source)
	if not source.publishedInPartsCount then
		return false
	end
	return (source.publishedInPartsCount.unitEntity == 'Q1238720')
end

local function formatLinkPublishedInStub(source, processedData, result)
	if result.linked or not processedData.url then
		return
	end

	if processedData.fieldTable.retrieved and mw.wikibase.getSitelink(processedData.fieldTable.entity) then
		return
	end
	result.linked = true
end

local function formatLinkStub(source, processedData, result)
	if result.linked or not processedData.url then
		return
	end
	result.linked = true
end

local ArgsProfile = {
	tag = {
		name = '',
	},
	{
		childDelimiter = '|',
		{
			capitalize = false,
			depends = 'authors',
			value = templateArgs.authors,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'authors',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'title',
			value = templateArgs.title,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'title',
			urlField = 'url',
			format = { f.dash, formatLinkStub, f.wikisource, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'subtitle',
			value = templateArgs.subtitle,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'subtitle',
		},
		{
			capitalize = false,
			depends = 'url',
			value = templateArgs.url,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'url',
		},
		{
			capitalize = false,
			depends = { isPath=true, 'url', 'urlStatus' },
			value = templateArgs.urlStatus,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'url', 'urlStatus' },
		},
		{
			capitalize = false,
			depends = { isPath=true, 'url', 'archiveUrl' },
			value = templateArgs.archiveUrl,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'url', 'archiveUrl' },
		},
		{
			capitalize = false,
			depends = { isPath=true, 'url', 'archiveDate' },
			value = templateArgs.archiveDate,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'url', 'archiveDate' },
			format = { f.dateISO },
		},
		{
			capitalize = false,
			depends = 'origin',
			value = templateArgs.origin,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'origin',
		},
		{
			capitalize = false,
			depends = { isPath=true, 'originLang', 'langCode' },
			value = templateArgs.originLang,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'originLang', 'langCode' },
		},
		{
			capitalize = false,
			depends = 'originUrl',
			value = templateArgs.originUrl,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'originUrl',
		},
		{
			capitalize = false,
			depends = 'contentType',
			value = templateArgs.contentType,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'contentType',
		},
		{
			capitalize = false,
			depends = 'workType',
			value = templateArgs.workType,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'workType',
		},
		{
			capitalize = false,
			depends = 'info',
			value = templateArgs.info,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'info',
		},
		{
			capitalize = false,
			depends = 'edition',
			value = templateArgs.edition,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'edition',
		},
		{
			capitalize = false,
			depends = 'editors',
			value = templateArgs.editors,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'editors',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'translators',
			value = templateArgs.translators,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'translators',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'illustrators',
			value = templateArgs.illustrators,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'illustrators',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'editorInChief',
			value = templateArgs.editorInChief,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'editorInChief',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'publishedIn',
			value = templateArgs.publishedIn,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedIn',
			urlField = 'publishedInUrl',
			format = { f.dash, formatLinkPublishedInStub, f.wikisource, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'publishedInSubtitle',
			value = templateArgs.publishedInSubtitle,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedInSubtitle',
		},
		{
			capitalize = false,
			depends = { isPath=true, 'publishedInLang', 'langCode' },
			value = templateArgs.publishedInLang,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'publishedInLang', 'langCode' },
		},
		{
			capitalize = false,
			depends = 'publishedInUrl',
			value = templateArgs.publishedInUrl,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedInUrl',
		},
		{
			capitalize = false,
			depends = { isPath=true, 'publishedInUrl', 'urlStatus' },
			value = templateArgs.publishedInUrlStatus,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'publishedInUrl', 'urlStatus' },
		},
		{
			capitalize = false,
			depends = { isPath=true, 'publishedInUrl', 'archiveUrl' },
			value = templateArgs.publishedInArchiveUrl,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'publishedInUrl', 'archiveUrl' },
		},
		{
			capitalize = false,
			depends = { isPath=true, 'publishedInUrl', 'archiveDate' },
			value = templateArgs.publishedInArchiveDate,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'publishedInUrl', 'archiveDate' },
			format = { f.dateISO },
		},
		{
			capitalize = false,
			depends = 'publishedInOrigin',
			value = templateArgs.publishedInOrigin,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedInOrigin',
		},
		{
			capitalize = false,
			depends = { isPath=true, 'publishedInOriginLang', 'langCode' },
			value = templateArgs.publishedInOriginLang,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'publishedInOriginLang', 'langCode' },
		},
		{
			capitalize = false,
			depends = 'publishedInWorkType',
			value = templateArgs.publishedInWorkType,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedInWorkType',
		},
		{
			conflicts = 'isScholarlyArticle',
			capitalize = false,
			depends = 'publishedInAuthors',
			value = templateArgs.publishedInAuthors,
		},
		{
			conflicts = 'isScholarlyArticle',
			capitalize = false,
			delimiter = '=',
			field = 'publishedInAuthors',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			conflicts = { 'isScholarlyArticle', 'publishedInIsHosting' },
			capitalize = false,
			depends = 'publishedInEditors',
			value = templateArgs.publishedInEditors,
		},
		{
			conflicts = { 'isScholarlyArticle', 'publishedInIsHosting' },
			capitalize = false,
			delimiter = '=',
			field = 'publishedInEditors',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			conflicts = { 'isScholarlyArticle', 'publishedInIsHosting' },
			capitalize = false,
			depends = 'publishedInEditorInChief',
			value = templateArgs.publishedInEditorInChief,
		},
		{
			conflicts = { 'isScholarlyArticle', 'publishedInIsHosting' },
			capitalize = false,
			delimiter = '=',
			field = 'publishedInEditorInChief',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'publishedInTranslators',
			value = templateArgs.publishedInTranslators,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedInTranslators',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			capitalize = false,
			depends = 'publishedInIllustrators',
			value = templateArgs.publishedInIllustrators,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'publishedInIllustrators',
			format = { removeCommaFromPerson, f.person, f.wikilink, f.wikidata, escapeComma },
		},
		{
			cond = publishedInHasVolumesCount,
			capitalize = false,
			depends = 'publishedInPartsCount',
			value = templateArgs.publishedInVolumesCount,
		},
		{
			cond = publishedInHasVolumesCount,
			capitalize = false,
			delimiter = '=',
			field = 'publishedInPartsCount',
		},
		{
			conflicts = 'isVolume',
			cond = hasVolumesCount,
			capitalize = false,
			depends = 'partsCount',
			value = templateArgs.volumesCount,
		},
		{
			conflicts = 'isVolume',
			cond = hasVolumesCount,
			capitalize = false,
			delimiter = '=',
			field = 'partsCount',
		},
		{
			conflicts = 'isScholarlyArticle',
			capitalize = false,
			depends = 'location',
			value = templateArgs.location,
		},
		{
			conflicts = 'isScholarlyArticle',
			capitalize = false,
			delimiter = '=',
			field = 'location',
		},
		{
			conflicts = 'isScholarlyArticle',
			capitalize = false,
			depends = 'publisher',
			value = templateArgs.publisher,
		},
		{
			conflicts = 'isScholarlyArticle',
			capitalize = false,
			delimiter = '=',
			field = 'publisher',
		},
		{
			capitalize = false,
			depends = 'date',
			value = templateArgs.date,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'date',
			format = { f.dateISO },
		},
		{
			capitalize = false,
			depends = 'volume',
			value = templateArgs.volume,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'volume',
		},
		{
			capitalize = false,
			depends = 'volumeTitle',
			value = templateArgs.volumeTitle,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'volumeTitle',
		},
		{
			capitalize = false,
			depends = 'issue',
			value = templateArgs.issue,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'issue',
		},
		{
			capitalize = false,
			depends = 'articleId',
			value = templateArgs.articleId,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'articleId',
		},
		{
			capitalize = false,
			depends = 'pages',
			value = templateArgs.pages,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'pages',
		},
		{
			capitalize = false,
			depends = 'pagesCount',
			value = templateArgs.pagesCount,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'pagesCount',
		},
		{
			capitalize = false,
			depends = 'series',
			value = templateArgs.series,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'series',
		},
		{
			capitalize = false,
			depends = 'comment',
			value = templateArgs.comment,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'comment',
		},
		{
			capitalize = false,
			depends = 'lastUpdate',
			value = templateArgs.lastUpdate,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'lastUpdate',
			format = { f.dateISO },
		},
		{
			capitalize = false,
			depends = 'accessDate',
			value = templateArgs.accessDate,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'accessDate',
			format = { f.dateISO },
		},
		{
			capitalize = false,
			depends = 'doi',
			value = templateArgs.doi,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'doi',
		},
		{
			capitalize = false,
			depends = 'pmid',
			value = templateArgs.pmid,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'pmid',
		},
		{
			capitalize = false,
			depends = 's2sic',
			value = templateArgs.s2sic,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 's2sic',
		},
		{
			capitalize = false,
			depends = 'pmc',
			value = templateArgs.pmc,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'pmc',
		},
		{
			capitalize = false,
			depends = 'oclc',
			value = templateArgs.oclc,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'oclc',
		},
		{
			capitalize = false,
			depends = 'issn',
			value = templateArgs.issn,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'issn',
		},
		{
			capitalize = false,
			depends = 'isbn',
			value = templateArgs.isbn,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'isbn',
		},
		{
			capitalize = false,
			depends = 'lang',
			value = templateArgs.lang,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = { 'lang', 'langCode' },
		},
		{
			capitalize = false,
			depends = 'ref',
			value = templateArgs.ref,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'ref',
		},
		{
			capitalize = false,
			depends = 'workVersion',
			value = templateArgs.entity,
		},
		{
			capitalize = false,
			delimiter = '=',
			field = 'workVersion',
			format = { f.entity },
		},
		{
			capitalize = false,
			value = templateArgs.offline .. '=1',
		},
	},
}
return ArgsProfile