Jump to content

MediaWiki:Gadget-Typo.js

Վիքիդարանից՝ ազատ գրադարանից

Ծանուցում. Հիշելուց հետո կատարված փոփոխությունները տեսնելու համար մաքրեք ձեր զննարկիչի հիշապահեստը. Mozilla / Firefox / Safari՝ Ctrl+Shift+R (Cmd+Shift+R Mac OS X-ում) Konqueror՝ F5 Opera՝ Tools→Preferences ընտրացանկից։ Internet Explorer՝ Ctrl+F5

/*
 * Typo
 *
 * Bouton en haut à droite, près du bouton déconnexion. Met en forme la typographie du texte conformément aux conventions définies dans le [[Wikisource:Guide typographique|Guide typographique]] de Wikisource.
 *
 * Pour ajouter des fonctionnalités passer à la méthode $.typo.add() une fonction prenant comme paramètre la chaîne à nettoyer et renvoyant la chaîne nettoyée. Exemple :
 * $(function() {
 *   $.typo.add(function(str) {
 *     str = str.replace(/(\n\n\n)+/g, "\n");
 *     return str;
 *   });
 * });
 *
 * Auteur : Marc, Tpt
 * Dernière révision : 5 janvier 2018
 */
 
$.typo = {
  todo: [],
  add: function(fonction) {
    $.typo.todo.push(fonction);
  },
  exec: function() {
    var namespace = mw.config.get('wgNamespaceNumber');
    if (namespace % 2 === 1 || $.inArray(namespace, [ 4, 8 ]) !== -1) {
        return;
    }
    var $textbox = $('#wpTextbox1');
    var txt = $textbox.val();
    for (var i = 0; i < $.typo.todo.length; ++i) {
      txt = $.typo.todo[i](txt);
    }
    $textbox.val(txt);
  },
};

