Билгалдаккхар: Ӏалашйинчул тӀаьхьа хийцамаш га браузеран кэш цӀанйан йезаш хила мега.

  • Firefox / Safari: Shift тӀетаӀийна йитина, гӀирсийн панелан тӀера тӀетаӀайе Карлайаккха йа Ctrl+F5 йа Ctrl+R (⌘+R Mac тӀехь)
  • Google Chrome: тӀетаӀайе Ctrl+Shift+R (⌘+Shift+R Mac тӀехь)
  • Internet Explorer / Edge: тӀетаӀийна йитина Ctrl, тӀетаӀайе Карлайаккха йа тӀетаӀайе Ctrl+F5
  • Opera: тӀетаӀайе Ctrl+F5.
//Викификатор проекта ВО
importScript('Декъашхо:Мастер теней/wikificator+.js');

//дополнения в Викификатор ВО
window.wfWOPlugins = window.wfWOPlugins || [];
window.wfWOPlugins.push(function (txt, r) {

	//загрузить категории
	categories = request( 'https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&cllimit=500&titles=' + mw.config.get('wgPageName') );

	//протоколы доменов
	if (txt.indexOf('http') > -1){
		if (categories.indexOf('Водные объекты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:ВО
			var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/ВО.js&action=raw' );

			eval(code);
		} else if (categories.indexOf('Природные географические объекты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:Физгео
			var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/Физгео.js&action=raw' );

			eval(code);
		} else if (categories.indexOf('Административные единицы по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:АТД
			var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/АТД.js&action=raw' );

			eval(code);
		} else if (categories.indexOf('Антропогенные географические объекты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:Агео
			var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/Агео.js&action=raw' );

			eval(code);
		} else if (categories.indexOf('Населённые пункты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:Города
			var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/НП.js&action=raw' );

			eval(code);
		}
	}

	if (txt.indexOf('{{внешние ссылки}}') > -1) {
		if (categories.indexOf('Шаблон «Внешние ссылки» пуст') > -1) { r(/\n?{{внешние ссылки}}\n?/g, ''); }
	}
	r(/{{ВТ-ЭСБЕ\+\|/g, '{{ВТ-ЭСБЕ|');

	if (txt.indexOf('stub}}') > -1) {
		if (confirm('убрать stub-шаблон?')) { r(/\n?{{[^\}]+stub}}\n?/g, ''); }
	}

	//преобразование координат
	//Google, Yandex, Bing, SAS-Планета, Nakarte
	r(/(\| *Координаты (истока|устья|головы)? *= *)(-?\d+([\.,]\d+)?)°?,? (-?\d+([\.,]\d+)?)°?\n/g, function ( line, param, uns2, lat, uns4, lon )
	{
		return param + lat.replace(',', '.') + '/' + lon.replace(',', '.') + '\n';
	});

	r(/'''([А-яЁё \-]+)\(([А-яЁё \-]+)\)'''/g, '\'\'\'$1\'\'\' (\'\'\'$2\'\'\')');//разделить жирноту
	r(/== Фотогалерея ==/g, '== Фотографии ==');
	r(/\|альт=([\|\]]+)/g, '$1');

//шаблоны

	r(/{{ *[Зз]начения *\|/g, '{{другие значения|');
	r(/{{ *[Кк]ар(Сер|тографический сервис) *\|/g, '{{ГИС|');
	r(/{{ *[Кк]нига\:РесПовВодСССР/g, '{{Книга:РПВ ГИ');
	r(/{{ *[Nn]um/g, '{{число');
	r(/{{ *ГВР\+/g, '{{ГВР');
	r(/{{Реки бассейна Белого моря от западной гр}}/g, '{{Реки бассейна Белого моря от западной границы бассейна р. Иоканга (мыс Святой Нос) до восточной границы бассейна р. Нива без р. Поной}}');
	r(/(?<!==)\n(\{\{[^\{]+?\}\})\n\n\{\{нет сносок\}\}/g, '\n{{нет сносок}}\n\n$1');//поднять «нет сносок»
	r(/\{\{ *([Cc]ite gnis|[Gg]nis)/g, '{{GNIS');
	r(/\{\{GNIS\| *id *= *(\d+) *\| *name *=([^\|\}]+)/g, '{{GNIS|$1|$2');
	r(/Данные получены при помощи картографического сервиса \[\[Яндекс\.Карты\]\]\./g, '{{ГИС|y}}');

	r(/\|место *= *\{\{N. Y.\}\}/g, '|место = N. Y.');//автоподдержка
	r(/\|место *= *\{\{К\.?\}\}/g, '|место = К.');//автоподдержка
	r(/\|место *= *\{\{[Лл]\.?\}\}/g, '|место = Л.');//автоподдержка
	r(/\|место *= *\{\{[Мм]\.?\}\}/g, '|место = М.');//автоподдержка
	r(/\|место *= *\{\{Мн\.?\}\}/g, '|место = Мн.');//автоподдержка
	r(/\|место *= *\{\{Пг\.?\}\}/g, '|место = Пг.');//автоподдержка
	r(/\|место *= *\{\{СПб\.?\}\}/g, '|место = СПб.');//автоподдержка

	r(/\n *\| *карта страны *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
	r(/\n *\| *карта региона *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
	r(/\n *\| *карта района *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');

// протекает в → протекает по
	r(/протекает в ([А-Яа-яЁё]*)кой области/g, 'протекает по [[$1кая область|$1кой области]]');
	r(/протекает в (\[\[(Республика[А-Яа-яё ]*|[А-Яа-яё ]*область)\|[А-Яа-яЁё ]*\]\])/g, 'протекает по $1');
	r(/(протекает )в( \[\[.*?[сц]ком)(\]\][ ,и]*\[\[.*?[сц]ком)(\]\][ ,и]*\[\[.*?[сц]ком)(?:\]\]){0,1}(.*?йона)х(\]\]){0,1}/g, '$1по$2у$3у$4у]]$5м');
	r(/(протекает )в( \[\[.*?[сц]ком)(\]\][ ,и]*\[\[.*?[сц]ком)(?:\]\]){0,1}(.*?йона)х(\]\]){0,1}/g, '$1по$2у$3у]]$4м');
	r(/(протекает )в( \[\[.*?[сц]ком)(\]\]){0,1}(.*?йон)е(\]\]){0,1}/g, '$1по$2у$4у]]');
	r(/(протекает по.*?йону\]\] )([А-Яа-яё]*?)(кой области)/g, '$1[[$2кая область|$2$3]]');
	r(/(протекает по.*?йону\]\] )([А-Яа-яё]*?)(кого края)/g, '$1[[$2кий край|$2$3]]');
	r(/(протекает по.*?йону\]\] )(Республики )([А-Яа-яё]*?)/g, '$1[[Республика $3|$2$3]]');

	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в Республике (Алтай|Хакасия)/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам [[Республика $11|Республики $11]]');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в Республике (Алтай|Хакасия)/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам [[Республика $8|Республики $8]]');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает в Республике (Алтай|Хакасия)/g, '$1протекает по [[$2$3|$2$4кому району]] [[Республика $5|Республики $5]]');
	r(/протекает в Республике (Алтай|Хакасия)/g, 'протекает по [[Республика $1|Республике $1]]');

	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в ([А-Яа-яё]+)ском крае/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам [[$11ский край|$11ского края]]');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в ([А-Яа-яё]+)ском крае/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам [[$8ский край|$8ского края]]');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает в ([А-Яа-яё]+)ском крае/g, '$1протекает по [[$2$3|$2$4кому району]] [[$5ский край|$5ского края]]');
	r(/протекает в ([А-Яа-яё]+)ском крае/g, 'протекает по [[$1ский край|$1скому краю]]');

	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[[А-Яа-яё]+ская область)/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам $11');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[[А-Яа-яё]+ская область)/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам $8');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает по (\[\[[А-Яа-яё]+ская область)/g, '$1протекает по [[$2$3|$2$4кому району]] $5');

	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[Ханты-Мансийский автономный округ — Югра\|Ханты-Мансийск)ому/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам $11ого');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[Ханты-Мансийский автономный округ — Югра\|Ханты-Мансийск)ому/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам $8ого');
	r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает по (\[\[Ханты-Мансийский автономный округ — Югра\|Ханты-Мансийск)ому/g, '$1протекает по [[$2$3|$2$4кому району]] $5ого');

//автозапрос АИ для раздела
	if (txt.indexOf('{{нет ссылок\|') === -1 && txt.indexOf('{{нет сносок}}') === -1) {
//		r(/\}\}\n\'\'\'/g, '}}\n== Преамбула ==\n\'\'\'');
		r(/ ([^=]+?) (==)\n([^@]+?)(\n==|$)/g, function ( line, name_part, tab, text_part, last_tab )
		{
			if ( name_part.indexOf('Притоки') !== -1 || name_part.indexOf('Бассейн') !== -1 || name_part.indexOf('Ссылки') !== -1 || name_part.indexOf('Литература') !== -1 || name_part.indexOf('Дополнительная литература') !== -1 || name_part.indexOf('См. также') !== -1 || name_part.indexOf('Примечания') !== -1 || name_part.indexOf('Комментарии') !== -1 || name_part.indexOf('Источники') !== -1 || name_part.indexOf('Топографические карты') !== -1 || name_part.indexOf('Галерея') !== -1 || name_part.indexOf('Фотографии') !== -1 || name_part.indexOf('Библиография') !== -1 || name_part.indexOf('Географическое положение') !== -1) { return line; }//сбросить

			if ( text_part.indexOf('ref') !== -1 || text_part.indexOf('sfn') !== -1 || text_part.indexOf('нет ссылок в разделе') !== -1  || text_part.indexOf('подст:нет источников в разделе') !== -1 || text_part.indexOf('нет АИ') !== -1 ) { return line; }//сбросить

			if ( text_part.length < 300  ) { return line; }//сбросить

			if (confirm('Запросить АИ для раздела «' + name_part + '»?')) {
				return ' ' + name_part + ' ' + tab + '\n{{' + 'подст:нет источников в разделе' + '}}\n' + text_part + last_tab;
			} else { return line; }
		});
//		r(/== Преамбула ==\n/g, '');
}


//чистка шаблонов-перенаправлений
if (typeof no_replace_template === 'undefined') {//персональное отключение
	if (typeof source_code_edit_article === 'undefined') {//исходный html-код страницы редактирования
		source_code_edit_article = request( 'https://ru.wikipedia.org/w/index.php?action=edit&title=' + mw.config.get('wgPageName') ).toLowerCase();
	}

	r(/{{([^\|\}\n]+)/g, function ( line, template ) {

		if ( template == 'iw' || template == 'ГКГН' || template == 'ГЕУ' || template == 'СНГОСНГ' || template == 'ИПТ' || template == 'ССГН' ) {
			return '{{' + template;//пропускать эти шаблоны-перенаправления
		}

		if ( source_code_edit_article.indexOf('class="mw-redirect" title="шаблон:' + template.toLowerCase() + '"') > -1 ) {
			xml = request( 'https://ru.wikipedia.org/w/api.php?action=query&format=xml&prop=info&redirects=1&titles=Шаблон%3A' + template );

			if (xml.indexOf('redirects') > -1) {
				var template_new = xml.match(/title=\"Шаблон\:([^\"]+)\"/)[1];

				if (template_new.length < 21 || template_new.length/2 < template.length) {//заменить если превышает не более чем вдвое или меньшей длины чем средний шаблон по ВО

					if (template[0].toLowerCase() == template[0]) {//установить исходный регистр
						template_new = template_new.substring(0, 1).toLowerCase() + template_new.substring(1);
					}

					template = template_new;
				}
			}
		}

		return '{{' + template;
	});
}

r(/{{[Нн]е *переведено *[2345]? *\|/g, '{{iw|');

//чистка ссылок-перенаправлений
if (typeof no_replace_article === 'undefined') {//персональное отключение
	if (typeof source_code_visual_article === 'undefined') {//исходный html-код страницы просмотра
		source_code_visual_article = request( 'https://ru.wikipedia.org/wiki/' + mw.config.get('wgPageName') ).toLowerCase();
	}

	r(/\[\[([^\|\]\:]+)([\|\]])/g, function ( line, article, stop ) {//«:» от категорий
		var line_find = 'class="mw-redirect" title="' + article.toLowerCase() + '"';

		if (source_code_visual_article.indexOf(line_find) > -1) {
			xml = request( 'https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=info&redirects=1&titles=' + article );

			if (xml.indexOf('redirects') > -1 && xml.indexOf('tofragment') == -1 ) {
				article_new = xml.match(/title=\"([^\"]+)\"/)[1];

				if (article.toLowerCase() == article) {//установить исходный регистр
					article_new = article_new.substring(0, 1).toLowerCase() + article_new.substring(1);
				}

				var article = (stop == '|') ? article_new : article_new + '|' + article;
			}
		}

		return '[[' + article + stop;
	});
}


r(/[^\(]\[\[\:([A-z][A-z])\:(.*?)\|(.*?)\]\]/g, ' \{\{iw|$3<!-- Заголовок статьи подставлен автоматически! Пожалуйста, проверьте корректность и удалите сообщение! -->|$3|$1|$2}}');

//r(/–/g, '-');//замена среднего тире

r(/{{[Пп]римечания\|2}}/g, '{{примечания}}');//параметр отключён
r(/\{\{Sfn/g, '{{sfn');//регистр
r(/([А-яЁё])·([А-яЁё])/g, '$1⋅$2');//замена интерпункта
r(/­/g, '');//удаление символа переноса в словах
r(/‐/g, '-');//замена настоящего дефиса
r(/	/g, ' ');//замена табуляций
r(/(\s[А-яЁё\-]+)\.\.\./g, '$1…');//замена троеточий
r(/(?<!=) *\< *ref/g, '<ref');//лишние пробелы
r(/\s*\< *\/ *ref *\>/g, '</ref>');//лишние пробелы
r(/\}\}.\<\/ref\>/g, '}}</ref>');//лишние символы
r(/°\s[CС]([\s\.\,])/g, '°C$1');//лишние пробелы и кирлат
r(/ ([\:\;\.\,])/g, '$1');//лишние пробелы перед знаками пунктуации
r(/\| *Исток *= *-([^ ])/g, '|Исток                   = - $1');//пробел после отключения автовикификации
r(/\sстр\.([0-9])/g, ' стр. $1');//добавление пробелов
r(/\sс\.([0-9])/g, ' с. $1');//добавление пробелов
r(/\sт\.([0-9])/g, ' т. $1');//добавление пробелов
r(/\sвып\.([0-9])/g, ' вып. $1');//добавление пробелов
r(/\sВып\.([0-9])/g, ' Вып. $1');//добавление пробелов
r(/\sмлн\.([а-яё])/g, ' млн $1');//добавление пробелов
r(/\sтыс\.([а-яё])/g, ' тыс. $1');//добавление пробелов
r(/Оз\.Карелии/g, 'Озёра Карелии');//добавление пробелов
r(/ ([А-яЁё])\.([А-ЯЁ][а-яё][а-яё])/g, ' $1. $2');//добавление пробелов
r(/\<!-- *DASHBot *--\>/g, '');//всегда удалять
r(/\<!-- *в км² *--\>/g, '');//всегда удалять
r(/\<!-- *в км *--\>/g, '');//всегда удалять
r(/\<!-- *в м *--\>/g, '');//всегда удалять
r(/\n *\| *region.+\n/g, '\n');//всегда удалять, осталось Физгео
r(/\/сек([^у])/g, '/с$1');//стиль

//латкир
//r(/(([^ກ])a([а-яёўґєіїj][а-яёўґєіїj])|([А-яЁёІЎіўҐЄІЇґєії])a([а-яёўґєіїj])|([А-яЁёІЎіўҐЄІЇґєії][а-яёўґєіїj])a([^ກ]))/g, '$2$4$6a$3$5$7');//дотестировать!!!
r(/(\s)A([а-яё][а-яё])/g, '$1А$2');
r(/(\s)a([а-яё][а-яё])/g, '$1а$2');
r(/(\s)B([а-яё][а-яё])/g, '$1В$2');
r(/(\s)C([а-яё][а-яё])/g, '$1С$2');
r(/(\s)c([а-яё][а-яё])/g, '$1с$2');
r(/(\s)E([а-яё][а-яё])/g, '$1Е$2');
r(/(\s)e([а-яё][а-яё])/g, '$1е$2');
r(/(\s)H([а-яё][а-яё])/g, '$1Н$2');
r(/(\s)I([а-яё][а-яё])/g, '$1І$2');
r(/(\s)i([а-яё][а-яё])/g, '$1і$2');
r(/(\s)K([а-яё][а-яё])/g, '$1К$2');
r(/(\s)k([а-яё][а-яё])/g, '$1к$2');
r(/(\s)M([а-яё][а-яё])/g, '$1М$2');
r(/(\s)O([а-яё][а-яё])/g, '$1О$2');
r(/(\s)o([а-яё][а-яё])/g, '$1о$2');
r(/(\s)p([а-яё][а-яё])/g, '$1р$2');
r(/(\s)T([а-яё][а-яё])/g, '$1Т$2');
r(/(\s)X([а-яё][а-яё])/g, '$1Х$2');
r(/(\s)x([а-яё][а-яё])/g, '$1х$2');
r(/(\s)J([а-яё][а-яё])/g, '$1Ј$2');
r(/(\s)j([а-яё][а-яё])/g, '$1ј$2');
r(/(\s)Ë([а-яё][а-яё])/g, '$1Ё$2');
r(/(\s)ë([а-яё][а-яё])/g, '$1ё$2');

r(/([А-яЁёІЎіўҐЄІЇґєії])a([А-яЁёІЎіўҐЄІЇґєії])/g, '$1а$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])c([А-яЁёІЎіўҐЄІЇґєії])/g, '$1с$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])e([А-яЁёІЎіўҐЄІЇґєії])/g, '$1е$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])i([А-яЁёІЎіўҐЄІЇґєії])/g, '$1і$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])j([А-яЁёІЎіўҐЄІЇґєії])/g, '$1ј$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])k([А-яЁёІЎіўҐЄІЇґєії])/g, '$1к$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])o([А-яЁёІЎіўҐЄІЇґєії])/g, '$1о$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])x([А-яЁёІЎіўҐЄІЇґєії])/g, '$1х$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])ë([А-яЁёІЎіўҐЄІЇґєії])/g, '$1ё$2');

//кирлат
r(/(\s)А([a-z][a-z])/g, '$1A$2');
r(/(\s)а([a-z][a-z])/g, '$1a$2');
r(/(\s)В([a-z][a-z])/g, '$1B$2');
r(/(\s)Е([a-z][a-z])/g, '$1E$2');
r(/(\s)е([a-z][a-z])/g, '$1e$2');
r(/(\s)К([a-z][a-z])/g, '$1K$2');
r(/(\s)М([a-z][a-z])/g, '$1M$2');
r(/(\s)Н([a-z][a-z])/g, '$1H$2');
r(/(\s)О([a-z][a-z])/g, '$1O$2');
r(/(\s)о([a-z][a-z])/g, '$1o$2');
r(/(\s)Р([a-z][a-z])/g, '$1P$2');
r(/(\s)р([a-z][a-z])/g, '$1p$2');
r(/(\s)С([a-z][a-z])/g, '$1C$2');
r(/(\s)с([a-z][a-z])/g, '$1c$2');
r(/(\s)Т([a-z][a-z])/g, '$1T$2');
r(/(\s)Х([a-z][a-z])/g, '$1X$2');
r(/(\s)х([a-z][a-z])/g, '$1x$2');

r(/\[(\/\/[a-z][a-z]\.wikipedia\.org)/g, '[https:$1');

//упаковка ссылок в шаблон Книга
r(/{{[Кк]нига([^\}]+?)}} *{{[Ww]ayback *\| *url *= *([^\|\}]+?) *\| *date *= *([\d]+?) *}}/g, function ( line, params, url, datetime ) {
			params = params.replace(/\| *ссылка *= *[^\|\}\s]+/g, '|ссылка = https://web.archive.org/web/' + datetime + '/' + url);

			return '{{книга' + params + '}}';
		});

//форматирование шаблона Книга
r(/{{[Кк]нига[^\:][^\}]+?({{|}})/g, function ( line ) {

			line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже

			//до исправления
			line = line.replace(/\|Страниц *=/g, '|страниц =');//косяк по Крыму
			line = line.replace(/\|заглавие *= *Реки и Оз[её]ра Крыма\.?/g, '|заглавие = Реки и озёра Крыма');//косяк по Крыму
			line = line.replace(/\|место *= *Симферополь\./g, '|место = Симферополь');//косяк по Крыму

			line = line.replace(/\|место *= *\[\[(.+?)\]\]\./g, '|место = $1');//лишняя викификация

			line = line.replace(/\|(isbn2|nodot|ref|викитека|оригинал|серия|столбцы|том|часть) *= *([\n\|\}])/g, '$2');//убрать пустые

			line = line.replace(/\|место *= *Спб\.?/g, '|место = СПб.');//автоподдержка
			line = line.replace(/\|место = Л([^А-яЁёі\.])/g, '|место = Л.$1');//добавить точку
			line = line.replace(/\|место = М([^А-яЁёі\.])/g, '|место = М.$1');//добавить точку

			//замена значений параметров
			line = line.replace(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2');//неразрывный пробел в инициалах
			line = line.replace(/\|автор *=\s*([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор = $2 $1');//инициалы в конец, 1-й автор
			for (var i = 0; i < 15; i++) {
				line = line.replace(/\|автор *=([^\|\}]+?)\s([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор =$1 $3 $2');
			}

			//вставить недостающие параметры
			if (line.indexOf('|язык =') == -1) {
				line = line.replace(/\|заглавие/g, '|язык = |заглавие');
			}
			line = line.replace(/\|язык *= *(mis|und|[А-яЁё])?/g, '|язык = ');//вычистка кода отсутствия языка и ложного заполнения

			var label = line.match(/\|заглавие *= *([^\|\n\}]+)/);

			if (label !== null && label[1].trim() !== '') {

				if (line.replace(/\|язык *= *[\|\}\n]/g, '') != line) {

					label = label[1].trim();
					var label_r = label.replace(/[,\:\;\!\?\"\'«»\&…%\s\-\–\—\.\(\)\{\}\[\]\|0-9IVX]/g, '');//убрать пунктуацию и цифры

					if (label_r.replace(/[A-Za-z]/g, '') === '') {
						if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить английский?')) {
							line = line.replace(/(\|язык *= *)/g, '$1en ');
						}
					}
					else if (label_r.replace(/[A-ZÄÖẞÜa-zäößü]/g, '') === '') {
						if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить немецкий?')) {
							line = line.replace(/(\|язык *= *)/g, '$1de ');
						}
					}
					else if (label_r.replace(/[A-ZÁÉÍÑÓÚÜa-záéíñóúü¿]/g, '') === '') {
						if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить испанский?')) {
							line = line.replace(/(\|язык *= *)/g, '$1es ');
						}
					}
					else if (label_r.replace(/[А-яЁё№]/g, '') === '') {
						if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить русский?')) {
							line = line.replace(/(\|язык *= *)/g, '$1ru ');
						}
					}
					else if (label_r.replace(/[А-ЩЬЮЯҐЄІЇа-щьюяґєії№]/g, '') === '') {
						if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить украинский?')) {
							line = line.replace(/(\|язык *= *)/g, '$1uk ');
						}
					}
					else if (label_r.replace(/[А-ЗК-ШЫ-ЯЁІЎа-зк-шы-яёіў№]/g, '') === '') {
						if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить белорусский?')) {
							line = line.replace(/(\|язык *= *)/g, '$1be ');
						}
					}
				}
			}

			//раскрыть
			if (line.replace(/\{\{книга *\n *\|/g, '') != line)
			{
				line = line.replace(/ *(\|.*?=) */g, '\n $1 ');
				line = line.replace(/\n *\n/g, '\n');
				line = line.replace(/\n *\n/g, '\n');
			}

			//подчистить

			//декодирование ссылок
			if ( ( line.indexOf( '%D' ) !== -1 || line.indexOf( '%d' ) !== -1 ) && line.indexOf( '%25' ) === -1 ) {

				if (confirm('Раскодировать ссылки в шаблоне Книга? ' + line))
				{
					url = line.match(/\|ссылка *= *([^ \n\|\}]+)/);

					try {
						url_decode = decodeURI( url[1] );
						url_decode = url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
						url_decode = url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать

						line = line.replace(url[1], url_decode);
					} catch ( e ) { }
				}
			}

			return line;
		});

//форматирование шаблона УСЭ
r(/{{УСЭ[^\}]+?}}/g, function ( line ) {

			line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже

			line = line.replace(/\|Статья *=/g, '|статья =');
			line = line.replace(/\|Ссылка *=/g, '|ссылка =');
			line = line.replace(/\|Том *=/g, '|том =');
			line = line.replace(/\|Страницы *=/g, '|страницы =');

			return line;
		});

//форматирование шаблона Статья
r(/{{[Сс]татья[^\}]+?}}/g, function ( line ) {

			line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже

			line = line.replace(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2');//неразрывный пробел в инициалах
			line = line.replace(/\|автор *=\s*([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор = $2 $1');//инициалы в конец, 1-й автор
			for (var i = 0; i < 15; i++) {
				line = line.replace(/\|автор *=([^\|\}]+?)\s([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор =$1 $3 $2');
			}

			//декодирование ссылок
			if ( ( line.indexOf( '%D' ) !== -1 || line.indexOf( '%d' ) !== -1 ) && line.indexOf( '%25' ) === -1 ) {

				if (confirm('Раскодировать ссылки в шаблоне Статья? ' + line))
				{
					url = line.match(/\|ссылка *= *([^ \n\|\}]+)/);

					try {
						url_decode = decodeURI( url[1] );
						url_decode = url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
						url_decode = url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать

						line = line.replace(url[1], url_decode);
					} catch ( e ) { }
				}
			}

			return line;
		});

//упаковка ссылок в шаблон Cite book
r(/{{[Cc]ite book([^\}]+?)}} *{{[Ww]ayback *\| *url *= *([^\|\}]+?) *\| *date *= *([\d]+?) *}}/g, function ( line, params, url, datetime ) {
			params = params.replace(/\| *url *= *[^\|\}\s]+/g, '|url = https://web.archive.org/web/' + datetime + '/' + url);

			return '{{cite book' + params + '}}';
		});

//замена ссылок в шаблоне Cite book
r(/{{[Cc]ite book[^\}]+?\| *archiveurl *= *([^\|\}\s]+)[^\}]+?}}/g, function ( line, archiveurl ) {
			line = line.replace(/\| *url *= *[^\|\}\s]+/g, '|url = ' + archiveurl);
			line = line.replace(/\| *archiveurl *= *[^\|\}\s]+/g, '');
			line = line.replace(/\| *archivedate *= *[^\|\}\s]+/g, '');
			line = line.replace(/\| *deadlink *= *[^\|\}\s]+/g, '');

			return line;
		});

