For faster navigation, this Iframe is preloading the Wikiwand page for Участник:X0stark69/wikificator+.js.

Участник:X0stark69/wikificator+.js

Материал из Википедии — свободной энциклопедии

//Викификатор проекта ВО
//Документация: [[Проект:Водные объекты/Технарий#Скрипт автозамены]]

function Wikify_WO() {

	window.wfWOPlugins = window.wfWOPlugins || [];

	Wikify();

	time = new Date();
	var txt = '',
		label = '',
		subst = '((subst:',
		substclose = '))',
		system = '',
		current_mouth_altitude = '',
		replace_all_link = 0,
		wpTextbox1 = document.editform.wpTextbox1,
		winScroll = document.documentElement.scrollTop,
		linetime = time.getUTCFullYear() + '-' + (time.getUTCMonth()+1).toString().padStart( 2, "0") + '-' + time.getUTCDate().toString().padStart( 2, "0");

	function processText() {

		//приоритетные изменения: стиль, типографика, викификация
		r(/((\s|\()[1-9])\s([0-9][0-9][0-9])(\s[^0-9]|\.)/g, '$1$3$4'); //4-значные числа без пробела

		r(/\[\[(Волга|Обь|Лена|Печора|Неман|Иртыш|Миссисипи|Амазонка)\s\(река\)/g, '[[$1');
		r(/\[\[Томь\s\(приток\sОби\)/g, '[[Томь');
		r(/\[\[Березина\s\(нижний приток Днепра\)/g, '[[Березина');
		r(/\[\[Суда\s\(приток\sВолги\)\|/g, '[[Суда (река, впадает в Рыбинское водохранилище)|');
		r(/\[\[(Таймыр|Камчатка)\s\(полуостров\)/g, '[[$1');

		r(/< *ref *name *= *\'([^\']+)\'/g, '<ref name="$1"');
		r(/< *ref *name *= *([^\'\"\/\> ]+)/g, '<ref name="$1"');


		//разрывы строк
		r(/\n\s\n/g, '\n\n');//пробелы между абзацами
		r(/\n\n\n/g, '\n\n');
		r(/\n\n\n/g, '\n\n');
		r(/\}\}\n\n\'\'\'/g, '))\n\'\'\'');//после карточки
		if (txt.indexOf('<gallery') == -1 && txt.indexOf('<poem') == -1) {//убрать разрывы строк
			r(/,\n([^#\*])/g, ', $1');//замена переносов пробелами за запятыми
			r(/([а-яё]\.)\n([А-УХ-яа-ух-я])/g, '$1 $2');//замена переносов пробелами за точками
			r(/([а-яё])\n(\[\[[^:]+?[\|\]])/g, '$1 $2');//замена переносов пробелами, заливка укропоселений
			r(/([^\s])[\n]([а-яё]+)/g, '$1 $2');
			r(/([a-z]+)[\n]([a-z]+)/g, '$1 $2');
		}
		
		
		var temp = txt.match( /\|\s?Высота устья\s*=\s(.+)\n/ );

		if (temp != null)
		{
			current_mouth_altitude = temp[1];
		}

		var temp = txt.match( /\|\s?Устье\s*=\s(.+)\n/ );
		current_mouth = '';
		if (temp != null)
		{
			current_mouth = temp[1];
		}

		//предупреждения
		var added = '';
		if (txt.indexOf('((Река') > -1)
		{
			added = added + attention('Длина', '|Длина реки — replace км.))');
			added = added + attention('Площадь водосбора', '|Площадь водосборного бассейна — replace км².))');
			r(/\n\[\[Категория:Реки\sпо\sалфавиту\]\]/g, '');
		};
		added = added + attention('Расход воды', '|Средний расход воды — replace м³/с.))');
		added = added + attention('Высота над уровнем моря', '|Высота над уровнем моря — replace м.))');
		added = added + attention('Высота истока', '|Высота истока — replace м над уровнем моря.))');
		if (current_mouth_altitude != '0' || current_mouth_altitude == '−28' || current_mouth_altitude == '-28')
		{
			added = added + attention('Высота устья', '|Высота устья — replace м над уровнем моря.))');
		}
		added = added + attention('Уклон реки', '|Уклон реки — replace м/км.))');
		added = added.replace(/)) ((subst:АИ2\|/g, ' '); //всё в один запрос АИ2
		
		if (label == 1)
		{
			if (confirm('Внимание! Ряд параметров карточки не указаны или не соответствуют тексту статьи! «' + added + '» — вставить?')) {
				r('\n\n', '\n\n' + added + '\n\n');
			}
		}

		r(/\|Исток\s*=\s(.+)\n/g, function ( line, source )
		{
			source = request('https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&cllimit=500&titles=' + source);

			if ((source.indexOf('missing') == -1) && (source.indexOf('Водные объекты по алфавиту') == -1))
			{
				alert('В истоке указана статья об объекте, не являющимся водным! Пожалуйста, исправьте ошибку!');
			};

			return line;
		});
		r(/\|Устье\s*=\s(.+)\n/g, function ( line, source )
		{
			source = request('https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&cllimit=500&titles=' + source);

			if ((source.indexOf('missing') == -1) && (source.indexOf('Водные объекты по алфавиту') == -1))
			{
				alert('В устье указана статья об объекте, не являющимся водным! Пожалуйста, исправьте ошибку!');
			};

			return line;
		});

		//автозапрос АИ для раздела
		r(/((Нет/g, '((нет');
		if (txt.indexOf('((нет ссылок\|') === -1 && txt.indexOf('((нет сносок))') === -1 && txt.indexOf('((нет сносок\|') === -1 && 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 < 400  ) { return line; }//сбросить

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

		r(/\|Бассейн\s*=([А-яЁёA-z0-9\/\(\)\s\-]*)\n/g, function ( line, bassin )
		{
				line = line.replace(/(Кама|Камчатка|Печора|Миссисипи) \(река\)/g, '$1');
				line = line.replace(/Вишера \(приток Камы\)\/Кама/g, 'Вишера (приток Камы)/Камское водохранилище/Кама');
				line = line.replace(/Ветлуга \(река\)\/Волга/g, 'Ветлуга (река)/Чебоксарское водохранилище/Волга');
				line = line.replace(/(Томь) \(приток Оби\)/g, '$1');
				line = line.replace(/([а-яё\)])\s*\n/g, '$1\n');
				
				return line;
		});
		
		//команды
		r(/\|Бассейн\s*=([А-яЁёA-z0-9\/\(\)\s\-]*)\n/g, function ( line, bassin )
		{
			if (current_mouth_altitude == '0' || current_mouth_altitude == '−28' || current_mouth_altitude == '-28')
			{
				return line;
			}

			var mouth = txt.match( /\|\s?Устье\s*=\s(.+)\n/ );

			if (mouth != null)
			{
				system = mouth[1];

				wb( mouth[1], 0 );

				if (system == mouth[1])
				{
					system = '';
				}
			}

			if (bassin == ' ')
			{
				return line.replace('\n', system + '\n');
			}
			else if (bassin != ' ' + system)
			{
				alert('Параметр «Бассейн» не соответствует автоматически сгенерированному списку! Возможные причины:\nа) параметр «Бассейн» заполнен неверно (присутствует неточная викификация либо ошибка; очистка параметра покажет потенциальную проблему);\nб) в параметре «Устье» присутствует проблема (викификация, перенаправление, несуществующая статья);\nв) в одной из статей речной системы параметр «Устье» заполнен неверно (см. пункт б);\nг) река впадает в море, а в параметр «Высота устья» не вписан «0».');
			}
			return line;
		});

		//заменить устаревшее название
		if (txt.indexOf('==у') > -1)
		{
			var temp = mw.config.get( 'wgPageName' ).split('_(');
			temp[0] =  temp[0].replace('_', ' ');

			r(/==у\'\'\'([А-яЁё-\s]*?)\'\'\'/g, function ( uns, old )
			{
				return '\'\'\'' + temp[0] + '\'\'\' (\'\'устар.\'\' ' + old + '<ref name=\"ГВР\"/>)';
			});

			r(/\n *\| *Название *= *.*\n/g, '\n |Название                = ' + temp[0] + '\n');
		}

		//вставить карточку
		r(/==(река|озеро|вдх|залив|пролив|ист)/g, function ( uns, type )
		{
			return request('https://ru.wikipedia.org/w/index.php?action=raw&title=Участник:X0stark69/wikificator%2B/' + type);
		});

		//вставить шаблон
		r(/==(книга|кн|статья|ст|cite|ci|сайт|са)/g, function ( uns, type )
		{
			if (type == 'кн' || type == 'книга')
			{
				return '((книга\n |автор         = \n |ссылка        = \n |заглавие      = \n |ответственный = \n |место         = \n |издательство  = \n |год           = \n |страниц       = \n |isbn          = \n |страницы      = \n))';
			}

			if (type == 'ст' || type == 'статья')
			{
				return '((статья\n |автор    = \n |ссылка   = \n |заглавие = \n |язык     = \n |издание  = \n |тип      = \n |год      = \n |месяц    = \n |число    = \n |номер    = \n |issn     = \n |страницы = \n))';
			}

			if (type == 'ci' || type == 'cite' || type == 'са' || type == 'сайт')
			{
				return '((cite web\n |author      = \n |url         = \n |title       = \n |lang        = \n |date        = \n |website     = \n |publisher   = \n |access-date  = ' + linetime + ' \n))';
			}
		});

		r(/==прит([А-яЁё\d\.,\:\(\)\s-]*)/g, function ( uns, tributaries )
		{
			tributaries = 'Объекты перечислены по порядку от устья к истоку.\n((колонки|3))' + tributaries;
			tributaries = tributaries.replace( /\n\n/g, '\n((колонки|конец))\n');
			tributaries = tributaries.replace( /\n([\d,]+ км: )(река|ручьи руч.) ([А-Я])([А-яЁё\. -]+)/g, '\n$1[[$3$4]]' );
			tributaries = tributaries.replace( /\n([\d,]+ км\:)/g, '\n* $1' );
			tributaries = tributaries.replace( / ]]/g, ']] ' );
			tributaries = tributaries.replace( /]][^\n]+\n/g, ']]\n' );

			return tributaries;
		});

		//вставить параметр позкарты
		r(/==п/g, function ( line )
		{
			return ' |Позиционная карта       = ';
		});

		//поиск битых ссылок в истории
		r(/<ref\sfixref=(\'|\")?(.+?)(\'|\")?\s?\/>/g, function ( uns0, uns1, name )
		{
			var history = request('https://ru.wikipedia.org/w/index.php?action=history&title=' + mw.config.get( 'wgPageName' ));

			var tid = history.match( /oldid=([\d]*)"\sclass/g );

			var t = 0;
			while (tid[t])
			{
				var reg = /=([\d]*)/g;
				var id = reg.exec(tid[t]);

				var history_raw = request('https://ru.wikipedia.org/w/index.php?action=raw&oldid=' + id[1]);

				var regex1 = new RegExp('(<ref\\sname\s?=\s?(\'|\")?' + name + '(\'|\")?\s?>.+?<\/ref>)', '');

				var result1 = history_raw.match( regex1 );

				if (result1 != null)
				{
					alert('Ура! Сноска найдена!\n\nОбыскано версий: ' + t + '\n\nВыражение: ' + regex1);

					label = 2;

					return result1[1];
				}
				t++;
			}
			alert('Сноска не найдена!\n\nОбыскано версий: ' + t + '\n\nВыражение: ' + regex1);

			return uns0.replace('fixref', 'name');
		});

		//исправление доменов
		//загрузить категории
		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 (typeof no_replace_redirect_for_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(/(([Нн]е\s*переведено\s*[2345]?\s*\|/g, '((iw|'); //универсальная замена на iw, выполняется после замены редиректов шаблонов

//чистка ссылок-перенаправлений
		//if (typeof no_replace_redirect_for_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(/('''|>) \(устар\. ''([^']+?)''/g, '$1 (\'\'устар.\'\' $2');//исправление устар.
		r(/'''([А-яЁё \-]+) \(([А-яЁё \-]+)\)'''/g, '\'\'\'$1\'\'\' (\'\'\'$2\'\'\')');//разделение жирноты
		r(/== Фотогалерея ==/g, '== Фотографии ==');

		//избыточная викификация
		r(/\[\[11\sвек\]\]/g, 'XI век');
		r(/\[\[12\sвек\]\]/g, 'XII век');
		r(/\[\[13\sвек\]\]/g, 'XIII век');
		r(/\[\[14\sвек\]\]/g, 'XIV век');
		r(/\[\[15\sвек\]\]/g, 'XV век');
		r(/\[\[16\sвек\]\]/g, 'XVI век');
		r(/\[\[17\sвек\]\]/g, 'XVII век');
		r(/\[\[18\sвек\]\]/g, 'XVIII век');
		r(/\[\[19\sвек\]\]/g, 'XIX век');
		r(/\[\[20\sвек\]\]/g, 'XX век');
		r(/\[\[(X[XVI]+) век\|([XVI]+)\]\]/g, '$2');
		r(/\[\[([IVX]+)\sвек\]\]/g, '$1 век');
		r(/\[\[\d\d\d\d\-е\sгоды\|([^\]]+?)\]\]/g, '$1');
		r(/\[\[(\d\d\d\d\-е\sгоды)\]\]/g, '$1');
		r(/\[\[\d\d\d\d\sгод\|([^\]]+?)\]\]/g, '$1');
		r(/\[\[(\d\d\d\d\sгод)\]\]/g, '$1');
		r(/\[\[(\d\d\d\d)\]\]/g, '$1');
		r(/\[\[км\]\]/g, 'км');
		r(/\[\[км²\]\]/g, 'км²');
		r(/\[\[[Кк]илометр\|км\]\]/g, 'км');
		r(/\[\[[Кк]вадратный километр\|км²\]\]/g, 'км²');
		r(/\[\[[Мм]етр\|м\]\]/g, 'м');
		r(/\[\[(Л|л)ето\]\]/g, '$1ето');
		r(/\[\[(З|з)има\]\]/g, '$1има');
		r(/\[\[юг\]\]/g, 'юг');
		r(/\[\[север\]\]/g, 'север');
		r(/\[\[запад\]\]/g, 'запад');
		r(/\[\[восток\]\]/g, 'восток');
		r(/\[\[(Р|р)ека\]\]/g, '$1ека');
		r(/\[\[(Р|р)ека\|(Р|р)ек(е|и)\]\]/g, '$2ек$3');
		r(/\[\[залив\]\]/g, 'залив');
		r(/\[\[(Р|р)учей\]\]/g, '$1учей');
		r(/\[\[озеро\]\]/g, 'озеро');
		r(/\[\[приток\]\]/g, 'приток');
		r(/\[\[остров\]\]/g, 'остров');

		//викификация
		r(/река\sв\sРоссии/g, 'река в [[Россия|России]]');
		r(/([^\(])\[\[\:([A-z][A-z])\:(.*?)\|(.*?)\]\]/g, '$1\{\{iw|$4<!-- Заголовок статьи подставлен автоматически! Пожалуйста, проверьте корректность и удалите сообщение! -->|$4|$2|$3))');
		r(/протекает\sв\sЧеченской\sРеспублике/g, 'протекает по [[Чечня|Чечне]]');
		r(/протекает\sв\sРеспублике\sКоми/g, 'протекает по [[Республика Коми|Республике Коми]]');
		r(/протекает\sв\sРеспублике\sТатарстан/g, 'протекает по [[Татарстан]]у');
		r(/протекает\sв\sРеспублике\sБашкортостан/g, 'протекает по [[Башкортостан]]у');
		r(/протекает\sв\sЯмало-Ненецком\sАО/g, 'протекает по [[Ямало-Ненецкий автономный округ|Ямало-Ненецкому АО]]');
		r(/протекает\sв\sХанты-Мансийском\sАО/g, 'протекает по [[Ханты-Мансийский автономный округ — Югра|Ханты-Мансийскому АО]]');
		r(/протекает\sв\s\[\[ХМАО\|Ханты-Мансийском\sАО\]\]\./g, 'протекает по [[Ханты-Мансийский автономный округ — Югра|Ханты-Мансийскому АО]]');
		r(/Устье\sреки\sнаходится\sв\s([\d]*)\sкм\sпо\s(право|лево)му\sберегу\sреки\s([А-яЁё-\s]*)\./g, 'Устье реки находится в $1 км по $2му берегу реки [[' + current_mouth + '|$3]].');
		r(/>(http.+?)< *?\/ *?ref *?>/g, '>[$1]</ref>');
		r(/ +?< *?\/ *?ref *?>/g, '</ref>');
		r(/(< *?ref[^>\/]+?>) +/g, '$1');


		//латкир
		r(/((lang-(be|ru|uk)\|([^\}]+?)))/g, function ( line, lang, word ) {

			word = word.replace(/I/g, 'І');
			word = word.replace(/i/g, 'і');

			return '((lang-' + lang + '|' + word + '))';
		});
		//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\|\=])y([а-яёѣђјљњћџ][а-яёђјљњћџ])/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(/([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])p([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])/g, '$1р$2');
		r(/([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])x([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])/g, '$1х$2');
		r(/([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])y([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])/g, '$1у$2');
		r(/([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])ë([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])/g, '$1ё$2');
		//тюркские и кавказские
		r(/([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])h([А-яЁёѢѣІіЎўҐґЄєЇїЂђЈјЉљЊњЋћЏџ])/g, '$1һ$2');
		r(/([а-яёѣіўґєїђјљњћџ])I([а-яёѣіўґєїђјљњћџ])/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(/((([Кк]онец кол|[Кк]ол-конец|[Кк]олонки\/конец|[Dd]iv col end|[Cc]olend)))/g, '((колонки|конец))'); //замена устаревших
		r(/[Пп]римечания\}\}\n\{\{/g, 'примечания))\n\n((');
		r(/\{\{Lang/g, '((lang');
		r(/\{\{Ref/g, '((ref');
		r(/\{\{ref ([a-z][a-z])/g, '((ref-$1');
		r(/((([A-Za-z][a-z]) icon/g, function ( line, lang ) {
			return '((ref-' + lang.toLowerCase();
		});
		r(/\{\{lang-ua/g, '((lang-uk');
		r(/\{\{ref-ua/g, '((ref-uk');
		r(/\{\{lang-jp/g, '((lang-ja');
		r(/\{\{ref-jp/g, '((ref-ja');
		r(/\{\{lang-gr\|/g, '((lang-el|');
		r(/\{\{ref-gr\}/g, '((ref-el}');
		r(/\(рус(ск)?\.?\)\]/g, '((ref-ru))]');
		r(/\(анг(л)?\.?\)\]/g, '((ref-en))]');
		r(/\(фр\.?\)\]/g, '((ref-fr))]');
		r(/\(нем\.?\)\]/g, '((ref-de))]');
		r(/\(укр\.?\)\]/g, '((ref-uk))]');
		r(/\(исп\.?\)\]/g, '((ref-es))]');
		r(/\(итал\.?\)\]/g, '((ref-it))]');
		r(/\(порт\.\)\]/g, '((ref-pt))]');
		r(/\[\[[Уу]краинский язык\|укр\]\]\. \'\'([А-я-і]*)\'\'/g, '((lang-uk|$1))');
		r(/укр\. \'\'([А-я-і]*)\'\'/g, '((lang-uk|$1))');

		//шаблоны
		r(/=  +/g, '= ');//форматирование параметров
		r(/ =([^ =])/g, ' = $1');//форматирование параметров
		r(/(( *[Вв]нешние ссылки/g, '((внешние ссылки');
		if (txt.indexOf('((внешние ссылки))') > -1) {
			if (categories.indexOf('Шаблон «Внешние ссылки» пуст') > -1) { r(/\n?((внешние ссылки))\n?/g, ''); }
		}
		r(/((ВТ-ЭСБЕ\+\|/g, '((ВТ-ЭСБЕ|');
		r(/((ГВР\+/g, '((ГВР');
		r(/((\s*НП-Украина/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(/\{\{gNIS/g, '((GNIS');
		r(/Данные получены при помощи картографического сервиса \[\[Яндекс\.Карты\]\]\./g, '((ГИС|y))');

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

		r(/\{\{[Rr]q\|source(s)?\}\}/g, subst + 'отсутствие источников' + substclose);
		r(/\{\{[Rr]q\|refless\}\}/g, subst + 'nr' + substclose);
		r(/\{\{[Rr]q\|style\}\}/g, subst + 'стиль статьи' + substclose);
		r(/\|stub/g, '|empty');
		r(/\|wikify/g, '');
		r(/\|stress/g, '');
		r(/\|linkless/g, '');
		if (txt.indexOf('|img') > -1)
		{
			if ((txt.indexOf('.jpg') > -1) || (txt.indexOf('.JPG') > -1))
			{
				r(/\{\{[Rr]q\|img\}\}/g, '');
				r(/\|img/g, '');
			};
		}
		r(/(([Rr]q))/g, '');

		if (txt.indexOf('stub))') > -1)
		{
			if (categories.indexOf('Водные объекты по алфавиту') > -1 || categories.indexOf('Природные географические объекты по алфавиту') > -1 || categories.indexOf('Административные единицы по алфавиту') > -1 || categories.indexOf('Антропогенные географические объекты по алфавиту') > -1 || categories.indexOf('Населённые пункты по алфавиту') > -1) r(/\n(([A-z-]*stub))/g, '');

			if (txt.indexOf('stub))') > -1) {
				r(/stub\}\}\n\n\{\{/g, 'stub\}\}\n\{\{');

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

		//ссылки
		r(/http\:\/\/web\.archive\.org/g, 'https://web.archive.org');


		//даты
		r(/date *= *(\d) (января|January|Jan)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-01-0$1');
		r(/date *= *(\d\d) (января|January|Jan)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-01-$1');
		r(/date *= *(\d) (февраля|February|Feb)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-02-0$1');
		r(/date *= *(\d\d) (февраля|February|Feb)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-02-$1');
		r(/date *= *(\d) (марта|March)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-03-0$1');
		r(/date *= *(\d\d) (марта|March)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-03-$1');
		r(/date *= *(\d) (апреля|April)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-04-0$1');
		r(/date *= *(\d\d) (апреля|April)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-04-$1');
		r(/date *= *(\d) (мая|May)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-05-0$1');
		r(/date *= *(\d\d) (мая|May)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-05-$1');
		r(/date *= *(\d) (июня|June)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-06-0$1');
		r(/date *= *(\d\d) (июня|June)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-06-$1');
		r(/date *= *(\d) (июля|July)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-07-0$1');
		r(/date *= *(\d\d) (июля|July)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-07-$1');
		r(/date *= *(\d) (августа|August)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-08-0$1');
		r(/date *= *(\d\d) (августа|August)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-08-$1');
		r(/date *= *(\d) (сентября|September|Sep)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-09-0$1');
		r(/date *= *(\d\d) (сентября|September|Sep)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-09-$1');
		r(/date *= *(\d) (октября|October|Oct)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-10-0$1');
		r(/date *= *(\d\d) (октября|October|Oct)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-10-$1');
		r(/date *= *(\d) (ноября|November|Nov)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-11-0$1');
		r(/date *= *(\d\d) (ноября|November|Nov)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-11-$1');
		r(/date *= *(\d) (декабря|December)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-12-0$1');
		r(/date *= *(\d\d) (декабря|December)(?:,){0,1} ([12][09]\d\d)/g, 'date = $3-12-$1');
		r(/date *= *(\d\d)\.(\d\d)\.([12][09]\d\d)/g, 'date = $3-$2-$1');
		r(/date *= *(\d)\.(\d\d)\.([12][09]\d\d)/g, 'date = $3-$2-0$1');


		//орфография, может ломать изображения и URL
		r(/([^\w\d][0-9]+)\.([0-9]+\s)(сантиметр|сантиметра|сантиметров|см)([^\w])/g, '$1,$2$3$4');
		r(/([^\w\d][0-9]+)\.([0-9]+\s)(метр|метра|метров|м)([^\w])/g, '$1,$2$3$4');
		r(/([^\w\d][0-9]+)\.([0-9]+\s)(километр|километра|километров|км)([^\w])/g, '$1,$2$3$4');
		r(/([^\w\d][0-9]+)\.([0-9]+\s)(дюйм|дюйма|дюймов|м|км)([^\w])/g, '$1,$2$3$4');
		r(/([0-9]+,[0-9]+\s)сантиметров([^\w])/g, '$1сантиметра$2');
		r(/([0-9]+,[0-9]+\s)метров([^\w])/g, '$1метра$2');
		r(/([0-9]+,[0-9]+\s)километров([^\w])/g, '$1километра$2');
		r(/([0-9]+,[0-9]+\s)дюймов([^\w])/g, '$1дюйма$2');
		r(/(Н|н)аселенн([^я])/g, '$1аселённ$2');
		r(/(\s[Пп])оселок/g, '$1осёлок');
		r(/(Б|б)ерет\sначало/g, '$1ерёт начало');
		r(/(П|п)ротяженность/g, '$1ротяжённость');
		r(/подбассейн\sреки\s—\sПодбассейн/g, 'подбассейн реки — подбассейн');
		r(/, речной подбассейн реки\s— [Пп]одбассейн отсутствует/g, '');


		//пунктуация, может ломать изображения и URL
		r(/°\s*[CС]([\s\.\,])/g, '°C$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(/([А-яЁё])\.([А-ЯЁё][а-яё][а-яё])/g, '$1. $2');//добавление пробелов


		//стиль
		r(/В\s(\[\[)?(\d\d\d\d)(\]\])?\sг\.(\s|,)/g, 'В $2 году$4');
		r(/\sв\s(\[\[)?(\d\d\d\d)(\]\])?\sг\.( |,)([^А-ЯЁ])/g, ' в $2 году$4$5');
		r(/лощадь её водосборного/g, 'лощадь водосборного');
		r(/кв(\.)?(\s)?км/g, 'км²');
		r(/куб\.(\s)?км/g, 'км³');
		r(/\/сек([^у])/g, '/с$1');//стиль
		r(/, речной подбассейн реки отсутствует/g, '');
		r(/, подбассейн у реки отсутствует/g, '');


		//типографика, может ломать изображения и URL
		r(/<sup>2<\/sup>/g, '²');
		r(/<sup>3<\/sup>/g, '³');
		r(/км2/g, 'км²');
		r(/м2/g, 'м²');
		r(/км (²|³)/g, 'км$1');
		r(/км3/g, 'км³');
		r(/м3\/с/g, 'м³/с');
		r(/ м (²|³)/g, ' м$1');
		r(/([А-яЁё])·([А-яЁё])/g, '$1⋅$2');//замена интерпункта
		r(/(\s[А-яЁё\-]+)\.\.\./g, '$1…');//замена троеточий
		r(/­/g, '');//удаление символа переноса в словах
		r(/‐/g, '-');//замена настоящего дефиса


		//разметка кода
		r(/((iw\|([^\|\=]+)\|3=/g, '((iw|$1||');//добавить пустой параметр
		r(/((iw\|([^\|\=]+)\|4=/g, '((iw|$1||en|');//добавить пустой параметр
		r(/((iw\|([^\|\=]+)\|([^\|\=]+)\|4=/g, '((iw|$1|$2|en|');//добавить язык
		r(/(((iw\|[^\|]+\|[^\|]*\|)(\|[^\|\}]+?)))/g, '$1en$2');//добавить язык
		r(/((iw\|([^\|\}]+?)))/g, '((iw|$1||en|$1))');//добавить язык
		r(/\{\{Карта\|/g, '((карта|');
		r(/(?<!=) *< *ref/g, '<ref');//лишние пробелы
		r(/\s*< *\/ *ref *>/g, '</ref>');//лишние пробелы
		r(/\}\}.<\/ref>/g, '))</ref>');//лишние символы
		r(/\| *Исток *= *-([^ ])/g, '|Исток                   = - $1');//пробел после отключения автовикификации
		r(/(\[\[Категория:[А-яЁё:-\s\(\)\[\]]*)(\[\[Категория:Притоки\s[А-яЁё-\s\(\)]*\]\]\n)/g, '$2$1');
		r(/(\[\[Категория:[А-яЁё:-\s\(\)\[\]]*)(\[\[Категория:Бассейн\s[А-яЁё-\s\(\)]*\]\]\n)/g, '$2$1');
		r(/(\[\[Категория:[А-яЁё:-\s\(\)\[\]]*)(\[\[Категория:Реки,\sвпадающие\s[А-я-\s\(\)]*\]\]\n)/g, '$2$1');
		
		// r(/((((?:[Дд]ругие )?значения[^}]*?))\n)([^\']+?)))\n\'\'\'/g, '$2$1\'\'\''); // перенос ш:значения под карточку (плохо совместимо с моб.устройствами)
		// r(/((((?:[Дд]ругие )?значения[^}]*?))\n)([^\']+?)))\n\[\[Файл/g, '$2$1[[Файл');

		r(/(По данным \[\[Государственный водный реестр\|государственного водного реестра России\]\] относится.*)([^]+== Данные водного реестра ==[^]+)(По данным|Код объекта)/g, '$2$1\n\n$3');
		r(/По\sданным\sгеоинформационной системы водохозяйственного районирования[А-я,\s\[\|\]]*(<ref\sname=\"МПР\sРоссии\">.*<\/ref>|<ref\sname=\"ГВР\"\s*\/>):\s?\n\*\sКод\sводного([А-я—\s\d]*)\n[А-я—\s\(\)\d\n\.\*]*Выпуск\sпо\sГИ\s—\s\d\n/g, 'Код$2$1.\n');
		r(/<ref name=\"МПР России\">(\{\{cite web.+card\=([\d]+).+водный реестр( РФ)?\: ([0-9А-яЁё, \(\)\.-]+)[^<]*)/g, '<ref name=\"МПР России\">((ГВР|$2|$4))');
		r(/< ?ref name ?= ?(\'|\")(.+)(\'|\") ?> ?< ?\/ ?ref ?>/g, '<ref name="$2"/>');
		if (txt.indexOf('<ref name=\"МПР России\">') > -1) {
			r(/Длина\sреки\sсоставляет\s(\d*)\sкм\./g, 'Длина реки составляет $1 км<ref name=\"МПР России\"/>.');
		}
		r(/<ref>((карта\|([A-U0-9-IVX,АБ]*)))<\/ref>/g, '<ref name=\"$1\">((карта|$1))<\/ref>');
		if (txt.indexOf('<ref name=\"ГВР\">') == -1) {
			r(/<ref name\=\"МПР России\"/g, '<ref name=\"ГВР\"');
		}
		if (txt.indexOf('<ref name=\"ГВР\">') == -1) {
			r(/<ref>((ГВР\|([\d]+)(\|[^\}]+)?))<\/ref>/g, '<ref name=\"ГВР\">((ГВР|$1$2))<\/ref>');
		}
		if (txt.indexOf('<ref name=\"ГИ\">') == -1) {
			r(/<ref>(\{\{ГИ\|\d+)/g, '<ref name="ГИ">$1');
		}
//		r(/==\n\n/g, '==\n');
		r(/\n\s\}\}/g, '\n\}\}');


		//оформление ГВР
		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(/[^\n]\[\[Файл:/g, '\n\[\[Файл:');
		r(/\|альт=([\|\]]+)/g, '$1');//пустой
		r(/\|thumbnail/g, '|мини');
		r(/\|thumb/g, '|мини');
		r(/\|left/g, '|слева');
		r(/\|right/g, '|справа');
		r(/\|center/g, '|центр');
		r(/\n([Ii]mage|[Ии]зображение|[Ff]ile|файл)\:/g, '\nФайл:');//галереи
		r(/<gallery>/g, '<gallery class="center">');//галереи

		//удаление шаблонов и лишнего кода
		r(/ ?((([Пп]роверено|[Vv]) *\|[^\}]+))/g, '');
		r(/(([Бб]олванка( +)?\|( +)?.+))/g, '');
		r(/(([Nn]bsp))/g, ' ');
		r(/((нет\s(иллюстрации|иллюстраций|изображений)))/g, '');
		r(/((([Ss]|[Nn]obr) *\|([^\{\}]+?)))/g, function ( line, uns0, value )//чистка избыточного шаблона
		{
			return value.replace(/[\s]+/g, ' ');
		});
		r(/(([Пп]римечания\|2))/g, '((примечания))');//параметр отключён
		r(/<!-- *Заголовок *добавлен *ботом *-->/g, '');
		r(/<!-- *Заголовок *ссылки *сгенерирован *ботом *-->/g, '');
		r(/<!-- *Bot *generated *title *-->/g, '');
		r(/<!-- *Bot *retrieved *archive *--\>/g, '');
		r(/<!-- *Staff *writer\(s\); *no *by-line\. *--\>/g, '');
		r(/<!-- *Added *by *H3llBot *--\>/g, '');
		r(/<!---? *Смотрите в \[\[Википедия:Сноски\]\] примеры использования тэгов *<ref\> *<\/ref\> *--\>/g, '');
		r(/<!-- *DASHBot *--\>/g, '');//всегда удалять
		r(/<!-- *в км² *--\>/g, '');//всегда удалять
		r(/<!-- *в км *--\>/g, '');//всегда удалять
		r(/<!-- *в м *--\>/g, '');//всегда удалять
		r(/<!-- *\* *\(дополнительные параметры координат\) *--\>/g, '');//всегда удалять
		r(/<nowiki><\/nowiki>/g, '');
		r(/<nowiki> <\/nowiki>/g, ' ');
		r(/<nowiki>\[<\/nowiki>/g, '&#91;');
		r(/<nowiki>\]<\/nowiki>/g, '&#93;');
		r(/<nowiki>\|<\/nowiki>/g, '&#124;');
		r(/\n *\| *region.+\n/g, '\n');//всегда удалять, осталось Физгео


		//хлам, разобрать по секциям выше
		r(/\[\[([^\|\]]+)/g, function ( line, value )//чистка левых \s внутри ссылок
		{
			return '[[' + value.replace(/[\s]+/g, ' ');
		});
		r(/\[\[Речная\sсистема\]\]\sреки.*?\.\s/g, '');
		r(/== Ссылки ==\n(([A-z-]+geo-stub))/g, '');
		r(/(([Чч]исло\|([\d\.]+)/g, function ( line, value ) {
			return '((число|' + value.replace('.', ',');
		});
		r(/(([Чч]исло\|(\d)([\d,])?([\d,])?([\d,])?\|(.*?)))/g, '$1$2$3$4 $5');
		//r(/–/g, '-');//замена среднего тире
		r(/\{\{Sfn/g, '((sfn');//регистр
		r(/	/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(/(\| *Координаты (истока|устья|головы)? *= *)(\d+(?:\.\d+)?)[/](\d+(?:\.\d+)?)[/](\d+(?:\.\d+)?)[/]([NS])[/](\d+(?:\.\d+)?)[/](\d+(?:\.\d+)?)[/](\d+(?:\.\d+)?)[/]([EW])/g, function ( uns, line, uns1, lat1, lat2, lat3, lat4, lon1, lon2, lon3, lon4 )
		{
			var lat = ( +parseFloat( (Number(lat1)*3600+Number(lat2)*60+Number(lat3))/3600 ).toFixed( 4 ));
			var lon = ( +parseFloat( (Number(lon1)*3600+Number(lon2)*60+Number(lon3))/3600 ).toFixed( 4 ));

			if (lat4 == 'S') lat = lat*-1;
			if (lon4 == 'W') lon = lon*-1;

			return line + lat + '/' + lon;
		});
		r(/(\| *Координаты (истока|устья|головы)? *= *)(\d+(?:\.\d+)?)[/](\d+(?:\.\d+)?)[/]([NS])[/](\d+(?:\.\d+)?)[/](\d+(?:\.\d+)?)[/]([EW])/g, function ( uns, line, uns1, lat1, lat2, lat3, lon1, lon2, lon3 )
		{
			var lat = ( +parseFloat( (Number(lat1)*3600+Number(lat2)*60)/3600 ).toFixed( 4 ));
			var lon = ( +parseFloat( (Number(lon1)*3600+Number(lon2)*60)/3600 ).toFixed( 4 ));

			if (lat3 == 'S') lat = lat*-1;
			if (lon3 == 'W') lon = lon*-1;

			return line + lat + '/' + lon;
		});
		r(/(\| *Координаты (истока|устья|головы)? *= *)(\d+(?:\.\d+)?)[/]([NS])[/](\d+(?:\.\d+)?)[/]([EW])/g, function ( uns, line, uns1, lat1, lat2, lon1, lon2 )
		{
			var lat = ( +parseFloat( Number(lat1) ).toFixed( 4 ));
			var lon = ( +parseFloat( Number(lon1) ).toFixed( 4 ));

			if (lat2 == 'S') lat = lat*-1;
			if (lon2 == 'W') lon = lon*-1;

			return line + lat + '/' + lon;
		});
		r(/(\| *Координаты (истока|устья|головы)? *= *)(-?\d+(?:\.\d+)?)[/](-?\d+(?:\.\d+)?)\n/g, function ( uns, line, uns1, lat, lon )
		{
			return line + +parseFloat( Number(lat) ).toFixed( 4 ) + '/' + +parseFloat( Number(lon) ).toFixed( 4 ) + '\n';
		});

		//карточка реки
		if (txt.indexOf('зона\/Вставка') == -1 && txt.indexOf('((ЮНЕСКО') == -1) {
			r(/\n *\| *Название *= */g, '\n |Название                = ');
		}
		r(/\n *\| *Национальное название *= */g, '\n  |Национальное название  = ');
		r(/\n *\| *Изображение *= */g, '\n |Изображение             = ');
		r(/\n *\| *Подпись изображения *= */g, '\n  |Подпись изображения    = ');
		r(/\n *\| *Длина *= */g, '\n |Длина                   = ');
		r(/\n *\| *Площадь (бассейна|водосбора) *= */g, '\n |Площадь водосбора       = ');
		r(/\n *\| *Бассейн *= */g, '\n |Бассейн                 = ');
		r(/\n *\| *Расход воды *= */g, '\n |Расход воды             = ');
		r(/\n *\| *Место измерения *= */g, '\n  |Место измерения        = ');
		r(/\n *\| *Исток *= */g, '\n |Исток                   = ');
		r(/\n *\| *Местоположение истока *= */g, '\n  |Местоположение истока  = ');
		r(/\n *\| *Высота истока *= */g, '\n  |Высота истока          = ');
		r(/\n *\| *Координаты истока *= */g, '\n  |Координаты истока      = ');
		r(/\n *\| *Устье *= */g, '\n |Устье                   = ');
		r(/\n *\| *Местоположение устья *= */g, '\n  |Местоположение устья   = ');
		r(/\n *\| *Высота устья *= */g, '\n  |Высота устья           = ');
		r(/\n *\| *Координаты устья *= */g, '\n  |Координаты устья       = ');
		r(/\n *\| *Уклон реки *= */g, '\n |Уклон реки              = ');
		r(/\n *\| *Страна *= */g, '\n |Страна                  = ');
		if (txt.indexOf('((ЮНЕСКО') == -1) {
			r(/\n *\| *Регион *= */g, '\n  |Регион                 = ');
		}
		r(/\n *\| *Район *= */g, '\n   |Район                 = ');
		r(/\n *\| *Позиционная карта *= */g, '\n |Позиционная карта       = ');
		r(/\n *\| *Позиционная карта 1 *= */g, '\n |Позиционная карта 1     = ');
		r(/\n *\| *Тип вывода для ПК *= *1([1-4])/g, '\n  |Тип вывода меток       = справа\/$1');
		r(/\n *\| *Тип вывода для ПК *= *2([1-4])/g, '\n  |Тип вывода меток       = слева\/$1');
		r(/\n *\| *Тип вывода для ПК *= *3([1-4])/g, '\n  |Тип вывода меток       = сверху\/$1');
		r(/\n *\| *Тип вывода для ПК *= *4([1-4])/g, '\n  |Тип вывода меток       = снизу\/$1');
		r(/\n *\| *Тип вывода меток *= *(справа|слева|сверху|снизу)\/1/g, '\n  |Тип вывода меток       = $1\/справа');
		r(/\n *\| *Тип вывода меток *= *(справа|слева|сверху|снизу)\/2/g, '\n  |Тип вывода меток       = $1\/слева');
		r(/\n *\| *Тип вывода меток *= *(справа|слева|сверху|снизу)\/3/g, '\n  |Тип вывода меток       = $1\/сверху');
		r(/\n *\| *Тип вывода меток *= *(справа|слева|сверху|снизу)\/4/g, '\n  |Тип вывода меток       = $1\/снизу');

		r(/\n *\| *Позиционная карта *= 0/g, '\n |Позиционная карта       = -');
		r(/\n *\| *Позиционная карта 1 *= 0/g, '\n |Позиционная карта 1     = -');

		r(/\n *\| *Страна *= *Беларусь/g, '\n |Страна                  = Белоруссия');
		r(/\n *\| *Страна *= *(КНР|Китайская Народная Республика)/g, '\n |Страна                  = Китай');
		r(/\n *\| *Страна *= *США/g, '\n |Страна                  = Соединённые Штаты Америки');
		r(/\n *\| *Страна *= *ЮАР/g, '\n |Страна                  = Южно-Африканская Республика');

		r(/\n *\| *Устье *= *река\s\[\[([А-яЁё-]*)\]\]/g, '\n |Устье                   = $1');
		r(/\n *\| *Регион *= *Республика\sСеверная\sОсетия-Алания/g, '\n  |Регион                 = Северная Осетия');
		r(/\n *\| *Регион *= *Республика\sУдмуртия/g, '\n  |Регион                 = Удмуртия');
		r(/\n *\| *Регион *= *Чувашская\sРеспублика/g, '\n  |Регион                 = Чувашия');
		r(/\n *\| *Регион *= *Чеченская\sРеспублика/g, '\n  |Регион                 = Чечня');
		r(/\n *\| *Регион *= *Республика\sТатарстан/g, '\n  |Регион                 = Татарстан');
		r(/\n *\| *Регион *= *Республика\sМарий Эл/g, '\n  |Регион                 = Марий Эл');
		r(/\n *\| *Регион *= *Камчатская\sобласть/g, '\n  |Регион                 = Камчатский край');
		r(/\n *\| *Регион *= *Ненецкий\sАО/g, '\n  |Регион                 = Ненецкий автономный округ');
		r(/\n *\| *Регион *= *Тува/g, '\n  |Регион                 = Тыва');
		r(/\n *\| *Регион *= *Карелия/g, '\n  |Регион                 = Республика Карелия');
		r(/\n *\| *Регион *= *Республика\sБашкортостан/g, '\n  |Регион                 = Башкортостан');
		r(/\n *\| *Регион *= *Кабардино-Балкарская\sРеспублика/g, '\n  |Регион                 = Кабардино-Балкария');
		r(/(\n\s*\|\s*Позиционная\sкарта\s*=.*)(\n\s*\|\s*Район\s*=.*)\n/g, '$2$1\n');

		//карточка озера
		if (txt.indexOf('Подпись изображения') == -1 && txt.indexOf('Врезка') == -1) {
			r(/\n *\| *Подпись *= */g, '\n  |Подпись изображения    = ');
		}
		r(/\n *\| *Координаты *= */g, '\n |Координаты              = ');
		r(/\n *\| *CoordScale *= */g, '\n  |CoordScale             = ');
		r(/\n *\| *Страны *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Районы *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Страны *= */g, '\n |Страна                  = ');
		r(/\n *\| *Регионы *= */g, '\n  |Регион                 = ');
		r(/\n *\| *Районы *= */g, '\n   |Район                 = ');
		r(/\n *\| *Высота над уровнем моря *= */g, '\n |Высота над уровнем моря = ');
		r(/\n *\| *Ширина *= */g, '\n |Ширина                  = ');
		if (txt.indexOf('зона\/Вставка') == -1) {
			r(/\n *\| *Площадь *= */g, '\n |Площадь                 = ');
		}
		r(/\n *\| *Объём *= */g, '\n |Объём                   = ');
		r(/\n *\| *Длина береговой линии *= */g, '\n |Длина береговой линии   = ');
		r(/\n *\| *Наибольшая глубина *= */g, '\n |Наибольшая глубина      = ');
		r(/\n *\| *Средняя глубина *= */g, '\n  |Средняя глубина        = ');
		r(/\n *\| *Тип минерализации *= */g, '\n |Тип минерализации       = ');
		r(/\n *\| *Солёность *= */g, '\n  |Солёность              = ');
		r(/\n *\| *Прозрачность *= */g, '\n |Прозрачность            = ');
		r(/\n *\| *Площадь водосбора *= */g, '\n |Площадь водосбора       = ');
		r(/\n *\| *Впадающие реки *= */g, '\n  |Впадающие реки         = ');
		r(/\n *\| *Вытекающие реки *= */g, '\n  |Вытекающие реки        = ');

		//карточка водохранилища
		r(/\n *\| *Впадающие водотоки *= */g, '\n |Впадающие водотоки      = ');
		r(/\n *\| *Вытекающие водотоки *= */g, '\n |Вытекающие водотоки     = ');
		r(/\n *\| *Год наполнения *= */g, '\n |Год наполнения          = ');
		r(/\n *\| *Высота плотины *= */g, '\n |Высота плотины          = ');

		//карточка канала
		r(/\n *\| *Голова *= */g, '\n |Голова                  = ');
		r(/\n *\| *Местоположение головы *= */g, '\n  |Местоположение головы  = ');
		r(/\n *\| *Высота головы *= */g, '\n  |Высота головы          = ');
		r(/\n *\| *Координаты головы *= */g, '\n  |Координаты головы      = ');
		r(/\n *\| *Уклон канала *= */g, '\n |Уклон канала            = ');

		//карточка водопада
		r(/\n *\| *Река *= */g, '\n |Река                    = ');
		r(/\n *\| *Высота *= */g, '\n |Высота                  = ');
		r(/\n *\| *Расход *= */g, '\n |Расход                  = ');

		//карточка ледника
		if (txt.indexOf('((Ледник') > -1)
		{
			r(/\n *\| *Тип ледника *= */g, '\n |Тип ледника             = ');
			r(/\n *\| *Толщина *= */g, '\n |Толщина                 = ');
			r(/\n *\| *Состояние ледника *= */g, '\n |Состояние ледника       = ');
		};

		//карточка залива
		r(/\n *\| *Примечания *=.*/g, '');
		r(/\n *\| *Тип\sзалива *= */g, '\n |Тип залива              = ');
		r(/\n *\| *Вышестоящая\sакватория *= */g, '\n |Вышестоящая акватория   = ');
		r(/\n *\| *Средняя\sвеличина\sприлива *= */g, '\n |Средняя величина прилива= ');

		//карточка пролива
		r(/\n *\| *Крайний мыс *= */g, '\n |Крайние мысы            = ');
		r(/\n *\| *Крайний мыс 1 *= *\n/g, '\n');//удалять если не заполнена

		//Общие параметры
		r(/\n *\| *НП *=.*/g, '');
		r(/\n *\| *Остров *=.*/g, '');
		r(/\n *\| *Расположение *=.*/g, '');
		r(/\n *\| *s_no *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Позиционная\sкарта *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Позиционная\sкарта\s1 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Позиционная\sкарта\s2 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Категория на Викискладе *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Карта *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *Подпись\sкарты *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *CoordScale *= *\n/g, '\n');//удалять если не заполнена
		if (txt.indexOf('((Море') == -1)
		{
			if (txt.indexOf('Регион') == -1)
			{
				r(/\n *\| *Страна *= (.*?)\n/g, '\n |Страна                  = $1\n  |Регион                 = \n');
			}

			if (txt.indexOf('Район') == -1 && txt.indexOf('((ЮНЕСКО') == -1)
			{
				r(/\n *\| *Регион *= (.*?)\n/g, '\n  |Регион                 = $1\n   |Район                 = \n');
			}
		}
		r(/\n *\| *Примечания *=.*/g, '');

		//Карточка поселения
		r(/\n *\| *карта страны *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *карта региона *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *карта района *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *карта страны *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
		r(/\n *\| *карта региона *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
		r(/\n *\| *карта района *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
		r(/\n *\| *язык сайта 2 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *язык сайта 3 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *язык сайта 4 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *язык сайта 5 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *add1n *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *add1 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *add2n *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *add2 *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *add3n *= *\n/g, '\n');//удалять если не заполнена
		r(/\n *\| *add3 *= *\n/g, '\n');//удалять если не заполнена

		//карточки гор
		r(/\n *\| *Хребет или массив *= */g, '\n  |Хребет или массив      = ');

		//карточка парка
		if (txt.indexOf('((Парк') > -1 && txt.indexOf('((Заповед') == -1)
		{
			r(/\n *\| *Тип *= */g, '\n |Тип парка               = ');
		};

		//удаление iw из издательств
		r(/\|(издательство|издание) *= *\{\{iw\|([^\|\}\(]+)[^\}]*\}\}/g, '|$1 = $2');

		//удаление archive.org из параметра страницы
		r(/\|(pages|страницы) *= *\[https:\/\/archive\.org[^ ]+ ([\d–—,-]+)\]/g, '|$1 = $2');

		//удаление google.books в wayback
		r(/ (([Ww]ayback\|url=https:\/\/books\.google[^}]+?))/g, '');

		//базовое оформление ссылок
		r(/(((Недоступная ссылка)/g, '((недоступная ссылка');
		r(/((Wayback/g, '((wayback');
		r(/((([Ww]ebarchive|Архивировано)/g, '((архивировано');
		var pos = 0;//подсчёт неоформленных ссылок
		for (var links = -1; pos != -1; links++) { pos = txt.indexOf('[http', pos+1); }
		r(/\[(http(s)?\:\/\/([^\/]+\.([0-9a-z]+))(\/[^ ^\]]+)?)( ([^\]]+))?\](\{\{ref\-([a-z]+)\}\})?([\s]*\{\{(недоступная ссылка|wayback|архивировано)[^}]*?)))?/g, function ( uns0, url, uns2, website, domain, uns5, uns6, title, uns8, reflang, dead, funcdead )
		{
			var lang = '';
			var accessdate = linetime;

			if (replace_all_link > 0 )//участник сделал выбор
			{
				if ( replace_all_link == 2 )//участник отказался
				{
					return uns0;
				}
			}
			else if (confirm('В статье обнаружены неоформленные ссылки: ' + links + ' шт. Оформить все через cite web?')) {
				replace_all_link = 1;
			}
			else {
				replace_all_link = 2;
				return uns0;
			}

			if (typeof reflang !== 'undefined') {
				lang = reflang;
			}
			else if (url.match(/\/ru\//g) !== null || url.match(/\/ru$/g) !== null)//если в url /ru/ или /ru$, ставить русский
			{
				lang = 'ru';
			}
			else if (url.match(/\/uk\//g) !== null || url.match(/\/uk$/g) !== null)//~
			{
				lang = 'uk';
			}
			else if (url.match(/\/en\//g) !== null || url.match(/\/en$/g) !== null)//~
			{
				lang = 'en';
			}
			else if (url.match(/\/de\//g) !== null || url.match(/\/de$/g) !== null)//~
			{
				lang = 'de';
			}
			else if (url.match(/\/fr\//g) !== null || url.match(/\/fr$/g) !== null)//~
			{
				lang = 'fr';
			}
			else if (url.match(/\/it\//g) !== null || url.match(/\/it$/g) !== null)//~
			{
				lang = 'it';
			}
			else if (url.match(/\/es\//g) !== null || url.match(/\/es$/g) !== null)//~
			{
				lang = 'es';
			}
			else if (url.match(/\/pl\//g) !== null || url.match(/\/pl$/g) !== null)//~
			{
				lang = 'pl';
			}
			else if (url.match(/\/bg\//g) !== null || url.match(/\/bg$/g) !== null)//~
			{
				lang = 'bg';
			}
			else if ((domain == 'de') || (domain == 'ru') || (domain == 'fr') || (domain == 'pl') || (domain == 'es') || (domain == 'it') || (domain == 'bg')) {
				lang = domain;
			}
			else if (domain == 'cz') {
				lang = 'cs';
			}
			else if (domain == 'ua' && typeof title !== 'undefined') {
				if (title.match(/[ҐґЄєІіЇї]/g) === null) {
					lang = 'ru';
				}
				else {
					lang = 'uk';
				}
			}
			else if (domain == 'rs') {
				lang = 'sr';
			}

			if (typeof title === 'undefined') {//предупреждение для ссылок без описаний
				title = '';

				alert('Внимание! У ссылки ' + url + ' не заполнено описание! Обязательно впишите его в параметр title. См. ошибку в предварительном просмотре.');
			}
			else
			{
				title = title.replace(/((ref-[a-z][a-z]))/g, '');//мусор в title
				title = title.replace(/\[/g, '&#91;');//спецсимвол в мнемонику
				title = title.replace(/\|/g, '&#124;');//спецсимвол в мнемонику
			}

			if (typeof dead === 'undefined')
			{
				deadparam = ' |deadlink = no';
			}
			else//не вписывать дату доступа, если ссылка мертва
			{
				accessdate = '';
				archivedate = '';

				if (funcdead == 'недоступная ссылка')
				{
					dead.replace(/(http[^}\| ]+)?.+(\d\d\d\d\-\d\d\-\d\d)?/g, function ( line, url, archivedate )
					{
						if (typeof url === 'undefined') { var url = ''; }
						if (typeof archivedate === 'undefined') { var archivedate = ''; }

						deadparam = ' |archive-url = ' + url + ' |archive-date = ' + archivedate + ' ';

						accessdate = archivedate;
						deadparam = deadparam + ' |deadlink = yes';

						return line;
					});
				}
				else if (funcdead == 'wayback')
				{
					dead.replace(/(http[^}\| ]+).+(([\d]{4})([\d]{2})([\d]{2})[\d]{6})/g, function ( line, url, datetime, year, month, day )
					{
						deadparam = ' |archive-url = ' + 'https://web.archive.org/web/' + datetime + '/' + url + ' |archive-date = ' + year + '-' + month + '-' + day + ' ';

						accessdate = year + '-' + month + '-' + day;//дата архива как дата доступа
						deadparam = deadparam + ' |deadlink = ';

						return line;
					});
				}
				else if (funcdead == 'архивировано')
				{
					dead.replace(/(http[^}\| ]+).+(\d\d\d\d\-\d\d\-\d\d)/g, function ( line, url, archivedate )
					{
						if (typeof url === 'undefined') { var url = ''; }
						if (typeof archivedate === 'undefined') { var archivedate = ''; }

						deadparam = ' |archive-url = ' + url + ' |archive-date = ' + archivedate;

						accessdate = archivedate;//дата архива как дата доступа
						deadparam = deadparam + ' |deadlink = ';

						return line;
					});
				}
			}

			url = url.replace(/\|/g, '%7C');//спецсимвол в мнемонику
			url = url.replace(/\{/g, '%7B');//спецсимвол в мнемонику
			url = url.replace(/\}/g, '%7D');//спецсимвол в мнемонику

			var line = '((cite web|author = |url = ' + url + ' |title = ' + title + ' |lang = ' + lang + ' |website = ' + website + ' |date = |access-date = ' + accessdate + deadparam + '))';
			return line;
		});
		if ( replace_all_link == 1 )//участник сделал выбор о замене
		{
			r(/ *на *сайте *\'\'[a-z\.\-]+\'\', *[0-9]+ *[а-я]+ *[0-9]+(<|\n)/g, '$1');
			r(/ *на *сайте *\'\'[a-z\.\-]+(\'\')?(<|\n)/g, '$2');
		}

		//упаковка wayback
		r(/))\s*((wayback\|url=(http[^}\| ]+).+?(([\d]{4})([\d]{2})([\d]{2})[\d]{6})\s*))/g, function ( line, url, datetime, year, month, day )
		{
			deadparam = ' |archive-url = ' + 'https://web.archive.org/web/' + datetime + '/' + url + ' |archive-date = ' + year + '-' + month + '-' + day + ' ))';

			return deadparam;
		});


		//форматирование шаблонов АИ
		r(/\[(http[^\]]+?)\[\[([^\|\]]+?\|)?([^\]]+?)\]\]/g, '[$1$3');//ликвидация викификации внутри ссылок
		r(/\[(http(s)?:\/\/web\.archive\.org\/web\/([\d][\d][\d][\d])([\d][\d])([\d][\d])[\d]+\/(http(s)?:[^\] ]+))([^\]]+)?\]/g, '((cite web|author = |url=$6|deadlink = |title=$8|lang = |archive-url=$1|archive-date=$3-$4-$5))');//разворачивание web.archive.org
		r(/\[(http(s)?:\/\/www\.webcitation\.org\/[^\?]+\?url=(http(s)?:[^\] ]+))([^\]]+)?\]/g, '((cite web|author = |url=$3|deadlink = |title=$5|lang = |archive-url=$1|archive-date=))');//разворачивание www.webcitation.org
		r(/\[(http(s)?:\/\/archive\.(is|li|md|today)\/([\d][\d][\d][\d])([\d][\d])([\d][\d])[\d]+\/([^\] ]+))([^\]]+)?\]/g, '((cite web|author = |url=$7|deadlink = |title=$8|lang = |archive-url=$1|archive-date=$4-$5-$6))');//разворачивание archive.(is|li|md|today)
		r(/\[(http(s)?:\/\/archive\.(is|li|md|todai)\/[A-Za-z0-9]+) ([^\]]+?)\]/g, '((cite web|author = |url=|deadlink = |title=$4|lang = |archive-url=$1|archive-date=))');//разворачивание archive.(is|li|md|today)
		r(/(([Ii]nternetquelle/g, '((cite web');//ликвидация internetquelle
		r(/(([Cc]ite magazine/g, '((cite journal');//ликвидация cite magazine
		r(/(([Cc]ite[\s]+news([^\}]*?\| *url *= *http[^\}]+?)))/g, '((cite web$1');//ликвидация cite news
		r(/(([Cc]ite[\s]+web/g, '((cite web');
		r(/(([Cc]ite[\s]+web[\s]+2/g, '((cite web');
		r(/ *= *\?\?\?/g, ' = ');
		r(/\| *тираж *= *([0-9]+)(&nbsp;|\s)([0-9]+)/g, '|тираж = $1$3');
		r(/(title|publisher) *=(.+?)(\||[^!]\}\})/g, function ( line, title, out )//чистка избыточного шаблона в title
		{
			return line.replace(/((!))/g, '&#124;');
		});
		r(/\| *language *=/g, '|lang =');
		r(/\| *lang *= *([a-z][a-z])\-[A-Za-z][A-Za-z]/g, '|lang = $1');//чистка региона из языка
		r(/\| *lang *= *arm/g, '|lang = hy');
		r(/\| *lang *= *by/g, '|lang = be');
		r(/\| *lang *= *ua/g, '|lang = uk');
		r(/\| *lang *= *jp/g, '|lang = ja');
		r(/\| *lang *= *gr/g, '|lang = el');
		r(/\| *lang *= *cn/g, '|lang = zh');
		r(/\| *lang *= *English/g, '|lang = en');
		r(/\| *lang *= *German/g, '|lang = de');
		r(/\| *lang *= *French/g, '|lang = fr');
		r(/\| *lang *= *Spanish/g, '|lang = es');
		r(/\| *lang *= *Dutch/g, '|lang = nl');
		r(/\| *lang *= *Japanese/g, '|lang = ja');
		r(/(((cite web([^\}]+?))))((недоступная ссылка[^\}]+?))/g, '$1|deadlink = yes))');

		//распил архивных ссылок в 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(/\| *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, '|');//для упрощения регулярок ниже

			//internetquelle
			line = line.replace(/\|autor *=/g, '|author =');
			line = line.replace(/\|titel *=/g, '|title =');
			line = line.replace(/\|hrsg *=/g, '|website =');
			line = line.replace(/\|offline *=/g, '|deadlink =');
			line = line.replace(/\|deadurl *=/g, '|deadlink =');
			line = line.replace(/\|zugriff *=/g, '|access-date =');
			line = line.replace(/\|zugriff-jahr *=/g, '|access-date =');
			line = line.replace(/\|archiv-datum *=/g, '|archive-date =');
			line = line.replace(/\|datum-jahr *=/g, '|year =');
			line = line.replace(/\|datum-monat *=/g, '|month =');
			line = line.replace(/\|datum-tag *=/g, '|day =');
			line = line.replace(/\|datum *=/g, '|date =');
			line = line.replace(/\|sprache *=/g, '|lang =');
			line = line.replace(/\|seiten *=/g, '|pages =');
			line = line.replace(/\|zitat *=/g, '|quote =');

			//cite web
			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(/\|work *=/g, '|website =');
//			line = line.replace(/\|language *=/g, '|lang =');
			line = line.replace(/\|datepublished *=/g, '|date =');
			line = line.replace(/\|deadlink *= *(\}|\|)/g, '|deadlink=no$1');
			line = line.replace(/\|deadlink *= *1 *\|/g, '|deadlink = yes |');
			line = line.replace(/\|deadlink *= *(403|404|project-closed|unknown-host|indeed|circular|да|unfit)/g, '|deadlink = yes');
			line = line.replace(/\|deadurl *= *yes/g, '');
			line = line.replace(/\|description *= *([\n\|\}])/g, '$1');//убрать пустые description
			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 *= *web\.archive\.org/g, '|website = ');//очистить website

			line = line.replace(/\|newspaper *=/g, '|publisher =');//нет в ru.wiki
			line = line.replace(/\|publisher *= *web\.archive\.org/g, '|publisher = ');//очистить publisher

			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');

			//удалить умершие архивы webcitation.org, youtube, loadmap
			if (line.indexOf( 'webcitation.org' ) != -1 ||
				line.indexOf( 'www.youtube.com' ) != -1 ||
				line.indexOf( 'loadmap.net' ) != -1 )
			{
				line = line.replace(/\|archive\-url *= *[^\|\}]+/g, '|archive-url = ');
				line = line.replace(/\|archive\-date *= *[^\|\}]+/g, '|archive-date = ');
			}

			//вставить недостающие параметры
			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\}]+)/);
			var link = line.match(/\|url *= *([^\|\n\}\?\=]+)/);

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

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

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

			//раскрыть
			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;
		});


		r(/(([Кк]нига/g, '((книга');
		r(/((книга([^\}]+?)))/g, function ( line, params ) {//для сработки нужна замена выше
			params = params.replace(/\| *volume *=/g, '|том =');
			params = params.replace(/\| *pages *=/g, '|страницы =');
			params = params.replace(/\| *columns *=/g, '|столбцы =');
			params = params.replace(/\| *allpages *=/g, '|страниц =');

			//форматирование
			if (line.indexOf('((книга\n') == -1) {
				params = params.replace(/\|([^=\|]+)=/g, ' |$1 = ');
				params = params.replace(/\s+/g, ' ');
			};

			return '((книга' + params + '))';
		});
		r(/(([Сс]татья/g, '((статья');
		r(/((статья([^\}]+?)))/g, function ( line, params ) {//для сработки нужна замена выше
			//форматирование
			if (line.indexOf('((статья\n') == -1) {
				params = params.replace(/\|([^=\|]+)=/g, ' |$1 = ');
				params = params.replace(/\s+/g, ' ');
			};

			return '((статья' + params + '))';
		});
		r(/((([Ии]з БСЭ|БСЭ)))/g, '((Из БСЭ|статья = ))');
		r(/((([Ии]з )?БСЭ([^123][^}]+?)))/g, function ( line, uns0, params ) {//замена БСЭ на БСЭ3

			if (params.indexOf('издание') != -1) {//указано издание
				return line;
			};

			params = params.replace(/\| *(заглавие|title) *= */g, '|статья = ');
			params = params.replace(/\| *http[^\|\}]+/g, '');

			alert('Внимание! Устаревший шаблон ' + line + ' автоматически заменён на ((БСЭ3' + params + ')). Проверьте наличие статьи в 3-м издании БСЭ!');

			return '((БСЭ3' + params + '))';
		});

		//упаковка ссылок в шаблон Книга
		//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(/(([Кк]нига([^\}]+?))) *(([Ww]ayback *\| *url *= *([^\|\}]+?) *\| *date *= *(([\d]{4})([\d]{2})([\d]{2})[\d]{6}) *))/g, function ( line, params, url, datetime, year, month, day ) {
			params = params.replace(/\}\}/g, '|archive-url = https://web.archive.org/web/' + datetime + '/' + url + ' |archive-date = ' + year + '-' + month + '-' + day + ' ))');

			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.match(/\|язык *=/) === null) {
				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 + '))';
		//});

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


		//Пользовательские функции
		for ( i in window.wfWOPlugins ) {
			if ( window.wfWOPlugins.hasOwnProperty( i ) ) {
				window.wfWOPlugins[i]( txt, r );
			}
		}
	}

	//всякие функции
	function r( r1, r2 )
	{
		txt = txt.replace( r1, r2 );
	}

	function request( URL )
	{
		var oRequest = new XMLHttpRequest();
		oRequest.open('GET', URL, false);
		oRequest.send(null);

		return oRequest.responseText;
	}
	function attention( property, statement )
	{
		var regex = new RegExp('\\|' + property + '\\s*=\\s*(\\d*,?\\d*)', '');
		var result = txt.match( regex );

		if ((result != null) && ((result[1] < 10000) || (isNaN(result[1]))))
		{
			if ((txt.split(result[1]).length - 1) == 1)
			{
				label = 1;

				return subst + 'АИ2' + statement.replace('replace', result[1]) + ' ';
			}
		}

		return '';
	}
	function wb( mouth, t )
	{
		var article = request('https://ru.wikipedia.org/w/index.php?action=raw&title=' + mouth);

		var new_mouth = article.match( /\|\s?Устье\s*=\s(.+)\n/ );

		if (new_mouth == null)
		{//озеро?
			var new_mouth = article.match( /\|\s?Вытекающие\sреки\s*=\s(.+)\n/ );

			if (new_mouth != null)
			{
				system = system + '/' + new_mouth[1];

				wb( new_mouth[1], t++);
			}
			else
			{//водохранилище
				var new_mouth = article.match( /\|\s?Вытекающие\sводотоки\s*=\s(.+)\n/ );

				if (new_mouth != null)
				{
					system = system + '/' + new_mouth[1];

					wb( new_mouth[1], t++);
				}
				else
				{
					return 0;
				}
			}
		}
		else
		{
			system = system + '/' + new_mouth[1];

			if (wb( new_mouth[1], t++) == 0)
			{
				var mouth_sea = article.match( /\|Бассейн\s*=\s(.+)\n/ );

				if (mouth_sea != null)
				{
					system = system.replace(new_mouth[1], mouth_sea[1]);
				}
			}
		}
		return 1;
	}

	function processAllText()
	{
		txt = wpTextbox1.value;

		var length = txt.length;
		processText();
		//r( /^[\n\r]+/, '' );

		if ( txt == '' ){
			if ( mw.config.get( 'wgPageName' ).indexOf('Категория:Притоки_') > -1 ){
				txt = '((' + 'КПР))';
			}
			else if ( mw.config.get( 'wgPageName' ).indexOf('Категория:Бассейн_') > -1 ){
				txt = '((' + 'КБР|||))';
			}
			else if ( mw.config.get( 'wgPageName' ).indexOf('Обсуждение_участника:') > -1 ){
				txt = request('https://ru.wikipedia.org/w/index.php?action=raw&title=Проект:Водные_объекты/Сообщения_участникам');

				txt = txt.substring(0,txt.indexOf('[[Категория'));

				label = 3;
			}

		}

		wpTextbox1.value = txt;

		//комментарий
		var comment = '';
		var comment_line = wpSummary.value;
		if (comment_line.indexOf('[[ПРО:ВО]]') == -1)
		{
			if ((comment_line.length > 0) && (comment_line.indexOf('*/ ') == -1))
			{
				comment = ', ';
			}

			if (label == 2)
			{
				comment = comment + 'восстановлена утерянная сноска с помощью скрипта [[ПРО:ВО]]';
			}
			else if (label == 3)
			{
				comment = '[[Проект:Водные объекты]]';
			}
			else if (length != txt.length)
			{
				comment = comment + 'автозамена скриптом [[ПРО:ВО]]';
			}
			else if (label == 1)
			{
				comment = comment + 'выявлено разногласие данных с помощью скрипта [[ПРО:ВО]]';
			}
			wpSummary.value = comment_line + comment;
		}

		txt = '';
		comment_line = '';

		if ( window.auto_comment &&
			window.insertSummary &&
			!document.editform.wpSection.value
		) {
			window.insertSummary( 'Скрипт ПРО:ВО' );
		}
	}

	processAllText();
}


function registerWikificatorTool() {
	registerTool( {
		name: 'wikificator',
		position: 200,
		title: 'Скрипт ПРО:ВО',
		label: 'Викификатор ПРО:ВО — автоматический обработчик текста',
		callback: Wikify_WO,
		classic: {
			icon: '//upload.wikimedia.org/wikipedia/commons/9/99/Code-selected.png',
		},
		visual: {
			icon: '//upload.wikimedia.org/wikipedia/commons/9/99/Code-selected.png',
			modes: [ 'source' ],
			addRightAway: true,
		},
	} );
}

if ( $.inArray( mw.config.get( 'wgAction' ), ['edit', 'submit'] ) !== -1 ) {
    mw.loader.using( ['user.options', 'jquery.textSelection'], function () {
        if ( mw.user.options.get('usebetatoolbar') === 1 ) {
			$.when(
				mw.loader.using( 'ext.gadget.registerTool' ),
					$.ready
			).then( registerWikificatorTool );
		}
    } );
}
{{bottomLinkPreText}} {{bottomLinkText}}
Участник:X0stark69/wikificator+.js
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.

X

Get ready for Wikiwand 2.0 🎉! the new version arrives on September 1st! Don't want to wait?