Участник:X0stark69/wikificator+.js
(перенаправлено с «Участник:Мастер теней/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, '[');
r(/<nowiki>\]<\/nowiki>/g, ']');
r(/<nowiki>\|<\/nowiki>/g, '|');
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, '[');//спецсимвол в мнемонику
title = title.replace(/\|/g, '|');//спецсимвол в мнемонику
}
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]+)( |\s)([0-9]+)/g, '|тираж = $1$3');
r(/(title|publisher) *=(.+?)(\||[^!]\}\})/g, function ( line, title, out )//чистка избыточного шаблона в title
{
return line.replace(/{{!}}/g, '|');
});
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-WO',
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 );
}
} );
}