پرش به محتوا

کاربر:Behaafarid/BehaafaridTools.js

از ویکی‌پدیا، دانشنامهٔ آزاد
نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید ⇧ Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.
/*{{چپ‌چین}}*/
/*<pre>*/
// توجه:
// نسخهٔ جدید این ابزار به همراه تاریخچهٔ ویرایشش در [[MediaWiki:Gadget-Extra-Editbuttons.js]] قرار دارد.

// This method executes callback argument, with a string parameter.
// The string parameter is selected part of textarea, if any,
// or the whole content of the text area if no part of this element is selected.
// Tested under FF 3.0.x, Chrome 2.x, Opera 9.6x and IE 6.0, 7.0.
// Known issues: on IE (6 and 7), when selecting a whole line (including RETURN character), it removes the RETURN from that line.
function applyOnSelection(callback) {
  var txtarea = document.editform.wpTextbox1;
  var selText;
  if (document.selection  && document.selection.createRange) { // IE/Opera
    // get current selection  
    txtarea.focus();
    var range = document.selection.createRange();
    selText = range.text;
    if (selText) {
      range.text = callback.apply(this, [selText]);
      range.select();   
    } else {
      txtarea.value = callback.apply(this, [txtarea.value]);
    }
  } else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
    // get current selection
    txtarea.focus();
    var startPos = txtarea.selectionStart;
    var endPos = txtarea.selectionEnd;
    selText = txtarea.value.substring(startPos, endPos);
    //insert tags
    if (selText) {
      txtarea.value = txtarea.value.substring(0, startPos)
        + callback.apply(this, [selText])
        + txtarea.value.substring(endPos, txtarea.value.length);
      txtarea.selectionStart = startPos + selText.length;
      txtarea.selectionEnd = txtarea.selectionStart;
    } else {
      txtarea.value = callback.apply(this, [txtarea.value]);
    }
  }
}



function URLfix (obj) {
   s = obj.value;
   s = s.replace(/(http[^\s]+?)\%20/g,'$1\u200c\u200c\u200c_\u200c\u200c\u200c');
   s = s.replace(/(http[^\s]+)/g,function(s,p){return decodeURI(p)});
   s = s.replace(/\u200c\u200c\u200c_\u200c\u200c\u200c/g,'%20');

   obj.value = s;
}
function YKarabic (obj, selectionMode) {
var f = function(s) {
   var sold= s;

//ي --> ی و ك --> ک

//برای جلوگیری از خرابکاری در پیوند تصویرها و میان\u200cویکی
  s=s.replace (/\[\[([^\]]*?\:[^\]]*?)ي(.*?)\]\]/g, '[[$1\u200c\u200c\u200cی\u200c\u200c\u200c$2]]');
  s=s.replace (/\[\[([^\]]*?\:[^\]]*?)ك(.*?)\]\]/g, '[[$1\u200c\u200c\u200cک\u200c\u200c\u200c$2]]');

while (sold!=s)
{
   sold =s;
  s=s.replace (/\[\[([^\]]*?\:[^\]]*?)ي(.*?)\]\]/g, '[[$1\u200c\u200c\u200cی\u200c\u200c\u200c$2]]');
  s=s.replace (/\[\[([^\]]*?\:[^\]]*?)ك(.*?)\]\]/g, '[[$1\u200c\u200c\u200cک\u200c\u200c\u200c$2]]');
}
   
  s = s.replace(/ي/g, 'ی');
  s = s.replace(/ك/g, 'ک');

  s= s.replace(/\u200c\u200c\u200cی\u200c\u200c\u200c/g, 'ي');
  s= s.replace(/\u200c\u200c\u200cک\u200c\u200c\u200c/g, 'ك');

//اصلاح ی و ک در متنهای عربی
 sold = s;
