Участник:Grenadine/yat.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.
//Конвертер из дореформенной в современную орфографию.
//Часть кода позаимствована из http://ru.wikipedia.org/wiki/MediaWiki:Wikificator.js
//Часть кода позаимствована из http://ru.wiktionary.org/wiki/Участник:X-romix/wikifikator.js
//**********************************************  βeta version  ************************************

var wmCantWork = 'Deyatеficator cannot work in your browser'
var wmFullText = 'Deyatеficator will process ALL text on this page. Continue?'
var wmTalkPage = 'Деятефикатор не обрабатывает обсуждения\n\nDeyatеficator doesn\'t work on discussion pages'
 
//Добавляет кнопку
function addYatButton(){
	var toolbar = document.getElementById('toolbar')
	var textbox = document.getElementById('wpTextbox1')
	if (!textbox || !toolbar) return
	var i = document.createElement('img')
	i.src = 'http://upload.wikimedia.org/wikipedia/commons/f/fd/OldToNewRussianOrthographyConversionIcon.png'
	i.alt = i.title = 'Деятефикатор'
	i.onclick = Yat
	i.style.cursor = 'pointer'
	toolbar.appendChild(i)
 
} 
 
//Этот код выполняется в начале.
if (wgAction == 'edit' || wgAction == 'submit'){
  addOnloadHook(addYatButton)
}
 
 
//Функция для оформления таблицы
function Yat(){
 if (('code'.replace(/d/g, 'r') != 'core') //check regexp support
    || (navigator.appName=='Netscape' && navigator.appVersion.substr (0, 1) < 5))
  { alert(wmCantWork); return }
 
 var txt, hidden = [], hidIdx = 0, wpTextbox1 = document.editform.wpTextbox1
 var winScroll = document.documentElement.scrollTop //remember window scroll
 wpTextbox1.focus()
 
 if (typeof wpTextbox1.selectionStart != 'undefined' 
    && (navigator.productSub > 20031000 || navigator.appName == 'Opera' || is_safari)) { //Mozilla/Opera/Safari3
    var textScroll = wpTextbox1.scrollTop
    var startPos = wpTextbox1.selectionStart
    var endPos = wpTextbox1.selectionEnd
    txt = wpTextbox1.value.substring(startPos, endPos)
    if (txt == '') processAllText()
    else{
      processText()
      wpTextbox1.value = wpTextbox1.value.substring(0, startPos) + txt + wpTextbox1.value.substring(endPos)
    }
    wpTextbox1.selectionStart = startPos
    wpTextbox1.selectionEnd = startPos + txt.length
    wpTextbox1.scrollTop = textScroll
 
 }else if (document.selection && document.selection.createRange) { //IE
   var range = document.selection.createRange()
   txt = range.text
   if (txt == '') processAllText()
   else{
     processText()
     range.text = txt
     //if (!window.opera) txt = txt.replace(/\r/g,'')
     if (range.moveStart) range.moveStart('character', - txt.length)
     range.select() 
   }
 
 }else // other browsers
   if (confirm(wmFullText)) processAllText()
 
 document.documentElement.scrollTop = winScroll // scroll back, for IE/Opera
 
 
//functions
 
function processAllText(){
 txt = '\n' + wpTextbox1.value
 processText()
 txt = txt.replace(/^[\n\r]+/, '')
 wpTextbox1.value = txt
 txt = ''
 if (window.auto_comment && window.insertSummary) insertSummary('деятефикатор')
}
 
 
 
function processText(){
 
var u = '\u00A0' //unbreakable space
if (wgNamespaceNumber % 2 || wgNamespaceNumber==4) { //is talk page
 u = ' '
 var sigs = txt.match(/\d\d:\d\d, \d\d? \S{3,8} 20\d\d \(UTC\)/g)
 if (sigs && sigs.length > 1) {
   alert(wmTalkPage); return
 }
}
 


	  txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)нѣ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ни$3');
//          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])ія([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1ие$2'); // Россiя, Исторiя ???? not work Примечанiя --> Примечания
          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])ыя([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1ые$2'); // ?
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(В|в)се([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2сё$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Н|н)ея([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2её$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Е|е)я([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ё$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Н|н)а-дняхъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2а днях$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Т|т)о-есть([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2о есть$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(М|м)ожетъ-быть([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ожет быть$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Б|б)ыть-можетъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ыть может$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(И|и)тти([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2дти$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)днѣ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2дни$3'); 
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)днѣхъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2дних$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)днѣмъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2дним$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)днѣми([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2дними$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Л|л)эди([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2еди$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Е|е)сли-бъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2сли б$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(К|к)онцѣ-концовъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2онце концов$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(К|к)рестъ-на-крестъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2рест-накрест$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Т|т).-е.([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2. е.$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(У|у)жь([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ж$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)ерво-на-перво([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ерво-наперво$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(С|с)ъумѣ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2уме$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(З|з)апрегъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2апряг$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Д|д)олжно-быть([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2олжно быть$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Т|т)олько-что([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2олько что$3');

          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(С|с)еріозн([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ерьёзн$3');
	  txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Ч|ч)орт([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ёрт$3'); // ?
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Ш|ш)опот([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ёпот$3');
//          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)ффиціальн([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2фициальн$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Р|р)ѣшотк([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ешётк$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(К|к)лиэнт([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2лиент$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Э|э)ксплоат([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ксплуат$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)роповедыв([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2роповедов$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)искар([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ескар$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(К|к)орридор([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2оридор$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Р|р)азсчет([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2асчёт$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Ц|ц)ипочк([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ыпочк$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Ч|ч)етыреугольник([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2етырёхугольник$3');
          txt = txt.replace(/апплоди/g,'аплоди');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)роэкці([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2роекци$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(В|в)озж(а|и|е|у|ой|ою|ей|ам|ами|ах)([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ожж$3$4');

          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])-жь([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1 ж$2');
          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])-жъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1 ж$2');
          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])іяся([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1иеся$2');
          txt = txt.replace(/Акакія/g,'Акакия');
          txt = txt.replace(/Кампучія/g,'Кампучия');
          txt = txt.replace(/Лючія/g,'Лючия');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(С|с)тихія([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2тихия$3');
//          txt = txt.replace(/([жкчшщх])ія([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1ие$2');  // слишком много исключений

          txt = txt.replace(/Ѣ/g,'Е');
          txt = txt.replace(/ѣ/g,'е');
          txt = txt.replace(/І/g,'И');
          txt = txt.replace(/і/g,'и');
          txt = txt.replace(/Ѳ/g,'Ф');
          txt = txt.replace(/ѳ/g,'ф');
          txt = txt.replace(/ъи/g,'ы');
          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])ъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2');
          txt = txt.replace(/([А-ЯЁѢІѲ])Ъ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2');
          txt = txt.replace(/(М|м)ало-по-малу/g,'$1ало-помалу');
          txt = txt.replace(/(С|с)тало-быть/g,'$1тало быть');
          txt = txt.replace(/(П|п)овидимому/g,'$1о-видимому');
          txt = txt.replace(/(П|п)опрежнему/g,'$1о-прежнему');
          txt = txt.replace(/(Б|б)анкрутств([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1анкротств$2');
          txt = txt.replace(/(Ч|ч)ерез-чур/g,'$1ересчур');
          txt = txt.replace(/(Ч|ч)ерезчур/g,'$1ересчур');
          txt = txt.replace(/(К|к)ак-будто/g,'$1ак будто');
          txt = txt.replace(/(В|в) то-же время/g,'$1 то же время');
          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])-ли([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1 ли$2');

//         txt = txt.replace(/([\wа-яА-ЯёЁ])ъ(\s|\.|\!|,|;|\:|\?)/g,'<span style="background-color: green;">$1 </span>');
//         txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])аго([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1<span style="background-color: yellow;">аго</span>$2');
          txt = txt.replace(/([а-яА-ЯёЁѢѣІіѲѳ])яго([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1его$2'); // toujours ?
          txt = txt.replace(/([чшщ])аго(ся)([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1его$2$3'); 
          txt = txt.replace(/([жчцшщ])аго([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1его$2'); 
          txt = txt.replace(/([бвгдзклмнпрстх])аго([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1ого$2');

	  txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Б|б)лого([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2лаго$3'); //хак

          txt = txt.replace(/(Ч|ч)етырех-стопн([а-яА-ЯёЁѢѣІіѲѳ])/g,'$1етырёхстопн$2');
	  txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Т|т)фу([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ьфу$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Т|т)анцов([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2анцев$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)окоиват([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2окаиват$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Е|е)слибы([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2сли бы$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Е|е)слиб([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2сли б$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)росто-на-просто([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2росто-напросто$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(К|к)ашнэ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2ашне$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)енснэ([^а-яА-ЯёЁѢѣІіѲѳ])/g,'$1$2енсне$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)редраз([пткфсхцчш])/g,'$1$2редрас$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Р|р)аз([пткфсхцчш])/g,'$1$2ас$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(Б|б)ез([пткфсхцчш])/g,'$1$2ес$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(О|о)без([пткфсхцчш])/g,'$1$2бес$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(П|п)обез([пткфсхцчш])/g,'$1$2обес$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(З|з)абез([пткфсхцчш])/g,'$1$2абес$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(В|в)оз([пткфсхцчш])/g,'$1$2ос$3');
          txt = txt.replace(/([^а-яА-ЯёЁѢѣІіѲѳ])(И|и)з([пткфсхцчш])/g,'$1$2с$3');


 
 //         txt = txt.replace(/\b(В|в)сѣ\s/g,'$1се ');


 
}

 
}