Модуль:Citation/CS1/Configuration/пісочниця/гілка1

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Цей модуль використовується для тестування дуже ранніх ідей, які не планується поки включати в головну гілку тестування.

--[[--------------------------< S E T T I N G S >--------------------------------------------------------------

булеві налаштування, що керують різними речами. Ці налаштовування розташованні тут, щоб легше їх знайти

]]

local use_identifier_redirects = false;											-- коли true, то використовує ім'я перенаправлення для посилань під назвою ідентифікатора; завжди true в en.wiki; вимкнути, бо не створено перенаправлення
local date_name_auto_xlate_enable = --[[false]] true;										-- when true translates English month-names to the local-wiki's language month names; always false at en.wiki

--[[
Список просторів назв, що не повинні включатися у категоріях сторінок з
помилками посилань на джерела. Те саме, що встановлення notracking = true
за замовчуванням.

Для вікі, що мають поточну версію Module:cs1 documentation support, цей #invoke поверне не відсортований
список назв проторів та індентифікаторів, що з ним пов'язані:
	{{#invoke:cs1 documentation support|uncategorized_namespace_lister|all=<anything>}}
]]

uncategorized_namespaces_t = {[2]=true};										-- init з id простуру користувач
for k, _ in pairs (mw.site.talkNamespaces) do									-- додавання id всіх просторів обговорення
	uncategorized_namespaces_t[k] = true;
end

local uncategorized_subpages = {'/[Пп]ісочниця', '/[Тт]ести', '/[^/]*[Ll]og', '/[Аа]рхів'};		-- список закономірностей Lua, що знайдені в назвах сторінок, які ми не повинні категоризувати

--[[
Таблиця перекладів

Далі йдуть фіксовані тексти, що використовуються як частини посилання на
джерело. Вони відділені від головного модуля, щоб спростити переклад.
]]
local messages = {
  ['published'] = 'опубліковано $1',
  ['lay summary'] = 'Загальний огляд',
  ['retrieved'] = 'Процитовано $1',
  ['dsturetrieved'] = 'Дата звернення: $1',
  ['inactive'] = 'неактивний',
  ['archived-dead'] = 'Архів $1 за $2',
  ['archived-not-dead'] = '$1 оригіналу за $2',
  ['archived-unfit'] = 'Архів оригіналу за ',
  ['archived'] = 'Архів',
  ['cartography'] = 'Картографування: $1',
  ['inset'] = 'Карта-врізка: $1',
  ['interview'] = 'Інтерв\'юери: $1',
  ['original'] = 'оригіналу',
  ['origdate'] = ' [$1]',
  ['editor'] = 'ред.',
  ['editors'] = 'ред.', 
  ['dstueditor'] = 'за ред.',
  ['edition'] = '(вид. $1)', 
  ['episode'] = 'Епізод $1',
  ['season'] = 'Сезон $1', 
  ['section'] = '§&nbsp;$1',
  ['sections'] = '§§&nbsp;$1',
  ['series'] = '$1 $2',														-- $1 є sepc, $2 є серіалом
  ['seriesnum'] = 'Сезон $1',
  ['translated'] = 'Переклад: $1',
  ['dstutranslated'] = 'пер. $1',
  ['written'] = 'Написано у $1',
  ['in'] = 'У',
  ['et al'] = 'та ін.', 
  ['language'] = '($1)',
  ['dstulanguage'] = '[$1]', 
  ['via'] = " &mdash; через $1",
  ['event'] = 'Подія сталася на',
  ['minutes'] = 'На $1 хвилині', 
  
  ['vol'] = '$1 Т.&nbsp;$2',												-- $1 є sepc; журний журнальний стиль тому є presentation{}
  ['vol-no'] = '$1 Т.&nbsp;$2, №&nbsp;$3',									-- sepc, volume, issue (альтернативно вставляє $1 після $2, але потім ми повинні змінити капіталізацію)
  ['issue'] = '$1 №&nbsp;$2',												-- $1 є sepc

  ['art'] = '$1 Ст.&nbsp;$2',												-- $1 є sepc; лише для {{cite conference}}
  ['vol-art'] = '$1 Т.&nbsp;$2, ст.&nbsp;$3',								-- sepc, volume, article-number; лише для  {{cite conference}}

  ['j-vol'] = '$1 $2',														-- sepc, volume; журний журнальний стиль тому є presentation{}
  ['j-issue'] = ' ($1)',
  ['j-article-num'] = ' $1',													-- TODO: any punctuation here? static text?

  ['quoted-title'] = '$1',
  ['italic-title'] = "''$1''",
  ['trans-quoted-title'] = "&#91;$1&#93;",
  ['trans-italic-title'] = "&#91;''$1''&#93;",
  ['dstu-trans-quoted-title'] = "&#61; $1",
  ['dstu-trans-italic-title'] = "&#61; ''$1''",
  ['quoted-text'] = '«$1»',
  
  ['parameter'] = '<code class="cs1-code">&#124;$1=</code>',
  ['parameter-separator'] = ', ',
  ['parameter-final-separator'] = ' та ',
  ['parameter-pair-separator'] = ' та ',
  
  -- Визначає місцезнаходження сторінки довідки
  ['help page link'] = 'Довідка:Помилки CS1',
  ['help page label'] = 'довідка',
  
  -- Категорії
  ['cat wikilink'] = '[[Category:$1]]',										-- $1 є назвою категорії
  [':cat wikilink'] = '[[:Category:$1|посилання]]',								--  назва категорії як вікіпосилання повідомлення обслуговування; $1 є назвою категорії
  
  -- Внутрішні помилки (можуть статися лише у випадку поганої конфігурації)
  ['undefined_error'] = 'Виклик з невизначеною умовою помилки',
  ['unknown_manual_ID'] = 'Нерозпізнаний ручний режим ID',
  ['unknown_ID_mode'] = 'Нерозпізнаний режим ID',
  ['unknown_argument_map'] = 'Словник аргументів не визначений для цієї змінної',
  ['bare_url_no_origin'] = 'Bare url found but origin indicator is nil or empty',
  
  ['warning_msg_e'] = '<span style="color:#d33">Один або більше шаблонів <code style="color: inherit; background: inherit; border: none; padding: inherit;">&#123;{$1}}</code> мають помилки</span>; повідомлення можуть бути приховані ([[Довідка:Помилки CS1#Керування відображенням повідомлень про помилки|допомога]]).';	-- $1 є посиланням на шаблон
  ['warning_msg_m'] = '<span style="color:#3a3">Один або більше шаблонів <code style="color: inherit; background: inherit; border: none; padding: inherit;">&#123;{$1}}</code> мають повідомлення обслуговування</span>; повідомлення можуть бути приховані ([[Довідка:Помилки CS1#Керування відображенням повідомлень про помилки|допомога]]).';	-- $1 є посиланням на шаблон
}

--[[--------------------------< C I T A T I O N _ C L A S S _ M A P >------------------------------------------

Ця таблиця накладає значення присвоєне |CitationClass= у шаблоні cs1|2 на кононічну назву шаблону, коли
значення присвоєне |CitationClass=  відрізняється від канонічної назви шаблону. Значення |CitationClass=
використані як атрибути класу в тегах <cite>, що огортає цитату, таким чином, що ці назви можуть не містити пробілів, коли
канонічні назви шаблонів можуть.  Ці назви використовуються в warning_msg_e та warning_msg_m, щоб створювати посилання на
докумантацію шаблонів, коли стаття відображена в режимі попереднього перегляду.

Більшість значень |CitationClass= шаблонів cs1|2 в en.wiki відповідають їхнім канонічним назвам шаблонів, а тому вони тут не приведені.

]]

local citation_class_map_t = {												-- TODO: if kept, these and all other config.CitationClass 'names' require some sort of i18n
	['arxiv'] = 'arXiv',
	['audio-visual'] = 'AV media',
	['AV-media-notes'] = 'AV media notes',
	['biorxiv'] = 'bioRxiv',
	['citeseerx'] = 'CiteSeerX',
	['encyclopaedia'] = 'encyclopedia',
	['mailinglist'] = 'mailing list',
	['medrxiv'] = 'medRxiv',
	['pressrelease'] = 'press release',
	['ssrn'] = 'SSRN',
	['techreport'] = 'tech report',
	}
	
--[=[-------------------------< E T _ A L _ P A T T E R N S >--------------------------------------------------

Ця таблиця надає шаблони Lua для фрази «et al» та її варіантів в текстах з ім'ям
(автор, редактор тощо). Основний модуль використовує їх для визначення і виведення повідомлення «та ні.».

]=]

local et_al_patterns = {
	"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][%.;,\"']*$",						-- варіації на тему «et al»
	"[;,]? *[\"']*%f[%a][Ee][Tt]%.? *[Aa][Ll][Ii][AaIi][Ee]?[%.;,\"']*$",		-- варіації на теми «et alia», «et alii» та  «et aliae» (хибно позитивний «et aliie» неможливо співставить)
	"[;,]? *%f[%a]and [Oo]thers",												-- альтернатива для et al.
	"%[%[ *[Ee][Tt]%.? *[Aa][Ll]%.? *%]%]",										-- вікіфікована форма
	"%(%( *[Ee][Tt]%.? *[Aa][Ll]%.? *%)%)",										-- форма в подвійних квадратних дужках (щоб обійти часткове вуличення синтаксису ((...)) )
	"[%(%[] *[Ee][Tt]%.? *[Aa][Ll]%.? *[%)%]]",									-- форма в квадратних дужках
	--українські варіанти et_al
	"[;,]? *[\"']*%f[%a][Тт][Аа] *[Іі][Нн][%.;,\"']*$",
	"%[%[ *[Тт][Аа] *[Іі][Нн]%.? *%]%]",										-- вікіфікована форма
	"%(%( *[Тт][Аа] *[Іі][Нн]%.? *%)%)",										-- форма в подвійних квадратних дужках (щоб обійти часткове вуличення синтаксису ((...)) )
	"[%(%[] *[Тт][Аа] *[Іі][Нн]%.? *[%)%]]",									-- форма в квадратних дужках
	}
	
--[[--------------------------< P R E S E N T A T I O N >------------------------

Фіксована розмітка представлення. Початково це була частина citation_config.messages, 
але вона була переміщена окреме, з семантичної точки зору більш правильне, місце.

]]

local presentation = {
	  -- Вивід помилок
	['hidden-error'] = '<span class="cs1-hidden-error error citation-comment">$1</span>',
	['visible-error'] = '<span class="cs1-visible-error citation-comment">$1</span>',
	['hidden-maint'] = '<span class="cs1-maint citation-comment">$1</span>',
	
	['bdi'] = '<bdi$1>$2</bdi>',												-- двонаправна ізоляція (bidirectional isolation) використана з |script-title= і подібними йому параметрами
	['cite'] = '<cite class="$1">$2</cite>',									-- для використання, коли citation не має namelist та не встановлено |ref= і відповідно не має id="..." значення
	['cite-id'] = '<cite id="$1" class="$2">$3</cite>',							-- для використання, коли |ref= або коли citation має namelist
	
	-- різні рівні доступу, для параметрів |access=, |doi-access=, |arxiv=, ...
	-- narrow no-break space &#8239; may work better than nowrap CSS. Or not? Browser support?

	['ext-link-access-signal'] = '<span class="$1" title="$2">$3</span>',		-- зовнішнє посилання з відповідним значком
		['free'] = {class='cs1-lock-free', title='Безкоштовний доступ'},			-- класи визначені у Module:Citation/CS1/styles.css
		['registration'] = {class='cs1-lock-registration', title='Потрібна безкоштовна реєстрація'},
		['limited'] = {class='cs1-lock-limited', title='Безкоштовний доступ за умови пробної версії, а, зазвичай, потрібна підписка'},
		['subscription'] = {class='cs1-lock-subscription', title='Потрібна платна підписка'},
		
	['parameter'] = '<code class="cs1-code">&#124;$1=</code>',	
	
	['ps_cs1'] = '.',															-- завершальний символ (postscript) стилю CS1
	['ps_cs2'] = '',															-- завершальний символ (postscript) стилю CS2 (пустий рядок (string))
	['ps_dstu2006'] = '.',														-- авершальний символ (postscript) стилю DSTU2006
	['sep_cs1'] = '.',															-- роздільник елементів CS1
	['sep_cs2'] = ',',															-- роздільник CS2
	['sep_dstu2006'] = '.&nbsp;—',                                              -- роздільник DSTU2006
	['sep_sp_dstu2006'] = '&nbsp;/',                                            -- роздільник / DSTU2006
	['sep_dsp_dstu2006'] = '&nbsp;//',                                          -- роздільник // DSTU2006
	['sep_colon_dstu2006'] = " : ",												-- роздільник : DSTU2006
	['sep_nl'] = ';',															-- роздільником списку-імен (name-list separator) стилю CS1|2 між ім'ями є дві крапки
	['sep_nl_and'] = ' та ',													-- використовується як останній nl sep коли |name-list-style=and
	['sep_name'] = ', ',														-- першим роздільником стилю CS1|2 є <comma><space>
	['sep_nl_vanc_dstu'] = ',',													-- роздільником списку-імен (name-list separator) стилю Ванкувер (Vancouver)/ДСТУ 2006 є кома
	['sep_name_vanc_dstu'] = ' ',												-- першим роздільником стилю стилю Ванкувер (Vancouver)/ДСТУ 2006 є пробіл
	['sep_list_pair'] = ' та ',												    -- використовується для |language= коли список 2 об'єкта
	['vol-bold'] = '$1 <b>$2</b>',												-- sepc, volume; для жирного журнального посилання; для інших посилання: ['vol'] у messages{}
}

-- Таблиця словника аргументів
local aliases = {
    ['AccessDate'] = {'access-date', 'accessdate', 'дата-доступу'},
    ['Agency'] = {'agency', 'агенство'},
    ['ArchiveDate'] = {'archive-date', 'archivedate', 'дата-архіву'},
    ['ArchiveURL'] = {'archive-url', 'archiveurl', 'url-архіву'},
    ['ASINTLD'] = {'ASIN-TLD', 'asin-tld'},
    ['At'] = {'at', 'частина-джерела', 'у'},
    ['Authors'] = {'authors', 'people', 'credits', 'автори', 'особи', 'титри'},
    ['AuthorFormat'] = {"author-format", "authorformat" },
    ['AuthorSeparator'] = {'author-separator', 'роздільник-авторів'},
    ['AuthorNameSeparator'] = {'author-name-separator', 'роздільник-імен-авторів'},
    ['BookTitle'] = {'book-title', 'booktitle', 'назва-книги'},
    ['Cartography'] = {'cartography', 'картографія'},
    ['Chapter'] = {'chapter', 'contribution', 'entry', 'article', 'section', 'розділ',
    	'внесок', 'запис', 'стаття', 'секція'},
    ['ChapterLink'] = {'chapterlink', 'розділ-посилання'},
    ['ChapterURL'] = {'chapter-url', 'chapterurl', 'contribution-url', 'contributionurl', 'article-url', 'section-url', 'url-розділу', 
    	'url-внеску',  'url-запису', 'url-статті', 'url-секції' },
    ['ChapterUrlAccess'] = {'chapter-url-access', 'contribution-url-access',
    	'entry-url-access', 'article-url-access', 'section-url-access', 'доступ-до-url-розділу',
    	'доступ-до-url-внеску', 'доступ-до-url-запису', 'доступ-до-url-статті',
    	'доступ-до-url-секції' },	   												-- Використовується InternetArchiveBot
    ['Class'] = {'class', 'клас'},														-- cite arxiv and arxiv identifier
    ['Coauthors'] = {'coauthors', 'coauthor', 'співавтори', 'співавтор' },
    ['Conference'] = {'conference', 'конференція'},
    ['ConferenceURL'] = {'conference-url', 'conferenceurl', 'конференція-url'},
    ['Date'] = {'date', 'дата', 'air-date', 'airdate', 'дата-показу'},
    ['Day'] = {'day', 'день'},
    ['DeadURL'] = {'deadurl', 'dead-url', 'мертвий-url', 'deadlink'},
    ['Degree'] = {'degree', 'ступінь'},
    ['DF'] = {'df', 'фд'},
    ['DisplayAuthors'] = {"display-authors", "displayauthors", 'display-subjects', "показувати-авторів", "показувати-суб'єктів"},
    ['DisplayEditors'] = {"display-editors", "displayeditors", "показувати-редакторів"},
    ['DisplayInterviewers'] = {'display-interviewers', "показувати-інтерв'юерів"},
    ['DisplayTranslators'] = {'display-translators', "показувати-перекладачів"},
    ['DoiBroken'] = {'doi-broken-date', 'doi_inactivedate', 'doi_brokendate', 'DoiBroken', 'поламана-дата-doi'},
    ['Edition'] = {'edition', 'видання'},
    ['Editors'] = {'editors', 'редактори'},
    ['EditorFormat'] = {"editor-format", "editorformat" },
    ['EditorSeparator'] = 'editor-separator',
    ['EditorNameSeparator'] = 'editor-name-separator',
    ['Embargo'] = {'pmc-embargo-date', 'Embargo', 'embargo', 'дата-ембарго-pmc'},
    ['Episode'] = {'episode', 'епізод'},													-- тільки для шаблону cite serial TODO: make available to cite episode?
    ['Format'] = {'format', 'формат'},
    ['ID'] = {'id', 'ID', 'docket'},
    ['IgnoreISBN'] = {'ignore-isbn-error', 'ignoreisbnerror'},
    ['Inset'] = {'inset', 'карта-врізка', 'мапа-врізка'},
    ['Issue'] = {'issue', 'number', 'випуск', 'номер'},
    ['Language'] = {'language', 'lang', 'in', 'мова', 'мовою'},
    ['LastAuthorAmp'] = 'lastauthoramp',
    ['LayDate'] = 'laydate',
    ['LaySource'] = 'laysource',
    ['LayURL'] = {'layurl', 'laysummary'},
    ['MailingList'] = {'mailing-list', 'mailinglist', 'список-розсилки'},							-- тільки для шаблону cite mailing list
    ['Map'] = {'map', 'карта', 'мапа'},															-- тільки для шаблону cite map
    --['MapFormat'] = {'map-format', 'формат-карти', 'формат-мапи'},												-- тільки для шаблону cite map (тимчасово не реалізовано)
    ['MapURL'] = {'map-url', 'mapurl', 'url-карти', 'url-мапи'},                -- тільки для шаблону cite map -- Використовується InternetArchiveBot
    ['MapUrlAccess'] = {'map-url-access', 'доступ-до-url-мапи', 'доступ-до-url-карти'},										-- тільки для шаблону cite map -- Використовується InternetArchiveBot
    ['Minutes'] = { 'minutes', 'хвилини'},
    ['Mode'] = {'mode', 'режим'},
    ['Month'] = {'month', 'місяць'},
    ['NameListStyle'] = {'name-list-style', 'стиль-списку-імен'},
    ['NameSeparator'] = 'name-separator',
    ['Network'] = {'network', 'мережа', 'канал'},
    ['NoPP'] = 'nopp',
    ['NoTracking'] = {"template doc demo", 'template-doc-demo', 'nocat', 
        'notracking', "no-tracking"},
    ['OrigDate'] = {'orig-date', 'orig-year', 'origyear', 'дата-оригіналу', 'рік-оригіналу'},
    ['Others'] = {'others', 'інші'},
    ['Page'] = {'p', 'page', 'сторінка', 'ст'},
    ['Pages'] = {'pp', 'pages', 'сторінки'},
    ['Periodical'] = {'journal', 'newspaper', 'magazine', 'work',
        'website',  'periodical', 'encyclopedia', 'encyclopaedia', 'dictionary',
        'журнал', 'газета', 'праця', 'вебсайт', 'веб-сайт',  'періодика', 'енциклопедія', 'словник'},
    ['Place'] = {'place', 'location', 'місце', 'розміщення', 'знаходження'},
    ['PPrefix'] = 'PPrefix',
    ['PPPrefix'] = 'PPPrefix',
    ['PostScript'] = {'postscript', 'завершення'},
    ['PublicationDate'] = {'publicationdate', 'publication-date', 'дата-публікації' },
    ['PublicationPlace'] = {'publication-place', 'publicationplace', 'місце-публікації' },
    ['PublisherName'] = {'publisher', 'institution', 'видавець', 'видавництво', 'установа'},
    ['Quote'] = {'quote', 'quotation', 'цитата', 'цитування'},
    ['Ref'] = {'ref', 'Ref', 'анкер', 'якірець'},
    ['Scale'] = {'scale', 'масштаб'},
    ['ScriptChapter'] = {'script-chapter', 'script-contribution', 'script-entry',
		'script-article', 'script-section', 'письмо-розділу', 'письмо-внеску', 
        'письмо-запису', 'письмо-статті', 'письмо-секції'},
    ['ScriptMap'] = {'script-map', 'письмо-мапи', 'письмо-карти'},															-- тільки для шаблону cite map
    ['ScriptPeriodical'] = {'script-journal', 'script-magazine', 'script-newspaper',                                   
		'script-periodical', 'script-website', 'script-work', 'письмо-журналу', 
        'письмо-газети', 'письмо-періодики', 'письмо-вебсайту', 'письмо-праці'},
    ['ScriptQuote'] = {'script-quote', 'письмо-цитати'},
	['ScriptTitle'] = {'script-title', 'письмо-назви'},
    ['Season'] = {'season', 'сезон'},
    ['Sections'] = {'sections', 'частини-мапи', 'частини-карти'},													-- тільки для шаблону cite map
    ['Separator'] = {'separator', 'роздільник'},
    ['Series'] = {'series', 'version', 'серія', 'версія', 'серіал'},
    ['SeriesSeparator'] = {'series-separator', 'роздільник-серії'},
    ['SeriesLink'] = {'series-link', 'serieslink', 'серіал-посилання'},
    ['SeriesNumber'] = {'series-number', 'series-no', 'seriesnumber', 'seriesno', 'номер-серіалу'},
    --['Sheet'] = {'sheet', 'аркуш'},															-- тільки для шаблону cite map (поки не реалізовано, потрібно переписувати код Chapter)
    --['Sheets'] = {'sheets', 'аркуші'},														-- тільки для шаблону cite map (поки не реалізовано, потрібно переписувати код Chapter)
    ['Station'] = {'station', 'станція'},
    ['SubscriptionRequired'] = 'subscription',
    ['Time'] = {'time', 'час'},
    ['TimeCaption'] = {'time-caption', 'timecaption', 'підпис-часу'},
    ['Title'] = {'title', 'назва', 'заголовок'},
    ['TitleLink'] = {'title-link', 'titlelink', 'episode-link', 'episodelink', 'назва-посилання', 
    	'заголовок-посилання', 'епізод-посилання', 'серія-посилання' },
    ['TitleNote'] = {'department', 'відділ' },
    ['TitleType'] = {'type', 'тип', 'medium', 'медіум'},
    ['TransChapter'] = {'trans-article', 'trans-chapter', 'trans-contribution',
		'trans-entry', 'trans-section', 'trans-chapter', 'trans_chapter', 'переклад-розділу', 
		'переклад-внеску', 'переклад-запису', 'переклад-статті', 'переклад-секції' },
    ['Transcript'] = {'transcript', 'стенограма'},
    ['TranscriptURL'] = {'transcript-url', 'transcripturl', 'url-стенограми'},
    ['TransMap'] = {'trans-map', 'переклад-карти', 'переклад-мапи'},															-- тільки для шаблону cite map
    ['TransPeriodical'] = {'trans-journal', 'trans-magazine', 'trans-newspaper',
		'trans-periodical', 'trans-website', 'trans-work', 'переклад-журналу', 
        'переклад-газети', 'переклад-періодики', 'переклад-вебсайту', 'переклад-праці'},
    ['TransQuote'] = {'trans-quote', 'переклад-цитати' },
    ['TransTitle'] = {'trans-title', 'trans_title', 'переклад-назви' },
    ['URL'] = {'url', 'URL'},
    ['UrlAccess'] = {'url-access', 'доступ-до-url'},	
    ['UrlStatus'] = {'url-status', 'статус-url'},	
    ['Vauthors'] = {'vauthors', 'вавтори'},
	['Veditors'] = {'veditors', 'вредактори'},
    ['Via'] = {'via', 'через'},
    ['Volume'] = {'volume', 'том'},
    ['Year'] = {'year', 'рік'},

    ['AuthorList-First'] = {"author#-first", "author-first#",
        "first#", "given#","author-given#", "author#-given",
		"subject-first#", "subject#-first", "subject-given#", 
		"subject#-given", "автор#-ім'я", "автор-ім'я#",
        "ім'я#", "суб'єкт#-ім'я", "суб'єкт-ім'я#"},
    ['AuthorList-Last'] = {"author#-last", "author-last#", 
        "author-surname#", "author#-surname", "last#", 
        "surname#", "Author#", "author#", 
        "host#","subject-last#", "subject#-last", 
        "subject-surname#", "subject#-surname", "subject#", 
        "автор#-прізвище", "автор-прізвище#", "прізвище#",
         "автор#", "ведучий#", "ведуча#",
    	"суб'єкт#-прізвище", "суб'єкт-прізвище#", "суб'єкт#",
    },
    ['AuthorList-Link'] = {"author#-link", "author-link#", 
        "author#link", "authorlink#", "subject-link#",
		"subject#-link", "автор#-посилання",
        "автор-посилання#", "автор#посилання", "суб'єкт#-посилання", 
        "суб'єкт-посилання#"},
    ['AuthorList-Mask'] = {"author#-mask", "author-mask#", 
        "author#mask", "authormask#", "автор#-маска", "автор-маска#", 
        "автор#маска", "subject-mask#", "subject#-mask", "суб'єкт#-маска", "суб'єкт-маска#"},
    
    ['EditorList-First'] = {"editor#-first", 
        "editor-first#", "editor-given#", "editor#-given",
        "редактор#-ім'я", "редактор-ім'я#"},
    ['EditorList-Last'] = {"editor#-last", "editor-last#",
        "editor-surname#", "editor#-surname", "Editor#", "editor#",
        "редактор#-прізвище", "редактор-прізвище#", "редактор#"},
    ['EditorList-Link'] = {"editor#-link", "editor-link#", 
        "editor#link", "editorlink#", "редактор#-посилання", "редактор-посилання#", 
        "редактор#посилання"},
    ['EditorList-Mask'] = {"editor#-mask", "editor-mask#", 
        "editor#mask", "editormask#", "редактор#-маска", "редактор-маска#", 
        "редактор#маска"},
    
    ['InterviewerList-First'] = {'interviewer-first#', 'interviewer#-first',
		'interviewer-given#', 'interviewer#-given',
        "інтерв'юер#-ім'я", "інтерв'юер-ім'я#"},
	['InterviewerList-Last'] = {'interviewer-last#', 'interviewer#-last',
		'interviewer-surname#', 'interviewer#-surname', 'interviewer#',
		"інтерв'юер#-прізвище", "інтерв'юер-прізвище#", "інтерв'юер#"},
	['InterviewerList-Link'] = {'interviewer-link#', 'interviewer#-link', 
		"інтерв'юер#-посилання", "інтерв'юер-посилання#"},
	['InterviewerList-Mask'] = {'interviewer-mask#', 'interviewer#-mask', 
		"інтерв'юер#-маска", "інтерв'юер-маска#"},
    
    ['TranslatorList-First'] = {'translator-first#', 'translator#-first',
		'translator-given#', 'translator#-given',
        "перекладач#-ім'я", "перекладач-ім'я#"},
	['TranslatorList-Last'] = {'translator-last#', 'translator#-last',
		'translator-surname#', 'translator#-surname', 'translator#',
		"перекладач#-прізвище", "перекладач-прізвище#", "перекладач#" },
	['TranslatorList-Link'] = {'translator-link#', 'translator#-link', 
		"перекладач#-посилання", "перекладач-посилання#"},
	['TranslatorList-Mask'] = {'translator-mask#', 'translator#-mask', 
		"перекладач#-маска", "перекладач-маска#"},
}

--[[--------------------------< D A T E _ N A M E S >----------------------------------------------------------

Ця таблиця таблиць перераховує назви дати місцевою мовою та назви дат англійською мовою як запасного варіанту.
Код у Date_validation спершу прогляне за таблицею місцевої мови щодо дійсних назв дат.
Якщо назви дат не знайдено в таблиці місцевої мови, то код прогляне англійську таблицю.

Через те, що посилання на джерела можуть копіюватися з en.wiki в місцеву вікі, то необхідні англійські назви
коли використовується функція перекладу назв дат date_name_xlate().

У цих таблицях, нумерацція сезонів визначена
специфікацією Extended Date/Time Format (EDTF) (https://www.loc.gov/standards/datetime/)
яка стала частиною ISO 8601 у 2019. Дивіться «§Sub-year groupings». Стандарт
визначає різні відділи, використовуючи числа 21-41. CS1|2 підтримує лише загальні сезони.
EDTF підтримує різницію між сезонами північної і південної півкулі
але CS1|2 не може ніяк впровадити цю різницю.

33-36 = Квартал 1, Квартал 2, Квартал 3, Квартал 4 (кожні 3 місяці)

Стандарт не вирішує питання іменованих дат, тому з цією метою для шаблонів CS1|2,
Великдень та Різдво визначені тут як 98 та 99, що на певний час повинні бути за межами
інтервалу, що використовує ISO 8601 (EDTF).

local_date_names_from_mediawiki є булевим значенням. Коли встановлено:
	true — модуль стягне місцеві назви місяців з MediaWiki для обох значень date_names['local']['long'] та date_names['local']['short']
	false — модуль *не* стягне місцеві назви місяців з MediaWiki

Зверніть увагу: Не має жодної гарантії, що MediaWiki надасть короткі назви місяців. У вашій вікі ви можете перевірити
результати стягування з MediaWiki, ввівши цю команду у консолі налагодження (резульатат відсортовано за абеткою):
	=mw.dumpObject (p.date_names['local'])

Коли  модуль стягує назви з MediaWiki, то він не може стягнути квартали, сезони та іменовані назви дат
з MediaWiki. Їх потрібно вручну перекладати.

]]

local date_names = {
	['en'] = {																	-- англійською мовою
		['long']	= {['January'] = 1, ['February'] = 2, ['March'] = 3, ['April'] = 4, ['May'] = 5, ['June'] = 6, ['July'] = 7, ['August'] = 8, ['September'] = 9, ['October'] = 10, ['November'] = 11, ['December'] = 12},
		['short']	= {['Jan'] = 1, ['Feb'] = 2, ['Mar'] = 3, ['Apr'] = 4, ['May'] = 5, ['Jun'] = 6, ['Jul'] = 7, ['Aug'] = 8, ['Sep'] = 9, ['Oct'] = 10, ['Nov'] = 11, ['Dec'] = 12},
		['quarter'] = {['First Quarter'] = 33, ['Second Quarter'] = 34, ['Third Quarter'] = 35, ['Fourth Quarter'] = 36},
		['season']	= {['Winter'] = 24, ['Spring'] = 21, ['Summer'] = 22, ['Fall'] = 23, ['Autumn'] = 23},
		['named']	= {['Easter'] = 98, ['Christmas'] = 99},
		},
																				-- коли local_date_names_from_mediawiki = false
	['local'] = {																-- замініть ці англійські назви дат на відповідники місцевою мовою
		['long']	= {['Січень'] = 1, ['Лютий'] = 2, ['Березень'] = 3, ['Квітень'] = 4, ['Травень'] = 5, ['Червень'] = 6, ['Липень'] = 7, ['Серпень'] = 8, ['Вересень'] = 9, ['Жовтень'] = 10, ['Листопад'] = 11, ['Грудень'] = 12,
			['січня'] = 1, ['лютого'] = 2, ['березня'] = 3, ['квітня'] = 4, ['травня'] = 5, ['червня'] = 6, ['липня'] = 7, ['серпня'] = 8, ['вересня'] = 9, ['жовтня'] = 10, ['листопада'] = 11, ['грудня'] = 12
		},
		['short']	= {['Січ'] = 1, ['Лют'] = 2, ['Бер'] = 3, ['Квіт'] = 4, ['Трав'] = 5, ['Черв'] = 6, ['Лип'] = 7, ['Серп'] = 8, ['Вер'] = 9, ['Жовт'] = 10, ['Лист'] = 11, ['Груд'] = 12},
		['quarter'] = {['Перший квартал'] = 33, ['Другий квартал'] = 34, ['Третій квартал'] = 35, ['Четвертий квартал'] = 36},
		['season']	= {['Зима'] = 24, ['Весна'] = 21, ['Літо'] = 22, ['Осінь'] = 23, ['Осінь'] = 23},
		['named']	= {['Великдень'] = 98, ['Різдо'] = 99},
		},
	['inv_local_long'] = {[1] = 'січня', [2] = 'лютого', [3] = 'березня', [4] = 'квітня', [5] = 'травня', [6] = 'червня', [7] = 'липня', [8] = 'серпня', [9] = 'вересня', [10] = 'жовтня', [11] = 'листопада', [12] = 'грудня'},													-- використовується в переформатуванні та перекладі дат; скопіюйте date_names['local'].long де k/v є інвертованими: [1]='<назва місцевою мовою>' тощо.
	['inv_local_short'] = {[1] = 'Січ', [2] = 'Лют', [3] = 'Бер', [4] = 'Квіт', [5] = 'Трав', [6] = 'Черв', [7] = 'Лип', [8] = 'Серп', [9] = 'Вер', [10] = 'Жовт', [11] = 'Лист', [12] = 'Груд'}, -- використовується в переформатуванні та перекладі дат; скопіюйте date_names['local'].short де k/v є інвертованими: [1]='<назва місцевою мовою>' тощо.
	['inv_local_quarter'] = {},													-- використовується в перекладі дат; скопіюйте date_names['local'].quarter де k/v є інвертованими: [1]='<назва місцевою мовою>' тощо.
	['inv_local_season'] = {[24] = 'Зима', [21] = 'Весна', [22] = 'Літо', [23] = 'Осінь'},													-- використовується в перекладі дат; скопіюйте date_names['local'].season де k/v є інвертованими: [1]='<назва місцевою мовою>' тощо.
	['inv_local_named'] = {[98] = 'Великдень', [99] = 'Різдо'},													-- used in date translation; скопіюйте date_names['local'].named де k/v є інвертованими: [1]='<назва місцевою мовою>' тощо.
    ['local_digits'] = {['0'] = '0', ['1'] = '1', ['2'] = '2', ['3'] = '3', ['4'] = '4', ['5'] = '5', ['6'] = '6', ['7'] = '7', ['8'] = '8', ['9'] = '9'},	-- використовується для перетворення цифр місцевої мови у західні цифри 0-9
	--['xlate_digits'] = {},
	}

--[[--------------------------< S I N G L E - L E T T E R   S E C O N D - L E V E L   D O M A I N S >----------

це список tlds, про які відоми, що вони мають доменне ім'я другого рівня, що складається з однієї літери.
Цей список не включає ccTLDs, що приймаються в is_domain_name().

]]

local single_letter_2nd_lvl_domains_t = {'cash', 'company', 'foundation', 'org', 'today'};

-- Значення параметрів за замовчуванням
local defaults = {
    ['DeadURL'] = 'yes',
--    ['Separator'] = '.',
    ['AuthorSeparator'] = ';',
    ['EditorSeparator'] = ';',
    ['NameSeparator'] = ',',
    ['PPrefix'] = "с.&nbsp;",
    ['PPPrefix'] = "с.&nbsp;",    
}

--[[----------------------< L A N G U A G E   S U P P O R T >-------------------

Ці таблиці і константи підтримують різні мовноорієнтовані функціональності.

]]

local this_wiki_code = mw.getContentLanguage():getCode();						-- отримати мовний код цієї вікі
--local this_wiki_code = lang_obj:getCode();										-- отримати мовний код цієї вікі
if string.match (mw.site.server, 'wikidata') then
		this_wiki_code = mw.getCurrentFrame():callParserFunction('int', {'lang'}); -- на Вікіданих, тому використовувати натомість налаштування мови інтерфейсу
end

local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_code, 'all');	-- отримання таблиці пари назви/ тегу мови, що відома Вікімедії; використовується для тестів міжмовних вікі 

local inter_wiki_map = {};														-- таблиця міжмовних вікі префіксу, що є префіксами мовних кодів
	for k, v in pairs (mw.site.interwikiMap ('local')) do						-- проходимо через базову таблиця міжмовних вікі (що обмежена local)
		if mw_languages_by_tag_t[v["prefix"]] then								-- якщо префікс збігається з відомим мовним тегом
			inter_wiki_map[v["prefix"]] = true;									-- додаємо до нашої локальної таблиці
		end
	end
	
--[[--------------------< S C R I P T _ L A N G _ C O D E S >-------------------

Ці таблиця використовується, щоб зберігати двозначний ISO 639-1 і трьохзначний ISO 639-3
мовний код, застосовується лише у |script-title= та |script-chapter=

]]

local script_lang_codes = {
	'ab', 'am', 'ar', 'be', 'bg', 'bn', 'bo', 'bs', 'dv', 'dz', 'el', 'fa', 'gu', 'he',
	'hi', 'hy', 'ja', 'ka', 'kk', 'km', 'kn', 'ko', 'ku', 'ky', 'lo', 'mk',	'ml', 'mn',
	'mni', 'mr', 'my', 'ne', 'or', 'ota', 'pa', 'ps', 'ru', 'sd', 'si', 'sr', 'syc', 'ta',
	'te', 'tg', 'th', 'ti', 'tt', 'ug', 'uk', 'ur', 'uz', 'yi', 'yue', 'zh'
	};

--[[---------------< L A N G U A G E   R E M A P P I N G >----------------------

Ці таблиці містять інформацію про мови, що відрізняються від визначень MediaWiki
    
Для кожного ['<tag>'] = 'language name' у lang_code_remap{} повинен бути збіг із ['language name'] = {'language name', '<tag>'} у lang_name_remap{}
    
lang_tag_remap{}:
    ключем є завжди ISO 639-1, -2, -3 мовний код малими буквами або дійсний IETF мовний код малими буквами
    значенням є правильно написане і капіталізоване назву мову, що пов'язане з <tag>
    тільки одна нпзва мови на <tag>;
    пара кляча/значення має збігатися із записом у lang_name_remap{}

lang_name_remap{}:
	ключем є завжди назвою мови малими буквами
	значенням є таблицею, що містить правильно написане і капіталізоване назву мову [1] та пов'язаний із нею тег [2] (тег має збігатися із тегом ключа у lang_tag_remap{})
	може мати кілька ключів, що покликаються до спільної назви, якій надається перевага, і тегу; Наприклад:
		['kolsch'] і ['kölsch'] обидва покликаються до 'Kölsch' і 'ksh'    
]]
    
local lang_tag_remap = {														-- використовується для |language= та |script-title= / |script-chapter=
    ['als'] = 'Tosk Albanian',													-- MediaWiki поветрає Alemannisch 
    ['bh'] = 'Bihari',															-- MediaWiki викоритстовує 'bh' як піддоменне ім'я для Bhojpuri Wikipedia: bh.wikipedia.org
    ['bla'] = 'Blackfoot',														-- MediaWiki/IANA/ISO 639: Siksika; для використання ім'я, якому надає перевага en.wiki
    ['ca-valencia'] = 'Valencian',												-- IETF варіант Catalan
    ['fkv'] = 'Kven',															-- MediaWiki поветрає Kvensk
    ['ilo'] = 'Ilocano',														-- MediaWiki/IANA/ISO 639: Iloko; для використання ім'я, якому надає перевага en.wiki
    ['ksh'] = 'Kölsch',															-- MediaWiki: Colognian; для використання ім'я, якому надає перевага IANA/ISO 639
    ['ksh-x-colog'] = 'Colognian',												-- перезаписує MediaWiki ksh; немає коду IANA/ISO 639 для Colognian; приватний код IETF створено у Module:Lang/data
    ['mis-x-ripuar'] = 'Ripuarian',												-- перезаписує MediaWiki ksh; немає коду IANA/ISO 639 для Ripuarian; приватний код IETF створено уt Module:Lang/data
    ['nan-tw'] = 'Taiwanese Hokkien',											-- створено місце для MediaWiki/IANA/ISO 639 nan: Min Nan Chinese та підтримки ім'я, якому надає перевага en.wiki
    }

--[[---------------< P R O P E R T I E S _ C A T E G O R I E S >----------------

Категорії властовистей. Вони використовуються для дослідження якостей цитат.

]]

local prop_cats = {
	['long-vol'] = 'CS1: том із великими значення',									-- скоріше тимчасова категорія, що визначити масштаб значень |volume= більших ніж 4 символа
	['script'] = 'CS1 використовує письмо коду мови $2 ($1)',							-- |script-title=xx: має катагорію, що співпадає; $1 є назвою мови, $2 є ISO639-1 кодом
	['tracked-param'] = 'CS1 відстежує параметр: $1',							-- $1 є основною (прибирається нумерування) назвою параметра
	}
	
--[[-------------------< T I T L E _ T Y P E S >--------------------------------

Тут ми присвоємо CitationClass шаблону до  TitleType (стандартні значення для параметра |type=)

]]

local title_types = {
--	['AV-media-notes'] = 'Media notes',
	['document'] = 'Документ',
	['interview'] = 'Інтерв\'ю',
	['mailinglist'] = 'Список розсилки',
	['map'] = 'Карта',
	['podcast'] = 'Подкаст',
	['pressrelease'] = 'Пресреліз',
	['report'] = 'Звіт',
	['speech'] = 'Промова',
	['techreport'] = 'Технічний звіт',
	['thesis'] = 'Дипломна робота',
	}
	
--[[--------------------------< B U I L D _ K N O W N _ F R E E _ D O I _ R E G I S T R A N T S _ T A B L E >--

створює таблицю реєстрантів doi, які відомі тим, що до них є вільним доступ. У doi, ID реєстранта є серія цифр
між «10.» та першим «/»: у doi 10.1100/sommat, 1100 є ID реєстранта

]]

local function build_free_doi_registrants_table()
	local registrants_t = {};
	for _, v in ipairs ({
		'1100', '1155', '1186', '1371', '1629', '1989', '1999', '2147', '2196', '3285', '3389', '3390', '3410',
		'3748', '3814', '3847', '3897', '4061', '4089', '4103', '4172', '4175', '4236', '4239', '4240', '4251',
		'4252', '4253', '4254', '4291', '4292', '4329', '4330', '4331', '5194', '5306', '5312', '5313', '5314',
		'5315', '5316', '5317', '5318', '5319', '5320', '5321', '5334', '5402', '5409', '5410', '5411', '5412',
		'5492', '5493', '5494', '5495', '5496', '5497', '5498', '5499', '5500', '5501', '5527', '5528', '5662',
		'6064', '6219', '7167', '7217', '7287', '7482', '7490', '7554', '7717', '7766', '11131', '11569', '11647',
		'11648', '12688', '12703', '12715', '12998', '13105', '14293', '14303', '15215', '15412', '15560', '16995',
		'17645', '19080', '19173', '20944', '21037', '21468', '21767', '22261', '22459', '24105', '24196', '24966',
		'26775', '30845', '32545', '35711', '35712', '35713', '35995', '36648', '37126', '37532', '37871', '47128',
		'47622', '47959', '52437', '52975', '53288', '54081', '54947', '55667', '55914', '57009', '58647', '59081',
		}) do
			registrants_t[v] = true;											-- створюємо k/v таблицю відомих реєстрантів doi з вільним доступом
	end

	return registrants_t;
end

--[[--------------------------< K E Y W O R D S >-------------------------------

Ці таблиці містять ключові слова для тих параметрів, що мають визначений список допустимих ключових слів.

]]

--[[-------------------< K E Y W O R D S   T A B L E >--------------------------

Це список ключових слівth; кожен ключ у списку пов'язаний із таблицею
синонімічних ключових слів, що можуть бути з інших мов.

Для I18N: додайте ключові слова місцевої мови до значень у таблиці; не змінюйте ключ.
Наприклад, додаючи німецьке ключове слово «ja»:
	['affirmative'] = {'yes', 'true', 'y', 'ja'},

У зв'язку з тим, що шаблони CS1|2 зі статей en.wiki часто копіюються в інші місцеві вікі,
то рекомендується, щоб англійські ключові слова лишалися в цих таблицях.

]]

local keywords = {
	['amp'] = {'&', 'amp', 'ampersand'}, 										-- |name-list-style=
	['and'] = {'and', 'serial'},												-- |name-list-style=
	['affirmative'] = {'yes', 'true', 'y', 'так'},										-- |no-tracking=, |no-pp= -- Used by InternetArchiveBot
	['afterword'] = {'afterword'},												-- |contribution=
	['bot: unknown'] = {'bot: unknown'},										-- |url-status= -- Used by InternetArchiveBot
	['cs1'] = {'cs1'},															-- |mode=
	['cs2'] = {'cs2'},															-- |mode=
	['dead'] = {'dead', 'deviated'},											-- |url-status= -- Used by InternetArchiveBot
	['dmy'] = {'dmy'},															-- |df=
	['dmy-all'] = {'dmy-all'},													-- |df=
	['foreword'] = {'foreword'},												-- |contribution=
	['free'] = {'free'},														-- |<id>-access= -- Used by InternetArchiveBot
	['harv'] = {'harv'},														-- |ref=; this no longer supported; is_valid_parameter_value() called with <invert> = true
	['introduction'] = {'introduction'},										-- |contribution=
	['limited'] = {'limited'},													-- |url-access= -- Used by InternetArchiveBot
	['live'] = {'live'},														-- |url-status= -- Used by InternetArchiveBot
--	['mdy'] = {'mdy'},															-- |df=
--	['mdy-all'] = {'mdy-all'},													-- |df=
	['none'] = {'none'},														-- |postscript=, |ref=, |title=, |type= -- Used by InternetArchiveBot
	['off'] = {'off'},															-- |title= (potentially also: |title-link=, |postscript=, |ref=, |type=)
	['preface'] = {'preface'},													-- |contribution=
	['registration'] = {'registration'},										-- |url-access= -- Used by InternetArchiveBot
	['subscription'] = {'subscription'},										-- |url-access= -- Used by InternetArchiveBot
	['unfit'] = {'unfit'},														-- |url-status= -- Used by InternetArchiveBot
	['usurped'] = {'usurped'},													-- |url-status= -- Used by InternetArchiveBot
	['vanc'] = {'vanc'},														-- |name-list-style=
	['ymd'] = {'ymd'},															-- |df=
	['ymd-all'] = {'ymd-all'},													-- |df=
	--	['yMd'] = {'yMd'},														-- |df=; not supported at en.wiki
	--	['yMd-all'] = {'yMd-all'},												-- |df=; not supported at en.wiki
	}

--[[------------------------< X L A T E _ K E Y W O R D S >---------------------

this function builds a list, keywords_xlate{}, of the keywords found in keywords{} where the values from keywords{}
become the keys in keywords_xlate{} and the keys from keywords{} become the values in keywords_xlate{}:
	['affirmative'] = {'yes', 'true', 'y'},		-- in keywords{}
becomes
	['yes'] = 'affirmative',					-- in keywords_xlate{}
	['true'] = 'affirmative',
	['y'] = 'affirmative',

the purpose of this function is to act as a translator between a non-English keyword and its English equivalent
that may be used in other modules of this suite

]]

local function xlate_keywords ()
	local out_table = {};														-- output goes here
	for k, keywords_t in pairs (keywords) do									-- spin through the keywords table
		for _, keyword in ipairs (keywords_t) do								-- for each keyword
			out_table[keyword] = k;												-- create an entry in the output table where keyword is the key
		end
	end
	
	return out_table;
end

local keywords_xlate = xlate_keywords ();										-- the list of translated keywords

--[[----------------< M A K E _ K E Y W O R D S _ L I S T >---------------------

this function assembles, for parameter-value validation, the list of keywords appropriate to that parameter.

keywords_lists{}, is a table of tables from keywords{}

]]

local function make_keywords_list (keywords_lists)
	local out_table = {};														-- output goes here
	
	for _, keyword_list in ipairs (keywords_lists) do							-- spin through keywords_lists{} and get a table of keywords
		for _, keyword in ipairs (keyword_list) do								-- spin through keyword_list{} and add each keyword, ...
			table.insert (out_table, keyword);									-- ... as plain text, to the output list
		end
	end
	return out_table;
end


--[[----------------< K E Y W O R D S _ L I S T S >-----------------------------

this is a list of lists of valid keywords for the various parameters in [key].
Generally the keys in this table are the canonical en.wiki parameter names though
some are contrived because of use in multiple differently named parameters:
['yes_true_y'], ['id-access'].

The function make_keywords_list() extracts the individual keywords from the
appropriate list in keywords{}.

The lists in this table are used to validate the keyword assignment for the
parameters named in this table's keys.

]]

local keywords_lists = {
	['yes_true_y'] = make_keywords_list ({keywords.affirmative}),
	['contribution'] = make_keywords_list ({keywords.afterword, keywords.foreword, keywords.introduction, keywords.preface}),
	['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.ymd, keywords['ymd-all']}),
	--['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all']}),
	--	['df'] = make_keywords_list ({keywords.dmy, keywords['dmy-all'], keywords.mdy, keywords['mdy-all'], keywords.ymd, keywords['ymd-all'], keywords.yMd, keywords['yMd-all']}),	-- not supported at en.wiki
	['mode'] = make_keywords_list ({keywords.cs1, keywords.cs2}),
	['name-list-style'] = make_keywords_list ({keywords.amp, keywords['and'], keywords.vanc}),
	['ref'] = make_keywords_list ({keywords.harv}),								-- inverted check; |ref=harv no longer supported
	['url-access'] = make_keywords_list ({keywords.subscription, keywords.limited, keywords.registration}),
	['url-status'] = make_keywords_list ({keywords.dead, keywords.live, keywords.unfit, keywords.usurped, keywords['bot: unknown']}),
	['id-access'] = make_keywords_list ({keywords.free}),
	}


--[[---------------------< S T R I P M A R K E R S >----------------------------

Часті шаблони визначення шляху для stripmarkers, щоб ми не мали необхідності so that we don't have to go
їх шукати, якщо (коли) MediaWiki змінить їхню форму.

]]

local stripmarkers = {
	['any'] = '\127[^\127]*UNIQ%-%-(%a+)%-[%a%d]+%-QINU[^\127]*\127',			-- ловить і повертає назву stripmarker
	['math'] = '\127[^\127]*UNIQ%-%-math%-[%a%d]+%-QINU[^\127]*\127'			-- math stripmarkers використовується в coins_cleanup() та coins_replace_math_stripmarker()
	}
	
--[[

Індійське письмо використовує з'єднувач нульової ширини як модифікатор символів, тому
символи zwj мають бути залишені. Цей шаблон охоплює всі символи unicode
для цих мов:
	Devanagari					0900–097F – https://unicode.org/charts/PDF/U0900.pdf
		Devanagari extended		A8E0–A8FF – https://unicode.org/charts/PDF/UA8E0.pdf
	Bengali						0980–09FF – https://unicode.org/charts/PDF/U0980.pdf
	Gurmukhi					0A00–0A7F – https://unicode.org/charts/PDF/U0A00.pdf
	Gujarati					0A80–0AFF – https://unicode.org/charts/PDF/U0A80.pdf
	Oriya						0B00–0B7F – https://unicode.org/charts/PDF/U0B00.pdf
	Tamil						0B80–0BFF – https://unicode.org/charts/PDF/U0B80.pdf
	Telugu						0C00–0C7F – https://unicode.org/charts/PDF/U0C00.pdf
	Kannada						0C80–0CFF – https://unicode.org/charts/PDF/U0C80.pdf
	Malayalam					0D00–0D7F – https://unicode.org/charts/PDF/U0D00.pdf
плюс не зовсім необхідні індійські писемсності для Sinhala та Burmese:
	Sinhala						0D80-0DFF - https://unicode.org/charts/PDF/U0D80.pdf
	Myanmar						1000-109F - https://unicode.org/charts/PDF/U1000.pdf
		Myanmar extended A		AA60-AA7F - https://unicode.org/charts/PDF/UAA60.pdf
		Myanmar extended B		A9E0-A9FF - https://unicode.org/charts/PDF/UA9E0.pdf
шаблон використовується в has_invisible_chars() та coins_cleanup()

]]

local indic_script = '[\224\164\128-\224\181\191\224\163\160-\224\183\191\225\128\128-\225\130\159\234\167\160-\234\167\191\234\169\160-\234\169\191]';	


--[[===================<< E R R O R   M E S S A G I N G >>======================
]]

--[[----------< E R R O R   M E S S A G E   S U P P L I M E N T S >-------------

I18N для повідомлень, в яким потрібно подавати додатковий специфічний текст, що
опису причину, через яку сталася помилка

]]
local err_msg_supl = {
	['char'] = 'недійсний символ',											-- |isbn=, |sbn=
	['check'] = 'контрольна сума',											-- |isbn=, |sbn=
	['form'] = 'недійсна форма',											-- |isbn=, |sbn=
	['group'] = 'недійсна група ідентифікатора',							-- |isbn=
	['initials'] = 'ініціали',												-- Ванкувер
	['invalid language code'] = 'недійсний код мови',						-- |script-<param>=
	['journal'] = 'журнал',													-- |bibcode=
	['length'] = 'довжина',													-- |isbn=, |sbn=
	['length accusative'] = 'довжину',										-- |bibcode=
	['missing comma'] = 'пропущено кому',									-- Ванкувер
	['missing prefix'] = 'пропущено префікс',								-- |script-<param>=
	['missing title part'] = 'пропущено частину title',						-- |script-<param>=
	['name'] = 'ім\'я',														-- Ванкувер
	['non-Latin char'] = 'нелатинські символи',								-- Ванкувер
	['prefix'] = 'недійсний префікс',										-- |isbn=
	['punctuation'] = 'пунктуація',										    -- Ванкувер
	['suffix'] = 'суфікс',													-- Ванкувер
	['unknown language code'] = 'невідомий код мови',						-- |script-<param>=
	['value'] = 'значення',													-- |bibcode=
	['year'] = 'рік',														-- |bibcode=
	}



--[[
Таблиця умов помилок

Далі йде список ідентифікаторів для різних умов помилок, визначених у коді.
Для кожного ідентифікаторі визначено текст повідомлення для відображення,
категорія сторінок з помилками, до якої включати, а також чи потрібно
повідомлення про помилку відображати як прихований коментар.

У разі будь-яких змін до якірців потрібно робити ідентичні зміни до відповідних
якірців на сторінці Довідка:Помилки посилань на джерела
]]

local error_conditions = {
    err_accessdate_missing_url = {
        message = '<code class="cs1-code">&#124;access-date=</code> вимагає <code class="cs1-code">&#124;url=</code>',
        anchor = 'accessdate_missing_url',
        category = 'Помилки CS1: Сторінки з посиланнями на джерела з access-date і без URL',
        hidden = false },
    err_archive_date_missing_url = {
		message = '<code class="cs1-code">&#124;archive-date=</code> вимагає <code class="cs1-code">&#124;archive-url=</code>',
		anchor = 'archive_date_missing_url',
		category = 'Помилки CS1: Сторінки з помилками посилань на джерела з archive-url',
		hidden = false
		},    
    err_archive_missing_date = {
        message = '<code class="cs1-code">&#124;archive-url=</code> вимагає <code class="cs1-code">&#124;archive-date=</code>',
        anchor = 'archive_missing_date',
        category = 'Помилки CS1: Сторінки з помилками посилань на джерела з archive-url',
        hidden = false },
    err_archive_missing_url = {
        message = '<code class="cs1-code">&#124;archive-url=</code> вимагає <code class="cs1-code">&#124;url=</code>',
        anchor = 'archive_missing_url',
        category = 'Помилки CS1: Сторінки з помилками посилань на джерела з archive-url',
        hidden = false },
	err_arxiv_missing = {
		message = '<code class="cs1-code">&#124;arxiv=</code> є обов\'язковим параметром',
		anchor = 'arxiv_missing',
		category = 'Помилки CS1: Сторінки з помилками arXiv',											-- така ж сама як і в bad arxiv
		hidden = false
		},
	err_asintld_missing_asin = {
		message = '<code class="cs1-code">&#124;$1=</code> вимагає <code class="cs1-code">&#124;asin=</code>',	-- $1 є ім'ям параметра
		anchor = 'asintld_missing_asin',
		category = 'Помилки CS1: Сторінки з помилками ASIN TLD',
		hidden = false
		},
	err_bad_arxiv = {
		message = 'Перевірте значення <code class="cs1-code">&#124;arxiv=</code>',
		anchor = 'bad_arxiv',
		category = 'Помилки CS1: Сторінки з помилками arXiv',
		hidden = false
		},
	err_bad_asin = {
		message = 'Перевірте значення <code class="cs1-code">&#124;asin=</code>',
		anchor = 'bad_asin',
		category ='Помилки CS1: Сторінки з помилками ASIN',
		hidden = false
		},
	err_bad_asin_tld = {
		message = 'Перевірте значення <code class="cs1-code">&#124;asin-tld=</code>',
		anchor = 'bad_asin_tld',
		category ='Помилки CS1: Сторінки з помилками ASIN TLD',
		hidden = false
		},
	err_bad_bibcode = {
		message = 'Перевірте $1 <code class="cs1-code">&#124;bibcode=</code>',		-- $1 є детальним описом повідомлення про помлку
		anchor = 'bad_bibcode',
		category = 'Помилки CS1: Сторінки з помилками bibcode',
		hidden = false
		},
	err_bad_biorxiv = {
		message = 'Перевірте значення <code class="cs1-code">&#124;biorxiv=</code>',
		anchor = 'bad_biorxiv',
		category = 'Помилки CS1: Сторінки з помилками bioRxiv',
		hidden = false
		},
	err_bad_citeseerx = {
		message = 'Перевірте значення <code class="cs1-code">&#124;citeseerx=</code>',
		anchor = 'bad_citeseerx',
		category = 'Помилки CS1: Сторінки з помилками citeseerx',
		hidden = false
		},
--	err_bad_date = {
--		message = 'Перевірте значення дати у: $1',									-- $1 є списком назв параметрів
--		anchor = 'bad_date',
--		category = 'Помилки CS1: Сторінки з помилками дати',
--		hidden = false
--		}, (додано буде в наступних оновленнях)
    err_bad_doi = {
        message = 'Перевірте значення <code class="cs1-code">&#124;doi=</code>',
        anchor = 'bad_doi',
        category = 'Сторінки з помилками DOI',
        hidden = false },
	err_bad_hdl = {
		message = 'Перевірте значення <code class="cs1-code">&#124;hdl=</code>',
		anchor = 'bad_hdl',
		category = 'Помилки CS1: Сторінки з помилками HDL',
		hidden = false
		},
    err_bad_isbn = {
        message = 'Перевірте значення <code class="cs1-code">&#124;isbn=</code>: $1',
        anchor = 'bad_isbn',
        category = 'Сторінки з помилками ISBN',
        hidden = false },
    err_bad_ismn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;ismn=</code>',
		anchor = 'bad_ismn',
		category = 'Помилки CS1: Сторінки з помилками ISMN',
		hidden = false
		},
	err_bad_issn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;$1issn=</code>',	-- $1 є 'e' або '' для eissn або issn
		anchor = 'bad_issn',
		category = 'Помилки CS1: Сторінки з помилками ISSN',
		hidden = false
		},
	err_bad_jfm = {
		message = 'Перевірте значення <code class="cs1-code">&#124;jfm=</code>',
		anchor = 'bad_jfm',
		category = 'Помилки CS1: Сторінки з помилками JFM',
		hidden = false
		},
	err_bad_jstor = {
		message = 'Перевірте значення <code class="cs1-code">&#124;jstor=</code>',
		anchor = 'bad_jstor',
		category = 'Помилки CS1: Сторінки з помилками JSTOR',
		hidden = false
		},
	err_bad_lccn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;lccn=</code>',
		anchor = 'bad_lccn',
		category = 'Помилки CS1: Сторінки з помилками LCCN',
		hidden = false
		},
	err_bad_medrxiv = {
		message = 'Перевірте значення <code class="cs1-code">&#124;medrxiv=</code>',
		anchor = 'bad_medrxiv',
		category = 'Помилки CS1: Сторінки з помилками medRxiv',
		hidden = false
		},
	err_bad_mr = {
		message = 'Перевірте значення <code class="cs1-code">&#124;mr=</code>',
		anchor = 'bad_mr',
		category = 'Помилки CS1: Сторінки з помилками MR',
		hidden = false
		},
	err_bad_oclc = {
		message = 'Перевірте значення <code class="cs1-code">&#124;oclc=</code>',
		anchor = 'bad_oclc',
		category = 'Помилки CS1: Сторінки з помилками OCLC',
		hidden = false
		},
    err_bad_ol = {
        message = 'Перевірте значення <code class="cs1-code">&#124;ol=</code>',
        anchor = 'bad_ol',
        category = 'Сторінки з помилками OL',
        hidden = false },
    err_bad_osti = {
		message = 'Перевірте значення <code class="cs1-code">&#124;osti=</code>',
		anchor = 'bad_osti',
		category = 'Помилки CS1: Сторінки з помилками OSTI',
		hidden = false
		},    
    err_bad_paramlink = {														-- для |title-link=, |author/editor/translator-link=, |series-link=, |episode-link=
		message = 'Перевірте значення <code class="cs1-code">&#124;$1=</code>',		-- $1 є ім'ям параметра
		anchor = 'bad_paramlink',
		category = 'Помилки CS1: Сторінки з помилками використання параметра link',
		hidden = false
		},
	err_bad_pmc = {
		message = 'Перевірте значення <code class="cs1-code">&#124;pmc=</code>',
		anchor = 'bad_pmc',
		category = 'Помилки CS1: Сторінки з помилками PMC',
		hidden = false
		},
	err_bad_pmid = {
		message = 'Перевірте значення <code class="cs1-code">&#124;pmid=</code>',
		anchor = 'bad_pmid',
		category = 'Помилки CS1: Сторінки з помилками PMID',
		hidden = false
		},
	err_bad_rfc = {
		message = 'Перевірте значення <code class="cs1-code">&#124;rfc=</code>',
		anchor = 'bad_rfc',
		category = 'Помилки CS1: Сторінки з помилками RFC',
		hidden = false
		},
	err_bad_s2cid = {
		message = 'Перевірте значення <code class="cs1-code">&#124;s2cid=</code>',
		anchor = 'bad_s2cid',
		category = 'Помилки CS1: Сторінки з помилками S2CID',
		hidden = false
		},
	err_bad_sbn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;sbn=</code>: $1',	-- $1 є детальним описом повідомлення про помлку
		anchor = 'bad_sbn',
		category = 'Помилки CS1: Сторінки з помилками SBN',
		hidden = false
		},
	err_bad_ssrn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;ssrn=</code>',
		anchor = 'bad_ssrn',
		category = 'Помилки CS1: Сторінки з помилками SSRN',
		hidden = false
		},
    err_bad_url = {
        message = 'Перевірте схему <code class="cs1-code">&#124;url=</code>',
        anchor = 'bad_url',
        category = 'Сторінки з помилками URL',
        hidden = false },
	err_bad_usenet_id = {
		message = 'Перевірте значення <code class="cs1-code">&#124;message-id=</code>',
		anchor = 'bad_message_id',
		category = 'Помилки CS1: Сторінки з помилками message-id',
		hidden = false
		},
	err_bad_zbl = {
		message = 'Перевірте значення <code class="cs1-code">&#124;zbl=</code>',
		anchor = 'bad_zbl',
		category = 'Помилки CS1: Сторінки з помилками Zbl',
		hidden = false
		},
    err_bare_url_missing_title = {
        message = 'Пропущений або порожній <code class="cs1-code">&#124;title=</code>',
        anchor = 'bare_url_missing_title',
        category = 'Сторінки з URL без назв',
        hidden = false },
    err_biorxiv_missing = {
		message = '<code class="cs1-code">&#124;biorxiv=</code> є обов\'язковим параметром',
		anchor = 'biorxiv_missing',
		category = 'Помилки CS1: Сторінки з помилками bioRxiv',										-- така ж сама як і в bad bioRxiv
		hidden = false
		},    
    err_citation_missing_title = {
        message = 'Пропущений або порожній <code class="cs1-code">&#124;title=</code>',
        anchor = 'citation_missing_title',
        category = 'Сторінки з посиланнями на джерела без назв',
        hidden = false },
    err_citeseerx_missing = {
		message = '<code class="cs1-code">&#124;citeseerx=</code> є обов\'язковим параметром',
		anchor = 'citeseerx_missing',
		category = 'Помилки CS1: Сторінки з помилками citeseerx',										-- така ж сама як і в bad citeseerx
		hidden = false
		},    
    err_cite_web_url = {
        message = 'Пропущений або порожній <code class="cs1-code">&#124;url=</code>',
        anchor = 'cite_web_url',
        category = 'Сторінки з посиланнями на web-джерела без URL',
        hidden = false },
    err_class_ignored = {
		message = 'Проігноровано <code class="cs1-code">&#124;class=</code>',
		anchor = 'class_ignored',
		category = 'Помилки CS1: Сторінки з помилками використання параметра class',
		hidden = false
		},
	err_deprecated_params = {
		message = 'Cite використовує застарілий параметр <code class="cs1-code">&#124;$1=</code>',	-- $1 є ім'ям параметра
		anchor = 'deprecated_params',
		category = 'Помилки CS1: Сторінки з посиланнями на джерела зі застарілими параметрами',
		hidden = false
		},
	err_disp_name = {
		message = 'Недійсний <code class="cs1-code">&#124;$1=$2</code>',			-- $1 є ім'ям параметра $2 є значенням параметру
		anchor = 'disp_name',
		category = 'Помилки CS1:Сторінки з недійсним значенням параметра display-names',
		hidden = false,
		},
	err_doibroken_missing_doi = {
		message = '<code class="cs1-code">&#124;$1=</code> вимагає <code class="cs1-code">&#124;doi=</code>',	-- $1 є ім'ям параметра
		anchor = 'doibroken_missing_doi',
		category = 'Сторінки з помилками DOI',
		hidden = false
		},
	err_embargo_missing_pmc = {
		message = '<code class="cs1-code">&#124;$1=</code> вимагає <code class="cs1-code">&#124;pmc=</code>',	-- $1 є ім'ям параметра
		anchor = 'embargo_missing_pmc',
		category = 'Помилки CS1: Сторінки з помилками використання параметра PMC embargo',
		hidden = false
		},
    err_empty_citation = {
        message = 'Порожнє посилання на джерело',
        anchor = 'empty_citation',
        category = 'Сторінки з порожніми посиланнями на джерела',
        hidden = false },
	err_etal = {
		message = 'Явне використання «та ін.» у: <code class="cs1-code">&#124;$1=</code>',	-- $1 є ім'ям параметра
		anchor = 'explicit_et_al',
		category = 'Помилки CS1: Сторінки з явним використання та ін.',
		hidden = false
		},
	err_extra_pages = {
        message = 'Зайве <code class="cs1-code">&#124;pages=</code> або <code class="cs1-code">&#124;at=</code>',
        anchor = 'extra_pages',
        category = 'Сторінки з посиланнями на джерела з суперечливими параметрами сторінок',
        hidden = false },
	err_first_missing_last = {
		message = '<code class="cs1-code">&#124;$1=</code> з пропущеним <code class="cs1-code">&#124;$2=</code>',	-- $1 є псевдонімом first, $2 є відповідним псевдонімом last
		anchor = 'first_missing_last',
		category = 'Помилки CS1: Сторінки з пропущеним ім\'ям',									-- author, contributor, editor, interviewer, translator
		hidden = false
		},
	err_format_missing_url = {
        message = '<code class="cs1-code">&#124;format=</code> вимагає <code class="cs1-code">&#124;url=</code>',
        anchor = 'format_missing_url',
        category = 'Сторінки з посиланнями на джерела з format і без URL',
        hidden = false },
    err_invalid_param_val = {
		message = 'Недійсний <code class="cs1-code">&#124;$1=$2</code>',			-- $1 є ім'ям параметра $2 є значенням параметру
		anchor = 'invalid_param_val',
		category = 'Помилки CS1:Сторінки з недійсним значенням параметра',
		hidden = false
		},
	err_medrxiv_missing = {
		message = '<code class="cs1-code">&#124;medrxiv=</code> є обов\'язковим параметром',
		anchor = 'medrxiv_missing',
		category = 'Помилки CS1: Сторінки з помилками medRxiv',										-- така ж сама як і в bad medRxiv
		hidden = false
		},
	err_missing_name = {
		message = 'Пропущено <code class="cs1-code">&#124;$1$2=</code>',			-- $1 є видозміненим NameList; $2 є лічильникомr
		anchor = 'missing_name',
		category = 'Помилки CS1: Сторінки з пропущеним ім\'ям',									-- author, contributor, editor, interviewer, translator
		hidden = false
		},
	err_param_access_requires_param = {
		message = '<code class="cs1-code">&#124;$1-access=</code> вимагає <code class="cs1-code">&#124;$1=</code>',	-- $1 є ім'ям параметра
		anchor = 'param_access_requires_param',
		category = 'Помилки CS1: Сторінки з помилками використання параметра param-access',
		hidden = false
		},
	err_parameter_ignored = {
        message = 'Проігноровано невідомий параметр <code class="cs1-code">&#124;$1=</code>',
        anchor = 'parameter_ignored',
        category = 'Сторінки з посиланнями на джерела з параметрами, що не підтримуються',
        hidden = false },
    err_parameter_ignored_suggest = {
        message = 'Проігноровано невідомий параметр <code class="cs1-code">&#124;$1=</code> (можливо, <code class="cs1-code">&#124;$2=</code>?)',
        anchor = 'parameter_ignored_suggest',
        category = 'Сторінки з посиланнями на джерела з параметрами, що не підтримуються',
        hidden = false },
    err_redundant_parameters = {
        message = 'Вказано більш, ніж один $1',
        anchor = 'redundant_parameters',
        category = 'Сторінки з посиланнями на джерела з зайвими параметрами',
        hidden = false },    
	err_script_parameter = {
		message = 'Недійсний <code class="cs1-code">&#124;$1=</code>: $2',		-- $1 є назвою параметра $2 є мовним кодом письма або детальною інформацією про помилку
		anchor = 'script_parameter',
		category = 'Помилки CS1:Сторінки з недійсним значенням параметра script',
		hidden = false
		},
	err_ssrn_missing = {
		message = '<code class="cs1-code">&#124;ssrn=</code> є обов\'язковим параметром',
		anchor = 'ssrn_missing',
		category = 'Помилки CS1: Сторінки з помилками SSRN',
		hidden = false
		},
	err_text_ignored = {
        message = 'Текст «$1» проігноровано',
        anchor = 'text_ignored',
        category = 'Сторінки з посиланнями на джерела з параметрами без назв',
        hidden = false },
    err_trans_missing_title = {
        message = '<code class="cs1-code">&#124;trans-$1=</code> вимагає <code class="cs1-code">&#124;$1=</code> або <code class="cs1-code">&#124;script-$1=</code>',
        anchor = 'trans_missing_title',
        category = 'Сторінки з посиланнями на джерела з перекладеними назвами без оригіналу',
        hidden = false },
    err_trans_missing_quote = {
        message = '<code class="cs1-code">&#124;trans-quote=</code> вимагає <code class="cs1-code">&#124;quote=</code> або <code class="cs1-code">&#124;script-quote=</code>',
        anchor = 'trans_missing_quote',
        category = 'Помилки CS1:Сторінки з посиланнями на джерела з перекладеними цитатами без оригіналу',
        hidden = false },
    err_param_unknown_empty = {
		message = 'Cite має пуст$3 невідом$3 параметр$1: $2',						-- $1 є «и» або пустим рядком; $2 є списком пустих невідомих параметрів; $3 є «і» або «ий»
		anchor = 'param_unknown_empty',
		category = 'Помилки CS1: Сторінки з посиланнями на джерела з пустими невідомими параметрами',
		hidden = false
		},    
	err_vancouver = {
		message = 'Помилка стилю Ванкувера: $1 в імені $2',						-- $1 є описом помилки, $2 є н-те ім'я
		anchor = 'vancouver',
		category = 'Помилки CS1: Сторінки з помилками стилю Ванкувера',
		hidden = false
		},
    err_wikilink_in_url = {
        message = 'Назва URL містить вбудоване вікіпосилання',
        anchor = 'wikilink_in_url',
        category = 'Сторінки з посиланнями на джерела, що мають вікіпосилання у назвах URL',
        hidden = false },
        