s = s.replace(/\{\{عربی([^(\}\})]*?)ی(.*?)\}\}/g, '{{عربی$1ي$2}}');
s = s.replace(/\{\{عربی([^(\}\})]*?)ک(.*?)\}\}/g, '{{عربی$1ك$2}}');
   s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '{{آغاز عربی}}$1ي$2پایان عربی}}');
   s = s.replace(/\{\{شروع\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '{{شروع عربی}}$1ي$2پایان عربی}}');
   s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '{{آغاز عربی}}$1ك$2پایان عربی}}');
   s = s.replace(/\{\{شروع\sعربی\}\}([^پایان\sعربی(\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '{{شروع عربی}}$1ك$2پایان عربی}}');
s = s.replace(/\[\[ar:(.*?)ی(.*?)\]\]/g, '[[ar:$1ي$2]]');
s = s.replace(/\[\[ar:(.*?)ک(.*?)\]\]/g, '[[ar:$1ك$2]]');


while (sold!=s)
{
   sold=s;
s = s.replace(/\{\{عربی([^(\}\})]*?)ی(.*?)\}\}/g, '{{عربی$1ي$2}}');
s = s.replace(/\{\{عربی([^(\}\})]*?)ک(.*?)\}\}/g, '{{عربی$1ك$2}}');
   s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '{{آغاز عربی}}$1ي$2پایان عربی}}');
   s = s.replace(/\{\{شروع\sعربی\}\}([^(پایان\sعربی\}\})]*?)ی(.*?)پایان\sعربی\}\}/g, '{{شروع عربی}}$1ي$2پایان عربی}}');
   s = s.replace(/\{\{آغاز\sعربی\}\}([^(پایان\sعربی\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '{{آغاز عربی}}$1ك$2پایان عربی}}');
   s = s.replace(/\{\{شروع\sعربی\}\}([^پایان\sعربی(\}\})]*?)ک(.*?)پایان\sعربی\}\}/g, '{{شروع عربی}}$1ك$2پایان عربی}}');
s = s.replace(/\[\[ar:(.*?)ی(.*?)\]\]/g, '[[ar:$1ي$2]]');
s = s.replace(/\[\[ar:(.*?)ک(.*?)\]\]/g, '[[ar:$1ك$2]]');

}


//حدف نویسهٔ ممنوع  ۰۶۴۹
 sold = s;

//جلوگیری از تغییر متن نشان عربی خورده و تصویر و پیوندهای میان‌ویکی
  s = s.replace (/\[\[([^\]]*?\:[^\]]*?)ى(.*?)\]\]/g, '[[$1\u200c\u200c\u200cی\u200c\u200c\u200c$2]]');
  s = s.replace(/\{\{عربی(.*?)ى(.*?)\}\}/g, '{{عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2}}');
  s = s.replace(/\{\{آغاز عربی(.*?)ى(.*?)پایان عربی\}\}/g, '{{آغاز عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی}}');
  s = s.replace(/\{\{شروع عربی(.*?)ى(.*?)پایان عربی\}\}/g, '{{شروع عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی}}');

while (sold!=s)
{
   sold=s;
   s = s.replace (/\[\[([^\]]*?\:[^\]]*?)ى(.*?)\]\]/g, '[[$1\u200c\u200c\u200cی\u200c\u200c\u200c$2]]');
   s = s.replace(/\{\{عربی(.*?)ى(.*?)\}\}/g, '{{عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2}}');
   s = s.replace(/\{\{آغاز عربی(.*?)ى(.*?)پایان عربی\}\}/g, '{{آغاز عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی}}');
   s = s.replace(/\{\{شروع عربی(.*?)ى(.*?)پایان عربی\}\}/g, '{{شروع عربی$1\u200c\u200c\u200cی\u200c\u200c\u200c$2پایان عربی}}');

}

s = s.replace(/ى/g, 'ی');
s = s.replace(/\u200c\u200c\u200cی\u200c\u200c\u200c/g, 'ى');

  sold=s;
//اصلاح رده‌ها
  s = s.replace(/\[\[(رده|Category|category):(.*?)(ى|ي)(.*?)\]\]/g, '[[$1:$2ی$4]]');
  s = s.replace(/\[\[(رده|Category|category):(.*?)ك(.*?)\]\]/g, '[[$1:$2ک$3]]');
  while(sold!=s)
{
  sold=s;
  s = s.replace(/\[\[(رده|Category|category):(.*?)(ى|ي)(.*?)\]\]/g, '[[$1:$2ی$4]]');
  s = s.replace(/\[\[(رده|Category|category):(.*?)ك(.*?)\]\]/g, '[[$1:$2ک$3]]');

}
  return s;
};
 if (selectionMode) {
    applyOnSelection(f);
  } else {
    obj.value = f(obj.value);
  }  


}

