Декъашхо:X0stark69/wikificator+addon.js
Билгалдаккхар: Ӏалашйинчул тӀаьхьа хийцамаш га браузеран кэш цӀанйан йезаш хила мега.
- Firefox / Safari: Shift тӀетаӀийна йитина, гӀирсийн панелан тӀера тӀетаӀайе Карлайаккха йа Ctrl+F5 йа Ctrl+R (⌘+R Mac тӀехь)
- Google Chrome: тӀетаӀайе Ctrl+Shift+R (⌘+Shift+R Mac тӀехь)
- Internet Explorer / Edge: тӀетаӀийна йитина Ctrl, тӀетаӀайе Карлайаккха йа тӀетаӀайе Ctrl+F5
- Opera: тӀетаӀайе Ctrl+F5.
//Викификатор проекта ВО
importScript('Декъашхо:Мастер теней/wikificator+.js');
//дополнения в Викификатор ВО
window.wfWOPlugins = window.wfWOPlugins || [];
window.wfWOPlugins.push(function (txt, r) {
//загрузить категории
categories = request( 'https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=categories&cllimit=500&titles=' + mw.config.get('wgPageName') );
//протоколы доменов
if (txt.indexOf('http') > -1){
if (categories.indexOf('Водные объекты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:ВО
var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/ВО.js&action=raw' );
eval(code);
} else if (categories.indexOf('Природные географические объекты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:Физгео
var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/Физгео.js&action=raw' );
eval(code);
} else if (categories.indexOf('Административные единицы по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:АТД
var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/АТД.js&action=raw' );
eval(code);
} else if (categories.indexOf('Антропогенные географические объекты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:Агео
var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/Агео.js&action=raw' );
eval(code);
} else if (categories.indexOf('Населённые пункты по алфавиту') > -1) {//фиксация протоколов и доменов для ПРО:Города
var code = request( 'https://ru.wikipedia.org/w/index.php?title=Участник:X0stark69/НП.js&action=raw' );
eval(code);
}
}
if (txt.indexOf('{{внешние ссылки}}') > -1) {
if (categories.indexOf('Шаблон «Внешние ссылки» пуст') > -1) { r(/\n?{{внешние ссылки}}\n?/g, ''); }
}
r(/{{ВТ-ЭСБЕ\+\|/g, '{{ВТ-ЭСБЕ|');
if (txt.indexOf('stub}}') > -1) {
if (confirm('убрать stub-шаблон?')) { r(/\n?{{[^\}]+stub}}\n?/g, ''); }
}
//преобразование координат
//Google, Yandex, Bing, SAS-Планета, Nakarte
r(/(\| *Координаты (истока|устья|головы)? *= *)(-?\d+([\.,]\d+)?)°?,? (-?\d+([\.,]\d+)?)°?\n/g, function ( line, param, uns2, lat, uns4, lon )
{
return param + lat.replace(',', '.') + '/' + lon.replace(',', '.') + '\n';
});
r(/'''([А-яЁё \-]+)\(([А-яЁё \-]+)\)'''/g, '\'\'\'$1\'\'\' (\'\'\'$2\'\'\')');//разделить жирноту
r(/== Фотогалерея ==/g, '== Фотографии ==');
r(/\|альт=([\|\]]+)/g, '$1');
//шаблоны
r(/{{ *[Зз]начения *\|/g, '{{другие значения|');
r(/{{ *[Кк]ар(Сер|тографический сервис) *\|/g, '{{ГИС|');
r(/{{ *[Кк]нига\:РесПовВодСССР/g, '{{Книга:РПВ ГИ');
r(/{{ *[Nn]um/g, '{{число');
r(/{{ *ГВР\+/g, '{{ГВР');
r(/{{Реки бассейна Белого моря от западной гр}}/g, '{{Реки бассейна Белого моря от западной границы бассейна р. Иоканга (мыс Святой Нос) до восточной границы бассейна р. Нива без р. Поной}}');
r(/(?<!==)\n(\{\{[^\{]+?\}\})\n\n\{\{нет сносок\}\}/g, '\n{{нет сносок}}\n\n$1');//поднять «нет сносок»
r(/\{\{ *([Cc]ite gnis|[Gg]nis)/g, '{{GNIS');
r(/\{\{GNIS\| *id *= *(\d+) *\| *name *=([^\|\}]+)/g, '{{GNIS|$1|$2');
r(/Данные получены при помощи картографического сервиса \[\[Яндекс\.Карты\]\]\./g, '{{ГИС|y}}');
r(/\|место *= *\{\{N. Y.\}\}/g, '|место = N. Y.');//автоподдержка
r(/\|место *= *\{\{К\.?\}\}/g, '|место = К.');//автоподдержка
r(/\|место *= *\{\{[Лл]\.?\}\}/g, '|место = Л.');//автоподдержка
r(/\|место *= *\{\{[Мм]\.?\}\}/g, '|место = М.');//автоподдержка
r(/\|место *= *\{\{Мн\.?\}\}/g, '|место = Мн.');//автоподдержка
r(/\|место *= *\{\{Пг\.?\}\}/g, '|место = Пг.');//автоподдержка
r(/\|место *= *\{\{СПб\.?\}\}/g, '|место = СПб.');//автоподдержка
r(/\n *\| *карта страны *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
r(/\n *\| *карта региона *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
r(/\n *\| *карта района *= *<!-- альтернативная, но с такими же координатами краёв -->/g, '');
// протекает в → протекает по
r(/протекает в ([А-Яа-яЁё]*)кой области/g, 'протекает по [[$1кая область|$1кой области]]');
r(/протекает в (\[\[(Республика[А-Яа-яё ]*|[А-Яа-яё ]*область)\|[А-Яа-яЁё ]*\]\])/g, 'протекает по $1');
r(/(протекает )в( \[\[.*?[сц]ком)(\]\][ ,и]*\[\[.*?[сц]ком)(\]\][ ,и]*\[\[.*?[сц]ком)(?:\]\]){0,1}(.*?йона)х(\]\]){0,1}/g, '$1по$2у$3у$4у]]$5м');
r(/(протекает )в( \[\[.*?[сц]ком)(\]\][ ,и]*\[\[.*?[сц]ком)(?:\]\]){0,1}(.*?йона)х(\]\]){0,1}/g, '$1по$2у$3у]]$4м');
r(/(протекает )в( \[\[.*?[сц]ком)(\]\]){0,1}(.*?йон)е(\]\]){0,1}/g, '$1по$2у$4у]]');
r(/(протекает по.*?йону\]\] )([А-Яа-яё]*?)(кой области)/g, '$1[[$2кая область|$2$3]]');
r(/(протекает по.*?йону\]\] )([А-Яа-яё]*?)(кого края)/g, '$1[[$2кий край|$2$3]]');
r(/(протекает по.*?йону\]\] )(Республики )([А-Яа-яё]*?)/g, '$1[[Республика $3|$2$3]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в Республике (Алтай|Хакасия)/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам [[Республика $11|Республики $11]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в Республике (Алтай|Хакасия)/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам [[Республика $8|Республики $8]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает в Республике (Алтай|Хакасия)/g, '$1протекает по [[$2$3|$2$4кому району]] [[Республика $5|Республики $5]]');
r(/протекает в Республике (Алтай|Хакасия)/g, 'протекает по [[Республика $1|Республике $1]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в ([А-Яа-яё]+)ском крае/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам [[$11ский край|$11ского края]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает в ([А-Яа-яё]+)ском крае/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам [[$8ский край|$8ского края]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает в ([А-Яа-яё]+)ском крае/g, '$1протекает по [[$2$3|$2$4кому району]] [[$5ский край|$5ского края]]');
r(/протекает в ([А-Яа-яё]+)ском крае/g, 'протекает по [[$1ский край|$1скому краю]]');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[[А-Яа-яё]+ская область)/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам $11');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[[А-Яа-яё]+ская область)/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам $8');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает по (\[\[[А-Яа-яё]+ская область)/g, '$1протекает по [[$2$3|$2$4кому району]] $5');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[Ханты-Мансийский автономный округ — Югра\|Ханты-Мансийск)ому/g, '$1протекает по [[$2$3|$2$4кому]], [[$5$6|$5$7кому]] и [[$8$9|$8$10кому]] районам $11ого');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий район[^\/]*?)\/([А-Яа-яё-]+?)(([сц])кий [^\n]*)[^]*?)протекает по (\[\[Ханты-Мансийский автономный округ — Югра\|Ханты-Мансийск)ому/g, '$1протекает по [[$2$3|$2$4кому]] и [[$5$6|$5$7кому]] районам $8ого');
r(/(\|Район *= ([А-Яа-яё-]+?)(([сц])кий [^\/\n]*)[^]*?)протекает по (\[\[Ханты-Мансийский автономный округ — Югра\|Ханты-Мансийск)ому/g, '$1протекает по [[$2$3|$2$4кому району]] $5ого');
//автозапрос АИ для раздела
if (txt.indexOf('{{нет ссылок\|') === -1 && txt.indexOf('{{нет сносок}}') === -1) {
// r(/\}\}\n\'\'\'/g, '}}\n== Преамбула ==\n\'\'\'');
r(/ ([^=]+?) (==)\n([^@]+?)(\n==|$)/g, function ( line, name_part, tab, text_part, last_tab )
{
if ( name_part.indexOf('Притоки') !== -1 || name_part.indexOf('Бассейн') !== -1 || name_part.indexOf('Ссылки') !== -1 || name_part.indexOf('Литература') !== -1 || name_part.indexOf('Дополнительная литература') !== -1 || name_part.indexOf('См. также') !== -1 || name_part.indexOf('Примечания') !== -1 || name_part.indexOf('Комментарии') !== -1 || name_part.indexOf('Источники') !== -1 || name_part.indexOf('Топографические карты') !== -1 || name_part.indexOf('Галерея') !== -1 || name_part.indexOf('Фотографии') !== -1 || name_part.indexOf('Библиография') !== -1 || name_part.indexOf('Географическое положение') !== -1) { return line; }//сбросить
if ( text_part.indexOf('ref') !== -1 || text_part.indexOf('sfn') !== -1 || text_part.indexOf('нет ссылок в разделе') !== -1 || text_part.indexOf('подст:нет источников в разделе') !== -1 || text_part.indexOf('нет АИ') !== -1 ) { return line; }//сбросить
if ( text_part.length < 300 ) { return line; }//сбросить
if (confirm('Запросить АИ для раздела «' + name_part + '»?')) {
return ' ' + name_part + ' ' + tab + '\n{{' + 'подст:нет источников в разделе' + '}}\n' + text_part + last_tab;
} else { return line; }
});
// r(/== Преамбула ==\n/g, '');
}
//чистка шаблонов-перенаправлений
if (typeof no_replace_template === 'undefined') {//персональное отключение
if (typeof source_code_edit_article === 'undefined') {//исходный html-код страницы редактирования
source_code_edit_article = request( 'https://ru.wikipedia.org/w/index.php?action=edit&title=' + mw.config.get('wgPageName') ).toLowerCase();
}
r(/{{([^\|\}\n]+)/g, function ( line, template ) {
if ( template == 'iw' || template == 'ГКГН' || template == 'ГЕУ' || template == 'СНГОСНГ' || template == 'ИПТ' || template == 'ССГН' ) {
return '{{' + template;//пропускать эти шаблоны-перенаправления
}
if ( source_code_edit_article.indexOf('class="mw-redirect" title="шаблон:' + template.toLowerCase() + '"') > -1 ) {
xml = request( 'https://ru.wikipedia.org/w/api.php?action=query&format=xml&prop=info&redirects=1&titles=Шаблон%3A' + template );
if (xml.indexOf('redirects') > -1) {
var template_new = xml.match(/title=\"Шаблон\:([^\"]+)\"/)[1];
if (template_new.length < 21 || template_new.length/2 < template.length) {//заменить если превышает не более чем вдвое или меньшей длины чем средний шаблон по ВО
if (template[0].toLowerCase() == template[0]) {//установить исходный регистр
template_new = template_new.substring(0, 1).toLowerCase() + template_new.substring(1);
}
template = template_new;
}
}
}
return '{{' + template;
});
}
r(/{{[Нн]е *переведено *[2345]? *\|/g, '{{iw|');
//чистка ссылок-перенаправлений
if (typeof no_replace_article === 'undefined') {//персональное отключение
if (typeof source_code_visual_article === 'undefined') {//исходный html-код страницы просмотра
source_code_visual_article = request( 'https://ru.wikipedia.org/wiki/' + mw.config.get('wgPageName') ).toLowerCase();
}
r(/\[\[([^\|\]\:]+)([\|\]])/g, function ( line, article, stop ) {//«:» от категорий
var line_find = 'class="mw-redirect" title="' + article.toLowerCase() + '"';
if (source_code_visual_article.indexOf(line_find) > -1) {
xml = request( 'https://ru.wikipedia.org/w/api.php?format=xml&action=query&prop=info&redirects=1&titles=' + article );
if (xml.indexOf('redirects') > -1 && xml.indexOf('tofragment') == -1 ) {
article_new = xml.match(/title=\"([^\"]+)\"/)[1];
if (article.toLowerCase() == article) {//установить исходный регистр
article_new = article_new.substring(0, 1).toLowerCase() + article_new.substring(1);
}
var article = (stop == '|') ? article_new : article_new + '|' + article;
}
}
return '[[' + article + stop;
});
}
r(/[^\(]\[\[\:([A-z][A-z])\:(.*?)\|(.*?)\]\]/g, ' \{\{iw|$3<!-- Заголовок статьи подставлен автоматически! Пожалуйста, проверьте корректность и удалите сообщение! -->|$3|$1|$2}}');
//r(/–/g, '-');//замена среднего тире
r(/{{[Пп]римечания\|2}}/g, '{{примечания}}');//параметр отключён
r(/\{\{Sfn/g, '{{sfn');//регистр
r(/([А-яЁё])·([А-яЁё])/g, '$1⋅$2');//замена интерпункта
r(//g, '');//удаление символа переноса в словах
r(/‐/g, '-');//замена настоящего дефиса
r(/ /g, ' ');//замена табуляций
r(/(\s[А-яЁё\-]+)\.\.\./g, '$1…');//замена троеточий
r(/(?<!=) *\< *ref/g, '<ref');//лишние пробелы
r(/\s*\< *\/ *ref *\>/g, '</ref>');//лишние пробелы
r(/\}\}.\<\/ref\>/g, '}}</ref>');//лишние символы
r(/°\s[CС]([\s\.\,])/g, '°C$1');//лишние пробелы и кирлат
r(/ ([\:\;\.\,])/g, '$1');//лишние пробелы перед знаками пунктуации
r(/\| *Исток *= *-([^ ])/g, '|Исток = - $1');//пробел после отключения автовикификации
r(/\sстр\.([0-9])/g, ' стр. $1');//добавление пробелов
r(/\sс\.([0-9])/g, ' с. $1');//добавление пробелов
r(/\sт\.([0-9])/g, ' т. $1');//добавление пробелов
r(/\sвып\.([0-9])/g, ' вып. $1');//добавление пробелов
r(/\sВып\.([0-9])/g, ' Вып. $1');//добавление пробелов
r(/\sмлн\.([а-яё])/g, ' млн $1');//добавление пробелов
r(/\sтыс\.([а-яё])/g, ' тыс. $1');//добавление пробелов
r(/Оз\.Карелии/g, 'Озёра Карелии');//добавление пробелов
r(/ ([А-яЁё])\.([А-ЯЁ][а-яё][а-яё])/g, ' $1. $2');//добавление пробелов
r(/\<!-- *DASHBot *--\>/g, '');//всегда удалять
r(/\<!-- *в км² *--\>/g, '');//всегда удалять
r(/\<!-- *в км *--\>/g, '');//всегда удалять
r(/\<!-- *в м *--\>/g, '');//всегда удалять
r(/\n *\| *region.+\n/g, '\n');//всегда удалять, осталось Физгео
r(/\/сек([^у])/g, '/с$1');//стиль
//латкир
//r(/(([^ກ])a([а-яёўґєіїj][а-яёўґєіїj])|([А-яЁёІЎіўҐЄІЇґєії])a([а-яёўґєіїj])|([А-яЁёІЎіўҐЄІЇґєії][а-яёўґєіїj])a([^ກ]))/g, '$2$4$6a$3$5$7');//дотестировать!!!
r(/(\s)A([а-яё][а-яё])/g, '$1А$2');
r(/(\s)a([а-яё][а-яё])/g, '$1а$2');
r(/(\s)B([а-яё][а-яё])/g, '$1В$2');
r(/(\s)C([а-яё][а-яё])/g, '$1С$2');
r(/(\s)c([а-яё][а-яё])/g, '$1с$2');
r(/(\s)E([а-яё][а-яё])/g, '$1Е$2');
r(/(\s)e([а-яё][а-яё])/g, '$1е$2');
r(/(\s)H([а-яё][а-яё])/g, '$1Н$2');
r(/(\s)I([а-яё][а-яё])/g, '$1І$2');
r(/(\s)i([а-яё][а-яё])/g, '$1і$2');
r(/(\s)K([а-яё][а-яё])/g, '$1К$2');
r(/(\s)k([а-яё][а-яё])/g, '$1к$2');
r(/(\s)M([а-яё][а-яё])/g, '$1М$2');
r(/(\s)O([а-яё][а-яё])/g, '$1О$2');
r(/(\s)o([а-яё][а-яё])/g, '$1о$2');
r(/(\s)p([а-яё][а-яё])/g, '$1р$2');
r(/(\s)T([а-яё][а-яё])/g, '$1Т$2');
r(/(\s)X([а-яё][а-яё])/g, '$1Х$2');
r(/(\s)x([а-яё][а-яё])/g, '$1х$2');
r(/(\s)J([а-яё][а-яё])/g, '$1Ј$2');
r(/(\s)j([а-яё][а-яё])/g, '$1ј$2');
r(/(\s)Ë([а-яё][а-яё])/g, '$1Ё$2');
r(/(\s)ë([а-яё][а-яё])/g, '$1ё$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])a([А-яЁёІЎіўҐЄІЇґєії])/g, '$1а$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])c([А-яЁёІЎіўҐЄІЇґєії])/g, '$1с$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])e([А-яЁёІЎіўҐЄІЇґєії])/g, '$1е$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])i([А-яЁёІЎіўҐЄІЇґєії])/g, '$1і$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])j([А-яЁёІЎіўҐЄІЇґєії])/g, '$1ј$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])k([А-яЁёІЎіўҐЄІЇґєії])/g, '$1к$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])o([А-яЁёІЎіўҐЄІЇґєії])/g, '$1о$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])x([А-яЁёІЎіўҐЄІЇґєії])/g, '$1х$2');
r(/([А-яЁёІЎіўҐЄІЇґєії])ë([А-яЁёІЎіўҐЄІЇґєії])/g, '$1ё$2');
//кирлат
r(/(\s)А([a-z][a-z])/g, '$1A$2');
r(/(\s)а([a-z][a-z])/g, '$1a$2');
r(/(\s)В([a-z][a-z])/g, '$1B$2');
r(/(\s)Е([a-z][a-z])/g, '$1E$2');
r(/(\s)е([a-z][a-z])/g, '$1e$2');
r(/(\s)К([a-z][a-z])/g, '$1K$2');
r(/(\s)М([a-z][a-z])/g, '$1M$2');
r(/(\s)Н([a-z][a-z])/g, '$1H$2');
r(/(\s)О([a-z][a-z])/g, '$1O$2');
r(/(\s)о([a-z][a-z])/g, '$1o$2');
r(/(\s)Р([a-z][a-z])/g, '$1P$2');
r(/(\s)р([a-z][a-z])/g, '$1p$2');
r(/(\s)С([a-z][a-z])/g, '$1C$2');
r(/(\s)с([a-z][a-z])/g, '$1c$2');
r(/(\s)Т([a-z][a-z])/g, '$1T$2');
r(/(\s)Х([a-z][a-z])/g, '$1X$2');
r(/(\s)х([a-z][a-z])/g, '$1x$2');
r(/\[(\/\/[a-z][a-z]\.wikipedia\.org)/g, '[https:$1');
//упаковка ссылок в шаблон Книга
r(/{{[Кк]нига([^\}]+?)}} *{{[Ww]ayback *\| *url *= *([^\|\}]+?) *\| *date *= *([\d]+?) *}}/g, function ( line, params, url, datetime ) {
params = params.replace(/\| *ссылка *= *[^\|\}\s]+/g, '|ссылка = https://web.archive.org/web/' + datetime + '/' + url);
return '{{книга' + params + '}}';
});
//форматирование шаблона Книга
r(/{{[Кк]нига[^\:][^\}]+?({{|}})/g, function ( line ) {
line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже
//до исправления
line = line.replace(/\|Страниц *=/g, '|страниц =');//косяк по Крыму
line = line.replace(/\|заглавие *= *Реки и Оз[её]ра Крыма\.?/g, '|заглавие = Реки и озёра Крыма');//косяк по Крыму
line = line.replace(/\|место *= *Симферополь\./g, '|место = Симферополь');//косяк по Крыму
line = line.replace(/\|место *= *\[\[(.+?)\]\]\./g, '|место = $1');//лишняя викификация
line = line.replace(/\|(isbn2|nodot|ref|викитека|оригинал|серия|столбцы|том|часть) *= *([\n\|\}])/g, '$2');//убрать пустые
line = line.replace(/\|место *= *Спб\.?/g, '|место = СПб.');//автоподдержка
line = line.replace(/\|место = Л([^А-яЁёі\.])/g, '|место = Л.$1');//добавить точку
line = line.replace(/\|место = М([^А-яЁёі\.])/g, '|место = М.$1');//добавить точку
//замена значений параметров
line = line.replace(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2');//неразрывный пробел в инициалах
line = line.replace(/\|автор *=\s*([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор = $2 $1');//инициалы в конец, 1-й автор
for (var i = 0; i < 15; i++) {
line = line.replace(/\|автор *=([^\|\}]+?)\s([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор =$1 $3 $2');
}
//вставить недостающие параметры
if (line.indexOf('|язык =') == -1) {
line = line.replace(/\|заглавие/g, '|язык = |заглавие');
}
line = line.replace(/\|язык *= *(mis|und|[А-яЁё])?/g, '|язык = ');//вычистка кода отсутствия языка и ложного заполнения
var label = line.match(/\|заглавие *= *([^\|\n\}]+)/);
if (label !== null && label[1].trim() !== '') {
if (line.replace(/\|язык *= *[\|\}\n]/g, '') != line) {
label = label[1].trim();
var label_r = label.replace(/[,\:\;\!\?\"\'«»\&…%\s\-\–\—\.\(\)\{\}\[\]\|0-9IVX]/g, '');//убрать пунктуацию и цифры
if (label_r.replace(/[A-Za-z]/g, '') === '') {
if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить английский?')) {
line = line.replace(/(\|язык *= *)/g, '$1en ');
}
}
else if (label_r.replace(/[A-ZÄÖẞÜa-zäößü]/g, '') === '') {
if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить немецкий?')) {
line = line.replace(/(\|язык *= *)/g, '$1de ');
}
}
else if (label_r.replace(/[A-ZÁÉÍÑÓÚÜa-záéíñóúü¿]/g, '') === '') {
if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить испанский?')) {
line = line.replace(/(\|язык *= *)/g, '$1es ');
}
}
else if (label_r.replace(/[А-яЁё№]/g, '') === '') {
if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить русский?')) {
line = line.replace(/(\|язык *= *)/g, '$1ru ');
}
}
else if (label_r.replace(/[А-ЩЬЮЯҐЄІЇа-щьюяґєії№]/g, '') === '') {
if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить украинский?')) {
line = line.replace(/(\|язык *= *)/g, '$1uk ');
}
}
else if (label_r.replace(/[А-ЗК-ШЫ-ЯЁІЎа-зк-шы-яёіў№]/g, '') === '') {
if (confirm('В статье обнаружена книга без указанного языка: ' + label + '. Добавить белорусский?')) {
line = line.replace(/(\|язык *= *)/g, '$1be ');
}
}
}
}
//раскрыть
if (line.replace(/\{\{книга *\n *\|/g, '') != line)
{
line = line.replace(/ *(\|.*?=) */g, '\n $1 ');
line = line.replace(/\n *\n/g, '\n');
line = line.replace(/\n *\n/g, '\n');
}
//подчистить
//декодирование ссылок
if ( ( line.indexOf( '%D' ) !== -1 || line.indexOf( '%d' ) !== -1 ) && line.indexOf( '%25' ) === -1 ) {
if (confirm('Раскодировать ссылки в шаблоне Книга? ' + line))
{
url = line.match(/\|ссылка *= *([^ \n\|\}]+)/);
try {
url_decode = decodeURI( url[1] );
url_decode = url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
url_decode = url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать
line = line.replace(url[1], url_decode);
} catch ( e ) { }
}
}
return line;
});
//форматирование шаблона УСЭ
r(/{{УСЭ[^\}]+?}}/g, function ( line ) {
line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже
line = line.replace(/\|Статья *=/g, '|статья =');
line = line.replace(/\|Ссылка *=/g, '|ссылка =');
line = line.replace(/\|Том *=/g, '|том =');
line = line.replace(/\|Страницы *=/g, '|страницы =');
return line;
});
//форматирование шаблона Статья
r(/{{[Сс]татья[^\}]+?}}/g, function ( line ) {
line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже
line = line.replace(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2');//неразрывный пробел в инициалах
line = line.replace(/\|автор *=\s*([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор = $2 $1');//инициалы в конец, 1-й автор
for (var i = 0; i < 15; i++) {
line = line.replace(/\|автор *=([^\|\}]+?)\s([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|автор =$1 $3 $2');
}
//декодирование ссылок
if ( ( line.indexOf( '%D' ) !== -1 || line.indexOf( '%d' ) !== -1 ) && line.indexOf( '%25' ) === -1 ) {
if (confirm('Раскодировать ссылки в шаблоне Статья? ' + line))
{
url = line.match(/\|ссылка *= *([^ \n\|\}]+)/);
try {
url_decode = decodeURI( url[1] );
url_decode = url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
url_decode = url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать
line = line.replace(url[1], url_decode);
} catch ( e ) { }
}
}
return line;
});
//упаковка ссылок в шаблон Cite book
r(/{{[Cc]ite book([^\}]+?)}} *{{[Ww]ayback *\| *url *= *([^\|\}]+?) *\| *date *= *([\d]+?) *}}/g, function ( line, params, url, datetime ) {
params = params.replace(/\| *url *= *[^\|\}\s]+/g, '|url = https://web.archive.org/web/' + datetime + '/' + url);
return '{{cite book' + params + '}}';
});
//замена ссылок в шаблоне Cite book
r(/{{[Cc]ite book[^\}]+?\| *archiveurl *= *([^\|\}\s]+)[^\}]+?}}/g, function ( line, archiveurl ) {
line = line.replace(/\| *url *= *[^\|\}\s]+/g, '|url = ' + archiveurl);
line = line.replace(/\| *archiveurl *= *[^\|\}\s]+/g, '');
line = line.replace(/\| *archivedate *= *[^\|\}\s]+/g, '');
line = line.replace(/\| *deadlink *= *[^\|\}\s]+/g, '');
return line;
});
//распил архивных ссылок в Cite web
r(/{{[Cc]ite web[^\}]+?\| *url *= *(http(s)?:\/\/web\.archive\.org\/web\/([\d][\d][\d][\d])([\d][\d])([\d][\d])[\d]+\/(http(s)?:[^ \|\}]+))[^\}]*?}}/g, function ( line, archive_url, und0, year, month, day, url ) {
line = line.replace(/\| *deadlink *= *no/g, '|deadlink = yes');
line = line.replace(/\| *website *= *web\.archive\.org/g, '|website = ');
line = line.replace(/\| *publisher *= *web\.archive\.org/g, '|publisher = ');
line = line.replace(/\| *url *=/g, '|url = ' + url + ' |archive-date = ' + year + '-' + month + '-' + day + ' |archive-url = ');
if (line.indexOf('deadlink') == -1)
{
line = line.replace(/}}/g, '|deadlink = yes}}');
};
return line;
});
//форматирование шаблона Cite web
r(/{{[Cc]ite web[^\}]+?}}/g, function ( line ) {
line = line.replace(/\|[\s]+/g, '|');//для упрощения регулярок ниже
line = line.replace(/([А-ЯЁ]\.)([А-ЯЁ]\.)/g, '$1 $2');//неразрывный пробел в инициалах
line = line.replace(/\|author *=\s*([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|author = $2 $1');//инициалы в конец, 1-й автор
for (var i = 0; i < 15; i++) {
line = line.replace(/\|author *=([^\|\}]+?)\s([А-ЯЁ]\.\s[А-ЯЁ]\.)\s([А-ЯЁ][а-яё]+)/g, '|author =$1 $3 $2');
}
line = line.replace(/\|authorlink *= *([\n\|\}])/g, '$1');//убрать пустые authorlink
line = line.replace(/\|coauthors *= *([\n\|\}])/g, '$1');//убрать пустые coauthors
line = line.replace(/\|format *= *([\n\|\}])/g, '$1');//убрать пустые format
line = line.replace(/\|title *= *(Архивированная копия|Archived copy|Wayback Machine|\{title\})/g, '|title =');//убрать пустые title
line = line.replace(/\|website *= *http(s)?\:\/\/([^\/ \|\}]+)[^\|\} ]*/g, '|website = $2');//убрать лишние ссылки
line = line.replace(/\|url\-status *= *live/g, '|deadlink = no');//нет в ru.wiki
line = line.replace(/\|url\-status *= *dead/g, '|deadlink = yes');//нет в ru.wiki
line = line.replace(/\|url\-status *= *unfit/g, '|deadlink = yes');//нет в ru.wiki
line = line.replace(/\|url\-status *= *usurped/g, '|deadlink = yes');//нет в ru.wiki
line = line.replace(/\|accessdate/g, '|access-date');
line = line.replace(/\|archiveurl/g, '|archive-url');
line = line.replace(/\|archivedate/g, '|archive-date');
line = line.replace(/\|date *= *[Jj]anuary\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-01-$1');
line = line.replace(/\|date *= *[Ff]ebruary\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-02-$1');
line = line.replace(/\|date *= *[Mm]arch\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-03-$1');
line = line.replace(/\|date *= *[Aa]pril\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-04-$1');
line = line.replace(/\|date *= *[Mm]ay\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-05-$1');
line = line.replace(/\|date *= *[Jj]une\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-06-$1');
line = line.replace(/\|date *= *[Jj]uly\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-07-$1');
line = line.replace(/\|date *= *[Aa]ugust\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-08-$1');
line = line.replace(/\|date *= *[Ss]eptember\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-09-$1');
line = line.replace(/\|date *= *[Oo]ctober\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-10-$1');
line = line.replace(/\|date *= *[Nn]ovember\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-11-$1');
line = line.replace(/\|date *= *[Dd]ecember\s([\d]+),\s([\d][\d][\d][\d])/g, '|date = $2-12-$1');
//вставить недостающие параметры
if ( line.indexOf( '|author' ) === -1 ) {
line = line.replace(/({{[Cc]ite web *)/g, '$1|author = ');
}
if ( line.indexOf( '|lang' ) === -1 ) {
line = line.replace(/(\|author *=[^\n\|\}]*)([\n\|\}])/g, '$1|lang = $2');
}
line = line.replace(/(\|author *= \[\[[^\|]*)(\|lang = [a-z]* *)/g, '$2$1'); //поправка на случай викифицированного автора
if ( line.indexOf( '|deadlink' ) === -1 ) {
line = line.replace(/(\|url *=[^\n\|\}]*)([\n\|\}])/g, '$1|deadlink = no $2');
}
if ( line.indexOf( '|archive-url' ) === -1 ) {
line = line.replace(/(\|deadlink *=[^\n\|\}]*)([\n\|\}])/g, '$1|archive-url = $2');
}
if ( line.indexOf( '|archive-date' ) === -1 ) {
line = line.replace(/(\|archive-url *=[^\n\|\}]*)([\n\|\}])/g, '$1|archive-date = $2');
}
var label = line.match(/\|title *= *([^\|\n\}]+)/);
if (label !== null && label[1].trim() !== '') {
if (line.replace(/\|lang *= *[\|\}\n]/g, '') != line) {
label = label[1].trim();
var label_r = label.replace(/[,\:\;\!\?\"\'«»\&…%\s\-\–\—\.\(\)\{\}\[\]\|0-9IVX]/g, '');//убрать пунктуацию и цифры
if (label_r.replace(/[A-Za-z]/g, '') === '') {
if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить английский?')) {
line = line.replace(/(\|lang *= *)/g, '$1en ');
}
}
else if (label_r.replace(/[A-ZÄÖẞÜa-zäößü]/g, '') === '') {
if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить немецкий?')) {
line = line.replace(/(\|lang *= *)/g, '$1de ');
}
}
else if (label_r.replace(/[A-ZÁÉÍÑÓÚÜa-záéíñóúü¿]/g, '') === '') {
if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить испанский?')) {
line = line.replace(/(\|lang *= *)/g, '$1es ');
}
}
else if (label_r.replace(/[А-яЁё№]/g, '') === '') {
if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить русский?')) {
line = line.replace(/(\|lang *= *)/g, '$1ru ');
}
}
else if (label_r.replace(/[А-ЩЬЮЯҐЄІЇа-щьюяґєії№]/g, '') === '') {
if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить украинский?')) {
line = line.replace(/(\|lang *= *)/g, '$1uk ');
}
}
else if (label_r.replace(/[А-ЗК-ШЫ-ЯЁІЎа-зк-шы-яёіў№]/g, '') === '') {
if (confirm('В статье обнаружена веб-ссылка без указанного языка: ' + label + '. Добавить белорусский?')) {
line = line.replace(/(\|lang *= *)/g, '$1be ');
}
}
}
}
//декодирование ссылок
if ( ( line.indexOf( '%D' ) !== -1 || line.indexOf( '%d' ) !== -1 ) && line.indexOf( '%25' ) === -1 ) {
if (confirm('Раскодировать ссылки в шаблоне Cite web? ' + line))
{
archive_url = line.match(/\|archive-url *= *([^ \n\|\}]+)/);
try {
archive_url_decode = decodeURI( archive_url[1] );
archive_url_decode = archive_url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
archive_url_decode = archive_url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать
line = line.replace(archive_url[1], archive_url_decode);
} catch ( e ) { }
url = line.match(/\|url *= *([^ \n\|\}]+)/);
try {
url_decode = decodeURI( url[1] );
url_decode = url_decode.replace( /%(3B|2F|2C|3A)/g, decodeURIComponent ); // декодировать ;/,:
url_decode = url_decode.replace( /[ <>"\[\]\n\r]/g, encodeURIComponent ); // закодировать
line = line.replace(url[1], url_decode);
} catch ( e ) { }
}
}
//подгон формата даты и чистка
line = line.replace(/\|(access-date|date) *= *([0-9][0-9][0-9][0-9])\-([0-9])\-/g, '|$1 = $2-0$3-');
line = line.replace(/\|(access-date|date) *= *([0-9][0-9][0-9][0-9]\-[0-9][0-9])\-([0-9])([^0-9])/g, '|$1 = $2-0$3$4');
line = line.replace(/\|archive-date *= *([0-9][0-9][0-9][0-9])([0-9][0-9])([0-9][0-9])[0-9]+/g, '|archive-date = $1-$2-$3 ');
line = line.replace(/\|(access-date|archive-date|date) *= *([0-9][0-9][0-9][0-9])\.([0-9][0-9])\./g, '|$1 = $2-$3-');
//раскрыть
if (line.replace(/\{\{cite web *\n *\|/g, '') != line)
{
line = line.replace(/ *(\|.*?=) */g, '\n $1 ');
line = line.replace(/\n *\n/g, '\n');
line = line.replace(/\n *\n/g, '\n');
}
return line;
});
//оформление ГВР
if ((txt.replace(/{{ГВР\|\d{23}/g, '') === txt)) {//код ГВР не используется
if (txt.split('{{ГВР|').length-1 === 1) {//шаблон ГВР только один
if (txt.replace(/\d{23}/g, '') !== txt) {//код ГВР указан в тексте
var code = txt.match(/(\d{23})/);
r(/\>\{\{ГВР\|\d+\|/g, '>{{ГВР|' + code[1] + '|');
}
else if (typeof source_code_visual_article !== 'undefined') {//есть исходный код страницы
if (source_code_visual_article.replace(/\d{23}/g, '') !== source_code_visual_article) {//код ГВР указан в исходнике
var code = source_code_visual_article.match(/(\d{23})/);
r(/\>\{\{ГВР\|\d+\|/g, '>{{ГВР|' + code[1] + '|');
}
}
}
}
//оформление шаблоном ссылки на файл с озёрами Псковской области, осталось в АТЕ
r(/\>[^<]*?priroda\.pskov\.ru\/sites\/default\/files\/Fond_vodoemov\.xls[^<]*?\</g, '>{{ФВПО}}<');
//фикс
r(/\n *\| *Страна *= *(КНР|Китайская Народная Республика)/g, '\n |Страна = Китай');
//загрузчик
function request( URL )
{
var oRequest = new XMLHttpRequest();
oRequest.open('GET', URL, false);
oRequest.send(null);
return oRequest.responseText;
}
});