--[[--------------------------< M A I N T >-------------------------------------

повідомлення обслуговування не мають значень у пареметрі message (message = nil); в інакшому випадку
структура така сама як у повідомлення про помилку

]]

	maint_bibcode = {
		message = nil,
		anchor = 'bibcode',
		category = 'Обслуговування CS1: Сторінки з bibcode, який містить тимчасовий ідентифікатор',
		hidden = true,
		},
	maint_bot_unknown = {
		message = nil,
		anchor = 'bot:_unknown',
		category = 'Обслуговування CS1: bot: Сторінки з посиланнями на джерела, де статус оригінального URL невідомий',
		hidden = true,
		},
	maint_date_auto_xlated = {													-- date auto-translation not supported by en.wiki
		message = nil,
		anchor = 'date_auto_xlated',
		category = 'CS1 maint: date auto-translated',
		hidden = true,
		},
	maint_date_format = {
		message = nil,
		anchor = 'date_format',
		category = 'CS1 maint: date format',
		hidden = true,
		},
	maint_date_year = {
		message = nil,
		anchor = 'date_year',
		category = 'CS1 maint: date and year',
		hidden = true,
		},
	maint_doi_ignore = {
		message = nil,
		anchor = 'doi_ignore',
		category = 'Обслуговування CS1: Сторінки із проігнорованими помилками DOI',
		hidden = true,
		},
	maint_doi_inactive = {
		message = nil,
		anchor = 'doi_inactive',
		category = 'Обслуговування CS1: Сторінки із неактивним DOI',
		hidden = true,
		},
	maint_doi_inactive_dated = {
		message = nil,
		anchor = 'doi_inactive_dated',
		category = 'Обслуговування CS1: Сторінки із неактивним DOI станом на $2$3$1',						-- $1 є роком, $2 є назвою місяця або пустим рядком, $3 є пробілом або пустим рядком
		hidden = true,
		},
	maint_doi_unflagged_free = {
		message = nil,
		anchor = 'doi_unflagged_free',
		category = 'Обслуговування CS1: Сторінки із непозначеним DOI з безкоштовним доступом',
		hidden = true,
		},
	maint_isbn_ignore = {
		message = nil,
		anchor = 'ignore_isbn_err',
		category = 'Обслуговування CS1: Сторінки із проігнорованими помилками ISBN',
		hidden = true,
		},
	maint_issn_ignore = {
		message = nil,
		anchor = 'ignore_issn',
		category = 'Обслуговування CS1: Сторінки із проігнорованими помилками ISSN',
		hidden = true,
		},
	maint_jfm_format = {
		message = nil,
		anchor = 'jfm_format',
		category = 'Обслуговування CS1: Сторінки з JFM з іншим форматом',
		hidden = true,
		},
	maint_mr_format = {
		message = nil,
		anchor = 'mr_format',
		category = 'Обслуговування CS1: Сторінки з MR з іншим форматом',
		hidden = true,
		},
	maint_pmc_embargo = {
		message = nil,
		anchor = 'embargo',
		category = 'Обслуговування CS1: Сторінки з PMC, в якого вийшов термін ембарго',
		hidden = true,
		},
	maint_pmc_format = {
		message = nil,
		anchor = 'pmc_format',
		category = 'Обслуговування CS1: Сторінки з PMC з іншим форматом',
		hidden = true,
		},
	maint_postscript = {
		message = nil,
		anchor = 'postscript',
		category = 'Обслуговування CS1: Сторінки зі значенням параметра postscript, що збігається зі стандартним значенням в обраному режимі',
		hidden = true,
		},
	maint_unfit = {
		message = nil,
		anchor = 'unfit',
		category = 'Обслуговування CS1:Сторінки з посиланнями на джерела, що мають непридатні URL',
		hidden = true,
		},
	maint_zbl = {
		message = nil,
		anchor = 'zbl',
		category = 'Обслуговування CS1: Сторінки з Zbl, який містить тимчасовий ідентифікатор',
		hidden = true,
		},
		
}

