<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fa">
	<id>https://www.iran-pedia.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-Extra-Editbuttons-persiantools.js</id>
	<title>مدیاویکی:Gadget-Extra-Editbuttons-persiantools.js - تاریخچهٔ نسخه‌ها</title>
	<link rel="self" type="application/atom+xml" href="https://www.iran-pedia.org/w/index.php?action=history&amp;feed=atom&amp;title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C%3AGadget-Extra-Editbuttons-persiantools.js"/>
	<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-persiantools.js&amp;action=history"/>
	<updated>2026-04-26T12:24:48Z</updated>
	<subtitle>تاریخچهٔ نسخه‌ها برای این صفحه در ویکی</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-persiantools.js&amp;diff=2190&amp;oldid=prev</id>
		<title>Rootadmin: ۱ نسخه واردشده</title>
		<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-persiantools.js&amp;diff=2190&amp;oldid=prev"/>
		<updated>2017-12-02T10:42:46Z</updated>

		<summary type="html">&lt;p&gt;۱ نسخه واردشده&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;fa&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;نسخهٔ ‏۲ دسامبر ۲۰۱۷، ساعت ۱۲:۴۲&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;fa&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>Rootadmin</name></author>
	</entry>
	<entry>
		<id>https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-persiantools.js&amp;diff=2189&amp;oldid=prev</id>
		<title>Rootadmin در ‏۶ سپتامبر ۲۰۱۷، ساعت ۰۹:۴۱</title>
		<link rel="alternate" type="text/html" href="https://www.iran-pedia.org/w/index.php?title=%D9%85%D8%AF%DB%8C%D8%A7%D9%88%DB%8C%DA%A9%DB%8C:Gadget-Extra-Editbuttons-persiantools.js&amp;diff=2189&amp;oldid=prev"/>
		<updated>2017-09-06T09:41:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحهٔ تازه&lt;/b&gt;&lt;/p&gt;&lt;div&gt;// &amp;lt;nowiki&amp;gt; // DO NOT REMOVE THIS LINE EVER&lt;br /&gt;
/**&lt;br /&gt;
 * Persian text style improvement tools&lt;br /&gt;
 * Tests: [[مدیاویکی:Gadget-Extra-Editbuttons-tests.js]] [[ایران پدیا:تست]]&lt;br /&gt;
 * See also:&lt;br /&gt;
 * * [[مدیاویکی:Gadget-Extra-Editbuttons-persianwikitools.js]]&lt;br /&gt;
 * * [[مدیاویکی:Gadget-Extra-Editbuttons-dictionary.js]]&lt;br /&gt;
 */&lt;br /&gt;
