Участник:Radmir Far/kirlat.js
Перейти к навигации
Перейти к поиску
/*
Дополнение для Викификатора. Исправляет кирлат и греккир (смесь кириллицы и латиницы/греческого алфавита).
Обратите внимание, что замены производятся до сокрытия шаблонов.
NB. При использовании скрипта всегда проверяйте результат, так как в некоторых случаях могут быть ошибочные исправления (например, МакSим или Духless)
При обработке больших объёмов текста скрипт может выполняться медленно.
См. документацию на СО скрипта.
Подключение: importScript('У:Radmir_Far/kirlat.js');
*/
( function () {
var alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯӨҮӘІЇҐҠӦӒЈҪӔӐӖҢҘҺҖҒҤЎҚҲҔӰӀЃЂЋЉЊЏЌӢӮҶҰҜҸ";
var lat = 'lABEËKMHOPCTXḰSƟYƏIÖÄJÇÆÏĂĔFŸΑΒΓΕΚΜΗΟΠΡϹΤΦΧΥΙuaeëopcyxshkθɵəǝiïöäjçæăĕěÿʙκοϲτγϊ';
var cyr = 'ӀАВЕЁКМНОРСТХЌЅӨҮӘІӦӒЈҪӔЇӐӖҒӰАВГЕКМНОПРСТФХҮІиаеёорсухѕһҡөөәәіїӧӓјҫӕӑӗӗӱвкостүї';
var lat_acut = 'ÁÉÓǼáéóýúǽό';
var cyr_acut = 'АЕОӔаеоуиӕо';
var lat_gravis = 'ÀÈÒàèòỳù';
var cyr_gravis = 'АЕОаеоуи';
var lat_macron = 'ĀŌǢāōȳǣ';
var cyr_macron = 'АОӔаоуӕ';
var i = 0;
window.wfPluginsT = window.wfPluginsT || [];
window.wfPluginsT.push(function (txt, r) {
replace_cyrlat(txt, r, lat, cyr, '');
/*TODO: ударения и макрон можно исправлять без цикла по буквам*/
replace_cyrlat(txt, r, lat_acut, cyr_acut, 'acut');
replace_cyrlat(txt, r, lat_gravis, cyr_gravis, 'gravis');
replace_cyrlat(txt, r, lat_macron, cyr_macron, 'macron');
other_replaces(txt, r);
});
function replace_cyrlat(txt, r, lat, cyr, type){
ending = '';
if (type == 'acut'){
ending = '́';
}
else if (type == 'gravis'){
ending = '̀';
}
else if (type == 'macron'){
ending = '̄';
}
for (var ch of lat){
for (var al of alphabet){
var regex = new RegExp(ch + '(' + al + '|' + al.toLowerCase() + ')','g');
r(regex, cyr[i] + ending + '$1');
regex = new RegExp('(' + al + '|' + al.toLowerCase() + ')' + ch,'g');
r(regex, '$1' + cyr[i] + ending);
}
i++;
}
i = 0;
}
function other_replaces(txt, r) {
/* [[Википедия:Запросы_к_ботоводам#Кирлат_и_витамины]] */
r(/(В|в)итамин(.*) В/g, '$1итамин$2 B');
r(/(В|в)итамин(.*) С/g, '$1итамин$2 C');
}
}() );