--[[--------------------------< I D _ H A N D L E R S >--------------------------------------------------------

Нижче містяться список значень для різних визначених ідентифікаторів. Для кожного
ідентифікатора ми визначаємо різну інформацію, необхідну для правильного відображення
ідентифікатора в посиланні на джерела.

	parameters: список псевдонімів параметра для цього ідентифікатора; перша у списку назва є канонічною назвою
	link: назва статті Вікіпедії
	redirect: місцеве перенаправлення на місцеву назву статті Вікіпедії; у en.wiki, 'ISBN (identifier)' є перенаправленням на 'International Standard Book Number'
	q: число q Вікіданих для ідентифікатора
	label: текст, що йде перед ідентифікатором; він посилається на статтю Вікіпедії (у цій послідовності):
		перенаправлення з id_handlers['<id>'].redirect коли use_identifier_redirects є true
		назва статті, що надана Вікіданими для місцевої вікі з id_handlers['<id>'].q
		назва місцевої статті з id_handlers['<id>'].link
	prefix: перша частина URL, що буде з'єднана з другою частиною, яка зазвичай містить ідентифікатор
	suffix: необов'язкова третя частина, що додається після ідентифікатора
	encode: true, якщо URI повинен закодувати відсотки; в іншому випадку false
	COinS: посилання на ідентифікатор або ключове слово для використання в COinS:
		для ідентифікаторів, що зареєстровані у info-uri.info, використовуйте: info:.... де '...' є відвідною назвою (label) ідентифікатора 
		для ідентифікаторів, що мають ключові слова COinS, використовуйте ключові слова: rft.isbn, rft.issn, rft.eissn
		для |asin= та |ol=, які вимагають формування в одне ціле, використовуйте ключове слово: url
		для інших, де створюється URL, використовуючи значення в prefix/suffix та #label, використовуйте ключове слово: pre (не перевіряється; будь-який інший текст, ніж 'info', 'rft' або 'url', працюватиме тут)
		встановіть nil, щоб лишити ідентифікатор поза межами COinS
	separator: символ або текст між label та ідентифікатором у зображуваному посиланні на джерела
	id_limit:  для тих ідентифікаторів зі встановленими обмеженнями, ця властивість містить верхню межу ліміту
	access: використовуйте цей параметр, щоб встановити рівень доступу для всіх використань цього ідентифікатора.
		значення має бути дійсним рівнем доступу для ідентифікатора (дивіться ['id-access'] у цьому файлі).
	custom_access: щоб увімкнути користувацький рівень доступу для ідентифікатора, зазначте назву параметру, що
		буде керувати встановленням рівнів (зазвичай 'id-access')
	custom_access_uk: українські назви для параметрів, що зазначені в custom_access	
		
]]

