Pengguna:Hakimi97/rumikpdjawi.js

Daripada Wikipedia, ensiklopedia bebas.

Catatan: Selepas menyiarkan perubahan, anda mungkin perlu memintas cache pelayar untuk melihatnya.

  • Firefox / Safari: Tahan Shift sambil mengklik Reload, atau tekan sama ada Ctrl-F5 atau Ctrl-R (⌘-R pada Mac)
  • Google Chrome: Tekan Ctrl-Shift-R (⌘-Shift-R pada Mac)
  • Internet Explorer / Edge: Tahan Ctrl sambil mengklik Refresh, atau tekan Ctrl-F5
  • Opera: Tekan Ctrl-F5.
/**
 ** LOG:
 ** Percubaan menggunakan kod dari Pengguna:Kurniasan/rumikpdjawi.js
 **/

/* Tukar teks daripada rumi kepada jawi */
/* Pengarang asal: [[Pengguna:Kurniasan]] */
/*
 * PRINSIP KAMUS (Dikemaskini pada 18 Julai 2022):
 *
 * 1. Semua nama khas berkaitan masa, geografi dan etnolinguistik akan ditambah 
 *    pada kata dasar. Hanya nama manusia sahaja diasingkan senarai dengan 
 *    terjemahan rumi paling lazim di kedudukan paling hadapan dengan 
 *    variasi-variasi nama di belakangnya. 
 *
 * 2. Semua hamzah bebas (ء) kecuali kata serapan Arab sepatutnya berbentuk  
 *    hamzah tiga suku. Namun disebabkan masalah teknikal maka hamzah tiga suku  
 *    buat masa ini belum diperkenalkan untuk semua perkataan dalam kamus ini.
 *
 * 3. Apabila ada penambahan alif (ا) atau hamzah (ء) di hadapan imbuhan “-an”
 *    sedangkan alif atau hamzah tambahan tidak terjumpa pada kata dasarnya, 
 *    maka kesemua akan ditambah dalam senarai berikut. Selain daripada itu 
 *    semua “-an” secara automatik akan ditambah nun (ن) sahaja. 
 * 
 * 4. Semua kata dalam Kamus Dewan Perdana yang memerlukan penanda gandaan
 *    “٢” akan ditambah dalam senarai berikut (contohnya:اݢق٢). Selain itu semua
 *    perkataan lain yang tidak tersenarai akan dipapar secara lalai dengan 
 *    tanda sengkang “-” (contohnya: برنتاي-رنتاي).
 *
 * 5. Perubahan alif berhamzah (أ) dan wau berhamzah (ؤ) pada kedudukan awal 
 *    suku kata kata dasar (contohnya "سأهلي") yang tercatat dalam Kamus Dewan
 *    Perdana akan ditambah selepas dan sebaris dengan entri kata dasarnya.
 * 
 * 6. Sebarang kata yang mengalami pengguguran alif (ا) dan ain (ع) pada 
 *    kedudukan awal kata dasarnya akan ditambah berserta imbuhan di 
 *    hadapannya, contohnya "مڠهلي" dan "مڠاءيب".
 *
 * 7. Ta marbutah (ة) yang fonem akhir kata ruminya /-t/ akan bertukar kepada 
 *    ta maftuhah (ت), contohnya seperti “عاقبة” berubah kepada“عاقبتن”. Manakala
 *    ta marbutah yang fonem akhir kata ruminya /-h/ pula akan digantikan dengan
 *    huruf ha tebal (ه) sekiranya disambung dengan imbuhan akhir “-an”, “-kan” 
 *    dan “-nya”, contohnya seperti "عقيدة" berubah kepada "عقيدهن". Perubahan ini
 *    yang dirakam dalam Kamus Dewan Perdana akan ditambah selepas dan sebaris 
 *    dengan entri kata dasarnya.
 *
 */

if (typeof kamus === 'undefined') {
  importScript('Pengguna:' + mw.user.getName() + '/kamusrumikpdjawi.js');
  if (typeof kamus === 'undefined') {
    importScript('Pengguna:Hakimi97/kamusrumikpdjawi.js');
  }
}
if (mw.config.get('wgNamespaceNumber') === 0) {
  var cache = null;
  var RumiJawi = null;
  /**
   * Tukar teks rumi kepada jawi.
   * @param src teks untuk dijawikan.
   * @param noRecursive
   */
  var convertToJawi = function (src, noRecursive) {
    if (kamus[src]) { // Kalau ada entri dalam kamus, gunakannya.
      src = src.replace(new RegExp('\\b' + src + '\\b', 'i'), kamus[src]);
    } else if (!noRecursive) {
      for (var i in imbuhanAkhiran) {
        src = src.replace(RumiJawi.suffixes[i], suffixProcessor);
      }
    }
    return src;
  };
  var prefixProcessor = function (a, b, c) {
    var d = convertToJawi(c);
    return d == c ? a : (imbuhanAwalan[b.toLowerCase()] + d);
  };
  var suffixProcessor = function (a, b, c) {
    var d = convertToJawi(b, true);
    return d == b ? a : (d + imbuhanAkhiran[c]);
  };
  $('#p-interaction ul').append('<li id="ca-nstab-rkj"><span><a><input id="togol-rkj" type="checkbox"></a><a><label for="togol-rkj">      Tukar ke Jawi</label></a></span></li>');
  $('#togol-rkj').click(function () {
    var $mwContentText = $('#mw-content-text');
    if (this.checked) {
      cache = cache || $mwContentText.html(); // Simpan teks asal.
      RumiJawi = RumiJawi || {
        entries: (function() {
          var r = [];
          for (var i in kamus) { // Proses kata-kata yg ada dlm kamus.
            r[i] = new RegExp('\\b' + i + '\\b', 'gi');
          }
          return r;
        }) (),
        prefixes: (function() {
          var r = {};
          for (var i in imbuhanAwalan) { // Proses imbuhan awalan.
            r[i] = new RegExp('(\\b' + i + ')(\\w+)\\b', 'gi');
          }
          return r;
        }) (),
        suffixes: (function() {
          var r = [];
          for (var i in imbuhanAkhiran) {
            r[i] = new RegExp('\\b(\\w+)(' + i + ')\\b', 'i');
          }
          return r;
        }) ()
      };
      $mwContentText.contents().map(function recursive() {
        var $cs = $(this).contents();
        if ($cs.length > 0) {
          $cs.map(recursive);
        } else {
          var s,
          i;
          if ((s = this.textContent) === '') {
            return;
          }
          for (i in kamus) { // Proses kata-kata yg ada dlm kamus.
            s = s.replace(RumiJawi.entries[i], kamus[i]);
          }
          for (i in imbuhanAwalan) { // Proses imbuhan awalan.
            s = s.replace(RumiJawi.prefixes[i], prefixProcessor);
          }
          this.textContent = s;
        }
      });
      $mwContentText.attr('dir', 'rtl').attr('class', 'mw-content-rtl');
    } 
    else if (cache !== null) {
      $mwContentText.attr('dir', 'ltr').attr('class', 'mw-content-ltr').html(cache);
      cache = null;
    }
  });
}