$(function() {
  if($.inArray(mw.config.get('wgAction'), ['edit', 'submit']) === -1 ) {
	return;
  }

  //typo
  $.typo.add(function(str) {
    // tiret conditionnel
    str = str.replace(/­/g, ""); // suppression des espaces invisibles
    str = str.replace(/\u2028/g, ""); // suppression des tirets conditionnels
    // espace
    str = str.replace(/- \n/g, "");
 
    // fix divers
    str = str.replace(/ +/g," ");
 
    //----- typographie

    // espace insécable remplacé par une espace.
    str = str.replace(/« /g, '«');
    str = str.replace(/ »/g, '»');

    str = str.replace(/ +\n/g, "\n");
    str = str.replace(/\n-([Ա-Ֆ])/g, "\n— $1");
    str = str.replace(/\n—([Ա-Ֆ])/g, "\n— $1");
    str = str.replace(/\n +/g, "\n");
    str = str.replace(/ -/g, " —");
    str = str.replace(/- /g, "— ");
    str = str.replace(/ ,-/g, ",— ");
    str = str.replace(/ , - /g, ",— ");

    str = str.replace(/[  ]*([;\:\։\.!\?])[  ]*/g, "$1 ");
    str = str.replace(/[  ]*([՞՜՝՛])/g, "$1");
    str = str.replace(/(.) ,/g, "$1,");
    str = str.replace(/(\[\[[^]]*?) :/g, "$1:");
    str = str.replace(/: ([^[]*?\]\])/g, ":$1");
    str = str.replace(/[  ]+\)/g, ")");

    str = str.replace(/([^'])'([^'])/g, "$1’$2"); // conversion en apostrophes courbes des apostrophes droites
    str = str.replace(/’\s+(?!«)/g, "’"); // suppression des espaces après les apostrophes courbes (sauf si suivi de guillemets ouvrants)
    str = str.replace(/’\s+«/g, "’{{lié}}«"); // remplacement des espaces entre apostrophes courbes et guillemets par une espace insécable
    str = str.replace(/\s+’/g, "’"); // suppression des espaces avant apostrophes courbes
    
    str = str.replace(/ '',/g, "'',");
    str = str.replace(/ ''\./g, "''.");    
    str = str.replace(/ \./g, ".");
 
    str = str.replace(/\.\.\./g, "… ");
    str = str.replace(/\.\.\./g, "… ");
    str = str.replace(/\.\.\.\.+/g, "...");
    str = str.replace(/etc\.\.+/g, "etc.");
 
    str = str.replace(/oeu/g, "œu");
    str = str.replace(/O[Ee]/g, "Œ");
    str = str.replace(/oeil/g, "œil");
 
    str = str.replace(/"([^"].*?)"/g, "«$1»"); // conversion en guillemets français des guillemets anglais
    str = str.replace(/( *)«( *)/g, " «"); // espaces autour des guillemets ouvrants (introduit des erreurs corrigées ci-dessous)
    str = str.replace(/( *)»/g, "»"); // espaces autour des guillemets fermants (introduit des erreurs corrigées ci-dessous)
    str = str.replace(/(?<=’|\{\{lié\}\}) «/g, "«"); // suppression des espaces entre apostrophe courbe et guillemets ouvrants
    str = str.replace(/» (?=,|\.|…)/g, "»"); // suppression des espaces entre guillemets fermants et ponctuation basse
 
    str = str.replace(/(\f*)’(\f*)/g, "’");
 
    //sauts de lignes intempestifs
    str = str.replace(/\n «/g, "\n«");

    // fix catégories
    str = str.replace(/\[\[ ?[Կկ]ատեգորիա/g, "[[Կատեգորիա");
    str = str.replace(/\[\[ ?[Կկ]ատեգորիա ?։ ?/g, "[[Կատեգորիա:");
 
    // réparation liens internes
    str = str.replace(/\[\[ ?([^\]]*?) ?\]\]/g, "[[$1]]");
    str = str.replace(/\[\[([^\]]*?)[ _]#([^\]]*?)\]\]/g, "[[$1#$3]]");
 
    // syntaxe wiki
    str = str.replace(/<i>(.*?)<\/i>/gi, "''$1''");
    str = str.replace(/<b>(.*?)<\/b>/gi, "'''$1'''");
    str = str.replace(/<br\/>/gi, "<br />");
    str = str.replace(/<br>/gi, "<br />");
    str = str.replace(/^<br \/>/g, "<nowiki />"); //pour le saut de ligne entre 2 pages
 
    //* puces
    str = str.replace(/^([\*#]+) /gm, "$1");
    str = str.replace(/^([\*#]+)/gm, "$1 ");
 
    //mise en page
    str = str.replace(/\n*(\{\{Հեղինակ)/g, "\n$1");
    str = str.replace(/\n*(\{\{Վերնագիր)/g, "\n$1");
    str = str.replace(/\[\[(.*?) —/g, "[[$1 -");
    str = str.replace(/\|( *)—( *)/g, "|");

    str = str.replace(/(formatnum\s:\s)+/g, "formatnum:");
    // les balises sont cassées par les regexp formatant les : et les ;
    str = str.replace(/= « ([^»"]*) » /g, "=\"$1\" ");
    // FIXME: répare les balises mais en même temps casse la typo des textes
    // contenant des xxx : yyy ; zzz il faut faire quelque chose de plus fin.
    str = str.replace(/"([^":]*) : ([^:"]*) ; */g, "\"$1:$2; ");
    str = str.replace(/([^ ]); ([^":]*) : ([^:"]*) ; */g, "$1; $2:$3; ");
    str = str.replace(/([^ ]); ([^":]*) : ([^:"]*) ; */g, "$1; $2:$3; ");

    str = str.replace(/(…\. )+/g, "… ");
    str = str.replace(/([a-zA-Z»,!\?\u0100-\u017F\u0180-\u024F])( …)+/g, "$1…");

    str = str.replace(/‘/g, "’");
    str = str.replace(/fi/g, "fi"); 
    str = str.replace(/fl/g, "fl");

    // Défaire certaines modifications, au moins pour les entités html les plus fréquemment
    // utilisé. Cet ensemble de modification doit être faite après toutes les
    // autres modifications.
    str = str.replace(/&(nbsp|ldquo|rdquo) ;/g, "&$1;");
    // éviter l'apparition d'espace en fin de ligne ou avant la fermeture d'un tag
    str = str.replace(/\n »/g, "\n»");
    str = str.replace(/([,;:!?»]) (\n|<\/)/g, "$1$2");
    // éviter l'apparition d'espace avant la fin d'italiques
    str = str.replace(/([;:!\?»]) ''([ \n])/g, "$1''$2");
    // éviter d'ajouter un espace après une séquence de : en début de ligne
    str = str.replace(/\n *(:+) */g, "\n$1");

	// Normalise les : en débuts de page
	str = str.replace(/\n : */g, "\n:");
    str = str.replace(/(:+) *: */g, "$1:");
    str = str.replace(/:: /g, "::");

    return $.trim(str);
  });
 
  //simplifier certains liens : [[Dog|dog]] to [[dog]] and [[Dog|dogs]] to [[dog]]s
  $.typo.add(function(str) {
    var m = str.match(/\[\[([^[]*?)\|([^[]*?)\]\]/g);
    if (m) {
      for (var i = 0; i < m.length; i++) {
        var n_arr = m[i].toString().match(/\[\[([^[]*?)\|([^[]*?)\]\]/);
        var n = n_arr[0];
        var a = n_arr[1];
        var b = n_arr[2];
        var temp = $.trim(a).toLowerCase();
        if (b.indexOf(a) === 0 || b.indexOf(temp) === 0) {
          var k = n.replace(/\[\[([^\]\|]*?)\|(\1)([\w]*?)\]\]/i, "[[$2]]$3");
          str = str.replace(n, k);
        }
      }
    }
    str = str.replace(/\[\[([^\]\|]+)\|([^\]\|]+)\]\]([A-Za-z\'][A-Za-z]*)([\.\,\;\:\"\!\?\s\n])/g, "[[$1|$2$3]]$4");
    return str;
  });

  var dependencies = ['ext.wikiEditor'];
  if(mw.config.get('wgCanonicalNamespace') === 'Էջ') {
    dependencies.push('ext.proofreadpage.page.edit');
  }
  mw.loader.using(dependencies, function() {
    $('#wpTextbox1').wikiEditor('addToToolbar', {
        section: 'main',
		group: 'insert',
        tools: {
          'typo': {
            label: 'Correction de la mise en page et de la typographie',
            type: 'button',
            icon: '//upload.wikimedia.org/wikipedia/commons/8/82/Toolbaricon_regular_T.png',
            action: {
              type: 'callback',
              execute: $.typo.exec
            }
          }
        }
    });
  });
});