local id_handlers = {
	['ARXIV'] = {
		parameters = {'arxiv', 'ARXIV', 'eprint'},
		link = 'arXiv',
		redirect = 'arXiv (ідентифікатор)',
		q = 'Q118398',
		label = 'arXiv',
		prefix = 'https://arxiv.org/abs/',
		encode = false,
		COinS = 'info:arxiv',
		separator = ':',
		access = 'free',														-- вільний до перегляду
		},
	['ASIN'] = {
		parameters = { 'asin', 'ASIN' },
		link = 'Amazon Standard Identification Number',
		redirect = 'ASIN (ідентифікатор)',
		q = 'Q1753278',
		label = 'ASIN',
		prefix = 'https://www.amazon.',
		COinS = 'url',
		separator = '&nbsp;',
		encode = false;
		},
	['BIBCODE'] = {
		parameters = {'bibcode', 'BIBCODE'},
		link = 'Bibcode',
		redirect = 'Bibcode (ідентифікатор)',
		q = 'Q25754',
		label = 'Bibcode',
		prefix = 'https://ui.adsabs.harvard.edu/abs/',
		encode = false,
		COinS = 'info:bibcode',
		separator = ':',
		custom_access = 'bibcode-access', 
		custom_access_uk = 'доступ-до-bibcode',
		},
	['BIORXIV'] = {
		parameters = {'biorxiv'},
		link = 'bioRxiv',
		redirect = 'bioRxiv (ідентифікатор)',
		q = 'Q19835482',
		label = 'bioRxiv',
		prefix = 'https://doi.org/',
		COinS = 'pre',															-- використовує значення префіксу
		access = 'free',														-- вільний до перегляду
		encode = true,
		separator = '&nbsp;',
		},
	['CITESEERX'] = {
		parameters = {'citeseerx'},
		link = 'CiteSeerX',
		redirect = 'CiteSeerX (ідентифікатор)',
		q = 'Q2715061',
		label = 'CiteSeerX',
		prefix = 'https://citeseerx.ist.psu.edu/viewdoc/summary?doi=',
		COinS =  'pre',															-- використовує значення префіксу
		access = 'free',														-- вільний до перегляду
		encode = true,
		separator = '&nbsp;',
		},
	['DOI'] = {																	-- Використовується InternetArchiveBot
		parameters = { 'doi', 'DOI'},
		link = 'Цифровий ідентифікатор об\'єкта',
		redirect = 'doi (ідентифікатор)',
		q = 'Q25670',
		label = 'doi',
		prefix = 'https://doi.org/',
		COinS = 'info:doi',
		separator = ':',
		encode = true,
		custom_access = 'doi-access', 
		custom_access_uk = 'доступ-до-doi',
		},
	['EISSN'] = {
		parameters = {'eissn', 'EISSN'},
		link = 'International Standard Serial Number#Electronic ISSN',
		redirect = 'eISSN (ідентифікатор)',
		q = 'Q46339674',
		label = 'eISSN',
		prefix = 'https://www.worldcat.org/issn/',
		COinS = 'rft.eissn',
		encode = false,
		separator = '&nbsp;',
		},
	['HDL'] = {
		parameters = { 'hdl', 'HDL' },
		link = 'Handle System',
		redirect = 'hdl (ідентифікатор)',
		q = 'Q3126718',
		label = 'hdl',
		prefix = 'https://hdl.handle.net/',
		COinS = 'info:hdl',
		separator = ':',
		encode = true,
		custom_access = 'hdl-access', 
		custom_access_uk = 'доступ-до-hdl',
		},
	['ISBN'] = {																-- Використовується InternetArchiveBot
		parameters = {'isbn', 'ISBN', 'isbn13', 'ISBN13'},
		link = 'International Standard Book Number',
		redirect = 'ISBN (ідентифікатор)',
		q = 'Q33057',
		label = 'ISBN',
		prefix = 'Special:BookSources/',
		COinS = 'rft.isbn',
		separator = '&nbsp;',
		},
	['ISMN'] = {
		parameters = {'ismn', 'ISMN'},
		link = 'International Standard Music Number',
		redirect = 'ISMN (ідентифікатор)',
		q = 'Q1666938',
		label = 'ISMN',
		prefix = '',															-- зараз не використовується;
		COinS = nil,															-- nil, бо не можнмо використати pre, rft чи info:
		separator = '&nbsp;',
		},
	['ISSN'] = {
		parameters = {'issn', 'ISSN'},
		link = 'International Standard Serial Number',
		redirect = 'ISSN (ідентифікатор)',
		q = 'Q131276',
		label = 'ISSN',
		prefix = 'https://www.worldcat.org/issn/',
		COinS = 'rft.issn',
		encode = false,
		separator = '&nbsp;',
		},
	['JFM'] = {
		parameters = {'jfm', 'JFM'},
		link = 'Jahrbuch über die Fortschritte der Mathematik',
		redirect = 'JFM (ідентифікатор)',
		q = '',
		label = 'JFM',
		prefix = 'https://zbmath.org/?format=complete&q=an:',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		},
	['JSTOR'] = {
		parameters = {'jstor', 'JSTOR'},
		link = 'JSTOR',
		redirect = 'JSTOR (ідентифікатор)',
		q = 'Q1420342',
		label = 'JSTOR',
		prefix = 'https://www.jstor.org/stable/',
		COinS = 'pre',															-- використовує значення префіксу
		encode = false,
		separator = '&nbsp;',
		custom_access = 'jstor-access', 
		custom_access_uk = 'доступ-до-jstor',
		},
	['LCCN'] = {
		parameters = {'lccn', 'LCCN'},
		link = 'Library of Congress Control Number',
		redirect = 'LCCN (ідентифікатор)',
		q = 'Q620946',
		label = 'LCCN',
		prefix = 'https://lccn.loc.gov/',
		COinS = 'info:lccn',
		encode = false,
		separator = '&nbsp;',
		},
	['MEDRXIV'] = {
		parameters = {'medrxiv'},
		link = 'medRxiv',
		redirect = 'medRxiv (ідентифікатор)',
		q = 'Q58465838',
		label = 'medRxiv',
		prefix = 'https://www.medrxiv.org/content/',
		COinS = 'pre',															-- використовує значення префіксу
		access = 'free',														-- вільний до перегляду
		encode = false,
		separator = '&nbsp;',
		},
	['MR'] = {
		parameters = {'mr', 'MR'},
		link = 'Mathematical Reviews',
		redirect = 'MR (ідентифікатор)',
		q = 'Q211172',
		label = 'MR',
		prefix = 'https://mathscinet.ams.org/mathscinet-getitem?mr=',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		},
	['OCLC'] = {
		parameters = {'oclc', 'OCLC'},
		link = 'OCLC',
		redirect = 'OCLC (ідентифікатор)',
		q = 'Q190593',
		label = 'OCLC',
		prefix = 'https://www.worldcat.org/oclc/',
		COinS = 'info:oclcnum',
		encode = true,
		separator = '&nbsp;',
		id_limit = 10100000000,
		},
	['OL'] = {
		parameters = { 'ol', 'OL' },
		link = 'Open Library',
		redirect = 'OL (ідентифікатор)',
		q = 'Q1201876',
		label = 'OL',
		prefix = 'https://openlibrary.org/',
		COinS = 'url',
		separator = '&nbsp;',
		encode = true,
		custom_access = 'ol-access', 
		custom_access_uk = 'доступ-до-ol',
		},
	['OSTI'] = {
		parameters = {'osti', 'OSTI'},
		link = 'Office of Scientific and Technical Information',
		redirect = 'OSTI (ідентифікатор)',
		q = 'Q2015776',
		label = 'OSTI',
		prefix = 'https://www.osti.gov/biblio/',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		id_limit = 23010000,
		custom_access = 'osti-access', 
		custom_access_uk = 'доступ-до-osti',
		},
	['PMC'] = {
		parameters = {'pmc', 'PMC'},
		link = 'PubMed Central',
		redirect = 'PMC (ідентифікатор)',
		q = 'Q229883',
		label = 'PMC',
		prefix = 'https://www.ncbi.nlm.nih.gov/pmc/articles/PMC',
		suffix = '',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		id_limit = 10900000,
		access = 'free',														-- вільний до перегляду
		},
	['PMID'] = {
		parameters = {'pmid', 'PMID'},
		link = 'PubMed Identifier',
		redirect = 'PMID (ідентифікатор)',
		q = 'Q2082879',
		label = 'PMID',
		prefix = 'https://pubmed.ncbi.nlm.nih.gov/',
		COinS = 'info:pmid',
		encode = false,
		separator = '&nbsp;',
		id_limit = 38400000,
		},
	['RFC'] = {
		parameters = {'rfc', 'RFC'},
		link = 'Request for Comments',
		redirect = 'RFC (ідентифікатор)',
		q = 'Q212971',
		label = 'RFC',
		prefix = 'https://tools.ietf.org/html/rfc',
		COinS = 'pre',															-- використовує значення префіксу
		encode = false,
		separator = '&nbsp;',
		id_limit = 9300,
		access = 'free',														-- вільний до перегляду
		},
	['SBN'] = {
		parameters = {'sbn', 'SBN'},
		link = 'Standard Book Number',											-- перенаправляє на International_Standard_Book_Number#History
		redirect = 'SBN (ідентифікатор)',
		label = 'SBN',
		prefix = 'Special:BookSources/0-',										-- префікс має нулі на початку, що необхідні для перетворення 9-значного sbn на 10-значний isbn
		COinS = nil,															-- nil, бо не можнмо використати pre, rft чи info:
		separator = '&nbsp;',
		},
	['SSRN'] = {
		parameters = {'ssrn', 'SSRN'},
		link = 'Social Science Research Network',
		redirect = 'SSRN (ідентифікатор)',
		q = 'Q7550801',
		label = 'SSRN',
		prefix = 'https://papers.ssrn.com/sol3/papers.cfm?abstract_id=',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		id_limit = 4700000,
		custom_access = 'ssrn-access',
		custom_access_uk = 'доступ-до-ssrn'
		},
	['S2CID'] = {
		parameters = {'s2cid', 'S2CID'},
		link = 'Semantic Scholar',
		redirect = 'S2CID (ідентифікатор)',
		q = 'Q22908627',
		label = 'S2CID',
		prefix = 'https://api.semanticscholar.org/CorpusID:',
		COinS = 'pre',															-- використовує значення префіксу
		encode = false,
		separator = '&nbsp;',
		id_limit = 268000000,
		custom_access = 's2cid-access',
		custom_access_uk = 'доступ-до-s2cid'
		},
	['USENETID'] = {
		parameters = {'message-id'},
		link = 'Usenet',
		redirect = 'Usenet (ідентифікатор)',
		q = 'Q193162',
		label = 'Usenet:',
		prefix = 'news:',
		encode = false,
		COinS = 'pre',															-- використовує значення префіксу
		separator = '&nbsp;',
		},
	['ZBL'] = {
		parameters = {'zbl', 'ZBL' },
		link = 'Zentralblatt MATH',
		redirect = 'Zbl (ідентифікатор)',
		q = 'Q190269',
		label = 'Zbl',
		prefix = 'https://zbmath.org/?format=complete&q=an:',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		},
	}

