<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://ejwiki.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Compare2texts.js</id>
	<title>MediaWiki:Gadget-Compare2texts.js - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://ejwiki.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AGadget-Compare2texts.js"/>
	<link rel="alternate" type="text/html" href="https://ejwiki.org/index.php?title=MediaWiki:Gadget-Compare2texts.js&amp;action=history"/>
	<updated>2026-07-02T16:38:28Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://ejwiki.org/index.php?title=MediaWiki:Gadget-Compare2texts.js&amp;diff=388351&amp;oldid=prev</id>
		<title>Mliris: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://ejwiki.org/index.php?title=MediaWiki:Gadget-Compare2texts.js&amp;diff=388351&amp;oldid=prev"/>
		<updated>2010-03-11T07:42:47Z</updated>

		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Предыдущая версия&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Версия от 07:42, 11 марта 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mliris</name></author>
	</entry>
	<entry>
		<id>https://ejwiki.org/index.php?title=MediaWiki:Gadget-Compare2texts.js&amp;diff=25671&amp;oldid=prev</id>
		<title>Ariely: переименовал «MediaWiki:Compare2texts.js» в «MediaWiki:Gadget-Compare2texts.js»</title>
		<link rel="alternate" type="text/html" href="https://ejwiki.org/index.php?title=MediaWiki:Gadget-Compare2texts.js&amp;diff=25671&amp;oldid=prev"/>
		<updated>2010-02-28T08:08:25Z</updated>

		<summary type="html">&lt;p&gt;переименовал «&lt;a href=&quot;/index.php/MediaWiki:Compare2texts.js&quot; title=&quot;MediaWiki:Compare2texts.js&quot;&gt;MediaWiki:Compare2texts.js&lt;/a&gt;» в «&lt;a href=&quot;/index.php/MediaWiki:Gadget-Compare2texts.js&quot; title=&quot;MediaWiki:Gadget-Compare2texts.js&quot;&gt;MediaWiki:Gadget-Compare2texts.js&lt;/a&gt;»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;//Скрипт для поиска совпадающих подстрок в двух текстах&lt;br /&gt;
