Usor:ElioPrrl/Typos.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Press 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, ' $1');
str = str.replace(/« /g, '« ');
str = str.replace(/ »/g, ' »');
str = str.replace(/ +\n/g, "\n");
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, " —,");
str = str.replace(/[ ]*([;:\!\?])[ ]*/g, " $1 ");
str = str.replace(/( *),( *)/g, ", ");
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(/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(/\[\[ ?[Cc]ategory/g, "[[Catégorie");
str = str.replace(/\[\[ ?[Cc]atégorie ?: ?/g, "[[Catégorie:");
// 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*(\{\{Titre)/g, "\n$1");
str = str.replace(/\n*(\{\{Navigateur)/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;
});
// Mes propres corrections
$.typo.add(function(str) {
// PONCTUATION
str = str.replace(/( <+ )/g, " « ");
str = str.replace(/( >+ )/g, " » ");
str = str.replace(/(« ){2,}/g, "« ");
str = str.replace(/( »){2,}/g, " »");
str = str.replace(/([\-¬](| )\n)/g, "");
str = str.replace(/(\n+«\n+)/g, " « ");
str = str.replace(/(\n+»\n+)/g, " » ");
str = str.replace(/(» \.)/g, "»\.");
str = str.replace(/(’ «)/g, "’{{lié}}«");
str = str.replace(/( \n)/g, "\n");
str = str.replace(/(\( )/g, "\(");
str = str.replace(/( \))/g, "\)");
str = str.replace(/(`)/g, "’");
str = str.replace(/(\_\s*)/g, "");
str = str.replace(/(?<=\.|,|\!|\?)-/g, " — ");
str = str.replace(/(–)/g, "—");
str = str.replace(/(——+)/g, "—");
str = str.replace(/(\n+—\n+)/g, " — ");
str = str.replace(/(’’)/g, "’");
str = str.replace(/( +|\t+)/g, " ");
str = str.replace(/(\n\w\n)/g, "\n");
str = str.replace(/\n([A-ZÀ-ÜŒ]{2,})(.+?)\n/g, "\n\n$1$2\n\n");
str = str.replace(/( <ref)/g, "<ref"); // pas d'espaces avant les appels de notes
str = str.replace(/( <\/ref)/g, "<\/ref");
// SUPPRESSION DES SAUTS DE LIGNES
str = str.replace(/\n[“”®\*‘’\-|\/Ÿ\.\!\?,\%@ ]+/g, "\n"); // suppression caractères parasites en début de ligne
str = str.replace(/( \n)/g, "\n");
str = str.replace(/([^\n])\n/g, "$1 ");
str = str.replace(/( \n)([^\n])/g, "\n\n$2");
// SUPPRESSION DES LIGATURES
str = str.replace(/(\u2028)/g, "");
str = str.replace(/(fi)/g, "fi");
str = str.replace(/(fl)/g, "fl");
str = str.replace(/(ff)/g, "ff");
str = str.replace(/(ſt)/g, "ft");
str = str.replace(/(st)/g, "st");
str = str.replace(/ (a priori|a posteriori|a fortiori)(?!')/g, " ''$1''"); // italiques autour des expressions latines
// AJOUT AUTOMATIQUE DES ESPACES INSÉCABLES
str = str.replace(/( —,)/g, " —,");
str = str.replace(/( —\.)/g, " —.");
str = str.replace(/( etc\.)/g, " etc\.");
str = str.replace(/(, etc\.)/g, ", etc\.");
str = str.replace(/(?<=\s|\()p\. ([^ \.,…\|\}\)]*)/g, "{{abbr|p.|page}} $1");
str = str.replace(/(?<=\s|\()P\. ([0-9]+)/g, "{{abbr|P.|page}} $1");
str = str.replace(/ pp\. ([^ \.,…\|\}\)]*)/g, "{{abbr|pp.|pages}} $1");
// GREC
str = str.replace(/(ϐ)/g, "β");
str = str.replace(/(ϰ)/g, "κ");
str = str.replace(/(ϑ)/g, "θ");
str = str.replace(/(ϖ)/g, "π");
str = str.replace(/(ϕ)/g, "φ");
return str;
});
var dependencies = ['ext.wikiEditor'];
if(mw.config.get('wgCanonicalNamespace') === 'Page') {
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
}
}
}
});
});
});