function FM (obj, selectionMode) {
    var f = function(s) {

//بن‌های ماضی
var a01 = "(آراست|آرامید|آزرد|آزمود|آسود|آشامید|آشفت|آغازید|آغشت|آفرید|آگند|آلود|آمد|آمرزید";
var a02 = "|آموخت|آمیخت|آورد|آویخت|آهیخت|ارزید|افتاد|افراشت|افروخت|اف��ود|افسرد|افشاند|افگند";
var a03 = "|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|اوباشت|ایستاد|باخت";
var a04 = "|بارید|بافت|بالید|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید|بود";
var a05 = "|بوسید|بویید|بیخت|پاشید|پالود|پخت|پذیرفت|پراکند|پرداخت|پرستید|پرسید|پرورد|پرید";
var a06 = "|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشید|پویید|پیچید|پیراست";
var a07 = "|پیمود|پیوست|تاخت|تافت|تپید|تراشید|تراوید|ترسید|ترشید|ترکید|تکاند|تکانید|تنید|توانست";
var a08 = "|جست|جُست|جَست|جنبید|جنگید|جوشید|جوید|جهید|چاپید|چایید|چپید|چربید|چرخید|چرید|چسبید|چشید";
var a09 = "|چکید|چلاند|چلانید|چمید|چید|خارید|خاست|خایید|خراشید|خرامید|خروشید|خرید|خزید|خست";
var a10 = "|خشکید|خلید|خمید|خوابید|خواست|خواند|خورد|خوفید|خیسید|داد|داشت|دانست|درخشید|دروید";
var a11 = "|درید|دزدید|دمید|دوخت|دوشید|دوید|دیدم|ربود|رخشید|رسید|رست|رَست|رُست|رشت|رفت|رُفت|روفت";
var a12 = "|رقصید|رمید|رنجید|رندید|رویید|ریخت|رید|زارید|زایید|زد|زدود|زیست|ساخت|سپرد|سپوخت";
var a13 = "|ستد|سترد|ستود|ستیزید|سرود|سرشت|سرید|سزید|سفت|سگالید|سنجید|سوخت|سود|شاشید|شایست";
var a14 = "|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمرد|شناخت|شنید|شورید|طلبید|طوفید|غارتید";
var a15 = "|غرید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت|فریفت|فشرد|فهمید|قاپید|قبولاند|کاست";
var a16 = "|کاشت|کاوید|کرد|کشت|کشید|مکشید|کفت|کفید|کند|کوچید|کوشید|کوفت|گایید|گداخت|گذاشت";
var a17 = "|گذشت|گرازید|گرایید|گردید|گرفت|گروید|گریخت|گریست|گزارد|گزید|گُزید|گَزید|گسارد|گسترد|گسست";
var a18 = "|گشت|گشود|گفت|گماشت|گنجید|گندید|گوارید|گوزید|لرزید|لغزید|لمدنی|لندید|لنگید|لهید";
var a19 = "|لیسید|ماسید|مالید|ماند|مرد|مکید|مولید|مویید|نازید|نالید|نامید|نشست|نکوهید|نگاشت";
var a20 = "|نگریست|نمود|نواخت|نوردید|نوشت|نوشید|نهاد|نهفت|نیوشید|ورزید|وزید|هراسید|هشت";
var a21 = "|یارست|یازید|یافت)";
 
var verbs = a01+a02+a03+a04+a05+a06+a07+a08+a09+a10+a11+a12+a13+a14+a15+a16+a17+a18+a19+a20+a21;
var hoohaahaahaa = "(می|نمی)" + verbs + "(م|ی|یم|ید|ند|\\s|\\.|،|!|؛)"
var re = new RegExp(hoohaahaahaa, "g");
s=s.replace (re, '$1\u200c$2$3');

//بن‌های مضارع
var b01 = "(آرای|آرام|آزار|آزمای|آسای|آشام|آشوب|آغاز|آغار|آفرین|آگن|آلای|آی|آمرز";
var b02 = "|آموز|آمیز|آور|آویز|آهنج|ارز|افت|افراز|افروز|افزای|افسر|افشان|افگن";
var b03 = "|انبار|انجام|انداز|اندوز|اندای|اندیش|انگار|انگیز|اوبار|ایست|باز";
var b04 = "|بار|باش|باف|بال|بای|بخشای|بخش|براز|بر|بُر|بَر|بند|بساو|بسیج|بلع|بو";
var b05 = "|بوس|بوی|بیز|پاش|پالای|پز|پذیر|پراکن|پرداز|پرست|پرس|پرور|پر";
var b06 = "|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوی|پیچ|پیرای";
var b07 = "|پیمای|پیوند|تاز|تاب|تپ|توپ|تراش|تراو|ترس|ترش|ترک|تکان|تن|توان";
var b08 = "|جه|جوی|جنب|جنگ|جوش|جو|چاپ|چای|چپ|چرب|چرخ|چر|چسب|چش";
var b09 = "|چک|چلان|چم|چین|خار|خیز|خای|خراش|خرام|خروش|خر|خز|خست";
var b10 = "|خشک|خل|خم|خواب|خواه|خوان|خور|خوف|خیس|ده|دار|دان|درخش|درو";
var b11 = "|در|دزد|دم|دوز|دوش|دو|بین|ربای|رخش|رس|ره|روی|رشت|رو|روب";
var b12 = "|رقص|رم|رنج|رند|روی|ریز|رین|زار|زای|زن|زدای|زی|ساز|سپر|سپوز";
var b13 = "|ستان|ستر|ستان|ستیز|سرای|سرشت|سر|سز|سنب|سگال|سنج|سوز|سای|شاش|شای";
var b14 = "|شتاب|شو|شوی|شکاف|شکن|شکوف|شکیب|شمر|شناس|شنو|شور|طلب|طوف|غارت";
var b15 = "|غر|غلط|غنو|فرست|فرسای|فرمای|فروش|فریب|فشر|فهم|قاپ|قبولان|کاه";
var b16 = "|کار|کاو|کن|کار|کُش|کش|کِش|کَش|کف|کن|کوچ|کوش|کوب|گای|گداز|گذار";
var b17 = "|گذر|گراز|گرای|گرد|گیر|گرو|گریز|گری|گزار|گز|گزین|گسار|گستر|گسل";
var b18 = "|گشای|گو|گمار|گنج|گند|گوار|گوز|لرز|لغز|لم|لند|لنگ|لهید";
var b19 = "|لیس|ماس|مال|مان|میر|مک|مول|موی|ناز|نال|نام|نشین|نکوه|نگار";
var b20 = "|نگر|نمای|نواز|نورد|نویس|نوش|نه|نهنب|نیوش|ورز|وز|هراس|هل";
var b21 = "|یار|یاز|یاب)";


var verbs = b01+b02+b03+b04+b05+b06+b07+b08+b09+b10+b11+b12+b13+b14+b15+b16+b17+b18+b19+b20+b21;
var hoohbbhbbhbb = "(می|نمی)" + verbs + "(م|ی|د|یم|ید|ند)"
var re = new RegExp(hoohbbhbbhbb, "g");
s=s.replace (re, '$1\u200c$2$3');

//ای «توان» ناقلا!
s = s.replace (/(می|نمی)توان/g,"$1\u200cتوان");

 //تبدیل الگو {{فم}} به نویسه
 s = s.replace(/\{\{فم\}\}/g,'\u200c');
//تبدیل چند فاصلهٔ مجازی پشت\u200cسرهم به یک فاصله مجازی.
   s = s.replace(/(\u200c)+/g, '\u200c');

//حذف فاصلهٔ مجازی بعد از آادذرزژو . ، « »
  s = s.replace(/([\.،«»\:؛\sآادذرزژوة])\u200c/g,'$1');

//حذف فاصلهٔ مجازی پیش از حروف لاتین و نیز نشانه‌های سجاوندی
  s = s.replace(/\u200c([\w\[\]\n\s\.،«»\:؛])/g,'$1');

//اصلاح می پیشوندی
  s = s.replace(/\sمی\s/g, ' می\u200c');
  s = s.replace(/\sنمی\s/g, ' نمی\u200c');
  s = s.replace(/\sمی\u200cو\s/g, ' می و');

//فعلهای مصدر بودن
  s = s.replace(/ه\sام([\]\.،\:»\)\s])/g,  'ه\u200cام$1');
  s = s.replace(/ه\sای([\]\.،\:»\)\s])/g,  'ه\u200cای$1');
  s = s.replace(/([^ا])ه\sاست([\]\.،\:»\)\s])/g, '$1ه\u200cاست$2');
  s = s.replace(/ه\sایم([\]\.،\:»\)\s])/g, 'ه\u200cایم$1');
  s = s.replace(/ه\sاید([\]\.،\:»\)\s])/g, 'ه\u200cاید$1');
  s = s.replace(/ه\sاند([\]\.،\:»\)\s])/g, 'ه\u200cاند$1');