&lt;br /&gt;
//Этот код выполняется в начале.&lt;br /&gt;
if (wgAction == &amp;#039;edit&amp;#039; || wgAction == &amp;#039;submit&amp;#039;){&lt;br /&gt;
  addOnloadHook(XRomix_Compare2texts_OnLoad)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function XRomix_Compare2texts_OnLoad(){&lt;br /&gt;
	//Этот код выполнится после загрузки страницы&lt;br /&gt;
	var toolbar = document.getElementById(&amp;#039;toolbar&amp;#039;)&lt;br /&gt;
	var textbox = document.getElementById(&amp;#039;wpTextbox1&amp;#039;)&lt;br /&gt;
	if (!textbox || !toolbar) return&lt;br /&gt;
	addToolbarButton(&amp;quot;Сравнение&amp;quot;, XRomix_Compare2texts, &amp;#039;btnXRomix_Compare2texts&amp;#039;, &amp;#039;Сравнение двух текстов&amp;#039;, &amp;quot;&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	//Adds a text button to edit toolbar&lt;br /&gt;
	function addToolbarButton(name, onclick, id, tooltip, accesskey){&lt;br /&gt;
		var toolbar = document.getElementById(&amp;#039;toolbar&amp;#039;);&lt;br /&gt;
		if (!toolbar) return;&lt;br /&gt;
		var newBtn = document.createElement(&amp;#039;input&amp;#039;);&lt;br /&gt;
		newBtn.type = &amp;#039;button&amp;#039;; &lt;br /&gt;
		newBtn.style.background = &amp;#039;#adbede&amp;#039;;&lt;br /&gt;
		newBtn.style.height = &amp;#039;22px&amp;#039;; &lt;br /&gt;
		newBtn.style.verticalAlign = &amp;#039;middle&amp;#039;;&lt;br /&gt;
		if (name) newBtn.value = name; &lt;br /&gt;
		if (onclick) newBtn.onclick = onclick;&lt;br /&gt;
		if (id) newBtn.id = id;&lt;br /&gt;
		if (tooltip) newBtn.title = tooltip; &lt;br /&gt;
		if (accesskey) newBtn.accessKey = accesskey; &lt;br /&gt;
		toolbar.appendChild(newBtn);&lt;br /&gt;
		return newBtn;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function insertAfter(parent, node, referenceNode) {&lt;br /&gt;
  parent.insertBefore(node, referenceNode.nextSibling);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function XRomix_Compare2texts(){&lt;br /&gt;
 XRomix_CreateNewTextbox();&lt;br /&gt;
   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function XRomix_CreateNewTextbox(){&lt;br /&gt;
 //var input = document.getElementById(&amp;#039;wpSummary&amp;#039;)&lt;br /&gt;
 var input = document.getElementById(&amp;#039;wpTextbox1&amp;#039;)&lt;br /&gt;
 if (!input) return&lt;br /&gt;
 var el = document.getElementById(&amp;#039;XRomix_wpTextbox2&amp;#039;)&lt;br /&gt;
 if (el) {&lt;br /&gt;
  removeElementById(&amp;#039;XRomix_wpTextbox2&amp;#039;);&lt;br /&gt;
  return;&lt;br /&gt;
 } &lt;br /&gt;
 var el = document.createElement(&amp;#039;span&amp;#039;)&lt;br /&gt;
 el.id = &amp;#039;XRomix_wpTextbox2&amp;#039;;&lt;br /&gt;
 el.style.marginLeft = &amp;#039;3px&amp;#039;&lt;br /&gt;
 input.parentNode.insertBefore(el, input.nextSibling)&lt;br /&gt;
 &lt;br /&gt;
 el.innerHTML = &amp;#039;&amp;lt;p&amp;gt;Текст в окне ниже не будет сохранён на сервер.\&lt;br /&gt;
 &amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Выполнить сравнение&amp;quot; onclick=&amp;quot;XRomix_btnCompare2texts_Compare()&amp;quot;&amp;gt;\&lt;br /&gt;
 &amp;lt;input type=&amp;quot;button&amp;quot; value=&amp;quot;Следующее соответствие&amp;quot; onclick=&amp;quot;XRomix_btnCompare2texts_CompareNext()&amp;quot;&amp;gt;\&lt;br /&gt;
 &amp;lt;br/&amp;gt;&amp;lt;span id=&amp;quot;XRomix_ComparedText&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;textarea cols=&amp;quot;80&amp;quot; rows=&amp;quot;15&amp;quot; id=&amp;quot;XRomix_Textbox2&amp;quot; name=&amp;quot;XRomix_Textbox2&amp;quot;&amp;gt; \&lt;br /&gt;
 &amp;lt;/textarea&amp;gt; \&lt;br /&gt;
 &amp;lt;input id=&amp;quot;XRomix_h1&amp;quot; name=&amp;quot;XRomix_h1&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt; \&lt;br /&gt;
 &amp;lt;input id=&amp;quot;XRomix_h2&amp;quot; name=&amp;quot;XRomix_h2&amp;quot; type=&amp;quot;hidden&amp;quot; value=&amp;quot;&amp;quot; /&amp;gt; &amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
  //Вспомогательные функции&lt;br /&gt;
    function removeChildrenRecursively(node)  &lt;br /&gt;
    {  &lt;br /&gt;
        if (!node) return;  &lt;br /&gt;
        while (node.hasChildNodes()) {  &lt;br /&gt;
            removeChildrenRecursively(node.firstChild);  &lt;br /&gt;
            node.removeChild(node.firstChild);  &lt;br /&gt;
        }  &lt;br /&gt;
    }  &lt;br /&gt;
      &lt;br /&gt;
   function removeElementById(nodeId) {  &lt;br /&gt;
       document.getElementById(nodeId).parentNode.removeChild(  &lt;br /&gt;
                               document.getElementById(nodeId));  &lt;br /&gt;
   }   &lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function XRomix_Compare2texts_Compare(mode){&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	// Переменные для функции&lt;br /&gt;
	var XRomix_maxP1; //позиция максимально совпадающих фрагментов&lt;br /&gt;
	var XRomix_maxP2;&lt;br /&gt;
	var XRomix_max1;//длина максимвльно совпадающих фрагментов&lt;br /&gt;
	var XRomix_max2;&lt;br /&gt;
	var XRomix_len1;//длина текущего соответствия для checkCompareLength&lt;br /&gt;
	var XRomix_len2;&lt;br /&gt;
	var XRomix_s1// тексты для сравнения. в них знаки препинания и прочие различия удалены, но число и позиция символов сохранена&lt;br /&gt;
	var XRomix_s2&lt;br /&gt;
&lt;br /&gt;
	var wpTextbox1=document.getElementById(&amp;#039;wpTextbox1&amp;#039;);&lt;br /&gt;
	if(!wpTextbox1) return;&lt;br /&gt;
	&lt;br /&gt;
	if(mode==&amp;quot;first&amp;quot;){&lt;br /&gt;
		var s= wpTextbox1.value;&lt;br /&gt;
		XRomix_s1=prepareText(s, true); //см. ниже&lt;br /&gt;
	}else if (mode==&amp;quot;next&amp;quot;){	&lt;br /&gt;
	    var h1=document.getElementById(&amp;#039;XRomix_h1&amp;#039;);&lt;br /&gt;
		XRomix_s1 = h1.value;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var wpTextbox2=document.getElementById(&amp;#039;XRomix_Textbox2&amp;#039;);&lt;br /&gt;
	if(!wpTextbox2) return;&lt;br /&gt;
	&lt;br /&gt;
	if(mode==&amp;quot;first&amp;quot;){&lt;br /&gt;
		var s= wpTextbox2.value;&lt;br /&gt;
		XRomix_s2=prepareText(s, false); //см. ниже&lt;br /&gt;
	}else if (mode==&amp;quot;next&amp;quot;){	&lt;br /&gt;
	    var h2=document.getElementById(&amp;#039;XRomix_h2&amp;#039;);&lt;br /&gt;
		XRomix_s2 = h2.value;&lt;br /&gt;
	}	&lt;br /&gt;
	&lt;br /&gt;
	getMaxSameText(); //см.ниже&lt;br /&gt;
	&lt;br /&gt;
	//alert(&amp;quot;Совпадение1: &amp;quot;+wpTextbox1.value.substr(XRomix_maxP1, XRomix_max1))&lt;br /&gt;
	//alert(&amp;quot;Совпадение2: &amp;quot;+wpTextbox2.value.substr(XRomix_maxP2, XRomix_max2))&lt;br /&gt;
&lt;br /&gt;
	var sovp1=wpTextbox1.value.substr(XRomix_maxP1, XRomix_max1);&lt;br /&gt;
	var sovp2=wpTextbox2.value.substr(XRomix_maxP2, XRomix_max2);&lt;br /&gt;
	if(XRomix_max2&amp;gt;3){&lt;br /&gt;
		selectInTextArea(wpTextbox1, sovp1);&lt;br /&gt;
		selectInTextArea(wpTextbox2, sovp2);&lt;br /&gt;
		setSelectionRange(wpTextbox1, XRomix_maxP1, XRomix_maxP1+XRomix_max1);&lt;br /&gt;
		setSelectionRange(wpTextbox2, XRomix_maxP2, XRomix_maxP2+XRomix_max2);&lt;br /&gt;
		&lt;br /&gt;
		wpTextbox1.focus();&lt;br /&gt;
	&lt;br /&gt;
		&lt;br /&gt;
		var label = document.getElementById(&amp;#039;XRomix_ComparedText&amp;#039;);&lt;br /&gt;
		label.innerHTML=&amp;quot;&amp;lt;i&amp;gt;&amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;&amp;quot;+sovp2+&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/i&amp;gt;&amp;quot;;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
	}else{&lt;br /&gt;
		var label = document.getElementById(&amp;#039;XRomix_ComparedText&amp;#039;);&lt;br /&gt;
		label.innerHTML=&amp;quot;&amp;lt;font color=&amp;#039;blue&amp;#039;&amp;gt;Совпадений не найдено&amp;lt;/font&amp;gt;&amp;quot;;&lt;br /&gt;
		//alert(&amp;quot;Совпадений не найдено&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	var s=XRomix_s1;&lt;br /&gt;
	var left=s.substr(0, XRomix_maxP1);&lt;br /&gt;
	var right=s.substr(XRomix_maxP1+XRomix_max1);&lt;br /&gt;
	var sp=generateSpaces(XRomix_max1);&lt;br /&gt;
	var XRomix_s1=left+sp+right;&lt;br /&gt;
	&lt;br /&gt;
	if(s.length!=XRomix_s1.length){&lt;br /&gt;
	  alert(&amp;quot;Длина строк не совпадает&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	var h1=document.getElementById(&amp;#039;XRomix_h1&amp;#039;);&lt;br /&gt;
	h1.value=XRomix_s1;&lt;br /&gt;
	var h2=document.getElementById(&amp;#039;XRomix_h2&amp;#039;);&lt;br /&gt;
	h2.value=XRomix_s2;&lt;br /&gt;
	&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	//Выполняет замену подстроки s1 на s2 в строке s. Сама строка s при этом не изменяется&lt;br /&gt;
	function replace(s, s1, s2){&lt;br /&gt;
		var p=s.indexOf(s1);&lt;br /&gt;
		if (p&amp;lt;0) return;&lt;br /&gt;
		var left=s.substr(0, p);&lt;br /&gt;
		var right=s.substr(p+s1.length);&lt;br /&gt;
		return left+s2+right;&lt;br /&gt;
	}&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	//генерирует строку из пробелов указанной длины&lt;br /&gt;
	function generateSpaces(len){&lt;br /&gt;
	    var s1=&amp;quot;&amp;quot;;&lt;br /&gt;
		for(var i=0; i&amp;lt;len; i++){&lt;br /&gt;
			s1+=&amp;quot; &amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
		return s1;&lt;br /&gt;
	}&lt;br /&gt;
  &lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	//Извлекает текстовое значение внутри [[викификации]], заменяя все лишнее на пробелы&lt;br /&gt;
	function spaceWikify(s){&lt;br /&gt;
		if (s.indexOf(&amp;quot;|&amp;quot;)&amp;gt;=0){&lt;br /&gt;
		//если найдена конструкция [[ |&lt;br /&gt;
			var flagSpace=1; //признак замены на пробел&lt;br /&gt;
			var s1=&amp;quot;&amp;quot;;&lt;br /&gt;
			for(var i=0; i&amp;lt;s.length; i++){&lt;br /&gt;
				var c=s.charAt(i);&lt;br /&gt;
				if(c==&amp;quot;|&amp;quot;){&lt;br /&gt;
					flagSpace=0;&lt;br /&gt;
					c=&amp;quot; &amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				if(flagSpace==1){&lt;br /&gt;
					c=&amp;quot; &amp;quot;;&lt;br /&gt;
				}&lt;br /&gt;
				s1+=c;&lt;br /&gt;
			}&lt;br /&gt;
			s=s1;&lt;br /&gt;
		}&lt;br /&gt;
		s=s.replace(/\[\[/, &amp;quot;  &amp;quot;); //[[ на два пробела&lt;br /&gt;
		s=s.replace(/\]\]/, &amp;quot;&amp;quot;); //[[ на пустую строку, т.к. надо отработать еще слова наподобие  [[год]]у&lt;br /&gt;
		s=s+&amp;quot;  &amp;quot;;//добавляем два пробела в конец, чтобы скомпенсировать длину&lt;br /&gt;
		return s;&lt;br /&gt;
	}  &lt;br /&gt;
&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	//Подготавливает текст&lt;br /&gt;
	function prepareText(s, delQuoutes){&lt;br /&gt;
	 &lt;br /&gt;
		//Заменяем знаки препинания на пробелы&lt;br /&gt;
		s=s.replace(/[\.\,\;\?\!\(\)\—\-\:\=\*]/g, &amp;quot; &amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		//Заменим викификацию&lt;br /&gt;
		var arr=s.match(/\[\[.*?\]\]([^\s])*/g);&lt;br /&gt;
		if(arr){&lt;br /&gt;
			for(var i=0; i&amp;lt;arr.length; i++){&lt;br /&gt;
				var w=arr[i];&lt;br /&gt;
				var w1=spaceWikify(w); //см. ниже&lt;br /&gt;
				if(w.length!=w1.length) alert(&amp;#039;Строки не совпадают по длине: &amp;#039;+w+&amp;#039;&amp;lt;&amp;gt;&amp;#039;+w1);&lt;br /&gt;
				s=replace(s, w, w1);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//Убираем закавыченное, если передан такой параметр&lt;br /&gt;
		if(delQuoutes){&lt;br /&gt;
			var arr=s.match(/«.*?»/g);&lt;br /&gt;
			if(arr){&lt;br /&gt;
				for(var i=0; i&amp;lt;arr.length; i++){&lt;br /&gt;
					var w=arr[i];&lt;br /&gt;
					var w1=generateSpaces(w.length); //см. ниже&lt;br /&gt;
					s=replace(s, w, w1);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//Убираем то что внутри [квадратных скобок]&lt;br /&gt;
		var arr=s.match(/\[.*?\]/g);&lt;br /&gt;
		if(arr){&lt;br /&gt;
			for(var i=0; i&amp;lt;arr.length; i++){&lt;br /&gt;
				var w=arr[i];&lt;br /&gt;
				var w1=generateSpaces(w.length); //см. ниже&lt;br /&gt;
				s=replace(s, w, w1);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		//Убираем символы кавычек и апострофов&lt;br /&gt;
		s=s.replace(/[«»„“\&amp;quot;\&amp;#039;]/g, &amp;quot; &amp;quot;);&lt;br /&gt;
	  &lt;br /&gt;
		//Убираем {{шаблоны}} Википедии&lt;br /&gt;
		var arr=s.match(/\{\{.*?\}\}/g);&lt;br /&gt;
		if(arr){&lt;br /&gt;
			for(var i=0; i&amp;lt;arr.length; i++){&lt;br /&gt;
				var w=arr[i];&lt;br /&gt;
				var w1=generateSpaces(w.length); //см. ниже&lt;br /&gt;
				s=replace(s, w, w1);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		//Переводим строку в нижний регистр&lt;br /&gt;
		s=s.toLocaleLowerCase();&lt;br /&gt;
		&lt;br /&gt;
		//Заменяем ё для целей сравнения&lt;br /&gt;
		s=s.replace(/ё/g, &amp;quot;е&amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		//Заменяем различные пробельные символы на пробел&lt;br /&gt;
		s=s.replace(/\s/g, &amp;quot; &amp;quot;);&lt;br /&gt;
		&lt;br /&gt;
		return s &lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//////////////////////////////////////&lt;br /&gt;
	//Измеряет длину совпадения в символах для строк  XRomix_s1 и XRomix_s2 начиная с указанных позиций p1 и p2&lt;br /&gt;
	function checkCompareLength(p1, p2){&lt;br /&gt;
	   var c1=XRomix_s1.charAt(p1);&lt;br /&gt;
	   var c2=XRomix_s2.charAt(p2);&lt;br /&gt;
	   if(c1!=c2){&lt;br /&gt;
			XRomix_len1=0; //&lt;br /&gt;
			XRomix_len2=0;&lt;br /&gt;
			return false;&lt;br /&gt;
	   }&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
	 var len1=XRomix_s1.length;&lt;br /&gt;
	 var len2=XRomix_s2.length;&lt;br /&gt;
	 var p1_=p1; //сохраняем позиции для вычисления длины&lt;br /&gt;
	 var p2_=p2;&lt;br /&gt;
	 var p1_nosp=-1; //позиция последнего совпадающего непробельного символа&lt;br /&gt;
	 var p2_nosp=-1;&lt;br /&gt;
	 &lt;br /&gt;
	 for(;;){&lt;br /&gt;
	   if(p1&amp;gt;=len1) break;&lt;br /&gt;
	   if(p2&amp;gt;=len2) break;&lt;br /&gt;
	   &lt;br /&gt;
	   c1=XRomix_s1.charAt(p1);&lt;br /&gt;
	   c2=XRomix_s2.charAt(p2);&lt;br /&gt;
	   if((c1==&amp;quot; &amp;quot;) &amp;amp;&amp;amp; (c2==&amp;quot; &amp;quot;)){&lt;br /&gt;
		 //отыскиваем первый непробельный символ для p1&lt;br /&gt;
	     while(c1==&amp;quot; &amp;quot;){&lt;br /&gt;
		   p1++;&lt;br /&gt;
		   c1=XRomix_s1.charAt(p1);&lt;br /&gt;
		   if(p1&amp;gt;=len1) break;&lt;br /&gt;
		 }&lt;br /&gt;
		 //отыскиваем первый непробельный символ для p2&lt;br /&gt;
	     while(c2==&amp;quot; &amp;quot;){&lt;br /&gt;
		   p2++;&lt;br /&gt;
		   c2=XRomix_s2.charAt(p2);&lt;br /&gt;
		   if(p2&amp;gt;=len2) break;&lt;br /&gt;
		 }&lt;br /&gt;
	   }&lt;br /&gt;
&lt;br /&gt;
	   //Пропускаем мягкий перенос с кодом 173 (дес) или 0xAD  &lt;br /&gt;
	  if(c1==&amp;quot;\xAD&amp;quot;){&lt;br /&gt;
	    p1++;&lt;br /&gt;
		continue;&lt;br /&gt;
	  }&lt;br /&gt;
	  if(c2==&amp;quot;\xAD&amp;quot;){&lt;br /&gt;
	    p2++;&lt;br /&gt;
		continue;&lt;br /&gt;
	  }&lt;br /&gt;
	  //Пропускаем символ ударения&lt;br /&gt;
	  if(c1==&amp;quot;́&amp;quot;){&lt;br /&gt;
	    p1++;&lt;br /&gt;
		continue;&lt;br /&gt;
	  }&lt;br /&gt;
	  if(c2==&amp;quot;́&amp;quot;){&lt;br /&gt;
	    p2++;&lt;br /&gt;
		continue;&lt;br /&gt;
	  }&lt;br /&gt;
	  &lt;br /&gt;
	  &lt;br /&gt;
	  &lt;br /&gt;
	  &lt;br /&gt;
	  if(c1==c2){&lt;br /&gt;
		if(c1!=&amp;quot; &amp;quot;) p1_nosp=p1;&lt;br /&gt;
		if(c2!=&amp;quot; &amp;quot;) p2_nosp=p2;&lt;br /&gt;
		p1++;&lt;br /&gt;
		p2++;&lt;br /&gt;
	 	continue;&lt;br /&gt;
	  }&lt;br /&gt;
	  break;&lt;br /&gt;
	 &lt;br /&gt;
	 }&lt;br /&gt;
		if(p1_nosp==-1){ //не совпал ни один символ&lt;br /&gt;
			XRomix_len1=0; //&lt;br /&gt;
			XRomix_len2=0;&lt;br /&gt;
		}else{&lt;br /&gt;
			XRomix_len1=p1_nosp-p1_+1; //&lt;br /&gt;
			XRomix_len2=p2_nosp-p2_+1;&lt;br /&gt;
		}&lt;br /&gt;
	  return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
	//Отыскивает максимально совпадающий текст между XRomix_s1 и XRomix_s2&lt;br /&gt;
	//Помещет его начальные указатели в XRomix_maxP1 и XRomix_maxP1, и длины в XRomix_max1 и XRomix_max1&lt;br /&gt;
	function getMaxSameText(){&lt;br /&gt;
	  &lt;br /&gt;
	  XRomix_maxP1=0; &lt;br /&gt;
	  XRomix_maxP2=0;&lt;br /&gt;
	  XRomix_max1=0;&lt;br /&gt;
	  XRomix_max2=0;&lt;br /&gt;
	  &lt;br /&gt;
	  var arr1 = new Array(); //массивы позиций начала слова для ускорения поиска&lt;br /&gt;
	  var arr2 = new Array();&lt;br /&gt;
	  &lt;br /&gt;
	  &lt;br /&gt;
	  //Заполняем массив позициями начала слова&lt;br /&gt;
	  var c=&amp;quot; &amp;quot;;&lt;br /&gt;
	  var wasSp=1; //признак наличия пробела до текущего символа&lt;br /&gt;
	  for(var i=0; i&amp;lt;XRomix_s1.length; i++){&lt;br /&gt;
	    c=XRomix_s1.charAt(i);&lt;br /&gt;
		if(c&amp;lt;=&amp;quot; &amp;quot;){&lt;br /&gt;
		  wasSp=1;&lt;br /&gt;
		  continue;&lt;br /&gt;
		}else{&lt;br /&gt;
		  if(wasSp==0) continue; //пропускаем не первые буквы каждого слова&lt;br /&gt;
		  wasSp=0;&lt;br /&gt;
		  arr1.push(i);&lt;br /&gt;
	    }	&lt;br /&gt;
	  }&lt;br /&gt;
	  //Для второй строки делаем то же самое&lt;br /&gt;
  	  var wasSp=1; //признак наличия пробела до текущего символа&lt;br /&gt;
	  for(var i=0; i&amp;lt;XRomix_s2.length; i++){&lt;br /&gt;
	    c=XRomix_s2.charAt(i);&lt;br /&gt;
		if(c&amp;lt;=&amp;quot; &amp;quot;){&lt;br /&gt;
		  wasSp=1;&lt;br /&gt;
		  continue;&lt;br /&gt;
		}else{&lt;br /&gt;
		  if(wasSp==0) continue; //пропускаем не первые буквы каждого слова&lt;br /&gt;
		  wasSp=0;&lt;br /&gt;
		  arr2.push(i);&lt;br /&gt;
	    }	&lt;br /&gt;
	  }&lt;br /&gt;
	  &lt;br /&gt;
	  for(var i=0; i&amp;lt;arr1.length; i++){&lt;br /&gt;
	    var p1=arr1[i];&lt;br /&gt;
	  &lt;br /&gt;
	    for(var j=0; j&amp;lt;arr2.length; j++){&lt;br /&gt;
			var p2=arr2[j];&lt;br /&gt;
			if(checkCompareLength(p1, p2)){&lt;br /&gt;
				if (XRomix_len2&amp;gt;XRomix_max2){ //сравниваем по второму тексту, т.к. там нет викификации&lt;br /&gt;
				  &lt;br /&gt;
				  XRomix_max1=XRomix_len1;&lt;br /&gt;
				  XRomix_max2=XRomix_len2;&lt;br /&gt;
				  XRomix_maxP1=p1;&lt;br /&gt;
				  XRomix_maxP2=p2;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	    &lt;br /&gt;
	  }&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
	function selectInTextArea(txtarea, text1){&lt;br /&gt;
		&lt;br /&gt;
		//Обрезаем многострочный текст до одной строки - иначе поиск не срабатывает&lt;br /&gt;
		var arr=text1.split(/[\n\r]/);&lt;br /&gt;
		var max=&amp;quot;&amp;quot;;&lt;br /&gt;
		//найдем максимальную по длине строку из многострочного фрагмента&lt;br /&gt;
		for(var i=0; i&amp;lt;arr.length; i++){&lt;br /&gt;
		  if (max.length&amp;lt;arr[i].length){ max=arr[i]}&lt;br /&gt;
		}&lt;br /&gt;
		text=max;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		if (txtarea.setSelectionRange) {//Mozilla/Opera&lt;br /&gt;
			&lt;br /&gt;
			var selPos = txtarea.value.indexOf(text)&lt;br /&gt;
			if (selPos &amp;lt; 0) return&lt;br /&gt;
			txtarea.focus()&lt;br /&gt;
			txtarea.setSelectionRange(0, 0);//перейдем в начало&lt;br /&gt;
&lt;br /&gt;
			//http://www.dynamicdrive.com/dynamicindex11/findpage.htm&lt;br /&gt;
			&lt;br /&gt;
			var  caseSensitive = true // is search case sensitive?&lt;br /&gt;
			var  backwards = false //should we also search backwards?&lt;br /&gt;
			var  wrapAround = true // should we wrap the search?&lt;br /&gt;
			try{&lt;br /&gt;
				self.find(text, caseSensitive, backwards, wrapAround);	&lt;br /&gt;
			}catch(e){&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}else if (txtarea.createTextRange){ //IE&lt;br /&gt;
			var oRange = txtarea.createTextRange()&lt;br /&gt;
			if (oRange.findText(text))  oRange.select() &lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	//подсчитывает концы строк в фрагменте текста&lt;br /&gt;
	function countCrlf(str){&lt;br /&gt;
	  var cnt=0;&lt;br /&gt;
	  for(var i=0; i&amp;lt;str.length; i++){&lt;br /&gt;
	    var c=str.charCodeAt(i);&lt;br /&gt;
		if (c==13){&lt;br /&gt;
		  cnt++;&lt;br /&gt;
		}&lt;br /&gt;
	  }&lt;br /&gt;
	  return cnt;&lt;br /&gt;
	}&lt;br /&gt;
	 &lt;br /&gt;
	//Браузеро-независимый setSelectionRange - изменяет начало и конец&lt;br /&gt;
	//выделенного фрагмента в поле ввода input&lt;br /&gt;
	function setSelectionRange(input, start, end) {&lt;br /&gt;
	  if (typeof wpTextbox1.selectionStart != &amp;#039;undefined&amp;#039; &lt;br /&gt;
	    &amp;amp;&amp;amp; (navigator.productSub &amp;gt; 20031000 || is_safari)) { &lt;br /&gt;
		//Mozilla/Opera/Safari3&lt;br /&gt;
		input.setSelectionRange(start, end);&lt;br /&gt;
	  }else if (document.selection &amp;amp;&amp;amp; document.selection.createRange) { &lt;br /&gt;
	 	 //Internet Explorer&lt;br /&gt;
			var range = input.createTextRange();&lt;br /&gt;
			range.collapse(true);&lt;br /&gt;
			range.moveStart(&amp;quot;character&amp;quot;, start - countCrlf(input.value.substring(0, start)));&lt;br /&gt;
			range.moveEnd(&amp;quot;character&amp;quot;, end - start - countCrlf(input.value.substring(start, end)));&lt;br /&gt;
			range.select();&lt;br /&gt;
	  }	 &lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}//function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function XRomix_btnCompare2texts_Compare(){&lt;br /&gt;
	XRomix_Compare2texts_Compare(&amp;quot;first&amp;quot;);&lt;br /&gt;
	var wpSummary = document.getElementById(&amp;#039;wpSummary&amp;#039;)&lt;br /&gt;
	if(wpSummary){&lt;br /&gt;
		var temp=wpSummary.value;&lt;br /&gt;
		temp=temp.replace(/\/\*.*?\*\// , &amp;quot;&amp;quot;); //комментарии&lt;br /&gt;
		temp=temp.replace(/[\s]*/ , &amp;quot;&amp;quot;); //пробелы&lt;br /&gt;
		if (temp==&amp;quot;&amp;quot;){&lt;br /&gt;
			var s=wpSummary.value;&lt;br /&gt;
			s+=&amp;quot; [[User talk:X-romix/compare2texts.js|compare2texts.js]] - поиск совпадений&amp;quot;;&lt;br /&gt;
			if (s.length&amp;lt;200) wpSummary.value=s;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
function XRomix_btnCompare2texts_CompareNext(){&lt;br /&gt;
  XRomix_Compare2texts_Compare(&amp;quot;next&amp;quot;);&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Ariely</name></author>
	</entry>
</feed>