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

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

Наступні файли є частиною модуля, що забезпечує підтримку шаблонів цитувань cs1|2:

Модулі CS1|CS2
  У вжитку Пісочниця Опис
sysop Модуль:Citation/CS1 Модуль:Citation/CS1/пісочниця [редагувати] Функції рендерінгу та підтримки
Модуль:Citation/CS1/Configuration Модуль:Citation/CS1/Configuration/пісочниця [редагувати] Таблиці перекладу; функції-обробники помилок та ідентифікаторів
Модуль:Citation/CS1/Language List Модуль:Citation/CS1/Language List/пісочниця [редагувати] Таблиці мовних кодів та пов'язаних параметрів, що формують текст в параметрі |language=
Модуль:Citation/CS1/Whitelist Модуль:Citation/CS1/Whitelist/пісочниця [редагувати] Перелік поточних, застарілих та таких, що більше не підтримуються, cs1|2 параметрів
Модуль:Citation/CS1/Date validation Модуль:Citation/CS1/Date validation/пісочниця [редагувати] Функції валідації форматування дат
Модуль:Citation/CS1/Identifiers Модуль:Citation/CS1/Identifiers/пісочниця [редагувати] Функції, які підтримують іменовані ідентифікатори (isbn, doi, pmid тощо)
Модуль:Citation/CS1/Utilities Модуль:Citation/CS1/Utilities/пісочниця [редагувати] Загальні функції і таблиці
Модуль:Citation/CS1/COinS Модуль:Citation/CS1/COinS/пісочниця [редагувати] Функції відображення (рендерінгу) метаданих шаблонів "cs1|2"
Модуль:Citation/CS1/styles.css Модуль:Citation/CS1/пісочниця/styles.css [редагувати] Стилі CSS, що застосовуються до шаблонів "cs1|2"
auto confirmed Module:Citation/CS1/Suggestions Модуль:Citation/CS1/Suggestions/пісочниця [редагувати] Перелік, який перевизначає загальновживані помилкові назви параметрів на правильні, підтримувані модулем назви параметрів
--[[
Історія змін з моменту від останньої синхронізації: 2024-07-05

]]

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

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

]]

local use_identifier_redirects = false;											-- коли true, то використовує ім'я перенаправлення для посилань під назвою ідентифікатора; завжди true в en.wiki; вимкнути, бо не створено перенаправлення
local enable_sort_keys = false;													-- коли true, то модуль додає ключі сортування за простором назв для посилань на категорії помилок та обслуговування (поки так)
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>}}
]]

local 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, що знайдені в назвах сторінок, які ми не повинні категоризувати

--[[
У en.wiki грецькі символи використовуються як ключі сортування для певних елементів в категорії, щоб вони
розміщувалися в кінці сторінки категорії. Дивіться :en:Wikipedia:Categorization#Sort_keys. Це добре працює для
en.wiki, бо англійська мова використовує лантиське письмо. Це може добре не працювати для інших мов. У en.wiki it
надається перевага розміщенню вмісту з певнгих просторів назв в кінці списку категорії, тому модуль додає ключі
сортування до посилань на категорії помилок і обслуговування, коли шаблон cs1|2 використано на сторінці того 
простору назв.

i18n: якщо це добре не працює для вашої мови, то встановість значення false для <enable_sort_keys>.
]]

local name_space_sort_keys = {													-- ключі сортування, що використовуються з цими просторамиsort keys to be used with these namespaces:
	[4] = 'ω',																	-- вікіпедія; омега
	[10] = 'τ',																	-- шаблон; тау
	[118] = 'Δ', 																-- стаття в Інкубаторі; дельта
	['other'] = 'ο',															-- всі інші простори назв, що неє обговорення, окрім основного простору (статті); омікрон
	}

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

Далі йдуть фіксовані тексти, що використовуються як частини посилання на
джерело. Вони відділені від головного модуля, щоб спростити переклад.
]]
local messages = {
	['published'] = 'опубліковано $1',
	['lay summary'] = 'Загальний огляд',
	['retrieved'] = 'Процитовано $1',
	['dsturetrieved'] = 'Дата звернення: $1',
	['inactive'] = 'неактивний',
	['archived-dead'] = 'Архів $1 за $2',
	['archived-live'] = '$1 оригіналу за $2',
	['archived-unfit'] = 'Архів оригіналу за ',
	['archived'] = 'Архів',
	['by'] = '',																-- contributions to authored works: introduction, foreword, afterword
	['cartography'] = 'Картографування: $1',
	['inset'] = 'Карта-врізка: $1',
	['interview'] = 'Інтерв\'юери: $1',
	['newsgroup'] = '[[Група новин]]:&nbsp;$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'] = '&lbrack;$1&rbrack;', 
	['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?
  
	['nopp'] = '$1 $2';															-- page(s) без префіксу; $1 є sepc

	['dstu-p-prefix'] = "$1 C.&nbsp;$2",										-- $1 є sepc (дсту варіант)
	['dstu-pp-prefix'] = "$1 C.&nbsp;$2",										-- $1 є sepc (дсту варіант)
	['p-prefix'] = "$1 с.&nbsp;$2",												-- $1 є sepc
	['pp-prefix'] = "$1 с.&nbsp;$2",											-- $1 є sepc
	['dstu-j-page(s)'] = ' : $1',												-- те саме і для page та pages (дсту варіант)
	['j-page(s)'] = ': $1',														-- те саме і для page та pages

	['sheet'] = '$1 Аркуш&nbsp;$2',												-- $1 є sepc
	['sheets'] = '$1 Аркуші&nbsp;$2',											-- $1 є sepc
	['dstu-j-sheet'] = ' : Аркуш&nbsp;$1',										-- (дсту варіант)
	['dstu-j-sheets'] = ' : Аркуші&nbsp;$1',									-- (дсту варіант)
	['j-sheet'] = ': Аркуш&nbsp;$1',
	['j-sheets'] = ': Аркуші&nbsp;$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 sk'] = '[[Category:$1|$2]]',									-- $1 є назвою категорії; $2 є ключем сортування за простором назв
	[':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
	
	['dstu-trans-quoted-title'] = "&#61; $1",
	['dstu-trans-italic-title'] = "&#61; ''$1''",
	
	['format'] = ' <span class="cs1-format">($1)</span>',						-- для |format=, |chapter-format= тощо.
	['interwiki'] = ' <span class="cs1-format">[in $1]</span>',					-- для interwiki-language-linked author, editor тощо
	['interproj'] = ' <span class="cs1-format">[at $1]</span>',					-- для interwiki-project-linked author, editor тощо (підтримуються :d: та :s: ; :w: ігнорується)
	
	-- різні рівні доступу, для параметрів |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='id-lock-free', title='Безкоштовний доступ'},			-- класи визначені у Module:Citation/CS1/styles.css
		['registration'] = {class='id-lock-registration', title='Потрібна безкоштовна реєстрація'},
		['limited'] = {class='id-lock-limited', title='Безкоштовний доступ за умови пробної версії, а, зазвичай, потрібна підписка'},
		['subscription'] = {class='id-lock-subscription', title='Потрібна платна підписка'},
		
	['interwiki-icon'] = '<span class="$1" title="$2">$3</span>',
		['class-wikisource'] = 'cs1-ws-icon',
		
	['parameter'] = '<code class="cs1-code">&#124;$1=</code>',	
	
	['ref-lang'] = '<span class="$1" title="$2">$3</span>',						--для огортання |language=, коли вказано код мови
	['ref-text'] = '<span class="$1">$2</span>',								--для огортання назви мови, що отримана з |language=, коли вказано код мови та стиль ДСТУ
	
	['italic-title'] = "''$1''",

	['ps_cs1'] = '.',															-- завершальний символ (postscript) стилю CS1
	['ps_cs2'] = '',															-- завершальний символ (postscript) стилю CS2 (пустий рядок (string))
	['ps_dstu2006'] = '.',														-- завершальний символ (postscript) стилю DSTU2006
	
	['quoted-text'] = '<q>$1</q>',												-- для огортання вмісту |quote=
	['quoted-title'] = '$1',
	
	['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'] = ', ',														-- використовується для |language= коли список має 3+ об'єкта, окрім останнього роздільника, який використовує sep_list_pair
	['sep_list_pair'] = ' та ',												    -- використовується для |language= коли список має 2 об'єкта
	
	['trans-italic-title'] = "&#91;''$1''&#93;",
	['trans-quoted-title'] = "&#91;$1&#93;",									-- for |trans-title= and |trans-quote=
	['vol-bold'] = '$1 <b>$2</b>',												-- sepc, volume; для жирного журнального посилання; для інших посилання: ['vol'] у messages{}
}