/*چسباندن ها بر اساس مفاد دستور خط فرهنگستان و شیوه\u200cنامهٔ ویکی\u200cپدیا:*/
//تمام «ها» با فاصلهٔ مجازی می‌چسبند. و این مطابق مفاد آخرین شیوه‌نامه غلط نیست.

   s=s.replace(/\sها([\]\.،\:»\)\s])/g, '\u200cها$1');
  s=s.replace(/\sها(ی|یی|یم|یت|یش|مان|تان|شان)([\]\.،\:»\)\s])/g, '\u200cها$1$2');

//موارد جزئی دیگر: هرچند ربطی به ZWNJ ندارد. ولی فعلاً اینجا می‌گذاریمشان تا بعداً بفرستیمشان جایی دیگر.
 s=s.replace(/ا\sً/g,'اً')
   return s;
};
 if (selectionMode) {
    applyOnSelection(f);
  } else {
    obj.value = f(obj.value);
  }  

}


function NonStandard (obj, selectionMode) {

  var f = function(s) {

//همزه روی ی
  s = s.replace(/ه\u200cی\s/g, 'هٔ ');
  s = s.replace(/ه\u200eی\s/g, 'هٔ ');
  s = s.replace(/ه\sی\s/g, 'هٔ ');
  s = s.replace(/ۀ/g, 'هٔ');
  s = s.replace(/هء /g, 'هٔ ');
  s = s.replace(/ه‌یی/g, 'ه‌ای');

//نویسهٔ غیراستاندارد برای تنوین
 s = s.replace(/ا"/g,'اً')

//تبدیل الگو {{ی}} به نویسه
 s = s.replace(/\{\{ی\}\}/g,'ٔ');


//فارسی‌سازی گیومه
  s=s.replace(/"(.*?)"/g,'«$1»');
  s=s.replace(/«([\w]*?)»/g,'"$1"');
s=s.replace(/(\w)=«([^"]*?)»/g,'$1="$2"'); // to fix the problem with HTML double quotes.
  return s;
};
 if (selectionMode) {
    applyOnSelection(f);
  } else {
    obj.value = f(obj.value);
  }  

}

function bringBackLDigits(r,s)
{
//Given the regular expression this function brings back L Numerals
var sold = "";

while (s != sold){
sold = s;
m = s.match(r);
if (m){
subs = s.match(r)[0];
b = s.indexOf(subs);
e = b + subs.length;
la = s.substring(b,e);
la = la.replace(/۱/g, "1");
la =la.replace(/۲/g, "2");
la =la.replace(/۳/g, "3");
la =la.replace(/۴/g, "4");
la =la.replace(/۵/g, "5");
la =la.replace(/۶/g, "6");
la =la.replace(/۷/g, "7");
la =la.replace(/۸/g, "8");
la =la.replace(/۹/g, "9");
la =la.replace(/۰/g, "0");
s = s.substring(0,b) + la + s.substring(e,s.length);
}
}
return s;
} 


function digits (obj, mohsenMode) {
  // Convert Codes to Characters
  var f = function(s) {
    s = fromEntityToUtf8(s, true);
    var sold = s;
    //برای جلوگیری از خرابکاری در پیوند تصویرها و میان‌ویکی
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)1(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۱\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)2(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۲\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)3(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۳\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)4(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۴\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)5(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۵\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)6(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۶\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)7(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۷\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)8(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۸\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)9(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۹\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)0(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۰\u200c\u200c\u200c$2]]');
    s=s.replace (/\[\[([^\]]*?\:[^\]]*?)\%(.*?)\]\]/g, '[[$1\u200c\u200c\u200c٪\u200c\u200c\u200c$2]]');
   
    // برای جلوگیری از خرابکاری در پیوند به بیرون
    s = s.replace(/(http[^\s]+?)1/g,'$1\u200c\u200c\u200c۱\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)2/g,'$1\u200c\u200c\u200c۲\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)3/g,'$1\u200c\u200c\u200c۳\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)4/g,'$1\u200c\u200c\u200c۴\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)5/g,'$1\u200c\u200c\u200c۵\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)6/g,'$1\u200c\u200c\u200c۶\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)7/g,'$1\u200c\u200c\u200c۷\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)8/g,'$1\u200c\u200c\u200c۸\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)9/g,'$1\u200c\u200c\u200c۹\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)0/g,'$1\u200c\u200c\u200c۰\u200c\u200c\u200c');
    s = s.replace(/(http[^\s]+?)\%/g,'$1\u200c\u200c\u200c٪\u200c\u200c\u200c');
   
    // برای جلوگیری از خرابکاری در فرمولهای ریاضی
    s=s.replace (/\<math\>(.*?)1(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۱\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)2(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۲\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)3(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۳\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)4(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۴\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)5(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۵\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)6(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۶\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)7(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۷\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)8(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۸\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)9(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۹\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)0(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c۰\u200c\u200c\u200c$2</math>');
    s=s.replace (/\<math\>(.*?)%(.*?)\<\/math\>/g,
      '<math>$1\u200c\u200c\u200c٪\u200c\u200c\u200c$2</math>');

    while (sold!=s) {
      sold=s;
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)1(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۱\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)2(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۲\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)3(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۳\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)4(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۴\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)5(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۵\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)6(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۶\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)7(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۷\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)8(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۸\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)9(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۹\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)0(.*?)\]\]/g, '[[$1\u200c\u200c\u200c۰\u200c\u200c\u200c$2]]');
      s=s.replace (/\[\[([^\]]*?\:[^\]]*?)\%(.*?)\]\]/g, '[[$1\u200c\u200c\u200c٪\u200c\u200c\u200c$2]]');
     
      s = s.replace(/(http[^\s]+?)1/g,'$1\u200c\u200c\u200c۱\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)2/g,'$1\u200c\u200c\u200c۲\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)3/g,'$1\u200c\u200c\u200c۳\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)4/g,'$1\u200c\u200c\u200c۴\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)5/g,'$1\u200c\u200c\u200c۵\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)6/g,'$1\u200c\u200c\u200c۶\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)7/g,'$1\u200c\u200c\u200c۷\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)8/g,'$1\u200c\u200c\u200c۸\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)9/g,'$1\u200c\u200c\u200c۹\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)0/g,'$1\u200c\u200c\u200c۰\u200c\u200c\u200c');
      s = s.replace(/(http[^\s]+?)\%/g,'$1\u200c\u200c\u200c٪\u200c\u200c\u200c');
    }

    s = s.replace(/1/g,'۱');
    s = s.replace(/\u200c\u200c\u200c۱\u200c\u200c\u200c/g,'1');
   
    s = s.replace(/2/g,'۲');
    s = s.replace(/\u200c\u200c\u200c۲\u200c\u200c\u200c/g,'2');
   
    s = s.replace(/3/g,'۳');
    s = s.replace(/\u200c\u200c\u200c۳\u200c\u200c\u200c/g,'3');
   
    s = s.replace(/4/g,'۴');
    s = s.replace(/\u200c\u200c\u200c۴\u200c\u200c\u200c/g,'4');
   
    s = s.replace(/5/g,'۵');
    s = s.replace(/\u200c\u200c\u200c۵\u200c\u200c\u200c/g,'5');
   
    s = s.replace(/6/g,'۶');
    s = s.replace(/\u200c\u200c\u200c۶\u200c\u200c\u200c/g,'6');
   
    s = s.replace(/7/g,'۷');
    s = s.replace(/\u200c\u200c\u200c۷\u200c\u200c\u200c/g,'7');
   
    s = s.replace(/8/g,'۸');
    s = s.replace(/\u200c\u200c\u200c۸\u200c\u200c\u200c/g,'8');
   
    s = s.replace(/9/g,'۹');
    s = s.replace(/\u200c\u200c\u200c۹\u200c\u200c\u200c/g,'9');
   
    s = s.replace(/0/g,'۰');
    s = s.replace(/\u200c\u200c\u200c۰\u200c\u200c\u200c/g,'0');
   
    s = s.replace(/\%/g,'٪');
    s = s.replace(/\u200c\u200c\u200c٪\u200c\u200c\u200c/g,'%');

    //آوردن دخل ارقام عربی:
    s=s.replace(/٠/g,'۰');
    s=s.replace(/١/g,'۱');
    s=s.replace(/٢/g,'۲');
    s=s.replace(/٣/g,'۳');
    s=s.replace(/٤/g,'۴');
    s=s.replace(/٥/g,'۵');
    s=s.replace(/٦/g,'۶');
    s=s.replace(/٧/g,'۷');
    s=s.replace(/٨/g,'۸');
    s=s.replace(/٩/g,'۹');

    //ممیز و هزارگان
    s = s.replace(/([۱۲۳۴۵۶۷۸۹۰])\.([۱۲۳۴۵۶۷۸۹۰])/g,'$1٫$2');
    s = s.replace(/([۱۲۳۴۵۶۷۸۹۰]),([۱۲۳۴۵۶۷۸۹۰])/g,'$1٬$2');

    //لاتین‌کردن شمارهٔ ISBN
    var sold = "";

    var d = "[۱۲۳۴۵۶۷۸۹۰][\\s\\-]?";
    var exd = "[۱۲۳۴۵۶۷۸۹۰]?[\\s\\-]?";
    var r = new RegExp("ISBN[\\s\\-]?"+d+d+d+d+d+d+d+d+d+exd+exd+exd+exd);
    s = bringBackLDigits(r,s);

    //لاتین‌‌کردن اندازهٔ تصویر در الگوها که با px می‌آید.
    var r = new RegExp("[۱۲۳۴۵۶۷۸۹۰]*px");
    s = bringBackLDigits(r,s);

    //لاتین کردن رقم‌ها در زیرمتن لاتین
    var g = "\\w[\\s,]*[۱۲۳۴۵۶۷۸۹۰]+[۱۲۳۴۵۶۷۸۹۰,\\s]*[\\w\\.\\)]";
   
    var r = new RegExp(g);
   
    return bringBackLDigits(r,s);
  };
  if (mohsenMode) {
    applyOnSelection(f);
  } else {
    obj.value = f(obj.value);
  }  
}