return {
	use_identifier_redirects = use_identifier_redirects,						-- булеві значення в налаштуваннях, що вгорі цього модуля
	date_name_auto_xlate_enable = date_name_auto_xlate_enable,
	
	aliases = aliases, 
	date_names = date_names,
	defaults = defaults,
	err_msg_supl = err_msg_supl,
	error_conditions = error_conditions,
	et_al_patterns = et_al_patterns,
	id_handlers = id_handlers,
	indic_script = indic_script,
	keywords_lists = keywords_lists,
	keywords_xlate = keywords_xlate,
	known_free_doi_registrants_t = build_free_doi_registrants_table(),
	messages = messages,
	prop_cats = prop_cats,
	presentation = presentation,
	single_letter_2nd_lvl_domains_t = single_letter_2nd_lvl_domains_t,
	stripmarkers = stripmarkers,
	script_lang_codes = script_lang_codes,
	lang_tag_remap = lang_tag_remap,
	this_wiki_code = this_wiki_code,
	title_types = title_types,
	uncategorized_namespaces = uncategorized_namespaces_t,
	uncategorized_subpages = uncategorized_subpages,
	
	inter_wiki_map = inter_wiki_map,
	mw_languages_by_tag_t = mw_languages_by_tag_t,
	
	citation_class_map_t = citation_class_map_t
};