//распил архивных ссылок в Cite web
r(/{{[Cc]ite web[^\}]+?\| *url *= *(http(s)?:\/\/web\.archive\.org\/web\/([\d][\d][\d][\d])([\d][\d])([\d][\d])[\d]+\/(http(s)?:[^ \|\}]+))[^\}]*?}}/g, function ( line, archive_url, und0, year, month, day, url ) {
		line = line.replace(/\| *deadlink *= *no/g, '|deadlink = yes');

		line = line.replace(/\| *website *= *web\.archive\.org/g, '|website = ');
		line = line.replace(/\| *publisher *= *web\.archive\.org/g, '|publisher = ');

		line = line.replace(/\| *url *=/g, '|url = ' + url + ' |archive-date = ' + year + '-' + month + '-' + day + ' |archive-url = ');

		if (line.indexOf('deadlink') == -1)
		{
			line = line.replace(/}}/g, '|deadlink = yes}}');
		};

		return line;
});

//форматирование шаблона Cite web
r(/{{[Cc]ite web[^\}]+?}}/g, function ( line ) {
			line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже

			line = line.replace(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2');//неразрывный пробел в инициалах
			line = line.replace(/\|author *=\s*([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|author = $2 $1');//инициалы в конец, 1-й автор
			for (var i = 0; i < 15; i++) {
				line = line.replace(/\|author *=([^\|\}]+?)\s([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|author =$1 $3 $2');
			}

			line = line.replace(/\|authorlink *= *([\n\|\}])/g, '$1');//убрать пустые authorlink
			line = line.replace(/\|coauthors *= *([\n\|\}])/g, '$1');//убрать пустые coauthors
			line = line.replace(/\|format *= *([\n\|\}])/g, '$1');//убрать пустые format
			line = line.replace(/\|title *= *(Архивированная копия|Archived copy|Wayback Machine|\{title\})/g, '|title =');//убрать пустые title

			line = line.replace(/\|website *= *http(s)?\:\/\/([^\/ \|\}]+)[^\|\} ]*/g, '|website = $2');//убрать лишние ссылки

			line = line.replace(/\|url\-status *= *live/g, '|deadlink = no');//нет в ru.wiki
			line = line.replace(/\|url\-status *= *dead/g, '|deadlink = yes');//нет в ru.wiki
			line = line.replace(/\|url\-status *= *unfit/g, '|deadlink = yes');//нет в ru.wiki
			line = line.replace(/\|url\-status *= *usurped/g, '|deadlink = yes');//нет в ru.wiki

			line = line.replace(/\|accessdate/g, '|access-date');
			line = line.replace(/\|archiveurl/g, '|archive-url');
			line = line.replace(/\|archivedate/g, '|archive-date');

			line = line.replace(/\|date *= *[Jj]anuary\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-01-$1');
			line = line.replace(/\|date *= *[Ff]ebruary\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-02-$1');
			line = line.replace(/\|date *= *[Mm]arch\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-03-$1');
			line = line.replace(/\|date *= *[Aa]pril\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-04-$1');
			line = line.replace(/\|date *= *[Mm]ay\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-05-$1');
			line = line.replace(/\|date *= *[Jj]une\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-06-$1');
			line = line.replace(/\|date *= *[Jj]uly\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-07-$1');
			line = line.replace(/\|date *= *[Aa]ugust\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-08-$1');
			line = line.replace(/\|date *= *[Ss]eptember\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-09-$1');
			line = line.replace(/\|date *= *[Oo]ctober\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-10-$1');
			line = line.replace(/\|date *= *[Nn]ovember\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-11-$1');
			line = line.replace(/\|date *= *[Dd]ecember\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-12-$1');

			//вставить недостающие параметры
			if ( line.indexOf( '|author' ) === -1 ) {
				line = line.replace(/({{[Cc]ite web *)/g, '$1|author = ');
			}

			if ( line.indexOf( '|lang' ) === -1 ) {
				line = line.replace(/(\|author *=[^\n\|\}]*)([\n\|\}])/g, '$1|lang = $2');
			}
			line = line.replace(/(\|author *= \[\[[^\|]*)(\|lang = [a-z]* *)/g, '$2$1'); //поправка на случай викифицированного автора

			if ( line.indexOf( '|deadlink' ) === -1 ) {
				line = line.replace(/(\|url *=[^\n\|\}]*)([\n\|\}])/g, '$1|deadlink = no $2');
			}

			if ( line.indexOf( '|archive-url' ) === -1 ) {
				line = line.replace(/(\|deadlink *=[^\n\|\}]*)([\n\|\}])/g, '$1|archive-url = $2');
			}

			if ( line.indexOf( '|archive-date' ) === -1 ) {
				line = line.replace(/(\|archive-url *=[^\n\|\}]*)([\n\|\}])/g, '$1|archive-date = $2');
			}

			var label = line.match(/\|title *= *([^\|\n\}]+)/);

			if (label !== null && label[1].trim() !== '') {
				if (line.replace(/\|lang *= *[\|\}\n]/g, '') != line) {

					label = label[1].trim();
					var label_r = label.replace(/[,\:\;\!\?\"\'«»\&…%\s\-\–\—\.\(\)\{\}\[\]\|0-9IVX]/g, '');//убрать пунктуацию и цифры

					if (label_r.replace(/[A-Za-z]/g, '') === '') {
						if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить английский?')) {
							line = line.replace(/(\|lang *= *)/g, '$1en ');
						}
					}
					else if (label_r.replace(/[A-ZÄÖẞÜa-zäößü]/g, '') === '') {
						if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить немецкий?')) {
							line = line.replace(/(\|lang *= *)/g, '$1de ');
						}
					}
					else if (label_r.replace(/[A-ZÁÉÍÑÓÚÜa-záéíñóúü¿]/g, '') === '') {
						if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить испанский?')) {
							line = line.replace(/(\|lang *= *)/g, '$1es ');
						}
					}
					else if (label_r.replace(/[А-яЁё№]/g, '') === '') {
						if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить русский?')) {
							line = line.replace(/(\|lang *= *)/g, '$1ru ');
						}
					}
					else if (label_r.replace(/[А-ЩЬЮЯҐЄІЇа-щьюяґєії№]/g, '') === '') {
						if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить украинский?')) {
							line = line.replace(/(\|lang *= *)/g, '$1uk ');
						}
					}
					else if (label_r.replace(/[А-ЗК-ШЫ-ЯЁІЎа-зк-шы-яёіў№]/g, '') === '') {
						if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить белорусский?')) {
							line = line.replace(/(\|lang *= *)/g, '$1be ');
						}
					}
				}
			}

			//декодирование ссылок
			if ( ( line.indexOf( '%D' ) !== -1 || line.indexOf( '%d' ) !== -1 ) && line.indexOf( '%25' ) === -1 ) {

				if (confirm('Раскодировать ссылки в шаблоне Cite web? ' + line))
				{
					archive_url = line.match(/\|archive-url *= *([^ \n\|\}]+)/);

					try {
						archive_url_decode = decodeURI( archive_url[1] );
						archive_url_decode = archive_url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
						archive_url_decode = archive_url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать

						line = line.replace(archive_url[1], archive_url_decode);
					} catch ( e ) { }

					url = line.match(/\|url *= *([^ \n\|\}]+)/);

					try {
						url_decode = decodeURI( url[1] );
						url_decode = url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
						url_decode = url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать

						line = line.replace(url[1], url_decode);
					} catch ( e ) { }
				}
			}

			//подгон формата даты и чистка
			line = line.replace(/\|(access-date|date) *= *([0-9][0-9][0-9][0-9])\-([0-9])\-/g, '|$1 = $2-0$3-');
			line = line.replace(/\|(access-date|date) *= *([0-9][0-9][0-9][0-9]\-[0-9][0-9])\-([0-9])([^0-9])/g, '|$1 = $2-0$3$4');
			line = line.replace(/\|archive-date *= *([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])[0-9]+/g, '|archive-date = $1-$2-$3 ');
			line = line.replace(/\|(access-date|archive-date|date) *= *([0-9][0-9][0-9][0-9])\.([0-9][0-9])\./g, '|$1 = $2-$3-');

			//раскрыть
			if (line.replace(/\{\{cite web *\n *\|/g, '') != line)
			{
				line = line.replace(/ *(\|.*?=) */g, '\n $1 ');
				line = line.replace(/\n *\n/g, '\n');
				line = line.replace(/\n *\n/g, '\n');
			}

			return line;
		});

//оформление ГВР
if ((txt.replace(/{{ГВР\|\d{23}/g, '') === txt)) {//код ГВР не используется
	if (txt.split('{{ГВР|').length-1 === 1) {//шаблон ГВР только один
		if (txt.replace(/\d{23}/g, '') !== txt) {//код ГВР указан в тексте
			var code = txt.match(/(\d{23})/);

			r(/\>\{\{ГВР\|\d+\|/g, '>{{ГВР|' + code[1] + '|');
		}
		else if (typeof source_code_visual_article !== 'undefined') {//есть исходный код страницы
			if (source_code_visual_article.replace(/\d{23}/g, '') !== source_code_visual_article) {//код ГВР указан в исходнике
				var code = source_code_visual_article.match(/(\d{23})/);

				r(/\>\{\{ГВР\|\d+\|/g, '>{{ГВР|' + code[1] + '|');
			}
		}
	}
}

//оформление шаблоном ссылки на файл с озёрами Псковской области, осталось в АТЕ
r(/\>[^<]*?priroda\.pskov\.ru\/sites\/default\/files\/Fond_vodoemov\.xls[^<]*?\</g, '>{{ФВПО}}<');

//фикс
r(/\n *\| *Страна *= *(КНР|Китайская Народная Республика)/g, '\n |Страна                  = Китай');

//загрузчик
	function request( URL )
	{
		var oRequest = new XMLHttpRequest();
		oRequest.open('GET', URL, false);
		oRequest.send(null);

		return oRequest.responseText;
	}
});