function Punctuation (obj,selectionMode){

   var f = function(s) {
//  s=s.replace(/([^\n^\r])([\(«])/g,'$1 $2');
//  s=s.replace(/([^(\<pre\>)])\s+/g,'$1 ');
  s=s.replace(/([\(«])\s/g,'$1');
  s=s.replace(/\s([\)»])/g,'$1');
  s=s.replace(/٬\s/g, "، "); //بدجوری حرصم می‌دهد.
  return s;
};
 if (selectionMode) {
    applyOnSelection(f);
  } else {
    obj.value = f(obj.value);
  }  


}

function SuperTool (obj,selectionMode){
   YKarabic (obj,selectionMode);
   FM (obj,selectionMode);
   NonStandard (obj,selectionMode);
   digits (obj,selectionMode);
   Punctuation (obj,selectionMode);


}

function InterwikiSorter(obj)
{

var ref = /\[\[(\w\w\w?|bat-smg|be-x-old|cbk-zam|fiu-vro|nds-nl|roa-tara|ru-sib|simple|tokipona|zh-classical|zh-min-nan|zh-yue)\:(.*?)\]\]\n?(\s*)/g

var s = obj.value;

//extract interwiki's and delete them temply from string
 interwikis = s.match(ref)
 s = s.replace(ref,"")

//sort interwikis
 interwikis = interwikis.sort()
//put interwiki's back
 s = s + interwikis.join("");

//update string.
obj.value=s;
}

/*</pre>*//*{{پایان چپ‌چین}} */