var persianTools = (function () {&lt;br /&gt;
	&amp;#039;use strict&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
	var persianGlyphs, persianDigits, arabicIndicDigits, arabicDigits,&lt;br /&gt;
		vowels, persianCharacters, persianCharactersNoVowels, persianPastVerbs,&lt;br /&gt;
		persianPresentVerbs, persianComplexPastVerbs, persianComplexPresentVerbs, similarPersianCharacters, hamza;&lt;br /&gt;
&lt;br /&gt;
	arabicDigits = &amp;#039;0123456789&amp;#039;;&lt;br /&gt;
	arabicIndicDigits = &amp;#039;٠١٢٣٤٥٦٧٨٩&amp;#039;;&lt;br /&gt;
	//نویسه\u200cهای غیرفارسی ي-ك-ە و موارد مشابه پیش از تبدیل به نویسهٔ فارسی در سایر ریجکس\u200cها باید به عنوان کاراکتر فارسی شناخته شوند.&lt;br /&gt;
	similarPersianCharacters = &amp;#039;\u0643\uFB91\uFB90\uFB8F\uFB8E\uFEDC\uFEDB\uFEDA\uFED9\u0649\uFEEF\u064A\u06C1\u06D5\u06BE\uFEF0-\uFEF4&amp;#039;;&lt;br /&gt;
	vowels = &amp;#039;\u064B-\u0650\u0652\u0670&amp;#039;;&lt;br /&gt;
	persianCharacters = &amp;#039;\u0621-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2&amp;#039; + similarPersianCharacters;&lt;br /&gt;
	persianCharactersNoVowels = &amp;#039;\u0621-\u064A\u0653-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2&amp;#039; + similarPersianCharacters;&lt;br /&gt;
	persianDigits = &amp;#039;۰۱۲۳۴۵۶۷۸۹&amp;#039;;&lt;br /&gt;
	hamza = &amp;#039;\u0654&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	function normalizeZwnj(text) {&lt;br /&gt;
		return text&lt;br /&gt;
			// Replace LRM، RLM characters with ZWNJ and it will remove unneeded ZWNJ at next lines&lt;br /&gt;
			// .replace(/[\u180E\u2028\u2029\u202A\u202B\u202C\u202D\u202E\u200F¬]/g, &amp;#039;\u200c&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;] *)[\u200F\u200E]+( *[&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1\u200c$2&amp;#039;)&lt;br /&gt;
			// Remove more than a ZWNJs&lt;br /&gt;
			.replace(/\u200c{2,}/g, &amp;#039;\u200c&amp;#039;)&lt;br /&gt;
			// Convert ¬ to zwnj in Persian context&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])¬(?=[&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1\u200c&amp;#039;)&lt;br /&gt;
			// Clean ZWNJs after characters that don&amp;#039;t conncet to the next letter&lt;br /&gt;
			.replace(/([۰-۹0-9إأةؤورزژاآدذ،؛,\:«»\\\/@#$٪×\*\(\)ـ\-=\|ء])\u200c/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// Clean ZWNJs before and after English characters&lt;br /&gt;
			.replace(/\u200c([\w])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			.replace(/([\w])\u200c/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// Clean ZWNJs before and after Persian characters&lt;br /&gt;
			.replace(new RegExp(&amp;#039;\\u200c([&amp;#039; + vowels + arabicIndicDigits + persianDigits + hamza+&amp;#039;])&amp;#039;,&amp;#039;g&amp;#039;), &amp;#039;$1&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039;+arabicIndicDigits+&amp;#039;])\\u200c&amp;#039;,&amp;#039;g&amp;#039;), &amp;#039;$1&amp;#039;)&lt;br /&gt;
			.replace(/([\w])\u200c/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// Clean ZWNJs after and before punctuation&lt;br /&gt;
			.replace(/\u200c([ء\n\s\[\]\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			.replace(/([\n\s\[\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])\u200c/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// Clean ZWNJs before brakets which have sapce after\before them&lt;br /&gt;
			.replace(/\u200c(\]\][\s\n])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			.replace(/([\n\s]\[\[)\u200c/g, &amp;#039;$1&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	persianGlyphs = {&lt;br /&gt;
		// these two are for visually available ZWNJ #visualZwnj&lt;br /&gt;
		&amp;#039;\u200cه&amp;#039;: &amp;#039;ﻫ&amp;#039;,&lt;br /&gt;
		&amp;#039;ی\u200c&amp;#039;: &amp;#039;ﻰﻲ&amp;#039;,&lt;br /&gt;
		&amp;#039;أ&amp;#039;: &amp;#039;ﺄﺃﺃ&amp;#039;,&lt;br /&gt;
		&amp;#039;آ&amp;#039;: &amp;#039;ﺁﺁﺂ&amp;#039;,&lt;br /&gt;
		&amp;#039;إ&amp;#039;: &amp;#039;ﺇﺈﺇ&amp;#039;,&lt;br /&gt;
		&amp;#039;ا&amp;#039;: &amp;#039;ﺍﺎ&amp;#039;,&lt;br /&gt;
		&amp;#039;ب&amp;#039;: &amp;#039;ﺏﺐﺑﺒ&amp;#039;,&lt;br /&gt;
		&amp;#039;پ&amp;#039;: &amp;#039;ﭖﭗﭘﭙ&amp;#039;,&lt;br /&gt;
		&amp;#039;ت&amp;#039;: &amp;#039;ﺕﺖﺗﺘ&amp;#039;,&lt;br /&gt;
		&amp;#039;ث&amp;#039;: &amp;#039;ﺙﺚﺛﺜ&amp;#039;,&lt;br /&gt;
		&amp;#039;ج&amp;#039;: &amp;#039;ﺝﺞﺟﺠ&amp;#039;,&lt;br /&gt;
		&amp;#039;چ&amp;#039;: &amp;#039;ﭺﭻﭼﭽ&amp;#039;,&lt;br /&gt;
		&amp;#039;ح&amp;#039;: &amp;#039;ﺡﺢﺣﺤ&amp;#039;,&lt;br /&gt;
		&amp;#039;خ&amp;#039;: &amp;#039;ﺥﺦﺧﺨ&amp;#039;,&lt;br /&gt;
		&amp;#039;د&amp;#039;: &amp;#039;ﺩﺪ&amp;#039;,&lt;br /&gt;
		&amp;#039;ذ&amp;#039;: &amp;#039;ﺫﺬ&amp;#039;,&lt;br /&gt;
		&amp;#039;ر&amp;#039;: &amp;#039;ﺭﺮ&amp;#039;,&lt;br /&gt;
		&amp;#039;ز&amp;#039;: &amp;#039;ﺯﺰ&amp;#039;,&lt;br /&gt;
		&amp;#039;ژ&amp;#039;: &amp;#039;ﮊﮋ&amp;#039;,&lt;br /&gt;
		&amp;#039;س&amp;#039;: &amp;#039;ﺱﺲﺳﺴ&amp;#039;,&lt;br /&gt;
		&amp;#039;ش&amp;#039;: &amp;#039;ﺵﺶﺷﺸ&amp;#039;,&lt;br /&gt;
		&amp;#039;ص&amp;#039;: &amp;#039;ﺹﺺﺻﺼ&amp;#039;,&lt;br /&gt;
		&amp;#039;ض&amp;#039;: &amp;#039;ﺽﺾﺿﻀ&amp;#039;,&lt;br /&gt;
		&amp;#039;ط&amp;#039;: &amp;#039;ﻁﻂﻃﻄ&amp;#039;,&lt;br /&gt;
		&amp;#039;ظ&amp;#039;: &amp;#039;ﻅﻆﻇﻈ&amp;#039;,&lt;br /&gt;
		&amp;#039;ع&amp;#039;: &amp;#039;ﻉﻊﻋﻌ&amp;#039;,&lt;br /&gt;
		&amp;#039;غ&amp;#039;: &amp;#039;ﻍﻎﻏﻐ&amp;#039;,&lt;br /&gt;
		&amp;#039;ف&amp;#039;: &amp;#039;ﻑﻒﻓﻔ&amp;#039;,&lt;br /&gt;
		&amp;#039;ق&amp;#039;: &amp;#039;ﻕﻖﻗﻘ&amp;#039;,&lt;br /&gt;
		&amp;#039;ک&amp;#039;: &amp;#039;ﮎﮏﮐﮑﻙﻚﻛﻜ&amp;#039;,&lt;br /&gt;
		&amp;#039;گ&amp;#039;: &amp;#039;ﮒﮓﮔﮕ&amp;#039;,&lt;br /&gt;
		&amp;#039;ل&amp;#039;: &amp;#039;ﻝﻞﻟﻠ&amp;#039;,&lt;br /&gt;
		&amp;#039;م&amp;#039;: &amp;#039;ﻡﻢﻣﻤ&amp;#039;,&lt;br /&gt;
		&amp;#039;ن&amp;#039;: &amp;#039;ﻥﻦﻧﻨ&amp;#039;,&lt;br /&gt;
		&amp;#039;ه&amp;#039;: &amp;#039;ﻩﻪﻫﻬ&amp;#039;,&lt;br /&gt;
		&amp;#039;هٔ&amp;#039;: &amp;#039;ﮤﮥ&amp;#039;,&lt;br /&gt;
		&amp;#039;و&amp;#039;: &amp;#039;ﻭﻮ&amp;#039;,&lt;br /&gt;
		&amp;#039;ؤ&amp;#039;: &amp;#039;ﺅﺅﺆ&amp;#039;,&lt;br /&gt;
		&amp;#039;ی&amp;#039;: &amp;#039;ﯼﯽﯾﯿﻯﻰﻱﻲﻳﻴ&amp;#039;,&lt;br /&gt;
		&amp;#039;ئ&amp;#039;: &amp;#039;ﺉﺊﺋﺌ&amp;#039;,&lt;br /&gt;
		&amp;#039;لا&amp;#039;: &amp;#039;ﻻﻼ&amp;#039;,&lt;br /&gt;
		&amp;#039;لإ&amp;#039;: &amp;#039;ﻹﻺ&amp;#039;,&lt;br /&gt;
		&amp;#039;لأ&amp;#039;: &amp;#039;ﻸﻷ&amp;#039;,&lt;br /&gt;
		&amp;#039;لآ&amp;#039;: &amp;#039;ﻵﻶ&amp;#039;&lt;br /&gt;
	};&lt;br /&gt;
&lt;br /&gt;
	function toStandardPersianCharacters(text) {&lt;br /&gt;
		var i;&lt;br /&gt;
		for (i in persianGlyphs) {&lt;br /&gt;
			if (persianGlyphs.hasOwnProperty(i)) {&lt;br /&gt;
				text = text.replace(new RegExp(&amp;#039;[&amp;#039; + persianGlyphs[i] + &amp;#039;]&amp;#039;, &amp;#039;g&amp;#039;), i);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		return normalizeZwnj(text) // needed because of #visualZwnj&lt;br /&gt;
			.replace(/ك/g, &amp;#039;ک&amp;#039;) // Arabic&lt;br /&gt;
			.replace(/ڪ/g, &amp;#039;ک&amp;#039;) // Urdu&lt;br /&gt;
			.replace(/ﻙ/g, &amp;#039;ک&amp;#039;) // Pushtu&lt;br /&gt;
			.replace(/ﻚ/g, &amp;#039;ک&amp;#039;) // Uyghur&lt;br /&gt;
			.replace(/ي/g, &amp;#039;ی&amp;#039;) // Arabic&lt;br /&gt;
			.replace(/ى/g, &amp;#039;ی&amp;#039;) // Urdu&lt;br /&gt;
			.replace(/ے/g, &amp;#039;ی&amp;#039;) // Urdu&lt;br /&gt;
			.replace(/ۍ/g, &amp;#039;ی&amp;#039;) // Pushtu&lt;br /&gt;
			.replace(/ې/g, &amp;#039;ی&amp;#039;) // Uyghur&lt;br /&gt;
			.replace(/ہ/g, &amp;#039;ه&amp;#039;) // Convert &amp;amp;#x06C1; to &amp;amp;#x0647; ہہہہ to ههه&lt;br /&gt;
			.replace(/ە/g, &amp;#039;ه\u200c&amp;#039;) // Kurdish&lt;br /&gt;
			.replace(/ھ/g, &amp;#039;ه&amp;#039;); // Kurdish&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function toPersianDigits(text) {&lt;br /&gt;
		var i = 0;&lt;br /&gt;
		for (i = 0; i &amp;lt;= 9; i = i + 1) {&lt;br /&gt;
			text = text.replace(new RegExp(&amp;#039;[&amp;#039; + arabicIndicDigits[i] + arabicDigits[i] + &amp;#039;]&amp;#039;, &amp;#039;g&amp;#039;), persianDigits[i]);&lt;br /&gt;
		}&lt;br /&gt;
		return text&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianDigits + &amp;#039;]) ?%&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1٪&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;٪([&amp;#039; + persianDigits + &amp;#039;]+(?:[.٬٫][&amp;#039; + persianDigits + &amp;#039;]*)*)&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1٪&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianDigits + &amp;#039;])\\.(?=[&amp;#039; + persianDigits + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1٫&amp;#039;) // persian decimal separator&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianDigits + &amp;#039;])\\،(?=[&amp;#039; + persianDigits + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1٬&amp;#039;); // جایگزینی جداکننده هزاگان به جای ویرگول در میان اعداد&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function applyOrthography(text) {&lt;br /&gt;
		return text&lt;br /&gt;
			.replace(/\r/g, &amp;#039;&amp;#039;)&lt;br /&gt;
			//تمیزکاری autoFormatter.js&lt;br /&gt;
			.replace( /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x9F\uFEFF\u00AD]+/g, &amp;#039;&amp;#039; )&lt;br /&gt;
			.replace(/[ \xA0\xAD\u1680\u180E\u2000-\u200D\u2028\u2029\u202F\u205F\u2060\u3000]+\n/g,&amp;#039;\n&amp;#039;)&lt;br /&gt;
			//تبدیل تب و فاصله نشکن اول خط به هیچ چون مدیاویکی آن را در نظر نمی‌گیرد&lt;br /&gt;
			.replace(/\n[\t\u00A0]+/g, &amp;#039;\n&amp;#039;)&lt;br /&gt;
			//تبدیل انواع فاصله‌ها به فاصله ساده&lt;br /&gt;
			.replace(/[\u0020\u0085\u00A0\u180E\u2000-\u200A\u202F\u205F\u3000]/g, &amp;#039; &amp;#039;)&lt;br /&gt;
			.replace(/[\u0085]/g, &amp;#039;&amp;#039;)&lt;br /&gt;
			//http://kb.mozillazine.org/Network.IDN.blacklist_chars&lt;br /&gt;
			.replace(/[\u01C3\uFE15]/g, &amp;#039;!&amp;#039;)&lt;br /&gt;
			.replace(/[\u02D0\u0589\u05C3\uA789]/g, &amp;#039;:&amp;#039;)&lt;br /&gt;
			.replace(/[\u0338\u2044\u2215\u2571\u29F8\u3033\uFF0F]/g, &amp;#039;/&amp;#039;)&lt;br /&gt;
			.replace(/[\u05F4]/g, &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
			.replace(/[\u06D4\u0701\uFF0E\uFF61]/g, &amp;#039;.&amp;#039;)&lt;br /&gt;
			.replace(/\u3014/g, &amp;#039;(&amp;#039;)&lt;br /&gt;
			.replace(/\u3015/g, &amp;#039;)&amp;#039;)&lt;br /&gt;
			// جایگزینی ۀ غیراستاندار+حرف بعدی بدون فاصله به ه+همزه+فاصله&lt;br /&gt;
			.replace(/[ۂۀ](?![\s\n])/g, &amp;#039;هٔ &amp;#039;)&lt;br /&gt;
			// Replace ه followed by (space|ZWNJ|lrm) follow by ی with هٔ&lt;br /&gt;
			.replace(/ه[\u200c\u200e\s]+ی([\s\n])/g, &amp;#039;هٔ$1&amp;#039;)&lt;br /&gt;
			// Replace ه followed by (space|ZWNJ|lrm|nothing) follow by ء or with هٔ&lt;br /&gt;
			.replace(/ه[\u200c\u200e\s]*[ءٔ]([\s\n])/g, &amp;#039;هٔ$1&amp;#039;)&lt;br /&gt;
			// Replace هٓ or single-character ۀ with the standard هٔ&lt;br /&gt;
			.replace(/(ۀ|هٓ)/g, &amp;#039;هٔ&amp;#039;)&lt;br /&gt;
			// Replace ه followed by ئ or ی, and then by ی, with ه\u200cای, example: خانهئی becomes خانه\u200cای&lt;br /&gt;
			.replace(/ه\u200c[ئی]ی/g, &amp;#039;ه\u200cای&amp;#039;)&lt;br /&gt;
			// Function for removing incorrect ZWNJs&lt;br /&gt;
			.replace(/([\u200c\u200e])([\s\n])/g, &amp;#039;$2&amp;#039;)&lt;br /&gt;
			.replace(/([\s\n])([\u200c\u200e])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			//فاصلهٔ پیش از واکه\u200cهای کوتاه اشتباه است و برای جلوگیر از به هم چسبیدن کلمات فاصله و واکه جابجا باید گردند.&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + vowels + hamza + &amp;#039;])(\\s)([&amp;#039; + vowels + hamza + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1$3$2&amp;#039;)&lt;br /&gt;
			//واکه\u200cهای کوتاه پشت سرهم نمی\u200cآیند و یک حرف باید بینشان فاصله باشد&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + vowels + hamza + &amp;#039;]){2,}&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1&amp;#039;)&lt;br /&gt;
			.replace(/ئء/g, &amp;#039;یء&amp;#039;) //two hamzes after each other&lt;br /&gt;
			.replace(/أء/g, &amp;#039;اء&amp;#039;) //two hamzes after each other&lt;br /&gt;
			.replace(/ؤء/g, &amp;#039;ؤ&amp;#039;) //two hamzes after each other&lt;br /&gt;
			//.replace(/وء/g, &amp;#039;ؤ&amp;#039;)//bug on  سوء&lt;br /&gt;
			.replace(/سؤ ?استفاده/g, &amp;#039;سوءاستفاده&amp;#039;)//bug on سوءاستفاده و سوء&lt;br /&gt;
			//افزودن همزه&lt;br /&gt;
			.replace(/درباره (ام|ات|اش|مان|تان|شان|ای)(\s|$)/g, &amp;#039;درباره‌$1$2&amp;#039;)//i برای جلوگیری از باگ احتمالی برای افزودن همزه به درباره&lt;br /&gt;
			.replace(/درباره /g, &amp;#039;دربارهٔ &amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;صفحه(\\s|)([&amp;#039;+persianDigits+&amp;#039;]+)(\\n|\\.|\\,|\\||\\&amp;lt;)&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;صفحهٔ $2$3&amp;#039;);//[[Special:PermaLink/15326391#افزودن همزه]]&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Replaces Persian characters with Arabic&amp;#039;s ones so an Arabic sorter can sort Persian lines&lt;br /&gt;
	 */&lt;br /&gt;
	function dePersian(text) {&lt;br /&gt;
		return text&lt;br /&gt;
			.replace(/ی/g, &amp;#039;ي&amp;#039;)&lt;br /&gt;
			.replace(/ک/g, &amp;#039;ك&amp;#039;)&lt;br /&gt;
			.replace(/گ/g, &amp;#039;كی&amp;#039;)&lt;br /&gt;
			.replace(/ژ/g, &amp;#039;زی&amp;#039;)&lt;br /&gt;
			.replace(/چ/g, &amp;#039;جی&amp;#039;)&lt;br /&gt;
			.replace(/پ/g, &amp;#039;بی&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function persianSortText(text) {&lt;br /&gt;
		return text.split(&amp;#039;\n&amp;#039;).sort(function (x, y) {&lt;br /&gt;
			var keyX = dePersian(x),&lt;br /&gt;
				keyY = dePersian(y);&lt;br /&gt;
			if (keyX &amp;lt; keyY) {&lt;br /&gt;
				return -1;&lt;br /&gt;
			}&lt;br /&gt;
			if (keyX &amp;gt; keyY) {&lt;br /&gt;
				return 1;&lt;br /&gt;
			}&lt;br /&gt;
			return 0;&lt;br /&gt;
		}).join(&amp;#039;\n&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	persianPastVerbs = &amp;#039;(&amp;#039; +&lt;br /&gt;
		&amp;#039;ارزید|افتاد|افراشت|افروخت|افزود|افسرد|افشاند|افکند|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|انگیزاند|اوباشت|ایستاد&amp;#039; +&lt;br /&gt;
		&amp;#039;|آراست|آراماند|آرامید|آرمید|آزرد|آزمود|آسود|آشامید|آشفت|آشوبید|آغازید|آغشت|آفرید|آکند|آگند|آلود|آمد|آمرزید|آموخت|آموزاند&amp;#039; +&lt;br /&gt;
		&amp;#039;|آمیخت|آهیخت|آورد|آویخت|باخت|باراند|بارید|بافت|بالید|باوراند|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید&amp;#039; +&lt;br /&gt;
		&amp;#039;|بود|بوسید|بویید|بیخت|پاشاند|پاشید|پالود|پایید|پخت|پذیراند|پذیرفت|پراکند|پراند|پرداخت|پرستید|پرسید|پرهیزید|پروراند|پرورد|پرید&amp;#039; +&lt;br /&gt;
		&amp;#039;|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشاند|پوشید|پویید|پیچاند|پیچانید|پیچید|پیراست|پیمود|پیوست|تاباند|تابید|تاخت&amp;#039; +&lt;br /&gt;
		&amp;#039;|تاراند|تازاند|تازید|تافت|تپاند|تپید|تراشاند|تراشید|تراوید|ترساند|ترسید|ترشید|ترکاند|ترکید|تکاند|تکانید|تنید|توانست|جَست|جُست&amp;#039; +&lt;br /&gt;
		&amp;#039;|جست|جنباند|جنبید|جنگید|جهاند|جهید|جوشاند|جوشید|جوید|چاپید|چایید|چپاند|چپید|چراند|چربید|چرخاند|چرخید|چرید|چسباند|چسبید&amp;#039; +&lt;br /&gt;
		&amp;#039;|چشاند|چشید|چکاند|چکید|چلاند|چلانید|چمید|چید|خاراند|خارید|خاست|خایید|خراشاند|خراشید|خرامید|خروشید|خرید|خزید|خشکاند&amp;#039; +&lt;br /&gt;
		&amp;#039;|خشکید|خفت|خلید|خمید|خنداند|خندانید|خندید|خواباند|خوابانید|خوابید|خواست|خواند|خوراند|خورد|خوفید|خیساند|خیسید|داد|داشت|دانست&amp;#039; +&lt;br /&gt;
		&amp;#039;|درخشانید|درخشید|دروید|درید|دزدید|دمید|دواند|دوخت|دوشید|دوید|دید|دیدم|راند|ربود|رخشید|رساند|رسانید|رست|رَست|رُست&amp;#039; +&lt;br /&gt;
		&amp;#039;|رسید|رشت|رفت|رُفت|رقصاند|رقصید|رمید|رنجاند|رنجید|رندید|رهاند|رهانید|رهید|روبید|روفت|رویاند|رویید|ریخت|رید|ریسید&amp;#039; +&lt;br /&gt;
		&amp;#039;|زاد|زارید|زایید|زد|زدود|زیست|سابید|ساخت|سپارد|سپرد|سپوخت|ستاند|ستد|سترد|ستود|ستیزید|سرایید|سرشت|سرود|سرید&amp;#039; +&lt;br /&gt;
		&amp;#039;|سزید|سفت|سگالید|سنجید|سوخت|سود|سوزاند|شاشید|شایست|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمارد|شمرد|شناخت&amp;#039; +&lt;br /&gt;
		&amp;#039;|شناساند|شنید|شوراند|شورید|طپید|طلبید|طوفید|غارتید|غرید|غلتاند|غلتانید|غلتید|غلطاند|غلطانید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت&amp;#039; +&lt;br /&gt;
		&amp;#039;|فریفت|فشاند|فشرد|فهماند|فهمید|قاپید|قبولاند|کاست|کاشت|کاوید|کرد|کشاند|کشانید|کشت|کشید|کفت|کفید|کند|کوبید|کوچید&amp;#039; +&lt;br /&gt;
		&amp;#039;|کوشید|کوفت|گَزید|گُزید|گایید|گداخت|گذارد|گذاشت|گذراند|گذشت|گرازید|گرایید|گرداند|گردانید|گردید|گرفت|گروید|گریاند|گریخت|گریست&amp;#039; +&lt;br /&gt;
		&amp;#039;|گزارد|گزید|گسارد|گستراند|گسترد|گسست|گسیخت|گشت|گشود|گفت|گمارد|گماشت|گنجاند|گنجانید|گنجید|گندید|گوارید|گوزید|لرزاند|لرزید&amp;#039; +&lt;br /&gt;
		&amp;#039;|لغزاند|لغزید|لمباند|لمدنی|لمید|لندید|لنگید|لهید|لولید|لیسید|ماسید|مالاند|مالید|ماند|مانست|مرد|مکشید|مکید|مولید|مویید&amp;#039; +&lt;br /&gt;
		&amp;#039;|نازید|نالید|نامید|نشاند|نشست|نکوهید|نگاشت|نگریست|نمایاند|نمود|نهاد|نهفت|نواخت|نوردید|نوشاند|نوشت|نوشید|نیوشید|هراسید|هشت&amp;#039; +&lt;br /&gt;
		&amp;#039;|ورزید|وزاند|وزید|یارست|یازید|یافت&amp;#039; +&lt;br /&gt;
		&amp;#039;)&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	persianPresentVerbs = &amp;#039;(&amp;#039; +&lt;br /&gt;
		&amp;#039;ارز|افت|افراز|افروز|افزا|افزای|افسر|افشان|افکن|انبار|انباز|انجام|انداز|اندای|اندوز|اندیش|انگار|انگیز|انگیزان&amp;#039; +&lt;br /&gt;
		&amp;#039;|اوبار|ایست|آرا|آرام|آرامان|آرای|آزار|آزما|آزمای|آسا|آسای|آشام|آشوب|آغار|آغاز|آفرین|آکن|آگن|آلا|آلای&amp;#039; +&lt;br /&gt;
		&amp;#039;|آمرز|آموز|آموزان|آمیز|آهنج|آور|آویز|آی|بار|باران|باز|باش|باف|بال|باوران|بای|باید|بخش|بخشا|بخشای&amp;#039; +&lt;br /&gt;
		&amp;#039;|بر|بَر|بُر|براز|بساو|بسیج|بلع|بند|بو|بوس|بوی|بیز|بین|پا|پاش|پاشان|پالا|پالای|پذیر|پذیران&amp;#039; +&lt;br /&gt;
		&amp;#039;|پر|پراکن|پران|پرداز|پرس|پرست|پرهیز|پرور|پروران|پز|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوشان&amp;#039; +&lt;br /&gt;
		&amp;#039;|پوی|پیچ|پیچان|پیرا|پیرای|پیما|پیمای|پیوند|تاب|تابان|تاران|تاز|تازان|تپ|تپان|تراش|تراشان|تراو|ترس|ترسان&amp;#039; +&lt;br /&gt;
		&amp;#039;|ترش|ترک|ترکان|تکان|تن|توان|توپ|جنب|جنبان|جنگ|جه|جهان|جو|جوش|جوشان|جوی|چاپ|چای|چپ|چپان&amp;#039; +&lt;br /&gt;
		&amp;#039;|چر|چران|چرب|چرخ|چرخان|چسب|چسبان|چش|چشان|چک|چکان|چل|چلان|چم|چین|خار|خاران|خای|خر|خراش&amp;#039; +&lt;br /&gt;
		&amp;#039;|خراشان|خرام|خروش|خز|خشک|خشکان|خل|خم|خند|خندان|خواب|خوابان|خوان|خواه|خور|خوران|خوف|خیز|خیس&amp;#039; +&lt;br /&gt;
		&amp;#039;|خیسان|دار|درخش|درخشان|درو|دزد|دم|ده|دو|دوان|دوز|دوش|ران|ربا|ربای|رخش|رس|رسان&amp;#039; +&lt;br /&gt;
		&amp;#039;|رشت|رقص|رقصان|رم|رنج|رنجان|رند|ره|رهان|رو|روب|روی|رویان|ریز|ریس|رین|زا|زار|زای|زدا&amp;#039; +&lt;br /&gt;
		&amp;#039;|زدای|زن|زی|ساب|ساز|سای|سپار|سپر|سپوز|ستا|ستان|ستر|ستیز|سر|سرا|سرای|سرشت|سز|سگال|سنب&amp;#039; +&lt;br /&gt;
		&amp;#039;|سنج|سوز|سوزان|شاش|شای|شتاب|شکاف|شکف|شکن|شکوف|شکیب|شمار|شمر|شناس|شناسان|شنو|شو|شور|شوران|شوی&amp;#039; +&lt;br /&gt;
		&amp;#039;|طپ|طلب|طوف|غارت|غر|غلت|غلتان|غلط|غلطان|غنو|فرسا|فرسای|فرست|فرما|فرمای|فروش|فریب|فشار|فشان|فشر&amp;#039; +&lt;br /&gt;
		&amp;#039;|فهم|فهمان|قاپ|قبولان|کار|کاه|کاو|کش|کَش|کُش|کِش|کشان|کف|کن|کوب|کوچ|کوش|گا|گای|گداز&amp;#039; +&lt;br /&gt;
		&amp;#039;|گذار|گذر|گذران|گرا|گراز|گرای|گرد|گردان|گرو|گری|گریان|گریز|گز|گزار|گزین|گسار|گستر|گستران|گسل|گشا&amp;#039; +&lt;br /&gt;
		&amp;#039;|گشای|گمار|گنج|گنجان|گند|گو|گوار|گوز|گوی|گیر|لرز|لرزان|لغز|لغزان|لم|لمبان|لند|لنگ|له|لول&amp;#039; +&lt;br /&gt;
		&amp;#039;|لیس|ماس|مال|مان|مک|مول|موی|میر|ناز|نال|نام|نشان|نشین|نکوه|نگار|نگر|نما|نمای|نمایان|نه&amp;#039; +&lt;br /&gt;
		&amp;#039;|نهنب|نواز|نورد|نوش|نوشان|نویس|نیوش|هراس|هست|هل|ورز|وز|وزان|یاب|یار|یاز&amp;#039; +&lt;br /&gt;
		&amp;#039;)&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	persianComplexPastVerbs={&lt;br /&gt;
		&amp;#039;باز&amp;#039;:&amp;#039;آفرید|آمد|آموخت|آورد|ایستاد|تابید|جست|خواند|داشت|رساند|ستاند|شمرد|ماند|نمایاند|نهاد|نگریست|پرسید|گذارد&amp;#039;+&lt;br /&gt;
			&amp;#039;|گرداند|گردید|گرفت|گشت|گشود|گفت|یافت&amp;#039;,&lt;br /&gt;
		&amp;#039;در&amp;#039;:&amp;#039;بر ?داشت|بر ?گرفت|آمد|آمیخت|آورد|آویخت|افتاد|افکند|انداخت|رفت|ماند|نوردید|کشید|گرفت&amp;#039;,//bug: در گذشته &lt;br /&gt;
		&amp;#039;بر&amp;#039;:&amp;#039;آشفت|آمد|آورد|افتاد|افراشت|افروخت|افشاند|افکند|انداخت|انگیخت|تاباند|تابید|تافت|تنید|جهید|خاست|خواست|خورد&amp;#039;+&lt;br /&gt;
			&amp;#039;|داشت|دمید|شمرد|نهاد|چید|کرد|کشید|گرداند|گردانید|گردید|گزید|گشت|گشود|گمارد|گماشت&amp;#039;,&lt;br /&gt;
		&amp;#039;فرو&amp;#039;:&amp;#039;آمد|خورد|داد|رفت|نشاند|کرد|گذارد|گذاشت&amp;#039;,&lt;br /&gt;
		&amp;#039;وا&amp;#039;:&amp;#039;داشت|رهاند|ماند|نهاد|کرد&amp;#039;,&lt;br /&gt;
		&amp;#039;ور&amp;#039;:&amp;#039;آمد|افتاد|رفت&amp;#039;,&lt;br /&gt;
		&amp;#039;یاد&amp;#039;:&amp;#039;گرفت&amp;#039;,&lt;br /&gt;
		&amp;#039;پدید&amp;#039;:&amp;#039;آورد&amp;#039;,&lt;br /&gt;
		&amp;#039;پراکنده&amp;#039;:&amp;#039;ساخت&amp;#039;,&lt;br /&gt;
		&amp;#039;زمین&amp;#039;:&amp;#039;خورد&amp;#039;,&lt;br /&gt;
		&amp;#039;گول&amp;#039;:&amp;#039;زد&amp;#039;,&lt;br /&gt;
		&amp;#039;لخت&amp;#039;:&amp;#039;کرد&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	persianComplexPresentVerbs={&lt;br /&gt;
		&amp;#039;باز&amp;#039;:&amp;#039;آفرین|آموز|آور|ایست|تاب|جو|خوان|دار|رس|ستان|شمار|مان|نمایان|نه|نگر|پرس|گذار|گردان|گرد|گشا|گو|گیر|یاب&amp;#039;,&lt;br /&gt;
		&amp;#039;در&amp;#039;:&amp;#039;بر ?دار|بر ?گیر|آمیز|آور|آویز|افت|افکن|انداز|مان|نورد|کش|گذر|گیر&amp;#039;,//مشکل با: در روم باستان، در ده &lt;br /&gt;
		&amp;#039;بر&amp;#039;:&amp;#039;آشوب|آور|افت|افراز|افروز|افشان|افکن|انداز|انگیز|تابان|تاب|تن|جه|خواه|خور|خیز|دار|دم|شمار|نه|چین|کش|کن&amp;#039;+&lt;br /&gt;
			&amp;#039;|گردان|گزین|گشا|گمار&amp;#039;,&lt;br /&gt;
		//مشکل با : بر گردن&lt;br /&gt;
		&amp;#039;فرو&amp;#039;:&amp;#039;خور|ده|رو|نشین|کن|گذار&amp;#039;,&lt;br /&gt;
		&amp;#039;وا&amp;#039;:&amp;#039;دار|رهان|مان|نه|کن&amp;#039;,&lt;br /&gt;
		&amp;#039;ور&amp;#039;:&amp;#039;افت|رو&amp;#039;,&lt;br /&gt;
		&amp;#039;یاد&amp;#039;:&amp;#039;گیر&amp;#039;,&lt;br /&gt;
		&amp;#039;پدید&amp;#039;:&amp;#039;آور&amp;#039;,&lt;br /&gt;
		&amp;#039;پراکنده&amp;#039;:&amp;#039;ساز&amp;#039;,&lt;br /&gt;
		&amp;#039;زمین&amp;#039;:&amp;#039;خور&amp;#039;,&lt;br /&gt;
		&amp;#039;گول&amp;#039;:&amp;#039;زن&amp;#039;,&lt;br /&gt;
		&amp;#039;لخت&amp;#039;:&amp;#039;کن&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function complexVerbsApplyZwnj(text) {&lt;br /&gt;
		for (var x in persianComplexPastVerbs) {&lt;br /&gt;
			var y = persianComplexPastVerbs[x]&lt;br /&gt;
			text = text.replace(new RegExp(&lt;br /&gt;
				  &amp;#039;(^|[^&amp;#039; + persianCharacters + &amp;#039;])(&amp;#039; + x + &amp;#039;) ?(می|نمی|)( |\u200c|)(ن|)(&amp;#039;&lt;br /&gt;
					 + y + &amp;#039;)(م|ی|یم|ید|ند|ه|ن|)($|[^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1$2\u200c$3\u200c$5$6$7$8&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
		for (var x in persianComplexPresentVerbs) {&lt;br /&gt;
			var y = persianComplexPresentVerbs[x]&lt;br /&gt;
			text = text.replace(new RegExp(&lt;br /&gt;
				  &amp;#039;(^|[^&amp;#039; + persianCharacters + &amp;#039;])(&amp;#039; + x + &amp;#039;) ?(می|نمی|)( |\u200c|)(ن|)(&amp;#039;&lt;br /&gt;
					 + y + &amp;#039;)(م|ی|د|یم|ید|ند|ن)($|[^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1$2\u200c$3\u200c$5$6$7$8&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
		return text;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function applyZwnj(text) {&lt;br /&gt;
		text=complexVerbsApplyZwnj(text);&lt;br /&gt;
		return normalizeZwnj(text)&lt;br /&gt;
			.replace(&lt;br /&gt;
				new RegExp(&amp;#039;(^|[^&amp;#039; + persianCharacters + &amp;#039;])(می|نمی) ?&amp;#039; + persianPastVerbs +&lt;br /&gt;
					&amp;#039;(م|ی|یم|ید|ند|ه|)($|[^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1$2\u200c$3$4$5&amp;#039;&lt;br /&gt;
			)&lt;br /&gt;
			.replace(&lt;br /&gt;
				new RegExp(&amp;#039;(^|[^&amp;#039; + persianCharacters + &amp;#039;])(می|نمی) ?&amp;#039; + persianPresentVerbs +&lt;br /&gt;
					&amp;#039;(م|ی|د|یم|ید|ند)($|[^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1$2\u200c$3$4$5&amp;#039;&lt;br /&gt;
			)&lt;br /&gt;
			// ماضی نقلی&lt;br /&gt;
			.replace(&lt;br /&gt;
				new RegExp(&amp;#039;(^|[^&amp;#039; + persianCharacters + &amp;#039;])(ن|)&amp;#039; + persianPastVerbs +&lt;br /&gt;
					&amp;#039;ه (ام|ای|ایم|اید|اند|است)($|[^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1$2$3ه\u200c$4$5&amp;#039;&lt;br /&gt;
			)&lt;br /&gt;
			&lt;br /&gt;
			// بن فعل مضارع «دان» جدا آمد چون پسوند «ی» با عبارت «میدانی» تداخل داشت&lt;br /&gt;
			.replace(&lt;br /&gt;
				new RegExp(&amp;#039;(^|[^&amp;#039; + persianCharacters + &amp;#039;])(می|نمی) ?(دان)(م|د|یم|ید|ند)($|[^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1$2\u200c$3$4$5&amp;#039;&lt;br /&gt;
			)&lt;br /&gt;
			// ای «توان» ناقلا!&lt;br /&gt;
			.replace(/(\s)(می|نمی) ?توان/g, &amp;#039;$1$2\u200cتوان&amp;#039;)&lt;br /&gt;
			// چسباندن تمام «ها»ها با فاصلهٔ مجازی&lt;br /&gt;
			.replace(/ ها([\]\.،\:»\)\s]|\&amp;#039;{2,3}|\={2,})/g, &amp;#039;\u200cها$1&amp;#039;)&lt;br /&gt;
			.replace(/ ها(ی|یی|یم|یت|یش|ی?مان|ی?تان|ی?شان)([\]\.،\:»\)\s])/g, &amp;#039;\u200cها$1$2&amp;#039;)&lt;br /&gt;
			.replace(/هها/g, &amp;#039;ه‌ها&amp;#039;)&lt;br /&gt;
			// چسباندن تمام «ترین»ها با فاصلهٔ مجازی&lt;br /&gt;
			.replace(/ ترین([\]\.،\:»\)\s]|\&amp;#039;{2,3}|\={2,})/g, &amp;#039;\u200cترین$1&amp;#039;)&lt;br /&gt;
			// چسباندن تمام «تبار»ها با فاصلهٔ مجازی&lt;br /&gt;
			.replace(&lt;br /&gt;
				new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;]ی) تبار([^&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;),&lt;br /&gt;
				&amp;#039;$1\u200cتبار$2&amp;#039;&lt;br /&gt;
			)&lt;br /&gt;
			// برای حذف علامت ستاره اضافی قبل از عنوان ها&lt;br /&gt;
			.replace(/\n\*\s*(\=+.+?\=+\n)/g, &amp;#039;\n$1&amp;#039;)&lt;br /&gt;
			// عضو علامت های نقل قول تکی از عنوان ها&lt;br /&gt;
			.replace(/(\n=+)(.*?)(?:&amp;#039;+)(.*?)(?:&amp;#039;+)(.*?)(=+\n)/g, &amp;#039;$1$2$3$4$5&amp;#039;)&lt;br /&gt;
			// اول و آخر هم خط اگر فاصلهٔ مجازی باشد، حذف شود&lt;br /&gt;
			.replace(/(^\u200c|\u200c$)/mg, &amp;#039;&amp;#039;)&lt;br /&gt;
			// شناسه ها&lt;br /&gt;
			// توجه: «است» تعدماً از شناسه ها حذف شده چون به عنوان فعل مستقل هم کاربرد دارد و در آن موارد باید جدا نوشته شود&lt;br /&gt;
			// مثال: «این یک خانه است» که است در آن باید از خانه جدا نوشته شود&lt;br /&gt;
			// حروف «ام» و «ای» هم به دلیل تشابه با حرف ندا «اِی» و ام انگلیسی و ای انگلیسی حذف شدند.&lt;br /&gt;
			//.replace(new RegExp(&amp;#039;ه +(ایم|اید|اند)($|[^&amp;#039; + persianCharacters + &amp;#039;\u200c])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;ه\u200c$1$2&amp;#039;)// به بخش ماضی نقلی منتقل شد&lt;br /&gt;
			// موارد جزئی دیگر و بی ربط به فاصلهٔ مجازی، باید منتقل شود&lt;br /&gt;
			.replace(/ا\sً/g, &amp;#039;اً&amp;#039;)&lt;br /&gt;
			// رفع اشکال که\u200cای&lt;br /&gt;
			.replace(/ که\u200cای /g, &amp;#039; که ای &amp;#039;)&lt;br /&gt;
			//رفع اشکال میستری (Mystery)&lt;br /&gt;
			.replace(/می\u200cستری/g, &amp;#039;میستری&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;می\u200cگوی($|[^&amp;#039; + persianCharacters + &amp;#039;\u200c])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;میگوی$1&amp;#039;) // for میگوی دریایی&lt;br /&gt;
			.replace(new RegExp(&amp;#039;می\u200cدوی($|[^&amp;#039; + persianCharacters + &amp;#039;\u200c])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;میدوی$1&amp;#039;);// for [[میدوی (ابهام‌زدایی)]]&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function punctuation(text) {&lt;br /&gt;
		return text&lt;br /&gt;
			/// سجاوندی غیرفارسی&lt;br /&gt;
			.replace(/ː/g, &amp;#039;:&amp;#039;) // Replace incorrect : character&lt;br /&gt;
			// استفاده از ؟ فارسی&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])[ ]*[?]&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1؟&amp;#039;)&lt;br /&gt;
			// استفاده از ; فارسی&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])[ ]*[;]&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1؛ &amp;#039;)&lt;br /&gt;
			// استفاده از ، فارسی&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])(\]\]|»|)[ ]*[,]&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1$2، &amp;#039;)&lt;br /&gt;
			//حذف دو فاصله بعد از سجاوندی&lt;br /&gt;
			.replace(/(،|؛|؟|\.)  /g, &amp;#039;$1 &amp;#039;)&lt;br /&gt;
			.replace(/\r/g, &amp;#039;&amp;#039;)&lt;br /&gt;
			// افزودن یا حذف فاصله&lt;br /&gt;
			// حذف فاصله‌های تکراری میان واژه‌ها، به جز بین نام پارامتر و علامت مساوی&lt;br /&gt;
			.replace(/(. ) +(?=[^= ])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			//فاصله بعد از سجاوندی به جز ! به دلیل (&amp;lt;!-- و !! در بالای جدول‌ها)&lt;br /&gt;
			.replace(/([،\.\؛\؟»])([^\s\.\(\)«»\&amp;quot;\[\]&amp;lt;&amp;gt;\d\w\{\}\|۰۱۲۳۴۵۶۷۸۹\&amp;#039;])/g, &amp;#039;$1 $2&amp;#039;)&lt;br /&gt;
			// افزودن فاصله به بعد از سجاوندی&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;]+|\\]|\\)|»)([؟،؛\\!\\.])([&amp;#039; + persianCharacters +persianDigits + &amp;#039;]+|\\[|\\(|«)&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1$2 $3&amp;#039;)&lt;br /&gt;
			// حذف فاصله بعد از گیومه، پرانتز، براکت باز&lt;br /&gt;
			.replace(/([\(«\[]) /g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// حذف فاصله قبل از گیومه، پرانتز، براکت بسته&lt;br /&gt;
			.replace(/ ([\)»\]])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// افزودن فاصله قبل از گیومه باز&lt;br /&gt;
			.replace(/([^ \(\[\|\r\n&amp;gt;&amp;#039;])(«)/g, &amp;#039;$1 $2&amp;#039;)&lt;br /&gt;
			.replace(/ +\( +/g, &amp;#039; (&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;]|\\]|») *\\( *(?=[&amp;#039; + persianCharacters + &amp;#039;])(?!ها\\)|ان\\))&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1 (&amp;#039;)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;]) *\\) *(?=[&amp;#039; + persianCharacters + &amp;#039;]|\\[|«)&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1) &amp;#039;)&lt;br /&gt;
			// خط جدید&lt;br /&gt;
			.replace(/\n\s{1,}\n/g, &amp;#039;\n\n&amp;#039;)&lt;br /&gt;
			// Removes extra line between two items list&lt;br /&gt;
			.replace(/(\n\*.*?)\n+(?=\n\*)/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// Removes extra line between two items list&lt;br /&gt;
			.replace(/(\n#.*?)\n+(?=\n#)/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// Convert , to ، if there are Persian characters on both sides of it &lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;]), ?(?=[&amp;#039; + persianCharacters + &amp;quot;])&amp;quot;, &amp;#039;g&amp;#039;), &amp;#039;$1$2، &amp;#039;)&lt;br /&gt;
			// بعد از نقطه‌ویرگول فارسی علامتی قرار نمی‌گیرد&lt;br /&gt;
			.replace(/(؛)(([\s]+)?[\.،؛:!؟\-…])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// در انتهای پاراگراف نقطه‌ویرگول فارسی نمی‌آید&lt;br /&gt;
			.replace(/(؛)(\s|)\n\n/g, &amp;#039;.\n\n&amp;#039;)&lt;br /&gt;
			// سجاوندی در ابتدای علامت باز قرار نمی‌گیرد&lt;br /&gt;
			.replace(/([\(«])[\s]([؛\.،])/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// ویرگول فارسی&lt;br /&gt;
			// بعد از ویرگول فارسی این علامت‌ها قرار نمی‌گیرد&lt;br /&gt;
			.replace(/(،)([\s]+)?([،؛!؟\-][\.،؛!؟\-]*|\.(?!\.))/g, &amp;#039;$1&amp;#039;)&lt;br /&gt;
			// نقطه&lt;br /&gt;
			// باید سه نقطه باشد&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])( *)(\\.{3,})&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1$2…&amp;#039;)&lt;br /&gt;
			.replace(/ \.\.\. /g, &amp;#039; … &amp;#039;)&lt;br /&gt;
			// بعد از نقطه این علایم نمی‌آیند&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])\\.( *[،؛:!؟\\?]+)&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1.&amp;#039;)&lt;br /&gt;
			// سجاوندی در ابتدای پرانتز و گیومه باز قرار نمی‌گیرد&lt;br /&gt;
			.replace(new RegExp(&amp;#039;(\\(|«)[\\.،؛](\\s|)([&amp;#039; + persianCharacters + &amp;#039;])&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1$3&amp;#039;)&lt;br /&gt;
			// سجاوندی در داخل پرانتز&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])(\\s|)[\\.،؛](\\s|)(\\))&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1$2$3$4&amp;#039;)&lt;br /&gt;
			// در صورت وابستگی معنی جملات بهتر است نقطه‌ویرگول فارسی قرار گیرد&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianCharacters + &amp;#039;])(\\s|)(\\.)(\\s|)(ولی|که\\s|و\\s|بنابراین|لذا)&amp;#039;, &amp;#039;g&amp;#039;), &amp;#039;$1؛ $5&amp;#039;)&lt;br /&gt;
			/// Question &amp;amp; exclamation mark&lt;br /&gt;
			// علامت تعجب تکراری به دلیل وجود !! در عنوان جدول‌های مدیاویکی نباید اصلاح شود.&lt;br /&gt;
			// تكرار علامت سوال فارسی&lt;br /&gt;
			.replace(/(؟(\s|)){2,}/g, &amp;#039;؟&amp;#039;)&lt;br /&gt;
			// علامت‌گذاری نادرست&lt;br /&gt;
			.replace(&amp;#039;؟ !&amp;#039;, &amp;#039;؟!&amp;#039;).replace(&amp;#039;! ؟&amp;#039;, &amp;#039;!؟&amp;#039;)&lt;br /&gt;
			// Remove space preceding punctuation, except for ellipses&lt;br /&gt;
			.replace(/([^ \.]) +([؟،\:؛!\.])(\s[^ \.]|&amp;lt;|$)/g, &amp;#039;$1$2$3&amp;#039;)&lt;br /&gt;
			// تبدیل نیم‌خط به تمام خط بین اعداد فارسی (ایران پدیا:خط تیره)&lt;br /&gt;
			.replace(new RegExp(&amp;#039;([&amp;#039; + persianDigits + &amp;#039;]+\\s?(?:\\_\\_|\\-|ـ+)\\s?)*([&amp;#039; + persianDigits + &amp;#039;]+)\\s?(?:\\_\\_|\\-|ـ+)\\s?([&amp;#039; + persianDigits + &amp;#039;]+)(?!\\s?(?:\\_\\_|\\-|ـ+)\\s?[&amp;#039; + persianDigits + &amp;#039;]+)&amp;#039;, &amp;#039;g&amp;#039;), function ($0, $1, $2, $3) { return ($1 ? $0 : $2 + &amp;#039;–&amp;#039; + $3) })&lt;br /&gt;
			// عبارت «ها» درون پرانتز می‌تواند به کلمه قبلی خود بچسبد&lt;br /&gt;
			.replace(/ \(ها\)/g, &amp;#039;(ها)&amp;#039;)&lt;br /&gt;
			.replace(/ه‍\. (ق|خ|ش)([\n ])/g, &amp;#039;ه‍.$1$2&amp;#039;)//iاصلاح تاریخ هجری&lt;br /&gt;
			// حذف فاصلهٔ میان دو عبارت مختصر که دارای نقطهٔ اختصار باشند&lt;br /&gt;
			.replace(new RegExp(&amp;#039;(\^|\\||\\(|«|\\}|&amp;quot;|\\s|\\*|\\#)(([&amp;#039; + persianCharacters + &amp;#039;]\{1,2\})\\. \?)\{2,6\}&amp;#039;, &amp;#039;g&amp;#039;), function (m) { return m.replace(/\. (.)/g, &amp;#039;.$1&amp;#039;); });&lt;br /&gt;
	}&lt;br /&gt;
	return {&lt;br /&gt;
		applyOrthography: applyOrthography,&lt;br /&gt;
		applyZwnj: applyZwnj,&lt;br /&gt;
		normalizeZwnj: normalizeZwnj,&lt;br /&gt;
		persianSortText: persianSortText,&lt;br /&gt;
		punctuation: punctuation,&lt;br /&gt;
		toPersianDigits: toPersianDigits,&lt;br /&gt;
		toStandardPersianCharacters: toStandardPersianCharacters,&lt;br /&gt;
		vowels: vowels,&lt;br /&gt;
		persianCharacters: persianCharacters,&lt;br /&gt;
		persianCharactersNoVowels: persianCharactersNoVowels&lt;br /&gt;
	};&lt;br /&gt;
}());&lt;br /&gt;
if (typeof window !== &amp;#039;undefined&amp;#039;) {&lt;br /&gt;
	window.persianTools = persianTools;&lt;br /&gt;
}&lt;br /&gt;
// &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rootadmin</name></author>
	</entry>
</feed>