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

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

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

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

2024-05-05: виправлено незадекларовану змінну 'uncategorized_namespaces_t'
2024-05-15: закоментував категорію, що невикористовується

]]

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

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

]]

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

--[[
Список просторів назв, що не повинні включатися у категоріях сторінок з
помилками посилань на джерела. Те саме, що встановлення 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'] = 'Архів',
	['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', 'ступінь'},
    ['DisplayAuthors'] = {"display-authors", "displayauthors", 'display-subjects', "показувати-авторів", "показувати-суб'єктів"},
    ['DisplayEditors'] = {"display-editors", "displayeditors", "показувати-редакторів"},
    ['DisplayInterviewers'] = {'display-interviewers', "показувати-інтерв'юерів"},
    ['DisplayTranslators'] = {'display-translators', "показувати-перекладачів"},
    ['DoiBroken'] = {'doi-broken-date', 'doi_inactivedate', 'doi_brokendate', 'DoiBroken', 'поламана-дата-doi'},
    ['Edition'] = {'edition', 'видання'},
    ['Editors'] = {'editors', 'редактори'},
    ['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", "суб'єкт#-маска", "суб'єкт-маска#"},
    
    ['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'] = {'business', true},										['local'] = nil},
			{['en'] = {'cnn', true},											['local'] = nil},
			{['en'] = {'collaborator', true},									['local'] = nil},
			{['en'] = {'contributor', true},									['local'] = nil},
			{['en'] = {'contact us', true},										['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'] = {'home page', true},										['local'] = nil},
			{['en'] = {'^[Ii]nc%.?$', false},									['local'] = nil},
			{['en'] = {'instagram', true},										['local'] = nil},
			{['en'] = {'interviewer', true},									['local'] = nil},
			{['en'] = {'linkedIn', true},										['local'] = nil},
			{['en'] = {'^[Nn]ews$', 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'] = {},													-- використовується в переформатуванні та перекладі дат; скопіюйте 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'] = {},
	}

--[[--------------------------< 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', 'br', 'bs', 'ca', 
		'ce', 'co', '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', 'os', 'pt', 'rm', 'ro', 'sa', 'sh', 'sk', 'sl', 'so', 'sq', 'sr',  
		'sv', 'sw', 'te', 'ta', 'tg', 'th', 'tk', 'tl', 'tr', 'tt', 'ur', 'uz', 
		'vi', 'yi', 'zh'
	}, 
	[3] = 
	{
		'crh', 'rue', 'arz', 'ast', 'chg', 'chu', 'dar', 'dsb', 'gag', 'grc', 'gsc', 
		'hsb', 'kaa', 'kdr', 'kjh', 'krl', 'ltg', 'mdf', 'mhr', 'myv', 'nan', 'non',   
		'orv', 'otk', 'pap', 'pnt', 'rmy', 'sah', 'sla', 'szl', 'udm', 'lld', 'uum', 
		'xal'
	}, 
	[4] = {}, 
	[5] = {'en-GB', 'en-US', 'uk-UA'}, 
	[6] = {'uk-old', 'old-ru', 'ru-dor', 'pnt-UA'}, 
	[7] = {'bat-smg'}
}	
	
--[[--------------------< 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 = "Бенгальська мова"},
	['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 = "Корсиканська мова"},
	['cu'] = { nominative = "староцерковнословʼянська", instrumental = "староцерковнословʼянською", short = "ст.-слов.", link = "Староцерковнословʼянська мова"},
	['cv'] = { nominative = "чуваська", instrumental = "чуваською", short = "чув.", link = "Чуваська мова"},
	['cy'] = { nominative = "валлійська", instrumental = "валлійською", short = "валл.", link = "Валлійська мова"},
	['cz'] = { nominative = "чеська", instrumental = "чеською", short = "чес.", link = "Чеська мова"},
	['da'] = { nominative = "данська", instrumental = "данською", short = "дан.", link = "Данська мова"},
	['et'] = { nominative = "естонська", instrumental = "естонською", short = "ест.", link = "Естонська мова"},
	['fa'] = { nominative = "перська", instrumental = "перською", short = "перс.", link = "Перська мова"},
	['fi'] = { nominative = "фінська", instrumental = "фінською", short = "фін.", link = "Фінська мова"},
	['fo'] = { nominative = "фарерська", instrumental = "фарерською", short = "фар.", link = "Фарерська мова"},
	['fy'] = { nominative = "фризька", instrumental = "фризькою", short = "фриз.", link = "Фризька мова"},
	['ga'] = { nominative = "ірландська", instrumental = "ірландською", short = "ірл.", link = "Ірландська мова"},
	['eo'] = { nominative = "есперанто", short = "еспер.", link = "Есперанто", is_noun = true},
	['eu'] = { nominative = "баскська", instrumental = "баскською", short = "баск.", link = "Баскська мова"},
	['gd'] = { nominative = "шотландська ґельська", instrumental = "шотландською ґельською", short = "шот. ґел.", link = "Шотландська гельська мова"},
	['ka'] = { nominative = "грузинська", instrumental = "грузинською", short = "груз.", link = "Грузинська мова"},
	['gl'] = { nominative = "галісійська", instrumental = "галісійською", short = "галіс.", link = "Галісійська мова"},
	['gn'] = { nominative = "гуарані", short = "гуар.", link = "Гуарані (мова)", is_noun = true},
	['el'] = { nominative = "грецька", instrumental = "грецькою", short = "гр.", link = "Грецька мова"},
	['ha'] = { nominative = "хауса", short = "хауса", link = "Хауса (мова)", is_noun = true},
	['he'] = { nominative = "іврит", instrumental = "івритом", short = "івр.", link = "іврит", is_noun = true},
	['hi'] = { nominative = "гінді", short = "гінді", link = "Гінді", is_noun = true},
	['hr'] = { nominative = "хорватська", instrumental = "хорватською", short = "хор.", link = "Хорватська мова"},
	['ht'] = { nominative = "гаїтянська креольська", instrumental = "гаїтянська креольською", short = "гаїт. креол.", link = "Гаїтянська креольська мова"},
	['hu'] = { nominative = "угорська", instrumental = "угорською", short = "угор.", link = "Угорська мова"},
	['hy'] = { nominative = "вірменська", instrumental = "вірменською", short = "вірм.", link = "Вірменська мова"},
	['id'] = { nominative = "індонезійська", instrumental = "індонезійською", short = "індонез.", link = "Індонезійська мова"},
	['ie'] = { nominative = "інтерлінгве", short = "інтерлінг.", link = "Інтерлінгве", is_noun = true},
	['is'] = { nominative = "ісландська", instrumental = "ісландською", short = "ісл.", link = "Ісландська мова"},
	['ja'] = { nominative = "японська", instrumental = "японською", short = "яп.", link = "Японська мова"},
	['ka'] = { nominative = "грузинська", instrumental = "грузинською", short = "груз.", link = "Грузинська мова"},
	['kk'] = { nominative = "казахська", instrumental = "казахською", short = "казах.", link = "Казахська мова"},
	['kl'] = { nominative = "ґренландська", instrumental = "ґренландською", short = "ґренл.", link = "Гренландська мова"},
	['km'] = { nominative = "кхмерська", instrumental = "кхмерською", short = "кхмер.", link = "Кхмерська мова"},
	['kn'] = { nominative = "каннада", short = "канн.", link = "Каннада", is_noun = true},
	['ko'] = { nominative = "корейська", instrumental = "корейською", short = "кор.", link = "Корейська мова"},
	['kv'] = { nominative = "комі", short = "комі", link = "Комі (мова)", is_noun = true},
	['ku'] = { nominative = "курдська", instrumental = "курдською", short = "курд.", link = "Курдська мова"},
	['ky'] = { nominative = "киргизька", instrumental = "киргизькою", short = "киргиз.", link = "Киргизька мова"},
	['la'] = { nominative = "латинська", instrumental = "латинською", short = "лат.", link = "Латинська мова"},
	['le'] = { nominative = "лемківська", instrumental = "лемківською", short = "лемк.", link = "Лемківська мова"},
	['lt'] = { nominative = "литовська", instrumental = "литовською", short = "лит.", link = "Литовська мова"},
	['lb'] = { nominative = "люксембурзька", instrumental = "люксембурзькою", short = "люксемб.", link = "Люксембурзька мова"},
	['lv'] = { nominative = "латиська", instrumental = "латиською", short = "латис.", link = "Латиська мова"},
	['md'] = { nominative = "молдовська", instrumental = "молдовською", short = "молд.", link = "Молдовська мова"},
	['me'] = { nominative = "чорногорська", instrumental = "чорногорською", short = "чорн.", link = "Чорногорська мова"},
	['mg'] = { nominative = "малагасійська", instrumental = "малагасійською", short = "малаг.", link = "Малагасійська мова"},
	['mi'] = { nominative = "маорійська", instrumental = "маорійською", short = "маор.", link = "Маорі (мова)"},
	['mk'] = { nominative = "македонська", instrumental = "македонською", short = "мак.", link = "Македонська мова"},
	['ml'] = { nominative = "малаялам", short = "малаял.", link = "Малаялам", is_noun = true},
	['mn'] = { nominative = "монгольська", instrumental = "монгольською", short = "монг.", link = "Монгольська мова"},
	['mo'] = { nominative = "молдовська", instrumental = "молдовською", short = "молд.", link = "Молдовська мова"},
	['ms'] = { nominative = "малайська", instrumental = "малайською", short = "малайськ.", link = "Малайська мова"},
	['mr'] = { nominative = "маратхі", short = "мар.", link = "Маратхі (мова)", is_noun = true},
	['mt'] = { nominative = "мальтійська", instrumental = "мальтійською", short = "мальт.", link = "Мальтійська мова"},
	['ne'] = { nominative = "непальська", instrumental = "непальською", short = "неп.", link = "Непальська мова"},
	['nl'] = { nominative = "нідерландська", instrumental = "нідерландською", short = "нід.", link = "Нідерландська мова"},
	['no'] = { nominative = "норвезька", instrumental = "норвезькою", short = "норв.", link = "Норвезька мова"},
	['oc'] = { nominative = "окситанська", instrumental = "окситанською", short = "окситан.", link = "Окситанська мова"},
	['os'] = { nominative = "осетинська", instrumental = "осетинською", short = "осет.", link = "Осетинська мова"},
	['pt'] = { nominative = "португальська", instrumental = "португальською", short = "порт.", link = "Португальська мова"},
	['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 = "Тагальська мова"},
	['tr'] = { nominative = "турецька", instrumental = "турецькою", short = "тур.", link = "Турецька мова"},
	['tt'] = { 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 = "Русинська мова"},
	['arz'] = { nominative = "єгипетська арабська", instrumental = "єгипетською арабською", short = "масрі", link = "Єгипетська арабська мова"},
	['ast'] = { nominative = "астурійська", instrumental = "астурійською", short = "астур.", link = "Астурійська мова"},
	['chg'] = { nominative = "чагатайська", instrumental = "чагатайською", short = "чагат.", link = "Чагатайська мова"},
	['chu'] = { nominative = "церковнословʼянська", instrumental = "церковнословʼянською", short = "церк.-сл.", link = "Церковнословʼянська мова"},
	['dar'] = { nominative = "даргинська", instrumental = "даргинською", short = "дарг.", link = "Даргинська мова"},
	['dsb'] = { nominative = "нижньолужицька", instrumental = "нижньолужицькою", short = "н.-луж.", link = "Нижньолужицька мова"},
	['gag'] = { nominative = "гагаузька", instrumental = "гагаузькою", short = "гаг.", link = "Гагаузька мова"},
	['grc'] = { nominative = "давньогрецька", instrumental = "давньогрецькою", short = "д.-гр.", link = "Давньогрецька мова"},
	['gsc'] = { nominative = "гасконська", instrumental = "гасконською", short = "гаск.", link = "Гасконська мова"},
	['hsb'] = { nominative = "верхньолужицька", instrumental = "верхньолужицькою", short = "в.-луж.", link = "Верхньолужицька мова"},
	['kaa'] = { nominative = "каракалпацька", instrumental = "каракалпацькою", short = "кар.", link = "Каракалпацька мова"},
	['kdr'] = { nominative = "караїмська", instrumental = "караїмською", short = "караїм.", link = "Караїмська мова"},
	['kjh'] = { nominative = "хакаська", instrumental = "хакаською", short = "хакас.", link = "Хакаська мова"},
	['krl'] = { nominative = "карельська", instrumental = "карельською", short = "карел.", link = "Карельська мова"},
	['ltg'] = { nominative = "латгальська", instrumental = "латгальською", short = "лат.", link = "Латгальська мова"},
	['mdf'] = { nominative = "мокшанська", instrumental = "мокшанською", short = "мокш.", link = "Мокшанська мова"},
	['mhr'] = { nominative = "лугомарійська", instrumental = "лугомарійською", short = "лат.", link = "Східномарійська мова"},
	['myv'] = { nominative = "ерзянська", instrumental = "ерзянською", short = "ерз.", link = "Ерзянська мова"},
	['nan'] = { nominative = "південноміньська", instrumental = "південноміньською", short = "півд-мін.", link = "Південноміньська мова"},
	['non'] = { nominative = "давньоісландська", instrumental = "давньоісландською", short = "давньоісл.", link = "Давньоісландська мова"},
	['orv'] = { nominative = "давньоруська", instrumental = "давньоруською", short = "давньоруська", link = "Давньоруська мова"},
	['otk'] = { nominative = "старотюркська", instrumental = "старотюркською", short = "ст.-тюрк.", link = "Старотюркські мови"},
	['pap'] = { nominative = "пап'яменто", short = "пап.", link = "Пап'яменто", is_noun = true},
	['pnt'] = { nominative = "понтійська", instrumental = "понтійською", short = "понт.", link = "Понтійська мова"},
	['rmy'] = { nominative = "ромська (циганська)", instrumental = "ромською (циганською)", short = "ром.", link = "Циганська мова"},
	['sah'] = { nominative = "якутська", instrumental = "якутською", short = "якут.", link = "Якутська мова"},
	['sla'] = { nominative = "міжслов'янська", instrumental = "міжслов'янською", short = "міжслов'янськ.", link = "Міжслов'янська мова"},
	['szl'] = { nominative = "сілезька", instrumental = "сілезькою", short = "міжслов'янськ.", link = "Сілезька мова"},
	['udm'] = { nominative = "удмуртська", instrumental = "удмуртською", short = "удм.", link = "Удмуртська мова"},
	['lld'] = { nominative = "ладинська", instrumental = "ладинською", short = "удм.", link = "Ладинська мова"},
	['uum'] = { nominative = "урумська", instrumental = "урумською", short = "урум.", link = "Урумська мова"},
	['xal'] = { nominative = "калмицька", instrumental = "калмицькою", short = "калм.", link = "Калмицька мова"},
	
	-- коди з більше символів
	['en-GB'] = { nominative = "британська англійська", instrumental = "британською англійською", short = "брит.", link = "Британська англійська" },
	['en-US'] = { nominative = "американська англійська", instrumental = "американською англійською", short = "амер.", link = "Американська англійська"},
	['uk-UA'] = { nominative = "українська", instrumental = "українською", short = "укр.", link = "Українська мова"},
	['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 = "Жмудська мова"},
}
	
--[[--------------------< S C R I P T _ L A N G _ C O D E S >-------------------

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

]]

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

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

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

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

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

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

]]

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

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

]]

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

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

дивіться §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', '4249', '4236', '4239', '4240', '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', '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

--[[

Шаблони (патерни) для пошуку зайвого тексту в |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= -- Used by InternetArchiveBot
	['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=
	['free'] = {'free', 'безкоштовний', 'вільний'},								-- |<id>-access= -- Використовується InternetArchiveBot
	['harv'] = {'harv', 'гарв'},												-- |ref=; this no longer supported; is_valid_parameter_value() called with <invert> = true
	['limited'] = {'limited', 'обмежений'},										-- |url-access= -- Використовується InternetArchiveBot
	['live'] = {'live', 'живий', 'живе'},										-- |url-status= -- Використовується InternetArchiveBot
	['negative'] = {'no', 'false', 'n'},										-- |deadurl=
	['none'] = {'none', 'відсутній'},											-- |postscript=, |ref=, |title=, |type= -- Used by InternetArchiveBot
	['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=
}

--[[------------------------< 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}),
	['DeadURL'] = make_keywords_list ({keywords.affirmative, keywords.negative}),
	['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})
	}
	
--[[---------------------< S T R I P M A R K E R S >----------------------------

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

]]

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

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

]]

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


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

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

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

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


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

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

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

local error_conditions = {
    err_accessdate_missing_url = {
        message = '<code class="cs1-code">&#124;access-date=</code> вимагає <code class="cs1-code">&#124;url=</code>',
        anchor = 'accessdate_missing_url',
        category = 'Помилки CS1: Сторінки з посиланнями на джерела з access-date і без URL',
        hidden = false },
    err_archive_date_missing_url = {
		message = '<code class="cs1-code">&#124;archive-date=</code> вимагає <code class="cs1-code">&#124;archive-url=</code>',
		anchor = 'archive_date_missing_url',
		category = 'Помилки CS1: Сторінки з помилками посилань на джерела з archive-url',
		hidden = false
		},    
    err_archive_missing_date = {
        message = '<code class="cs1-code">&#124;archive-url=</code> вимагає <code class="cs1-code">&#124;archive-date=</code>',
        anchor = 'archive_missing_date',
        category = 'Помилки CS1: Сторінки з помилками посилань на джерела з archive-url',
        hidden = false },
    err_archive_missing_url = {
        message = '<code class="cs1-code">&#124;archive-url=</code> вимагає <code class="cs1-code">&#124;url=</code>',
        anchor = 'archive_missing_url',
        category = 'Помилки CS1: Сторінки з помилками посилань на джерела з archive-url',
        hidden = false },
	err_arxiv_missing = {
		message = '<code class="cs1-code">&#124;arxiv=</code> є обов\'язковим параметром',
		anchor = 'arxiv_missing',
		category = 'Помилки CS1: Сторінки з помилками arXiv',											-- така ж сама як і в bad arxiv
		hidden = false
		},
	err_asintld_missing_asin = {
		message = '<code class="cs1-code">&#124;$1=</code> вимагає <code class="cs1-code">&#124;asin=</code>',	-- $1 є ім'ям параметра
		anchor = 'asintld_missing_asin',
		category = 'Помилки CS1: Сторінки з помилками ASIN TLD',
		hidden = false
		},
	err_bad_arxiv = {
		message = 'Перевірте значення <code class="cs1-code">&#124;arxiv=</code>',
		anchor = 'bad_arxiv',
		category = 'Помилки CS1: Сторінки з помилками arXiv',
		hidden = false
		},
	err_bad_asin = {
		message = 'Перевірте значення <code class="cs1-code">&#124;asin=</code>',
		anchor = 'bad_asin',
		category ='Помилки CS1: Сторінки з помилками ASIN',
		hidden = false
		},
	err_bad_asin_tld = {
		message = 'Перевірте значення <code class="cs1-code">&#124;asin-tld=</code>',
		anchor = 'bad_asin_tld',
		category ='Помилки CS1: Сторінки з помилками ASIN TLD',
		hidden = false
		},
	err_bad_bibcode = {
		message = 'Перевірте $1 <code class="cs1-code">&#124;bibcode=</code>',		-- $1 є детальним описом повідомлення про помлку
		anchor = 'bad_bibcode',
		category = 'Помилки CS1: Сторінки з помилками bibcode',
		hidden = false
		},
	err_bad_biorxiv = {
		message = 'Перевірте значення <code class="cs1-code">&#124;biorxiv=</code>',
		anchor = 'bad_biorxiv',
		category = 'Помилки CS1: Сторінки з помилками bioRxiv',
		hidden = false
		},
	err_bad_citeseerx = {
		message = 'Перевірте значення <code class="cs1-code">&#124;citeseerx=</code>',
		anchor = 'bad_citeseerx',
		category = 'Помилки CS1: Сторінки з помилками citeseerx',
		hidden = false
		},
--	err_bad_date = {
--		message = 'Перевірте значення дати у: $1',									-- $1 є списком назв параметрів
--		anchor = 'bad_date',
--		category = 'Помилки CS1: Сторінки з помилками дати',
--		hidden = false
--		}, (додано буде в наступних оновленнях)
    err_bad_doi = {
        message = 'Перевірте значення <code class="cs1-code">&#124;doi=</code>',
        anchor = 'bad_doi',
        category = 'Сторінки з помилками DOI',
        hidden = false },
	err_bad_hdl = {
		message = 'Перевірте значення <code class="cs1-code">&#124;hdl=</code>',
		anchor = 'bad_hdl',
		category = 'Помилки CS1: Сторінки з помилками HDL',
		hidden = false
		},
    err_bad_isbn = {
        message = 'Перевірте значення <code class="cs1-code">&#124;isbn=</code>: $1',
        anchor = 'bad_isbn',
        category = 'Сторінки з помилками ISBN',
        hidden = false },
    err_bad_ismn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;ismn=</code>',
		anchor = 'bad_ismn',
		category = 'Помилки CS1: Сторінки з помилками ISMN',
		hidden = false
		},
	err_bad_issn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;$1issn=</code>',	-- $1 є 'e' або '' для eissn або issn
		anchor = 'bad_issn',
		category = 'Помилки CS1: Сторінки з помилками ISSN',
		hidden = false
		},
	err_bad_jfm = {
		message = 'Перевірте значення <code class="cs1-code">&#124;jfm=</code>',
		anchor = 'bad_jfm',
		category = 'Помилки CS1: Сторінки з помилками JFM',
		hidden = false
		},
	err_bad_jstor = {
		message = 'Перевірте значення <code class="cs1-code">&#124;jstor=</code>',
		anchor = 'bad_jstor',
		category = 'Помилки CS1: Сторінки з помилками JSTOR',
		hidden = false
		},
	err_bad_lccn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;lccn=</code>',
		anchor = 'bad_lccn',
		category = 'Помилки CS1: Сторінки з помилками LCCN',
		hidden = false
		},
	err_bad_medrxiv = {
		message = 'Перевірте значення <code class="cs1-code">&#124;medrxiv=</code>',
		anchor = 'bad_medrxiv',
		category = 'Помилки CS1: Сторінки з помилками medRxiv',
		hidden = false
		},
	err_bad_mr = {
		message = 'Перевірте значення <code class="cs1-code">&#124;mr=</code>',
		anchor = 'bad_mr',
		category = 'Помилки CS1: Сторінки з помилками MR',
		hidden = false
		},
	err_bad_oclc = {
		message = 'Перевірте значення <code class="cs1-code">&#124;oclc=</code>',
		anchor = 'bad_oclc',
		category = 'Помилки CS1: Сторінки з помилками OCLC',
		hidden = false
		},
    err_bad_ol = {
        message = 'Перевірте значення <code class="cs1-code">&#124;ol=</code>',
        anchor = 'bad_ol',
        category = 'Сторінки з помилками OL',
        hidden = false },
    err_bad_osti = {
		message = 'Перевірте значення <code class="cs1-code">&#124;osti=</code>',
		anchor = 'bad_osti',
		category = 'Помилки CS1: Сторінки з помилками OSTI',
		hidden = false
		},    
    err_bad_paramlink = {														-- для |title-link=, |author/editor/translator-link=, |series-link=, |episode-link=
		message = 'Перевірте значення <code class="cs1-code">&#124;$1=</code>',		-- $1 є ім'ям параметра
		anchor = 'bad_paramlink',
		category = 'Помилки CS1: Сторінки з помилками використання параметра link',
		hidden = false
		},
	err_bad_pmc = {
		message = 'Перевірте значення <code class="cs1-code">&#124;pmc=</code>',
		anchor = 'bad_pmc',
		category = 'Помилки CS1: Сторінки з помилками PMC',
		hidden = false
		},
	err_bad_pmid = {
		message = 'Перевірте значення <code class="cs1-code">&#124;pmid=</code>',
		anchor = 'bad_pmid',
		category = 'Помилки CS1: Сторінки з помилками PMID',
		hidden = false
		},
	err_bad_rfc = {
		message = 'Перевірте значення <code class="cs1-code">&#124;rfc=</code>',
		anchor = 'bad_rfc',
		category = 'Помилки CS1: Сторінки з помилками RFC',
		hidden = false
		},
	err_bad_s2cid = {
		message = 'Перевірте значення <code class="cs1-code">&#124;s2cid=</code>',
		anchor = 'bad_s2cid',
		category = 'Помилки CS1: Сторінки з помилками S2CID',
		hidden = false
		},
	err_bad_sbn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;sbn=</code>: $1',	-- $1 є детальним описом повідомлення про помлку
		anchor = 'bad_sbn',
		category = 'Помилки CS1: Сторінки з помилками SBN',
		hidden = false
		},
	err_bad_ssrn = {
		message = 'Перевірте значення <code class="cs1-code">&#124;ssrn=</code>',
		anchor = 'bad_ssrn',
		category = 'Помилки CS1: Сторінки з помилками SSRN',
		hidden = false
		},
    err_bad_url = {
        message = 'Перевірте схему <code class="cs1-code">&#124;url=</code>',
        anchor = 'bad_url',
        category = 'Сторінки з помилками URL',
        hidden = false },
	err_bad_usenet_id = {
		message = 'Перевірте значення <code class="cs1-code">&#124;message-id=</code>',
		anchor = 'bad_message_id',
		category = 'Помилки CS1: Сторінки з помилками message-id',
		hidden = false
		},
	err_bad_zbl = {
		message = 'Перевірте значення <code class="cs1-code">&#124;zbl=</code>',
		anchor = 'bad_zbl',
		category = 'Помилки CS1: Сторінки з помилками Zbl',
		hidden = false
		},
    err_bare_url_missing_title = {
        message = 'Пропущений або порожній <code class="cs1-code">&#124;title=</code>',
        anchor = 'bare_url_missing_title',
        category = 'Сторінки з URL без назв',
        hidden = false },
    err_biorxiv_missing = {
		message = '<code class="cs1-code">&#124;biorxiv=</code> є обов\'язковим параметром',
		anchor = 'biorxiv_missing',
		category = 'Помилки CS1: Сторінки з помилками bioRxiv',										-- така ж сама як і в bad bioRxiv
		hidden = false
		},
	err_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;title=</code>',
        anchor = 'citation_missing_title',
        category = 'Сторінки з посиланнями на джерела без назв',
        hidden = false },
    err_citeseerx_missing = {
		message = '<code class="cs1-code">&#124;citeseerx=</code> є обов\'язковим параметром',
		anchor = 'citeseerx_missing',
		category = 'Помилки CS1: Сторінки з помилками citeseerx',										-- така ж сама як і в bad citeseerx
		hidden = false
		},    
    err_cite_web_url = {
        message = 'Пропущений або порожній <code class="cs1-code">&#124;url=</code>',
        anchor = 'cite_web_url',
        category = 'Сторінки з посиланнями на web-джерела без URL',
        hidden = false },
    err_class_ignored = {
		message = 'Проігноровано <code class="cs1-code">&#124;class=</code>',
		anchor = 'class_ignored',
		category = 'Помилки CS1: Сторінки з помилками використання параметра class',
		hidden = false
		},
	err_deprecated_params = {
		message = 'Cite використовує застарілий параметр <code class="cs1-code">&#124;$1=</code>',	-- $1 є ім'ям параметра
		anchor = 'deprecated_params',
		category = 'Помилки CS1: Сторінки з посиланнями на джерела зі застарілими параметрами',
		hidden = false
		},
	err_disp_name = {
		message = 'Недійсний <code class="cs1-code">&#124;$1=$2</code>',			-- $1 є ім'ям параметра $2 є значенням параметру
		anchor = 'disp_name',
		category = 'Помилки CS1:Сторінки з недійсним значенням параметра display-names',
		hidden = false,
		},
	err_doibroken_missing_doi = {
		message = '<code class="cs1-code">&#124;$1=</code> вимагає <code class="cs1-code">&#124;doi=</code>',	-- $1 є ім'ям параметра
		anchor = 'doibroken_missing_doi',
		category = 'Сторінки з помилками DOI',
		hidden = false
		},
	err_embargo_missing_pmc = {
		message = '<code class="cs1-code">&#124;$1=</code> вимагає <code class="cs1-code">&#124;pmc=</code>',	-- $1 є ім'ям параметра
		anchor = 'embargo_missing_pmc',
		category = 'Помилки CS1: Сторінки з помилками використання параметра PMC embargo',
		hidden = false
		},
    err_empty_citation = {
        message = 'Порожнє посилання на джерело',
        anchor = 'empty_citation',
        category = 'Сторінки з порожніми посиланнями на джерела',
        hidden = false },
	err_etal = {
		message = 'Явне використання «та ін.» у: <code class="cs1-code">&#124;$1=</code>',	-- $1 є ім'ям параметра
		anchor = 'explicit_et_al',
		category = 'Помилки CS1: Сторінки з явним використання та ін.',
		hidden = false
		},
