Перейти до вмісту

Модуль:Citation/CS1/Configuration

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

Цей файл конфігурації містить різноманітні дані, які обслуговують функціонування {{Модуль:Citation/CS1}} (обг. · викор. · ред.) та методи відображення цитувань, які базуються на мові Lua.

Секції файлу:

  1. таблиці перекладів та синонімів, які містять більшість літерних рядків, які можуть використовуватися в цитуваннях. Редактори, які переносять цей код з англійської Вікіпедії, повинні адаптувати значення усіх цих рядків, переклавши або додавши синоніми за потреби. /translation tables that contain most of the literal strings that may be included in Lua-based citation. If editors are copying this Module to another wiki using a language other than English, then they should translate each of these values into that language.
  2. список помилкових станів, який містить тексти відображуваних повідомлень про помилки, назви категорій спостереження, у які потрапляють сторінки з помилками і посилання на описи помилкових станів на сторінках довідки. /a list of error conditions specifying what text to display, what category to include (if any), and what help page section to refer to when errors are detected
  3. список обробників ідентифікаторів, який задає відомі ідентифікатори документів, наприклад, ISBN, DOI тощо, та методи їх форматування та відображення. /a list of ID handlers specifying the recognized document IDs, such as ISBN, DOI, etc., and how to format them.


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

Модулі CS1|CS2
  У вжитку Пісочниця Опис
адміністратор Модуль: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"
автопідтверджений користувач Module:Citation/CS1/Suggestions Модуль:Citation/CS1/Suggestions/пісочниця [редагувати] Перелік, який перевизначає загальновживані помилкові назви параметрів на правильні, підтримувані модулем назви параметрів
--[[--------------------------< 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 = "Ірландська мова"},
	['ge'] = { nominative = "грузинська", instrumental = "грузинською", short = "груз.", link = "Грузинська мова"},
	['eo'] = { nominative = "есперанто", short = "еспер.", link = "Есперанто", is_noun = true},
	['eu'] = { nominative = "баскська", instrumental = "баскською", short = "баск.", link = "Баскська мова"},
	['gd'] = { 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
};