-- Таблиця словника аргументів
local aliases = {
    ['AccessDate'] = {'access-date', 'accessdate', 'дата-доступу'},
    ['Agency'] = {'agency', 'агентство', 'агенство'},
    ['ArchiveDate'] = {'archive-date', 'archivedate', 'дата-архіву'},
    ['ArchiveFormat'] = {'archive-format', 'формат-архіву'},
    ['ArchiveURL'] = {'archive-url', 'archiveurl', 'url-архіву'},
    ['ArticleNumber'] = {'article-number', 'номер-статті'},
    ['ASINTLD'] = {'asin-tld', 'ASIN-TLD' },
    ['At'] = {'at', 'частина-джерела', 'у'},
    ['Authors'] = {'authors', 'people', 'credits', 'автори', 'особи', 'титри'},
    ['AuthorSeparator'] = {'author-separator', 'роздільник-авторів'},
    ['AuthorNameSeparator'] = {'author-name-separator', 'роздільник-імен-авторів'},
    ['BookTitle'] = {'book-title', 'booktitle', 'назва-книги'},
    ['Cartography'] = {'cartography', 'картографія'},
    ['Chapter'] = {'chapter', 'contribution', 'entry', 'article', 'section', 'розділ',
    	'внесок', 'запис', 'стаття', 'секція'},
    ['ChapterFormat'] = {'chapter-format', 'contribution-format', 'entry-format',
		'article-format', 'section-format', 'формат-розділу', 'формат-внеску',
    	'формат-запису', 'формат-статті', 'формат-секції'},
    ['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 та ідентифікатор arxiv
    ['Coauthors'] = {'coauthors', 'coauthor', 'співавтори', 'співавтор' },
    ['Conference'] = {'conference', 'конференція', 'event', 'подія'},
    ['ConferenceFormat'] = { 'conference-format', 'формат-конференції' },
    ['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', "показувати-авторів", "показувати-суб'єктів"},
    ['DisplayContributors'] = {'display-contributors', "показувати-дописувачів"},
    ['DisplayEditors'] = {"display-editors", "displayeditors", "показувати-редакторів"},
    ['DisplayInterviewers'] = {'display-interviewers', "показувати-інтерв'юерів"},
    ['DisplayTranslators'] = {'display-translators', "показувати-перекладачів"},
    ['DoiBroken'] = {'doi-broken-date', 'doi_inactivedate', 'doi_brokendate', 'DoiBroken', 'поламана-дата-doi'},
    ['Edition'] = {'edition', 'видання'},
    ['Editors'] = {'editors', 'редактори'},
    ['EditorSeparator'] = 'editor-separator',
    ['EditorNameSeparator'] = 'editor-name-separator',
    ['Embargo'] = {'pmc-embargo-date', 'Embargo', 'embargo', 'дата-ембарго-pmc'},
    ['Encyclopedia'] = {'encyclopedia', 'encyclopaedia', 'dictionary', 'енциклопедія', 'словник'},			-- тільки для шаблону cite encyclopedia
    ['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', 'мережа', 'канал'},
    ['Newsgroup'] = {'newsgroup', 'група-новин'},												-- тільки для шаблону cite newsgroup
    ['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', 'журнал', 'газета', 'праця', 'вебсайт', 
        'веб-сайт',  'періодика'},
    ['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', 'письмо-розділу', 'письмо-внеску', 
        'письмо-запису', 'письмо-статті', 'письмо-секції'},
    ['ScriptEncyclopedia'] = {'script-encyclopedia', 'script-encyclopaedia',
    	'письмо-енциклопедії' },												-- тільки для шаблону cite encyclopedia    
    ['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
    ['Sheets'] = {'sheets', 'аркуші'},														-- тільки для шаблону cite map
    ['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', 'стенограма'},
    ['TranscriptFormat'] = {'transcript-format', 'формат-стенограми'},	
    ['TranscriptURL'] = {'transcript-url', 'transcripturl', 'url-стенограми'},
    ['TransEncyclopedia'] = {'trans-encyclopedia', 'trans-encyclopaedia', 'переклад-енциклопедії'},		-- тільки для шаблону cite encyclopedia
    ['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", "суб'єкт#-маска", "суб'єкт-маска#"},
    
	['ContributorList-First'] = {'contributor-first#', 'contributor#-first',
		'contributor-given#', 'contributor#-given', "дописувач#-ім'я", "дописувач-ім'я#"},
	['ContributorList-Last'] = {'contributor-last#', 'contributor#-last',
		'contributor-surname#', 'contributor#-surname', 'contributor#',
        "дописувач#-прізвище", "дописувач-прізвище#", "дописувач#"},
	['ContributorList-Link'] = {'contributor-link#', 'contributor#-link', 
		"дописувач#-посилання", "дописувач-посилання#"},
	['ContributorList-Mask'] = {'contributor-mask#', 'contributor#-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', 
		"перекладач#-маска", "перекладач-маска#"},
}

--[[-----------< S P E C I A L   C A S E   T R A N S L A T I O N S >------------

Ця таблиця лише для підтримки інтернаціоналізації.  Переклади в
цій таблиці використовуються, наприклад, для повідомлень про помилки, 
назв категорії тощо. Вони витягуються з ключа псевдоніма англійською 
мовою. Можуть бути й інші випадки, коли ці таблиці перекладу можуть 
бути корисними.

]]
local is_Latn = 'A-Za-z\195\128-\195\150\195\152-\195\182\195\184-\198\191\199\132-\201\143\225\184\128-\225\187\191';
local special_case_translation = {
	['AuthorList'] = 'authors list',											-- used to assemble maintenance category names
	['ContributorList'] = 'contributors list',									-- translation of these names plus translation of the base maintenance category names in maint_cats{} table below
	['EditorList'] = 'editors list',											-- must match the names of the actual categories
	['InterviewerList'] = 'interviewers list',									-- this group or translations used by name_has_ed_markup() and name_has_mult_names()
	['TranslatorList'] = 'translators list',
	
																				-- Lua patterns to match pseudo-titles used by InternetArchiveBot and others as placeholder for unknown |title= value
	['archived_copy'] = {														-- used with CS1 maint: Archive[d] copy as title
		['en'] = '^archived?%s+copy$',											-- for English; translators: keep this because templates imported from en.wiki
		['local'] = '^архівована%s+копія$',										-- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language
		},

																				-- Lua patterns to match generic titles; usually created by bots or reference filling tools
																				-- translators: replace ['local'] = nil with lowercase translation only when bots or tools create generic titles in your language
		-- generic titles and patterns in this table should be lowercase only
		-- leave ['local'] nil except when there is a matching generic title in your language
		-- boolean 'true' for plain-text searches; 'false' for pattern searches

	['generic_titles'] = {
		['accept'] = {
			},
		['reject'] = {
			{['en'] = {'^wayback%s+machine$', false},				['local'] = nil},
			{['en'] = {'are you a robot', true},					['local'] = nil},
			{['en'] = {'hugedomains.com', true},					['local'] = nil},
			{['en'] = {'^[%(%[{<]?no +title[>}%]%)]?$', false},		['local'] = nil},
			{['en'] = {'page not found', true},						['local'] = nil},
			{['en'] = {'subscribe to read', true},					['local'] = nil},
			{['en'] = {'^[%(%[{<]?unknown[>}%]%)]?$', false},		['local'] = nil},
			{['en'] = {'website is for sale', true},				['local'] = nil},
			{['en'] = {'^404', false},								['local'] = nil},
			{['en'] = {'internet archive wayback machine', true},	['local'] = nil},
			{['en'] = {'log into facebook', true},					['local'] = nil},
			{['en'] = {'login • instagram', true},					['local'] = nil},
			{['en'] = {'redirecting...', true},						['local'] = nil},
			{['en'] = {'usurped title', true},						['local'] = nil},	-- додається GreenC bot
			{['en'] = {'webcite query result', true},				['local'] = nil},
			{['en'] = {'wikiwix\'s cache', true},					['local'] = nil},
			}
		},

		-- boolean 'true' for plain-text searches, search string must be lowercase only
		-- boolean 'false' for pattern searches
		-- leave ['local'] nil except when there is a matching generic name in your language

		['generic_names'] = {
		['accept'] = {
			{['en'] = {'%[%[[^|]*%(author%) *|[^%]]*%]%]', false},				['local'] = nil},
			},
		['reject'] = {
			{['en'] = {'about us', true},										['local'] = {'про нас', true}},
			{['en'] = {'%f[%a][Aa]dvisor%f[%A]', false},						['local'] = nil},
			{['en'] = {'allmusic', true},										['local'] = nil},
			{['en'] = {'%f[%a][Aa]uthor%f[%A]', false},							['local'] = nil},
			{['en'] = {'^[Bb]ureau$', false},									['local'] = nil},
			{['en'] = {'business', true},										['local'] = nil},
			{['en'] = {'cnn', true},											['local'] = nil},
			{['en'] = {'collaborator', true},									['local'] = nil},
			{['en'] = {'^[Cc]ompany$', false},									['local'] = nil},
			{['en'] = {'contributor', true},									['local'] = nil},
			{['en'] = {'contact us', true},										['local'] = nil},
			{['en'] = {'correspondent', true},									['local'] = nil},
			{['en'] = {'^[Dd]esk$', false},										['local'] = nil},
			{['en'] = {'directory', true},										['local'] = nil},
			{['en'] = {'%f[%(%[][%(%[]%s*eds?%.?%s*[%)%]]?$', false},			['local'] = nil},
			{['en'] = {'[,%.%s]%f[e]eds?%.?$', false},							['local'] = nil},
			{['en'] = {'^eds?[%.,;]', false},									['local'] = nil},
			{['en'] = {'^[%(%[]%s*[Ee][Dd][Ss]?%.?%s*[%)%]]', false},			['local'] = nil},
			{['en'] = {'%f[%a][Ee]dited%f[%A]', false},							['local'] = nil},
			{['en'] = {'%f[%a][Ee]ditors?%f[%A]', false},						['local'] = nil},
			{['en'] = {'%f[%a][Ee]mail%f[%A]', false},							['local'] = nil},
			{['en'] = {'facebook', true},										['local'] = nil},
			{['en'] = {'google', true},											['local'] = nil},
			{['en'] = {'^[Gg]roup$', false},									['local'] = nil},
			{['en'] = {'home page', true},										['local'] = nil},
			{['en'] = {'^[Ii]nc%.?$', false},									['local'] = nil},
			{['en'] = {'instagram', true},										['local'] = nil},
			{['en'] = {'interviewer', true},									['local'] = nil},
			{['en'] = {'^[Ll]imited$', false},									['local'] = nil},
			{['en'] = {'linkedIn', true},										['local'] = nil},
			{['en'] = {'^[Nn]ews$', false},										['local'] = nil},
			{['en'] = {'[Nn]ews[ %-]?[Rr]oom', false},							['local'] = nil},
			{['en'] = {'pinterest', true},										['local'] = nil},
			{['en'] = {'policy', true},											['local'] = nil},
			{['en'] = {'privacy', true},										['local'] = nil},
			{['en'] = {'reuters', true},										['local'] = nil},
			{['en'] = {'translator', true},										['local'] = nil},
			{['en'] = {'tumblr', true},											['local'] = nil},
			{['en'] = {'twitter', true},										['local'] = nil},
			{['en'] = {'site name', true},										['local'] = nil},
			{['en'] = {'statement', true},										['local'] = nil},
			{['en'] = {'submitted', true},										['local'] = nil},
			{['en'] = {'super.?user', false},									['local'] = nil},
			{['en'] = {'%f['..is_Latn..'][Uu]ser%f[^'..is_Latn..']', false},	['local'] = nil},
			{['en'] = {'verfasser', true},										['local'] = nil},
			}
	}
	}

--[[--------------------------< 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']; this will unconditionally overwrite manual translations
	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_long_nom'] = {[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] = 'Різдво'},													-- використовується в перекладі дат; скопіюйте 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'] = {},
	}
	
local title_object = mw.title.getCurrentTitle();
local content;																	-- done this way  so that unused templates appear in unused-template-reports; self-transcluded makes them look like they are used
if 10 ~= title_object.namespace then											-- all namespaces except Template
	content = title_object:getContent() or '';									-- get the content of the article or ''; new pages edited w/ve do not have 'content' until saved; ve does not preview; phab:T221625
end

--[[--------------------------< 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 = {
--    ['Separator'] = '.',
    ['AuthorSeparator'] = ';',
    ['EditorSeparator'] = ';',
    ['NameSeparator'] = ',',
}

--[[----------------------< 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 U P P O R T E D _ L A N G U A G E _ C O D E S >-------------------

Ці таблиці містять мовні коди, що підтримуються цим модулем та використовуються при оформленні 
параметру language відповідно до вибраного режиму (або як шаблон {{ref-lang}} або як шаблон {{lg}}).

]]

local supported_langauge_codes = 
{
	[2] = 
	{
		'uk', 'en', 'ru', 'be', 'pl', 'es', 'fr', 'de', 'ar', 'it', 'cs', 
		'ab', 'af', 'an', 'av', 'az', 'ba', 'bg', 'bl', 'bn', 'bo', 'br', 'bs', 
		'ca', 'ce', 'co', 'cr', 'cu', 'cv', 'cy', 'cz', 'da', 'et', 'fa', 'fi', 
		'fo', 'fy', 'ga', 'eo', 'eu', 'gd', 'ge', 'gl', 'gn', 'el', 'ha', 'he', 
		'hi', 'hr', 'ht', 'hu', 'hy', 'id', 'ie', 'is', 'ja', 'ka', 'kk', 'kl', 
		'km', 'kn', 'ko', 'kv', 'ku', 'ky', 'la', 'le', 'lt', 'lb', 'lv', 'md', 
		'me', 'mg', 'mi', 'mk', 'ml', 'mn', 'mo', 'ms', 'mr', 'mt', 'ne', 'nl', 
		'no', 'oc', 'om', 'os', 'pt', 'qu', 'rm', 'ro', 'sa', 'sh', 'sk', 'sl', 
		'so', 'sq', 'sr', 'sv', 'sw', 'te', 'ta', 'tg', 'th', 'tk', 'tl', 'to', 
		'tr', 'tt', 'ty', 'ur', 'uz', 'vi', 'yi', 'zh'
	}, 
	[3] = 
	{
		'crh', 'rue', 'ace', 'akk', 'arz', 'ast', 'atj', 'bez', 'bgc', 'bik', 'car', 'chg', 'chu', 'crj', 'dar', 'dsb', 'gag', 'gba', 'gez', 'grc', 'gsc', 
		'hsb', 'iba', 'jbo', 'kaa', 'kab', 'kam', 'kde', 'kdr', 'kho', 'kjh', 'krl', 'lam', 'ltg', 'mag', 'mde', 'mdf', 'mga', 'mhr', 'mwr', 'myv', 'nan', 
		'non', 'oka', 'orv', 'otk', 'pap', 'pcm', 'pnt', 'rmy', 'sah', 'sam', 'sat', 'sba', 'sco', 'sga', 'sla', 'syr', 'szl', 'tli', 'udm', 'lld', 
		'uum', 'vai', 'xal', 'yue'
	}, 
	[4] = {}, 
	[5] = {'en-gb', 'en-nz', 'en-us', 'ro-md', 'uk-ua', 'sw-cd'}, 
	[6] = {'uk-old', 'old-ru', 'ru-dor', 'pnt-ua'}, 
	[7] = {'bat-smg'},
	[8] = {'be-x-old', 'rhg-arab'}
}	
	
--[[--------------------< L A N G U A G E _ T A B L E >-------------------	

Ця таблиця містять параметри потрібні для функції SubstLangTemplateIfPossible, щоб імплементувати 
функціонал шаблонів {{ref-lang}} та {{lg}}. Для імплементації шаблону {{ref-lang}} використовуються параметри
nominative (назва мови в називному відмінку, використовується лише у випадку, якщо назва є іменником 
і не заданий параметр instrumental), instrumental (містить назву в орудному відмінку і виводиться як 
підказка), short (скорочена назва мови) та is_noun (булевий параметр, що позначає чи назва є імеником, 
якщо так, то назва мови ставиться після слова мовою). Для імплементації шаблону {{lg}} використовуються 
параметри nominative (назва мови в називному відмінку), short (скорочена назва мови) та link (назва 
статті, на яку потрібно зробити вікіпосилання).

]]

local language_table = {
	--коди з двох символів
	['uk'] = { nominative = "українська", instrumental = "українською", short = "укр.", link = "Українська мова"},
	['en'] = { nominative = "англійська", instrumental = "англійською", short = "англ.", link = "Англійська мова"},
	['ru'] = { nominative = "російська", instrumental = "російською", short = "рос.", link = "Російська мова"},
	['be'] = { nominative = "білоруська", instrumental = "білоруською", short = "біл.", link = "Білоруська мова"},
	['pl'] = { nominative = "польська", instrumental = "польською", short = "пол.", link = "Польська мова"},
	['es'] = { nominative = "іспанська", instrumental = "іспанською", short = "ісп.", link = "Іспанська мова"},
	['fr'] = { nominative = "французька", instrumental = "французькою", short = "фр.", link = "Французька мова"}, 
	['de'] = { nominative = "німецька", instrumental = "німецькою", short = "нім.", link = "Німецька мова"}, 
	['ar'] = { nominative = "арабська", instrumental = "арабською", short = "араб.", link = "Арабська мова"}, 
	['it'] = { nominative = "італійська", instrumental = "італійською", short = "італ.", link = "Італійська мова"}, 
	['cs'] = { nominative = "чеська", instrumental = "чеською", short = "чес.", link = "Чеська мова"},
	['ab'] = { nominative = "абхазька", instrumental = "абхазькою", short = "абхаз.", link = "Абхазька мова"},
	['af'] = { nominative = "африкаанс", short = "афр.", link = "Африкаанс", is_noun = true},
	['an'] = { nominative = "арагонська", instrumental = "арагонською", short = "араг.", link = "Арагонська мова"},
	['av'] = { nominative = "аварська", instrumental = "аварською", short = "авар.", link = "Аварська мова"},
	['az'] = { nominative = "азербайджанська", instrumental = "азербайджанською", short = "азерб.", link = "Азербайджанська мова"},
	['ba'] = { nominative = "башкирська", instrumental = "башкирською", short = "башк.", link = "Башкирська мова"},
	['bg'] = { nominative = "болгарська", instrumental = "болгарською", short = "болг.", link = "Болгарська мова"},
	['bl'] = { nominative = "білоруська", instrumental = "білоруською", short = "біл.", link = "Білоруська мова"},
	['bn'] = { nominative = "бенгальська", instrumental = "бенгальською", short = "бенг.", link = "Бенгальська мова"},
	['bo'] = { nominative = "тибетська", instrumental = "тибетською", short = "тиб.", link = "Тибетська мова"},
	['br'] = { nominative = "бретонська", instrumental = "бретонською", short = "брет.", link = "Бретонська мова"},
	['bs'] = { nominative = "боснійська", instrumental = "боснійською", short = "босн.", link = "Боснійська мова"},
	['ca'] = { nominative = "каталонська", instrumental = "каталонською", short = "кат.", link = "Каталонська мова"},
	['ce'] = { nominative = "чеченська", instrumental = "чеченською", short = "чеч.", link = "Чеченська мова"},
	['co'] = { nominative = "корсиканська", instrumental = "корсиканською", short = "корс.", link = "Корсиканська мова"},
	['cr'] = { nominative = "крі", short = "", link = "Крі (мова)", is_noun = true},
	['cu'] = { nominative = "староцерковнословʼянська", instrumental = "староцерковнословʼянською", short = "ст.-слов.", link = "Староцерковнословʼянська мова"},
	['cv'] = { nominative = "чуваська", instrumental = "чуваською", short = "чув.", link = "Чуваська мова"},
	['cy'] = { nominative = "валлійська", instrumental = "валлійською", short = "валл.", link = "Валлійська мова"},
	['cz'] = { nominative = "чеська", instrumental = "чеською", short = "чес.", link = "Чеська мова"},
	['da'] = { nominative = "данська", instrumental = "данською", short = "дан.", link = "Данська мова"},
	['et'] = { nominative = "естонська", instrumental = "естонською", short = "ест.", link = "Естонська мова"},
	['fa'] = { nominative = "перська", instrumental = "перською", short = "перс.", link = "Перська мова"},
	['fi'] = { nominative = "фінська", instrumental = "фінською", short = "фін.", link = "Фінська мова"},
	['fo'] = { nominative = "фарерська", instrumental = "фарерською", short = "фар.", link = "Фарерська мова"},
	['fy'] = { nominative = "фризька", instrumental = "фризькою", short = "фриз.", link = "Фризька мова"},
	['ga'] = { nominative = "ірландська", instrumental = "ірландською", short = "ірл.", link = "Ірландська мова"},
	['eo'] = { nominative = "есперанто", short = "еспер.", link = "Есперанто", is_noun = true},
	['eu'] = { nominative = "баскська", instrumental = "баскською", short = "баск.", link = "Баскська мова"},
	['gd'] = { nominative = "шотландська ґельська", instrumental = "шотландською ґельською", short = "шот. ґел.", link = "Шотландська гельська мова"},
	['ka'] = { nominative = "грузинська", instrumental = "грузинською", short = "груз.", link = "Грузинська мова"},
	['gl'] = { nominative = "галісійська", instrumental = "галісійською", short = "галіс.", link = "Галісійська мова"},
	['gn'] = { nominative = "гуарані", short = "гуар.", link = "Гуарані (мова)", is_noun = true},
	['el'] = { nominative = "грецька", instrumental = "грецькою", short = "гр.", link = "Грецька мова"},
	['ha'] = { nominative = "хауса", short = "хауса", link = "Хауса (мова)", is_noun = true},
	['he'] = { nominative = "іврит", instrumental = "івритом", short = "івр.", link = "іврит", is_noun = true},
	['hi'] = { nominative = "гінді", short = "гінді", link = "Гінді", is_noun = true},
	['hr'] = { nominative = "хорватська", instrumental = "хорватською", short = "хор.", link = "Хорватська мова"},
	['ht'] = { nominative = "гаїтянська креольська", instrumental = "гаїтянська креольською", short = "гаїт. креол.", link = "Гаїтянська креольська мова"},
	['hu'] = { nominative = "угорська", instrumental = "угорською", short = "угор.", link = "Угорська мова"},
	['hy'] = { nominative = "вірменська", instrumental = "вірменською", short = "вірм.", link = "Вірменська мова"},
	['id'] = { nominative = "індонезійська", instrumental = "індонезійською", short = "індонез.", link = "Індонезійська мова"},
	['ie'] = { nominative = "інтерлінгве", short = "інтерлінг.", link = "Інтерлінгве", is_noun = true},
	['is'] = { nominative = "ісландська", instrumental = "ісландською", short = "ісл.", link = "Ісландська мова"},
	['ja'] = { nominative = "японська", instrumental = "японською", short = "яп.", link = "Японська мова"},
	['ka'] = { nominative = "грузинська", instrumental = "грузинською", short = "груз.", link = "Грузинська мова"},
	['kk'] = { nominative = "казахська", instrumental = "казахською", short = "казах.", link = "Казахська мова"},
	['kl'] = { nominative = "ґренландська", instrumental = "ґренландською", short = "ґренл.", link = "Гренландська мова"},
	['km'] = { nominative = "кхмерська", instrumental = "кхмерською", short = "кхмер.", link = "Кхмерська мова"},
	['kn'] = { nominative = "каннада", short = "канн.", link = "Каннада", is_noun = true},
	['ko'] = { nominative = "корейська", instrumental = "корейською", short = "кор.", link = "Корейська мова"},
	['kv'] = { nominative = "комі", short = "комі", link = "Комі (мова)", is_noun = true},
	['ku'] = { nominative = "курдська", instrumental = "курдською", short = "курд.", link = "Курдська мова"},
	['ky'] = { nominative = "киргизька", instrumental = "киргизькою", short = "киргиз.", link = "Киргизька мова"},
	['la'] = { nominative = "латинська", instrumental = "латинською", short = "лат.", link = "Латинська мова"},
	['le'] = { nominative = "лемківська", instrumental = "лемківською", short = "лемк.", link = "Лемківська мова"},
	['lt'] = { nominative = "литовська", instrumental = "литовською", short = "лит.", link = "Литовська мова"},
	['lb'] = { nominative = "люксембурзька", instrumental = "люксембурзькою", short = "люксемб.", link = "Люксембурзька мова"},
	['lv'] = { nominative = "латиська", instrumental = "латиською", short = "латис.", link = "Латиська мова"},
	['md'] = { nominative = "молдовська", instrumental = "молдовською", short = "молд.", link = "Молдовська мова"},
	['me'] = { nominative = "чорногорська", instrumental = "чорногорською", short = "чорн.", link = "Чорногорська мова"},
	['mg'] = { nominative = "малагасійська", instrumental = "малагасійською", short = "малаг.", link = "Малагасійська мова"},
	['mi'] = { nominative = "маорійська", instrumental = "маорійською", short = "маор.", link = "Маорі (мова)"},
	['mk'] = { nominative = "македонська", instrumental = "македонською", short = "мак.", link = "Македонська мова"},
	['ml'] = { nominative = "малаялам", short = "малаял.", link = "Малаялам", is_noun = true},
	['mn'] = { nominative = "монгольська", instrumental = "монгольською", short = "монг.", link = "Монгольська мова"},
	['mo'] = { nominative = "молдовська", instrumental = "молдовською", short = "молд.", link = "Молдовська мова"},
	['ms'] = { nominative = "малайська", instrumental = "малайською", short = "малайськ.", link = "Малайська мова"},
	['mr'] = { nominative = "маратхі", short = "мар.", link = "Маратхі (мова)", is_noun = true},
	['mt'] = { nominative = "мальтійська", instrumental = "мальтійською", short = "мальт.", link = "Мальтійська мова"},
	['ne'] = { nominative = "непальська", instrumental = "непальською", short = "неп.", link = "Непальська мова"},
	['nl'] = { nominative = "нідерландська", instrumental = "нідерландською", short = "нід.", link = "Нідерландська мова"},
	['no'] = { nominative = "норвезька", instrumental = "норвезькою", short = "норв.", link = "Норвезька мова"},
	['oc'] = { nominative = "окситанська", instrumental = "окситанською", short = "окситан.", link = "Окситанська мова"},
	['om'] = { nominative = "оромо", short = "ор.", link = "Оромо (мова)", is_noun = true},
	['os'] = { nominative = "осетинська", instrumental = "осетинською", short = "осет.", link = "Осетинська мова"},
	['pt'] = { nominative = "португальська", instrumental = "португальською", short = "порт.", link = "Португальська мова"},
	['qu'] = { nominative = "кечуа", short = "кеч.", link = "Кечуа (мова)", is_noun = true},
	['rm'] = { nominative = "романшська", instrumental = "романшською", short = "романш.", link = "Романшська мова"},
	['ro'] = { nominative = "румунська", instrumental = "румунською", short = "рум.", link = "Румунська мова"},
	['sa'] = { nominative = "санскрит", instrumental = "санскритом", short = "санс.", link = "Санскрит", is_noun = true},
	['sh'] = { nominative = "сербсько-хорватська", instrumental = "сербсько-хорватською", short = "сербо-хорв.", link = "Сербсько-хорватська мова"},
	['sk'] = { nominative = "словацька", instrumental = "словацькою", short = "словац.", link = "Словацька мова"},
	['sl'] = { nominative = "словенська", instrumental = "словенською", short = "словен.", link = "Словенська мова"},
	['so'] = { nominative = "сомалійська", instrumental = "сомалійською", short = "сом.", link = "Сомалійська мова"},
	['sq'] = { nominative = "албанська", instrumental = "албанською", short = "алб.", link = "Албанська мова"},
	['sr'] = { nominative = "сербська", instrumental = "сербською", short = "серб.", link = "Сербська мова"},
	['sv'] = { nominative = "шведська", instrumental = "шведською", short = "швед.", link = "Шведська мова"},
	['sw'] = { nominative = "суахілі", short = "суах.", link = "Суахілі (мова)", is_noun = true},
	['te'] = { nominative = "телугу", short = "тел.", link = "Телугу (мова)", is_noun = true},
	['ta'] = { nominative = "тамільська", instrumental = "тамільською", short = "там.", link = "Тамільська мова"},
	['tg'] = { nominative = "таджицька", instrumental = "таджицькою", short = "тадж.", link = "Таджицька мова"},
	['th'] = { nominative = "тайська", instrumental = "тайською", short = "тай.", link = "Тайська мова"},
	['tk'] = { nominative = "туркменська", instrumental = "туркменською", short = "туркмен.", link = "Туркменська мова"},
	['tl'] = { nominative = "тагальська", instrumental = "тагальською", short = "тагал.", link = "Тагальська мова"},
	['to'] = { nominative = "тонганська", instrumental = "тонганською", short = "тонг.", link = "Тонганська мова"},
	['tr'] = { nominative = "турецька", instrumental = "турецькою", short = "тур.", link = "Турецька мова"},
	['tt'] = { nominative = "татарська", instrumental = "татарською", short = "татар.", link = "Татарська мова"},
	['ty'] = { nominative = "таїтянська", instrumental = "таїтянською", short = "таїт.", link = "Таїтянська мова"},
	['ur'] = { nominative = "урду", short = "урду", link = "Урду", is_noun = true},
	['uz'] = { nominative = "узбецька", instrumental = "узбецькою", short = "узб.", link = "Узбецька мова"},
	['vi'] = { nominative = "вʼєтнамська", instrumental = "вʼєтнамською", short = "в'єтн.", link = "Вʼєтнамська мова"},
	['yi'] = { nominative = "їдиш", short = "їдиш", link = "Їдиш", is_noun = true},
	['zh'] = { nominative = "китайська", instrumental = "китайською", short = "кит.", link = "Китайська мова"},
	
	-- коди з трьох символів
	['crh'] = { nominative = "кримськотатарська", instrumental = "кримськотатарською", short = "крим.", link = "Кримськотатарська мова"},
	['rue'] = { nominative = "русинська", instrumental = "русинською", short = "русин.", link = "Русинська мова"},
	['ace'] = { nominative = "ачеська", instrumental = "ачеською", short = "ачес.", link = "Ачеська мова"},
	['akk'] = { nominative = "аккадська", instrumental = "аккадською", short = "акк.", link = "аккадська мова"},
	['arz'] = { nominative = "єгипетська арабська", instrumental = "єгипетською арабською", short = "масрі", link = "Єгипетська арабська мова"},
	['ast'] = { nominative = "астурійська", instrumental = "астурійською", short = "астур.", link = "Астурійська мова"},
	['atj'] = { nominative = "атикамек", short = "атик.", link = "атикамек (мова)", is_noun = true},
	['bez'] = { nominative = "бена", short = "бена", link = "бена (мова)", is_noun = true},
	['bgc'] = { nominative = "харʼянві", short = "хар.", link = "Хар'янві", is_noun = true},
	['bik'] = { nominative = "бікольська", instrumental = "бікольською", short = "бік.", link = "бікольська мова"},
	['car'] = { nominative = "карибська", instrumental = "карибською", short = "кариб.", link = "карибська мова"},
	['chg'] = { nominative = "чагатайська", instrumental = "чагатайською", short = "чагат.", link = "Чагатайська мова"},
	['crj'] = { nominative = "південно-східна крі", short = "пн.-сх. крі", link = ""--[["південно-східна крі (мова)"]], is_noun = true},
	['chu'] = { nominative = "церковнословʼянська", instrumental = "церковнословʼянською", short = "церк.-сл.", link = "Церковнословʼянська мова"},
	['dar'] = { nominative = "даргинська", instrumental = "даргинською", short = "дарг.", link = "Даргинська мова"},
	['dsb'] = { nominative = "нижньолужицька", instrumental = "нижньолужицькою", short = "н.-луж.", link = "Нижньолужицька мова"},
	['gag'] = { nominative = "гагаузька", instrumental = "гагаузькою", short = "гаг.", link = "Гагаузька мова"},
	['gba'] = { nominative = "гбайя", short = "гбайя", link = "гбайя (мови)", is_noun = true},
	['gez'] = { nominative = "гєез", short = "гєез", link = "гєез", is_noun = true},
	['grc'] = { nominative = "давньогрецька", instrumental = "давньогрецькою", short = "д.-гр.", link = "Давньогрецька мова"},
	['gsc'] = { nominative = "гасконська", instrumental = "гасконською", short = "гаск.", link = "Гасконська мова"},
	['hsb'] = { nominative = "верхньолужицька", instrumental = "верхньолужицькою", short = "в.-луж.", link = "Верхньолужицька мова"},
	['iba'] = { nominative = "ібанська", instrumental = "ібанською", short = "ібан.", link = "Ібанська мова"},
	['jbo'] = { nominative = "ложбан", short = "ложбан", link = "Ложбан", is_noun = true},
	['kaa'] = { nominative = "каракалпацька", instrumental = "каракалпацькою", short = "кар.", link = "Каракалпацька мова"},
	['kab'] = { nominative = "кабільська", instrumental = "кабільською", short = "каб.", link = "Кабільська мова"},
	['kam'] = { nominative = "камба", short = "камба", link = "камба (мова)", is_noun = true},
	['kde'] = { nominative = "маконде", short = "макон.", link = "Маконде (мова)", is_noun = true},
	['kdr'] = { nominative = "караїмська", instrumental = "караїмською", short = "караїм.", link = "Караїмська мова"},
	['kho'] = { nominative = "хотаносакська", instrumental = "хотаносакською", short = "хот.", link = "Хотаносакська мова"},
	['kjh'] = { nominative = "хакаська", instrumental = "хакаською", short = "хакас.", link = "Хакаська мова"},
	['krl'] = { nominative = "карельська", instrumental = "карельською", short = "карел.", link = "Карельська мова"},
	['lam'] = { nominative = "ламба", short = "ламба", link = "Ламба (мова)", is_noun = true},
	['ltg'] = { nominative = "латгальська", instrumental = "латгальською", short = "лат.", link = "Латгальська мова"},
	['mag'] = { nominative = "маґадгі", short = "маґ.", link = "Маґадгі", is_noun = true},
	['mde'] = { nominative = "маба", short = "маба", link = "Маба (мова)", is_noun = true},
	['mdf'] = { nominative = "мокшанська", instrumental = "мокшанською", short = "мокш.", link = "Мокшанська мова"},
	['mga'] = { nominative = "середньоірландська", instrumental = "середньоірландською", short = "серед.-ірл.", link = "середньоірландська мова"},
	['mhr'] = { nominative = "лугомарійська", instrumental = "лугомарійською", short = "лат.", link = "Східномарійська мова"},
	['mwr'] = { nominative = "марварі", short = "марв.", link = "Марварі (мова)", is_noun = true},
	['myv'] = { nominative = "ерзянська", instrumental = "ерзянською", short = "ерз.", link = "Ерзянська мова"},
	['nan'] = { nominative = "південноміньська", instrumental = "південноміньською", short = "півд-мін.", link = "Південноміньська мова"},
	['non'] = { nominative = "давньоісландська", instrumental = "давньоісландською", short = "давньоісл.", link = "Давньоісландська мова"},
	['oka'] = { nominative = "оканаганська", instrumental = "оканаганською", short = "окан.", link = ""--[["оканаганська мова"]]},
	['orv'] = { nominative = "давньоруська", instrumental = "давньоруською", short = "давньоруська", link = "Давньоруська мова"},
	['otk'] = { nominative = "старотюркська", instrumental = "старотюркською", short = "ст.-тюрк.", link = "Старотюркські мови"},
	['pap'] = { nominative = "пап'яменто", short = "пап.", link = "Пап'яменто", is_noun = true},
	['pcm'] = { nominative = "нігерійський піджин", instrumental = "нігерійським піджином", short = "нігер. підж.", link = "Нігерійський піджин", is_noun = true, omit_lang = true},
	['pnt'] = { nominative = "понтійська", instrumental = "понтійською", short = "понт.", link = "Понтійська мова"},
	['rmy'] = { nominative = "ромська (циганська)", instrumental = "ромською (циганською)", short = "ром.", link = "Циганська мова"},
	['sam'] = { nominative = "самаритянська арамейська", instrumental = "самаритянська арамейською", short = "сам. арам.", link = "самаритянська арамейська мова"},
	['sah'] = { nominative = "якутська", instrumental = "якутською", short = "якут.", link = "Якутська мова"},
	['sat'] = { nominative = "санталі", short = "сант.", link = "Санталі", is_noun = true},
	['sba'] = { nominative = "нгамбай", short = "нгам.", link = "Нгамбай (мова)", is_noun = true},
	['sco'] = { nominative = "шотландська рівнинна", instrumental = "шотландською рівнинною", short = "шот. рівн.", link = "Шотландська рівнинна мова"},
	['sga'] = { nominative = "давньоірландська", instrumental = "давньоірландською", short = "д.-ірл.", link = "давньоірландська мова"},
	['sla'] = { nominative = "міжслов'янська", instrumental = "міжслов'янською", short = "міжслов'янськ.", link = "Міжслов'янська мова"},
	['syr'] = { nominative = "сирійська", instrumental = "сирійською", short = "сир.", link = "Сирійська мова"},
	['szl'] = { nominative = "сілезька", instrumental = "сілезькою", short = "міжслов'янськ.", link = "Сілезька мова"},
	['tli'] = { nominative = "тлінгітська", instrumental = "тлінгітською", short = "тлінг.", link = "Тлінгітська мова", is_noun = true},
	['udm'] = { nominative = "удмуртська", instrumental = "удмуртською", short = "удм.", link = "Удмуртська мова"},
	['lld'] = { nominative = "ладинська", instrumental = "ладинською", short = "удм.", link = "Ладинська мова"},
	['uum'] = { nominative = "урумська", instrumental = "урумською", short = "урум.", link = "Урумська мова"},
	['vai'] = { nominative = "ваї", short = "ваї", link = "Ваї (письмо)", is_noun = true},
	['xal'] = { nominative = "калмицька", instrumental = "калмицькою", short = "калм.", link = "Калмицька мова"},
	['yue'] = { nominative = "кантонська", instrumental = "кантонською", short = "кант.", link = "Кантонська мова"},
	
	-- коди з більше символів
	['en-gb'] = { nominative = "британська англійська", instrumental = "британською англійською", short = "брит.", link = "Британська англійська" },
	['en-nz'] = { nominative = "новозеландська англійська", instrumental = "новозеландською англійською", short = "новозел. англ.", link = "Новозеландська англійська"},
	['en-us'] = { nominative = "американська англійська", instrumental = "американською англійською", short = "амер.", link = "Американська англійська"},
	['ro-md'] = { nominative = "молдовська", instrumental = "молдовською", short = "молд.", link = "Молдовська мова"},
	['uk-ua'] = { nominative = "українська", instrumental = "українською", short = "укр.", link = "Українська мова"},
	['sw-cd'] = { nominative = "суахілі (Конго)", short = "суах. (Конго)", link = "Суахілі (мова)", is_noun = true},
	['uk-old'] = { nominative = "староукраїнська", instrumental = "староукраїнською", short = "ст. укр.", link = "Староукраїнська мова"},
	['old-ru'] = { nominative = "старомосковська", instrumental = "старомосковською", short = "старомоск.", link = ""}, 
	['pnt-ua'] = { nominative = "румейська", instrumental = "румейською", short = "румейс.", link = "Румейська мова"},
	['ru-dor'] = { nominative = "дореформена російська", instrumental = "дореформеною російською", short = "рос. дореф.", link = "Російський дореволюційний правопис"}, 	
	['bat-smg'] = { nominative = "жмудська", instrumental = "жмудською", short = "жмуд.", link = "Жмудська мова"},
	['be-x-old'] = { nominative = "класичний правопис білоруської", instrumental = "класичним правописом білоруською", short = "клас. прав. біл.", link = "Класичний правопис білоруської мови"},
	['rhg-arab'] = { nominative = "Рогінджа арабським письмом", short = "рогін. араб. пис.", link = "Рогінджа (мова)", is_noun = true},
}
	
--[[--------------------< 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', 'ce', 'dv', 'dz', 'el', 'fa', 'grc',
	'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 = {
--	['interproj-linked-name'] = 'CS1 interproject-linked names|$1',				-- any author, editor, etc that has an interproject link; $1 is interproject tag used as a sort key
--	['interwiki-linked-name'] = 'CS1 interwiki-linked names|$1',				-- any author, editor, etc that has an interwiki link; $1 is interwiki tag used as a sort key; yeilds to interproject
	['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 реєстранта

дивіться §3.2.2 DOI prefix of the Doi Handbook p. 43
https://www.doi.org/doi-handbook/DOI_Handbook_Final.pdf#page=43

]]

local function build_free_doi_registrants_table()
	local registrants_t = {};
	for _, v in ipairs ({
		'1045', '1074', '1096', '1100', '1155', '1186', '1194', '1371', '1629', '1989', '1999', '2147', '2196', '3285', '3389', '3390',
		'3748', '3814', '3847', '3897', '4061', '4089', '4103', '4172', '4175', '4230', '4236', '4239', '4240', '4249', '4251',
		'4252', '4253', '4254', '4291', '4292', '4329', '4330', '4331', '5194', '5210', '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', '7759', '7766', '11131', '11569', '11647',
		'11648', '12688', '12703', '12715', '12942', '12998', '13105', '14256', '14293', '14303', '15215', '15347', '15412', '15560', '16995',
		'17645', '19080', '19173', '20944', '21037', '21468', '21767', '22261', '22323', '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

local extended_registrants_t = {												-- known free registrants identifiable by the doi suffix incipit
	['1016'] = {'j.heliyon'},													-- Heliyon
	['1046'] = {'j.1365-8711', 'j.1365-246x'},									-- MNRAS, GJI
	['1093'] = {'mnras', 'mnrasl', 'gji', 'rasti'},								-- MNRAS, MNRAS Letters, GJI, RASTI
	['1099'] = {'acmi', 'mic', '00221287', 'mgen'},                             -- Access Microbiology, Microbiology, Journal of General Microbiology, Microbial Genomics
	['1111'] = {'j.1365-2966', 'j.1745-3933', 'j.1365-246X'},					-- MNRAS, MNRAS Letters, GJI
	['1210'] = {'jendso','jcemcr'},												-- Journal of the Endocrine Society, JCEM Case Reports
	}

--[[

Шаблони (патерни) для пошуку зайвого тексту в |volume=, |issue=, |page=, |pages=

]]

local vol_iss_pg_patterns = {
	good_ppattern = '^P[^%.PpGg]',												-- нормально починати з великої літери P: P7 (page 7 of section P), але не p123 (page 123); TODO: this allows 'Pages' which it should not
	bad_ppatterns = {															-- шаблони (патерни) для |page= та |pages=
		'^[Pp][PpGg]?%.?[ %d]',
		'^[Pp][Pp]?%.&nbsp;',													-- з шаблонів {{p.}} та {{pp.}}
		'^[Pp]ages?',
		'^[Pp]gs.?',
		'^[Cc]торінк[аи]',
		'^[Сс][СсТтОоРр]?%.?[ %d]',
		'^[Сс]тор.?',
		},
	vpatterns = {																-- шаблони (патерни) для |volume=
		'^volumes?',
		'^vols?[%.:=]?'
		},
	ipatterns = {																-- шаблони (патерни) для |issue=
		'^issues?',
		'^iss[%.:=]?',
		'^numbers?',
		'^nos?%A',																-- не здійснювати збігів із «november» або «nostradamus»
		'^nr[%.:=]?',
		'^n[%.:= ]'																-- може бути дійсним значенням без роздільника (символ пробілу є символом роздільника тут)
		}
	}

--[[--------------------------< 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', 'так', 'т'},							-- |deadurl=, |no-tracking=, |no-pp= -- Використовується InternetArchiveBot
	['afterword'] = {'afterword', 'післямова'},									-- |contribution=
	['bot: unknown'] = {'bot: unknown'},										-- |url-status= -- Використовується InternetArchiveBot
	['cs1'] = {'cs1', 'сп1'},													-- |mode=
	['cs2'] = {'cs2', 'сп2'},													-- |mode=
	['dead'] = {'dead', 'deviated', 'мертвий', 'видозмінений'}, 				-- |url-status= -- Використовується InternetArchiveBot
	['dstu2006'] = {'dstu2006', 'дсту2006'},									-- |mode=
	['dstu2015'] = {'dstu2015', 'дсту2015'},									-- |mode=
	['foreword'] = {'foreword', 'передмова'},									-- |contribution=
	['free'] = {'free', 'безкоштовний', 'вільний'},								-- |<id>-access= -- Використовується InternetArchiveBot
	['harv'] = {'harv', 'гарв'},												-- |ref=; this no longer supported; is_valid_parameter_value() called with <invert> = true
	['introduction'] = {'introduction', 'вступ'},								-- |contribution=
	['limited'] = {'limited', 'обмежений'},										-- |url-access= -- Використовується InternetArchiveBot
	['live'] = {'live', 'живий'},												-- |url-status= -- Використовується InternetArchiveBot
--	['mdy'] = {'mdy'},															-- |df=; не підтримується в укрвікі
--	['mdy-all'] = {'mdy-all'},													-- |df=; не підтримується в укрвікі
	['negative'] = {'no', 'false', 'n', 'ні', 'н'},								-- |deadurl=
	['none'] = {'none', 'відсутній'},											-- |postscript=, |ref=, |title=, |type= -- Використовується InternetArchiveBot
	['preface'] = {'preface', 'пролог'},										-- |contribution=
	['registration'] = {'registration', 'реєстрація'},					  		-- |url-access= -- Використовується InternetArchiveBot
	['subscription'] = {'subscription', 'підписка'},							-- |url-access= -- Використовується InternetArchiveBot
	['unfit'] = {'unfit', 'непридатний'},										-- |url-status= -- Використовується InternetArchiveBot
	['usurped'] = {'usurped', 'захоплений'},									-- |url-status= -- Використовується 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 >---------------------

Ця функція створює список, keywords_xlate{}, ключових слів, що зберігаються в keywords{}, де значення з keywords{}
стають ключами в keywords_xlate{} та ключі зkeywords{} стають значенням в keywords_xlate{}:
	['affirmative'] = {'yes', 'true', 'y'},		-- у keywords{}
стають
	['yes'] = 'affirmative',					-- у keywords_xlate{}
	['true'] = 'affirmative',
	['y'] = 'affirmative',

Мета цієї функції діяти як перекладач між неанглійськими ключовими словами та їхніми англійськими відповідниками,
що можуть використовуватися в інших модулях цієї групи

]]

local function xlate_keywords ()
	local out_table = {};														-- вивід потрапляє сюди
	for k, keywords_t in pairs (keywords) do									-- проходження через таблицю ключових слів
		for _, keyword in ipairs (keywords_t) do								-- для кожного ключового слова
			out_table[keyword] = k;												-- створення запису у таблиці на виході, де ключове слово — це ключ
		end
	end
	
	return out_table;
end

local keywords_xlate = xlate_keywords ();										-- список перекладених ключових слів

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

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

keywords_lists{}, є таблицею таблиць з keywords{}

]]

local function make_keywords_list (keywords_lists)
	local out_table = {};														-- вивід потрапляє сюди
	
	for _, keyword_list in ipairs (keywords_lists) do							-- проходження через keywords_lists{} та отримання таблиці із ключовими словами
		for _, keyword in ipairs (keyword_list) do								-- проходження через keyword_list{} та додавання кожного ключового слова, ...
			table.insert (out_table, keyword);									-- ... як звичайний текст, до списку на виході
		end
	end
	return out_table;
end

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

Це є списком списків із правильними ключовими словами для різних параметрів у [key].
Загалом, ключі у цій таблиці є канонічними назвами параметрів en.wiki, хоча
деякі є  вигаданими через використання в кількох різноназваних параметрів:
['yes_true_y'], ['id-access'].

Функція make_keywords_list() витягує окреме ключове слово з
доречного списку у keywords{}.

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

]]

local keywords_lists = {
	['yes_true_y'] = make_keywords_list ({keywords.affirmative}),
	['contribution'] = make_keywords_list ({keywords.afterword, keywords.foreword, keywords.introduction, keywords.preface}),
	['DeadURL'] = make_keywords_list ({keywords.affirmative, keywords.negative}),
--	['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, keywords.dstu2006, keywords.dstu2015}),
	['name-list-style'] = make_keywords_list ({keywords.amp, keywords['and'], keywords.vanc}),
	['ref'] = make_keywords_list ({keywords.harv}),								-- інвертована перевірка; |ref=harv більше не підтримується
	['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})
	}
	
--[[--------------------------< C S 1 _ C O N F I G _ G E T >--------------------------------------------------

fetch and validate values from {{cs1 config}} template to fill <global_cs1_config_t>

no error messages; when errors are detected, the parameter value from {{cs1 config}} is blanked.

Supports all parameters and aliases associated with the metaparameters: DisplayAuthors, DisplayContributors,
DisplayEditors, DisplayInterviewers, DisplayTranslators, NameListStyle, and Mode.  The DisplayWhatever metaparameters
accept numeric values only (|display-authors=etal and the like is not supported).

]]

local global_cs1_config_t = {};													-- TODO: add value returned from get_date_format() to this table?

local function get_cs1_config ()
	if not content then															-- nil content when we're in template
		return nil;																-- auto-formatting does not work in Template space so don't set global_df
	end

	local start = content:find('{{ *[Cc][Ss]1 config *[|}]');					-- <start> is offset into <content> when {{cs1 config}} found; nil else
	if start then
		local cs1_config_template = content:match ('%b{}', start);				-- get the whole template

		if not cs1_config_template then
			return nil;
		end

		local params_t = mw.text.split (cs1_config_template:gsub ('^{{%s*', ''):gsub ('%s*}}$', ''), '%s*|%s*');	-- remove '{{' and '}}'; make a sequence of parameter/value pairs (split on the pipe)
		table.remove (params_t, 1);												-- remove the template name because it isn't a parameter/value pair

		local config_meta_params_t = {'DisplayAuthors', 'DisplayContributors', 'DisplayEditors', 'DisplayInterviewers', 'DisplayTranslators', 'NameListStyle', 'Mode'};
		local meta_param_map_t = {};											-- list of accepted parameter names usable in {{cs1 config}} goes here
		
		for _, meta_param in ipairs (config_meta_params_t) do					-- for i18n using <config_meta_params_t>, map template parameter names to their metaparameter equivalents
			if 'table' == type (aliases[meta_param]) then						-- if <meta_param> is a sequence, 
				for _, param in ipairs (aliases[meta_param]) do					-- extract its contents
					meta_param_map_t[param] = meta_param;						-- and add to <meta_param_map_t>
				end
			else
				meta_param_map_t[aliases[meta_param]] = meta_param;				-- not a sequence so just add the parameter to <meta_param_map_t>
			end
		end

		local keywords_t = {};													-- map valid keywords to their associate metaparameter; reverse form of <keyword_lists[key] for these metaparameters
		for _, metaparam_t in ipairs ({{'NameListStyle', 'name-list-style'}, {'Mode', 'mode'}}) do	-- only these metaparameter / keywords_lists key pairs
			for _, keyword in ipairs (keywords_lists[metaparam_t[2]]) do		-- spin through the list of keywords
				keywords_t[keyword] = metaparam_t[1];							-- add [keyword] = metaparameter to the map
			end
		end

		for _, param in ipairs (params_t) do									-- spin through the {{cs1 config}} parameters and fill <global_cs1_config_t>
			local k, v = param:match ('([^=]-)%s*=%s*(.+)');					-- <k> is the parameter name; <v> is parameter's assigned value
			if k then
				if k:find ('^display') then										-- if <k> is one of the |display-<namelist>= parameters
					if v:match ('%d+') then										-- the assigned value must be digits; doesn't accept 'etal'
						global_cs1_config_t[meta_param_map_t[k]]=v;				-- add the display param and its value to globals table
					end
				else
					if keywords_t[v] == meta_param_map_t[k] then				-- keywords_t[v] returns nil or the metaparam name; these must be the same
						global_cs1_config_t[meta_param_map_t[k]]=v;				-- add the parameter and its value to globals table
					end
				end
			end
		end
	end
end

get_cs1_config ();																-- fill <global_cs1_config_t>	
	
--[[---------------------< 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 = true
--		}, 
    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_chapter_ignored = {
		message = 'Проігноровано <code class="cs1-code">&#124;$1=</code>',			-- $1 is parameter name
		anchor = 'chapter_ignored',
		category = 'Помилки CS1: Сторінки з проігнорованим параметром chapter',
		hidden = false
		},
    err_citation_missing_title = {
        message = 'Пропущений або порожній <code class="cs1-code">&#124;$1=</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_contributor_ignored = {
		message = 'Проігноровано <code class="cs1-code">&#124;contributor=</code>',
		anchor = 'contributor_ignored',
		category = 'Помилки CS1: Сторінки з помилками використання параметра contributor',
		hidden = false
		},
	err_contributor_missing_required_param = {
		message = '<code class="cs1-code">&#124;contributor=</code> вимагає <code class="cs1-code">&#124;$1=</code>',	-- $1 є ім'ям параметра
		anchor = 'contributor_missing_required_param',
		category = 'Помилки CS1: Сторінки з помилками використання параметра contributor',
		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_extra_text_pages = {
		message = '<code class="cs1-code">&#124;$1=</code> має зайвий текст',		-- $1 є ім'ям параметра
		anchor = 'extra_text_pages',
		category = 'Помилки CS1: Сторінки з посиланнями на джерела із зайвим тексту у параметрі pages',
		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;$1=</code> вимагає <code class="cs1-code">&#124;$2=</code>',	-- $1 є параметром формату, $2 є параметром url
        anchor = 'format_missing_url',
        category = 'Сторінки з посиланнями на джерела з format і без URL',
        hidden = false },
    --err_generic_name = {
	--	message = '<code class="cs1-code">&#124;$1=</code> має загальну ім\'я',	-- $1 є ім'ям параметра
	--	anchor = 'generic_name',
	--	category = 'Помилки CS1: Сторінки із загальною ім\'я ',
	--	hidden = false,
	--	},
	err_generic_title = {
		message = 'Cite використоує загальну назву',
		anchor = 'generic_title',
		category = 'Помилки CS1: Сторінки із загальною назвою',
		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_periodical_ignored = {
		message = 'Проігноровано <code class="cs1-code">&#124;$1=</code>',			-- $1 є ім'ям параметра
		anchor = 'periodical_ignored',
		category = 'Помилки CS1: Сторінки з проігнорованим параметром periodical',
		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_archived_copy = {
		message = nil,
		anchor = 'archived_copy',
		category = 'Обслуговування CS1: Сторінки з текстом «archived copy» як значення параметру title',
		hidden = true,
		},
	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_overridden_setting = {
		message = nil,
		anchor = 'overridden',
		category = 'Обслуговування CS1: Сторінки з посиланнями на джерела, що мають перезаписані налаштування',
		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_untitled = {
		message = nil,
		anchor = 'untitled',
		category = 'Обслуговування CS1: Сторінки з неназвною переіодикою',
		hidden = true,
		},
	maint_url_status = {
		message = nil,
		anchor = 'url_status',
		category = 'Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url',
		hidden = true,
		},
	maint_zbl = {
		message = nil,
		anchor = 'zbl',
		category = 'Обслуговування CS1: Сторінки з Zbl, який містить тимчасовий ідентифікатор',
		hidden = true,
		},
		
}

--[[--------------------------< I D _ L I M I T S _ D A T A _ T >----------------------------------------------

Стягує ліміти id для певних ідентифікаторів з c:Data:CS1/Identifier limits.tab. Це джерело є файлом даних 
json tabular, що обслуговується на сховищі вікіпедії. Перетворює формат json на таблицю з парами k/v.

Значення з <id_limits_data_t> використовуються для встановлення handle.id_limit.

]]

local id_limits_data_t = {};
for _, limit_t in ipairs (mw.ext.data.get ("CS1/Identifier limits.tab").data) do
	id_limits_data_t[limit_t[1]] = limit_t[2];									-- <limit[1]> є ідентифікатором; <limit[2]> є верхнім лімітом для цього ідентифікатора
end

--[[--------------------------< 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://search.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://search.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://search.worldcat.org/oclc/',
		COinS = 'info:oclcnum',
		encode = true,
		separator = '&nbsp;',
		id_limit = id_limits_data_t.OCLC or 0,
		},
	['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 = id_limits_data_t.OSTI or 0,
		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 = id_limits_data_t.PMC or 0,
		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 = id_limits_data_t.PMID or 0,
		},
	['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 = id_limits_data_t.RFC or 0,
		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 = id_limits_data_t.SSRN or 0,
		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 = id_limits_data_t.S2CID or 0,
		custom_access = 's2cid-access',
		custom_access_uk = 'доступ-до-s2cid'
		},
	['USENETID'] = {
		parameters = {'message-id', 'id-повідомлення', 'повідомлення-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,						-- булеві значення в налаштуваннях, що вгорі цього модуля
	enable_sort_keys = enable_sort_keys,
--	date_name_auto_xlate_enable = date_name_auto_xlate_enable,
	
	global_cs1_config_t = global_cs1_config_t,									-- global settings from {{cs1 config}}
	
	name_space_sort_keys = name_space_sort_keys,
	aliases = aliases, 
	special_case_translation = special_case_translation,
	date_names = date_names,
	defaults = defaults,
	err_msg_supl = err_msg_supl,
	error_conditions = error_conditions,
	et_al_patterns = et_al_patterns,
	extended_registrants_t = extended_registrants_t,
	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,
	supported_langauge_codes = supported_langauge_codes,
	language_table = language_table,
	this_wiki_code = this_wiki_code,
	title_types = title_types,
	vol_iss_pg_patterns = vol_iss_pg_patterns,
	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
};