--	err_extra_pages = {
--        message = 'Зайве <code class="cs1-code">&#124;pages=</code> або <code class="cs1-code">&#124;at=</code>',
--        anchor = 'extra_pages',
 --       category = 'Сторінки з посиланнями на джерела з суперечливими параметрами сторінок',
  --      hidden = false },
    err_extra_text_pages = {
		message = '<code class="cs1-code">&#124;$1=</code> має зайвий текст',		-- $1 is parameter name
		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;format=</code> вимагає <code class="cs1-code">&#124;url=</code>',
        anchor = 'format_missing_url',
        category = 'Сторінки з посиланнями на джерела з format і без URL',
        hidden = false },
    --err_generic_name = {
	--	message = '<code class="cs1-code">&#124;$1=</code> має загальну ім\'я',	-- $1 is parameter name
	--	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_doi_ignore = {
		message = nil,
		anchor = 'doi_ignore',
		category = 'Обслуговування CS1: Сторінки із проігнорованими помилками DOI',
		hidden = true,
		},
	maint_doi_inactive = {
		message = nil,
		anchor = 'doi_inactive',
		category = 'Обслуговування CS1: Сторінки із неактивним DOI',
		hidden = true,
		},
	maint_doi_inactive_dated = {
		message = nil,
		anchor = 'doi_inactive_dated',
		category = 'Обслуговування CS1: Сторінки із неактивним DOI станом на $2$3$1',						-- $1 є роком, $2 є назвою місяця або пустим рядком, $3 є пробілом або пустим рядком
		hidden = true,
		},
	maint_doi_unflagged_free = {
		message = nil,
		anchor = 'doi_unflagged_free',
		category = 'Обслуговування CS1: Сторінки із непозначеним DOI з безкоштовним доступом',
		hidden = true,
		},
	maint_isbn_ignore = {
		message = nil,
		anchor = 'ignore_isbn_err',
		category = 'Обслуговування CS1: Сторінки із проігнорованими помилками ISBN',
		hidden = true,
		},
	maint_issn_ignore = {
		message = nil,
		anchor = 'ignore_issn',
		category = 'Обслуговування CS1: Сторінки із проігнорованими помилками ISSN',
		hidden = true,
		},
	maint_jfm_format = {
		message = nil,
		anchor = 'jfm_format',
		category = 'Обслуговування CS1: Сторінки з JFM з іншим форматом',
		hidden = true,
		},
	maint_mr_format = {
		message = nil,
		anchor = 'mr_format',
		category = 'Обслуговування CS1: Сторінки з MR з іншим форматом',
		hidden = true,
		},
	maint_pmc_embargo = {
		message = nil,
		anchor = 'embargo',
		category = 'Обслуговування CS1: Сторінки з PMC, в якого вийшов термін ембарго',
		hidden = true,
		},
	maint_pmc_format = {
		message = nil,
		anchor = 'pmc_format',
		category = 'Обслуговування CS1: Сторінки з PMC з іншим форматом',
		hidden = true,
		},
	maint_postscript = {
		message = nil,
		anchor = 'postscript',
		category = 'Обслуговування CS1: Сторінки зі значенням параметра postscript, що збігається зі стандартним значенням в обраному режимі',
		hidden = true,
		},
	maint_unfit = {
		message = nil,
		anchor = 'unfit',
		category = 'Обслуговування CS1:Сторінки з посиланнями на джерела, що мають непридатні URL',
		hidden = true,
		},
	maint_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://www.worldcat.org/issn/',
		COinS = 'rft.eissn',
		encode = false,
		separator = '&nbsp;',
		},
	['HDL'] = {
		parameters = { 'hdl', 'HDL' },
		link = 'Handle System',
		redirect = 'hdl (ідентифікатор)',
		q = 'Q3126718',
		label = 'hdl',
		prefix = 'https://hdl.handle.net/',
		COinS = 'info:hdl',
		separator = ':',
		encode = true,
		custom_access = 'hdl-access', 
		custom_access_uk = 'доступ-до-hdl',
		},
	['ISBN'] = {																-- Використовується InternetArchiveBot
		parameters = {'isbn', 'ISBN', 'isbn13', 'ISBN13'},
		link = 'International Standard Book Number',
		redirect = 'ISBN (ідентифікатор)',
		q = 'Q33057',
		label = 'ISBN',
		prefix = 'Special:BookSources/',
		COinS = 'rft.isbn',
		separator = '&nbsp;',
		},
	['ISMN'] = {
		parameters = {'ismn', 'ISMN'},
		link = 'International Standard Music Number',
		redirect = 'ISMN (ідентифікатор)',
		q = 'Q1666938',
		label = 'ISMN',
		prefix = '',															-- зараз не використовується;
		COinS = nil,															-- nil, бо не можнмо використати pre, rft чи info:
		separator = '&nbsp;',
		},
	['ISSN'] = {
		parameters = {'issn', 'ISSN'},
		link = 'International Standard Serial Number',
		redirect = 'ISSN (ідентифікатор)',
		q = 'Q131276',
		label = 'ISSN',
		prefix = 'https://www.worldcat.org/issn/',
		COinS = 'rft.issn',
		encode = false,
		separator = '&nbsp;',
		},
	['JFM'] = {
		parameters = {'jfm', 'JFM'},
		link = 'Jahrbuch über die Fortschritte der Mathematik',
		redirect = 'JFM (ідентифікатор)',
		q = '',
		label = 'JFM',
		prefix = 'https://zbmath.org/?format=complete&q=an:',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		},
	['JSTOR'] = {
		parameters = {'jstor', 'JSTOR'},
		link = 'JSTOR',
		redirect = 'JSTOR (ідентифікатор)',
		q = 'Q1420342',
		label = 'JSTOR',
		prefix = 'https://www.jstor.org/stable/',
		COinS = 'pre',															-- використовує значення префіксу
		encode = false,
		separator = '&nbsp;',
		custom_access = 'jstor-access', 
		custom_access_uk = 'доступ-до-jstor',
		},
	['LCCN'] = {
		parameters = {'lccn', 'LCCN'},
		link = 'Library of Congress Control Number',
		redirect = 'LCCN (ідентифікатор)',
		q = 'Q620946',
		label = 'LCCN',
		prefix = 'https://lccn.loc.gov/',
		COinS = 'info:lccn',
		encode = false,
		separator = '&nbsp;',
		},
	['MEDRXIV'] = {
		parameters = {'medrxiv'},
		link = 'medRxiv',
		redirect = 'medRxiv (ідентифікатор)',
		q = 'Q58465838',
		label = 'medRxiv',
		prefix = 'https://www.medrxiv.org/content/',
		COinS = 'pre',															-- використовує значення префіксу
		access = 'free',														-- вільний до перегляду
		encode = false,
		separator = '&nbsp;',
		},
	['MR'] = {
		parameters = {'mr', 'MR'},
		link = 'Mathematical Reviews',
		redirect = 'MR (ідентифікатор)',
		q = 'Q211172',
		label = 'MR',
		prefix = 'https://mathscinet.ams.org/mathscinet-getitem?mr=',
		COinS = 'pre',															-- використовує значення префіксу
		encode = true,
		separator = '&nbsp;',
		},
	['OCLC'] = {
		parameters = {'oclc', 'OCLC'},
		link = 'OCLC',
		redirect = 'OCLC (ідентифікатор)',
		q = 'Q190593',
		label = 'OCLC',
		prefix = 'https://www.worldcat.org/oclc/',
		COinS = 'info:oclcnum',
		encode = true,
		separator = '&nbsp;',
		id_limit = 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,
	
	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,
	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
};