کاربر:ExtraTools/Dictation.js

از ویکی‌پدیا، دانشنامهٔ آزاد.

نکته: پس از ذخیره‌سازی ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را خالی کنید. موزیلا / فایرفاکس / Safari: کلید Shift را نگه‌دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-Shift-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های Cmd-Shift-Rاینترنت اکسپلورر: کلید Ctrl نگه‌دارید و روی دکمهٔ Refresh کلیک‌ کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید؛ Konqueror: روی دکمهٔ Reload کلیک کنید و یا کلید F5 را فشار دهید؛ اُپرا: کاربران اُپرا ممکن است لازم باشد که بطور کامل حافظهٔ نهانی مرورگر را در منوی Tools→Preferences خالی کنند.

//<pre style="direction:ltr">
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) {
  //ي --> ی و ك --> ک
   s = obj.value;
   var 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]]');

  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]]');
  }

  obj.value = s;
}

function FM (obj) {
  //FM = Faseleh Majazi
  s = obj.value;
  
  //تبدیل الگو {{فم}} به نویسه
  s = s.replace(/\{\{فم\}\}/g,'\u200c');
  
  //تبديل چند فاصله مجازی پشت سر هم به یک فاصله مجازی
  s = s.replace(/(\u200c)+/g, '\u200c');
  
  //حذف فاصلهٔ مجازی بعد از آادذرزژو . ، « »
  s = s.replace(/([\.،«»\:؛\sآادذرزژو])\u200c/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');

  obj.value = s;
}

function NonStandard (obj) {
  s = obj.value;

  //همزه روی ی
  s = s.replace(/ه\u200cی\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"');
  // ... but to fix the problem with HTML double quotes...
  s=s.replace(/(\w)=«([^"]*?)»/g,'$1="$2"'); 

  //تنوين اشتباه
  s=s.replace(/ا\sً/g,'اً')

  obj.value = s;
}

function digits (obj) {
  //Convert Codes to Characters
  fromEntityToUtf8(obj);
  s = obj.value;

  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');

  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');

  obj.value = s;
}

function Punctuation (obj){
  //حل مشکلات نقطه گذاری
  var s = obj.value;

  //دو سطر زير غير فعال شده‌اند
  //  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');

  obj.value=s;
}

function SuperTool (obj){
  YKarabic (obj);
  FM (obj);
  NonStandard (obj);
  digits (obj);
  Punctuation (obj);
}
//</pre>