MediaWiki:Gadget-Erreurs-communes.js
Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
- Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
- Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
- Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
/*
* Permet de montrer dans un texte les erreurs les plus communes.
*
* Auteur: Phe
*
* TODO:
*
* Permettre des auto-corrections.
*
* Le support en mode édition est très expérimental, il manque un bouton refresh à
* la liste des erreurs pour éviter d'avoir à faire un preview quand on a corrigé.
* Certaines erreurs ne seront visible que dans le html, « . <minuscule> » par
* exemple s'il y a y un \n dans le wikicode entre le . et la minuscule.
* Le wikicode n'est pas strippé ce qui doit produire des tas de faux positifs.
*
* En mode édition cliquer sur un lien se positionne toujours sur la première
* erreur.
*
* En mode édition il arrive fréquemment qu'une erreur détecté ne puisse
* être localisé dans la boîte d'édition.
*
* Le contenu d'une textarea est un nœud texte qui est splitter en plusieurs
* nœud html, le browser à l'air assez futé pour comprendre qu'un textarea ne
* peut contenir qu'un nœud texte et ignore les trucs insérer mais ça ne
* va pas du tout (incompatibilité avec le gadget auteur form par exemple -->
* ns:104 ignoré pour l'instant).
*
*/
/*
* http://stackoverflow.com/questions/5458655/jquery-scroll-textarea-to-given-position
*
* Construit un div avec la même font que la textarea pouvoir calculer la position de scroll.
*/
jQuery.fn.scrollToText = function(search) {
var text = $(this).text();
var charNo = text.indexOf(search);
var anch = '<span id="anch"></span>';
text = text.substring(0, charNo) + anch + text.substring(charNo);
var copyDiv = $('<div></div>')
.append(text.replace(/\n/g, '<br />'))
.css('width', $(this).innerWidth()) // width without scrollbar
.css('font-size', $(this).css('font-size'))
.css('font-family', $(this).css('font-family'))
.css('padding', $(this).css('padding'));
copyDiv.insertAfter($(this));
var pos = copyDiv.find('SPAN#anch').offset().top - copyDiv.find('SPAN#anch').closest('DIV').offset().top;
pos = pos - Math.round($(this).innerHeight() / 2);
$(this).scrollTop(pos);
copyDiv.remove();
};
select_multiple_text = {
precompile_regexp : function (search) {
var temp = [];
for (var i in search)
temp.push(new RegExp(search[i], "g"));
return temp;
},
build_popup : function() {
var html = "";
$('span.Erreurs-communes').each(function (index, el) {
//$(this).removeAttr('id');
html += "<li><a href='javascript:select_multiple_text.scroll_to_pos(" + index + ");'>" + $(this).text() + "</a></li>";
$(this).attr('id', 'Err-' + index);
});
return html;
},
last_scroll_pos : 0,
scroll_to_pos : function(index) {
var found = false;
if ($.inArray(mw.config.get('wgAction'), [ 'submit', 'edit' ]) != -1) {
var textbox = document.getElementById("wpTextbox1");
if (textbox) {
var text = $("#Err-" + index).text();
var pos = textbox.value.indexOf(text);
if (pos != -1) {
textbox.selectionStart = pos;
textbox.selectionEnd = pos + text.length;
textbox.focus();
$('#wpTextbox1').scrollToText(text);
found = true;
}
}
}
if (!found) {
$("#Err-" + select_multiple_text.last_scroll_pos).css("background-color", "");
window.location.hash = "#Err-" + index;
$("#Err-" + index).css("background-color", "#00FF00");
select_multiple_text.last_scroll_pos = index;
// index * 2 + 1 is voodoo making assumption on the html struct of the
// popup, see build_popup(), there is surely a simpler and safer way.
$('#err-communes-popup').find('*:eq(' + (index * 2 + 1) + ')').focus();
}
},
close_popup : function() {
$("#err_summary").remove();
return;
},
open_popup : function() {
if ($("#err_summary").remove().length)
return;
var elt = $("<div id='err_summary'></div>");
elt.css({
"position" : "fixed",
"min-width" : "16em",
"max-width" : "35em",
"max-height" : "35em",
"right" : "0.5em",
"background-color" : "#FFFFFF",
"z-index" : 1,
"border" : "1px solid",
"padding" : "8px"
});
var str = '<div style="float:right;"><a href="javascript:select_multiple_text.close_popup();"><img src="//upload.wikimedia.org/wikipedia/commons/9/97/WikEd_close.png"/></a></div><h4>'+ 'Erreur(s) possible' + ' :</h4><div style="overflow:auto;min-width:16em;max-width:35em;max-height:32em;"><ul id="err-communes-popup">' + select_multiple_text.build_popup() + '</ul></div>';
elt.html(str);
$("#bodyContent").prepend(elt);
},
match : function (text, regexp) {
var m = text.match(regexp);
if (m) {
var start_match = text.search(regexp);
var end_match = start_match + m[0].length;
return [ start_match, end_match, m[0] ];
}
return null;
},
change_text_node : function(el, search, first) {
for (var cur = first; cur < search.length; ++cur) {
var match = this.match(el.nodeValue, search[cur]);
if (match) {
var tail = $(el).clone()[0];
el.nodeValue = el.nodeValue.substring(0, match[0]);
tail.nodeValue = tail.nodeValue.substring(match[1]);
// FIXME: how to setup the text part of the span w/o injecting it in html ?
$(el).after(tail).after($("<span class='Erreurs-communes'>" + match[2] + "</span>"));
select_multiple_text.change_text_node(el, search, cur + 1);
select_multiple_text.change_text_node(tail, search, cur);
}
}
},
/* CODE EXPÉRIMENTAL POUR SURLIGNER LES SCANILLES DÈS LE MODE ÉDITION
match_text : function (text, search) {
// Il faut faire ressembler le wikicode à du html, il manque plein de
// truc encore...
text = text.replace(/'''/g, "");
text = text.replace(/''/g, "");
// Kludge
text = text.replace(/\n\n/g, "#<foo>#");
text = text.replace(/\n/g, " ");
text = text.replace(/#<foo>#/g, "\n\n");
// Indispensable pour éviter un timeout du script sur une grosse page contenant
// beaucoup de wikicode.
var new_text = '';
var last_match = 0;
var splitter = new RegExp("<math>.*</math>|<[a-zA-z0-9 =\"']>|[</[a-zA-z0-9 =\"']+>|style=\".*\"| |—|<!--.*-->|\n:[:]*|\n;[;]*|[[][[].*]]", "gm");
while ((result = splitter.exec(text)) != null) {
new_text += text.slice(last_match, splitter.lastIndex - result[0].length);
for (var i = 0; i < result[0].length; ++i)
new_text += ' ';
last_match = splitter.lastIndex;
}
new_text += text.slice(last_match);
text = new_text;
// Les nœud invisible servent à stocker à stocker les erreurs trouvés de
// façon à réutiliser le même code que lorsque wgAction == submit.
var $node = $('#bodyContent');
for (var i = 0; i < search.length; ++i) {
var pos = 0;
while ((match = this.match(text.slice(pos), search[i])) != null) {
pos += match[1];
$node.append($("<span class='Erreurs-communes' style='display:none;'>" + match[2] + "</span>"));
}
}
}, */
// Predicate to filter page we act on based upon a user filter and some other criteria.
filter_page : function(user_filter) {
if ($.inArray(mw.config.get("wgAction"), [ 'view', 'submit' ]) == -1)
return false;
if (!user_filter.test(mw.config.get("wgPageName")))
return false;
if (/\.(css|js)$/.test(mw.config.get("wgPageName")))
return false;
if (/^Wikisource:/.test(mw.config.get("wgPageName")))
return false;
if ($("#wikiDiff").length)
return false;
/* FIXME: filtre les cats à cause de Page:pagename et Livre:livre.djvu
* mais c'est trop drastique comme solution */
if (mw.config.get("wgNamespaceNumber") == 14)
return false;
if (mw.config.get("wgNamespaceNumber") == 6)
return false;
if (mw.config.get("wgNamespaceNumber") == 112)
return false;
if (mw.config.get("wgNamespaceNumber") == 828)
return false;
if (mw.config.get("wgNamespaceNumber") == 2600) // Topic ou Sujet
return false;
if (mw.config.get("wgNamespaceNumber") == 2 && mw.config.get("wgPageName").indexOf('/') == -1)
return false;
if (mw.config.get("wgNamespaceNumber") % 2 != 0)
return false;
/* Incompatibilité avec le gadget auteur form, voir plus haut. */
if (mw.config.get("wgNamespaceNumber") == 102 && mw.config.get("wgAction") == 'edit')
return false;
return true;
},
filter_node : function() {
if ($(this).parent().hasClass('Erreurs-communes'))
return false;
return this.nodeType == 3;
},
get_text_nodes : function () {
var content_id = "#mw-content-text";
if ($("#wikiPreview").length)
content_id = "#wikiPreview";
// TODO: Bencher sur //fr.wikisource.org/wiki/L’Encyclopédie/Volume_1
// ou tout autre page qui contient un grand nombre de nœud.
return $(content_id)
.find("*")
.not($(".no_erreurs_communes, .no_erreurs_communes *"))
.not($(".diff *"))
.not($(".printfooter *"))
.not($(".previewnote *"))
.not($("#modernisations *"))
.not($("#authorityControl *"))
.not($("#dynamic_links *"))
.not($("#contentSub *"))
.not($("#ws-data *"))
.not($("pre, pre *"))
.not($("code, code *"))
.not($("script"))
.not($("style")) // TemplateStyles
.not($(".mwe-math-element *"))
.not($(".fn, .fn *"))
.not($(".reference *"))
.not($(".abbr, .abbr *"))
.not($(":not(:lang(fr))"))
.contents()
.filter(select_multiple_text.filter_node);
},
portlet_link_added : false,
exec : function(user_filter, search) {
if (!select_multiple_text.filter_page(user_filter))
return;
search = select_multiple_text.precompile_regexp(search);
var text_nodes = select_multiple_text.get_text_nodes();
$.each(text_nodes, function(i, el) {
select_multiple_text.change_text_node(el, search, 0);
});
var error_count = $('span.Erreurs-communes').length;
if (error_count) {
if (!select_multiple_text.portlet_link_added) {
mw.loader.using('mediawiki.util', function() {
mw.util.addPortletLink ("p-tb", "javascript:select_multiple_text.open_popup();",
"", "option-commons-errors", "");
});
}
$('#option-commons-errors a').text('Erreur(s) possible' + " (" + error_count + ")");
select_multiple_text.portlet_link_added = true;
}
},
default_select : function() {
// Ces variables servent simplement à abréger et à rendre plus parlant le code ci-dessous //
/* MINUSCULE, MAJUSCULE, LETTRE
(à utiliser entre crochets) */
var char_min = 'a-zéèàùâêîôûŷäëïöüÿçœæſñ';
var char_maj = 'A-ZÉÈÀÂÙÊÎÔÛŶÄËÏÖÏŸÇŒÆÑ';
var char = char_min + char_maj;
/* PONCTUATION française
(à utiliser entre parenthèses) */
var ponct_forte = '[\\.]\\s+|\\s+[\\!\\?\\«\\»]\\s+' ;
var ponct_faible = '$|[,\\)\\]]\\s+|\\s+[\\(\\[]|\\s+[\\;\\:—]\\s+' ;
var ponct = "^|" + ponct_forte + '|' + ponct_faible ;
/* TEST DE DÉBUT DE MOT (à mettre en début de regex)
(respectivement qui commence par une consonne, par une voyelle, par une lettre quelconque) */
var deb_mot_cons = '(?<=\\s|^|\\(|\\[|\\>)';
var deb_mot_voy = '(?<=\\s|^|\\(|\\[|\\>|’)';
var deb_mot = '(?<=\\s|^|\\(|\\[|\\>|’|\\-)';
/* TEST DE FIN DE MOT
(à mettre en fin de regex) */
var fin_mot = '(?=\\s|,|\\.|\\)|\\]|\\<|\\||\\-)';
/* TESTE SI UN MOT EST PROBABLEMENT UN VERBE (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle) */
var si_verb_cons = deb_mot + '([Jj]e|[Tt]u|[Ii]l|[Ee]lle|[Oo]n|[Nn]e|[Qq]u[ei]|[Dd]ont|[Oo]ù|[Yy])\\s+' ;
var si_verb_voy = deb_mot + '([Jj]’|[Tt]u\\s+|[Ii]l\\s+|[Ee]lle\\s+|[Oo]n\\s+|[Nn]’|[Qq]u’|[Qq]ui\\s+|[Dd]ont\\s+|[Oo]ù\\s+|[Yy]\\s+)';
/* TESTE SI UN MOT EST PROBABLEMENT UN NOM MASCULIN SINGULIER (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle) */
var si_masc_cons = deb_mot + '([Ll]e|[Aa]u|[Dd]u|[Uu]n|[Dd]e|[Cc]e|[MmTtSsſ]on|[NnVv]otre|[Ll]eur|[Qq]uel)\\s+';
var si_masc_voy = deb_mot + '([Ll]’|[Dd]’|[Cc]et\\s+|[MmTtSsſ]on\\s+|[NnVv]otre\\s+|[Ll]eur\\s+|[Qq]uel\\s+)';
/* TESTE SI UN MOT EST PROBABLEMENT UN NOM FÉMININ SINGULIER (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle) */
var si_fem_cons = deb_mot + '([Ll]a|[Uu]ne|[Cc]ette|[MmTtSsſ]a|[NnVv]otre|[Ll]eur|[Qq]uelle)\\s+' ;
var si_fem_voy = deb_mot + '([Ll]’|[Dd]’|[Cc]et\\s+|[MmTtSsſ]on\\s+|[NnVv]otre\\s+|[Ll]eur\\s+|[Qq]uelle\\s+)';
/* TESTE SI UN MOT EST PROBABLEMENT UN NOM AU PLURIEL (à mettre en début de regex) */
var si_plur = deb_mot + '([LlDdCc]es|[Dd]e|[Aa]ux|[MmTtSsſ]es|[NnVv]os|[Ll]eurs|[Qq]uelques|[Pp]lusieurs|[Dd]eux|[Tt]rois|[Dd]ix|[Dd]ouze|[Vv]ingt|[Cc]ent|[Mm]ille)\\s+' ;
/* TESTE SI UN MOT EST PROBABLEMENT AUTRE CHOSE QU'UN VERBE (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle ; la troisième est un complément possible aux deux premières) */
var saufsi_verb_cons = '(?<!(\\s|^)[Jj]e\\s+|(\\s|^)[Tt]u\\s+|(\\s|’|^)[Ii]l\\s+|(\\s|’|^)[Ee]lle\\s+|(\\s|’|^)[Oo]n\\s+|(\\s|^)[Nn]e\\s+|(\\s|^)[Qq]u[ei]\\s+|(\\s|^)[Dd]ont\\s+|(\\s|’|^)[Oo]ù\\s+|(\\s|’|^)[Yy]\\s+)' + deb_mot;
var saufsi_verb_voy = '(?<!(\\s|^)[Jj]’|(\\s|^)[Tt]u\\s+|(\\s|’|^)[Ii]l\\s+|(\\s|’|^)[Ee]lle\\s+|(\\s|’|^)[Oo]n\\s+|(\\s|^)[Nn]’|(\\s|^)[Qq]u’|(\\s|^)[Qq]ui\\s+|(\\s|^)[Dd]ont\\s+|(\\s|’|^)[Oo]ù\\s+|(\\s|’|^)[Yy]\\s+)' + deb_mot;
var saufsi_verb_compl = "(?<!(\\s|^)[mtsſ]e\\s+|(\\s|^)lui\\s+|(\\s|^)[nv]ous\\s+|(\\s|^)leur\\s+|(\\s|’|^)en\\s+|(\\s|’|^)[A-ZÀ-Ü][a-zà-ÿ]+\\s+|(\\s|’|^)homme\\s+|(\\s|^)femme\\s+|(\\s|’|^)fille\\s+|(\\s|^)bouche\\s+|(\\s|^)monde\\s+)";
/* TESTE SI UN MOT EST PROBABLEMENT AUTRE CHOSE QU'UN NOM MASCULIN SINGULIER (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle) */
var saufsi_masc_cons = '(?<!(\\s|^)[Ll]e\\s+|(\\s|’|^)[Aa]u\\s+|(\\s|^)[Dd]u\\s+|(\\s|’|^)[Uu]n\\s+|(\\s|^)[Dd]e\\s+|(\\s|^)[Cc]e\\s+|(\\s|^)[MmTtSsſ]on\\s+|(\\s|^)[NnVv]otre\\s+|(\\s|^)[Ll]eur\\s+|(\\s|^)[Qq]uel\\s+)' + deb_mot;
var saufsi_masc_voy = '(?<!(\\s|^)[Ll]’|(\\s|^)[Dd]’\\s+|(\\s|’|^)[Uu]n\\s+|(\\s|^)[Cc]et\\s+|(\\s|^)[MmTtSsſ]on\\s+|(\\s|^)[NnVv]otre\\s+|(\\s|^)[Ll]eur\\s+|(\\s|^)[Qq]uel\\s+)' + deb_mot;
/* TESTE SI UN MOT EST PROBABLEMENT AUTRE CHOSE QU'UN NOM FÉMININ SINGULIER (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle) */
var saufsi_fem_cons = '(?<!(\\s|^)[Ll]a\\s+|(\\s|’|^)[Uu]ne\\s+|(\\s|^)[Dd]e\\s+|(\\s|^)[Cc]ette\\s+|(\\s|^)[MmTtSsſ]a\\s+|(\\s|^)[NnVv]otre\\s+|(\\s|^)[Ll]eur\\s+|(\\s|^)[Qq]uelle\\s+)' + deb_mot;
var saufsi_fem_voy = '(?<!(\\s|^)[Ll]’|(\\s|^)[Dd]’\\s+|(\\s|’|^)[Uu]ne\\s+|(\\s|^)[Cc]ette\\s+|(\\s|^)[MmTtSsſ]on\\s+|(\\s|^)[NnVv]otre\\s+|(\\s|^)[Ll]eur\\s+|(\\s|^)[Qq]uelle\\s+)' + deb_mot;
/* TESTE SI UN MOT EST PROBABLEMENT AUTRE CHOSE QU'UN NOM AU PLURIEL (à mettre en début de regex)
(resp. qui commence par une consonne, une voyelle) */
var saufsi_plur = '(?<!(\\s|^)[LlDdCc]es\\s+|(\\s|^)[Dd]e\\s+|(\\s|’|^)[Aa]ux\\s+|(\\s|^)[MmTtSsſ]es\\s+|(\\s|^)[NnVv]os\\s+|(\\s|^)[Ll]eurs\\s+|(\\s|^)[Qq]uelques\\s+|(\\s|^)[Pp]lu[sſ]ieurs\\s+|(\\s|^)[Dd]eux\\s+|(\\s|^)[Tt]rois\\s+|(\\s|^)[Dd]ix\\s+|(\\s|^)[Dd]ouze\\s+|(\\s|^)[Vv]ingt\\s+|(\\s|^)[Cc]ent\\s+|(\\s|^)[Mm]ille\\s+)' + deb_mot ;
/* LISTES DES EXPRESSIONS DOUTEUSES À SURLIGNER :
dans les commentaires, « *patati < patata » doit se lire : « surlignez Patati, qui est probablement une erreur pour Patata » */
select_multiple_text.exec(/.*/,
[
/* PONCTUATION */
"('|‘|’{2,})", // problèmes d'apostrophes
"\\.{2,}", // suites de points
"[!:,;?][,;]+", // suites de signes de ponctuation interdites
"\\t", // tabulations
"\\.+…+|…+\\.+", // mélanges de points et points de suspension
"(\\{\\{|\\}\\})", // modèles mal fermés
'\\"', // guillemets droits
'«\\s*«|»\\s*»', // doubles guillemets
"[\\^~–\\@„■•]", // symboles typographiques impossibles en français
"\\s+[\\.\\,\\)\\]]", // mauvais espacement avant la ponctuation basse
"[\\(\\[]\\s+", // mauvais espacement après la ponctuation basse
"[" + char + "][\\!\\?\\:\\;]", // mauvais espacement avant la ponctuation haute
"[\\!\\?\\;\\:\\.,][" + char + "]", // mauvais espacement après la ponctuation haute
"(\\s’|’ )", // mauvais espacement autour des apostrophes
"([\\s\\,\\!\\?]\\-|(?<!(\\s|^)[A-Z])\\.\\-|\\-\\s+[^$])", // mauvais espacement autour des traits-d'union
"(?<!\\s|^)—", // mauvais espacement avant les tirets cadratins
"(—(?!\\s|\\,|$)|[^\\u00A0]—,)", // mauvais espacement après les tirets cadratins
"(?<!\\s|^)\\&", // mauvais espacement avant les esperluettes
"\\&(?!c\\.|\\s|\\,|$)", // mauvais espacement après les esperluettes
"(\\s|^)([Ll]e|[Ll]a|[Ll]es|[Dd]es|[Dd]e|[Aa]u|[Dd]u|[Cc]et|[Cc]ette|[Cc]es|[Mm]on|[MmTtSs]es|[NnVv]otre|[NnVv]os|[Àà]|[Dd]ans|[Ee]n|[Pp]ar|[Ss]ur)" + "[\\,\\.]",// mots qui ne devraient pas être suivis d'une virgule ou d'un point
// SUCCESSIONS DE LETTRES SUSPECTES
"([" + char_min + "-][" + char_min + "][^0-9A-Zpvcgm°.][.] [" + char_min + "]" + "|" + "(ma|ta|sa|ce|se|ni|va|pu|et|le|la|de|du|un|te|je|tu|il|me|ne|ou|où|ok|à|y|a)[.] [" + char_min + "])", // point suivi d'une minuscule (si précédé d'un mot de plus de trois lettres)
"([A-ZÀ-Üa-zà-ÿ][Α-Ωα-ω]|[Α-Ωα-ω][A-ZÀ-Üa-zà-ÿ]|[A-ZÀ-Üa-zà-ÿ][0-9]|[0-9][A-ZÀ-Üa-zà-ÿ]|[Ѐ-ӿ])", // mélanges d'alphabets
"[£$€ϐϵϑϰϕϖϱ]", // symboles mathématiques et monétaires
"[" + char_min + "][" + char_maj + "]+", // majuscules dans mot en minuscules
"(’[0-9]|[0-9]’)", // apostrophes au lieu de prime (ou chiffre au lieu de lettre)
"[fffiflffifflſtst]", // ligatures
"[ȦȧĖėİıíìȮȯ]", // diacritiques exotiques
"(?!nous|vous|faire|en|flon|leu|mieux|s\\s+s’)(?<=^|\\s)(['’" + char + "]+)\\s+\\1(\\s|\\.|\\…|,)", // doublons
"([abdefghjklmnopqrstuvwyzà-ÿçœæſñABDEFGHJKLMNOPQRSTUVWYZÀ-ÜÇŒÆÑ])(\\1\\1+)", // lettres triples
"[^Rr]afli", // *-afli- < -affi- ou -affli-
deb_mot_voy + "[Aa]ft",
"[" + char + "]+(?<!(\\s|’|^|\\-|\\()([" + char_maj + "][" + char_min + "]*|aigu|attir|b|berc|bét|chand|cam|caravan[sſ]ér|cockt|cor|dét|ém|épouvant|évent|ferm|foir|gouvern|m|[sſ]ér|poitr|port|r|[sſ]oupir|trav|trém|vant|vitr|d’|(à|de|tout)\\s+l’|L’))ail" + fin_mot, // *-ail < -ait en fin de mot
"[" + char + "]+(?<!(\\s|’|^|\\-|\\()([" + char_maj + "][" + char_min + "]*|artich|ass|bli|bouc|ch|déf|équiv|f|gerf|gou[sſ][sſ]|(en)*h|hér|levr|prév|quart|reh|re[sſ][sſ]|[sſ]|[sſ]oubre[sſ]|[sſ]ur[sſ]|ta[iïy]|v))aut" + fin_mot, // *-aut < -ant en fin de mot
"[" + char + "]+(?<!e|on|(\\s|’|^|\\-|\\()([" + char_maj + "][" + char_min + "]*|dénoy|dépi|f|h|noy|re[sſ][sſ]|[sſ]|[sſ]ur[sſ]|tre[sſ][sſ]|tuy))autes?" + fin_mot, // *-aute(s) < -ante(s) en fin de mot
"[" + char + "]+(?<!(\\s|’|^|\\-|\\()([" + char_maj + "][" + char_min + "]*|artich|ass|bli|bouc|déf|gerf|gou[sſ][sſ]|h|hér|levr|quart|reh|re[sſ][sſ]|[sſ]|[sſ]oubre[sſ]|[sſ]ur[sſ]))auts" + fin_mot, // *-auts < -ants en fin de mot
"cbe", // *-cbe- < -che-
"cn[lt]", // *-cnl- < -enl-, *-cnt- < -ent-
deb_mot_cons + "des\\s+(la\\s|le\\s|les\\s|l’|ce\\s|cet\\s|cette\\s|ces\\s|[mtsſ]on\\s|[mtsſ]a\\s|[mtsſ]es\\s)", // *des < dès
"(?<!(\\s|^|\\-)(comme|chez|par)\\s)" + deb_mot_cons + "([JjMmTtSsNn]e|[NnVv]ous|[Ll]ui)\\s+[a-zà-ÿ]+é" + fin_mot, // *-é < -e en fin de mot (1)
deb_mot_voy + "([Jj]e|[Ii]l|[Ee]lle|[Oo]n)\\s+[a-zà-ÿ]+é" + fin_mot, // *-é < -e en fin de mot (2)
"(?<!(\\s|’|^|\\-|\\()[" + char_maj + "][" + char_min + "]*)[êè]" + fin_mot, // *-è/-ê < -é en fin de mot
"[êè]es?" + fin_mot, // *-èe(s)/-êe(s) < -ée(s) en fin de mot
"(?<!\\s|’|^|\\-|\\(|(\\s|’|^|\\(|\\-)([" + char_maj + "][" + char_min + "]*|abc|acc|agr|alo|apr|a[sſ]perg|aupr|cacato|congr|cypr|d|déc|exc|expr|faci|flor|gr|herp|in[sſ]ucc|népenth|palmar|pataqu|pr|proc|prof|progr|l|réc|sirvent|[sſ]ucc|tab|tr|xér))ès" + fin_mot, // *-ès < -és en fin de mot
"ês" + fin_mot, // *-ês < -és en fin de mot
"[^AaOoUu]ë", // tréma mis au lieu d'un autre accent
"[" + char + "]+(?<!\\s|’|^|(\\s|’|^|\\()([Éé]m|[Mm]|[Pp]|[Pp]l|[Pp]rom|[Vv]))eut" + fin_mot, // *-eut < -ent en fin de mot
"euts" + fin_mot, // *-euts < -ents en fin de mot
"I’", // *I'/1' < l'
"[^AaEeOoUu]ï", // tréma mis au lieu d'un autre accent
"(?<!\\s|\\-|^|\\(|\\[|\\>|l|(\\s|’|^|\\-)([" + char_maj + "][" + char_min + "]*|ga|gang|i|pygma|ta|trub))lion" + fin_mot, // *-lion < -tion en fin de mot
"(?<!\\s|\\-|^|\\(|\\[|\\>|l|(\\s|^|\\()[Nn]ous\\s+(les?\\s+|la\\s+|l’|ne\\s+|ne\\s+les?\\s+|ne\\s+la\\s+|ne\\s+l’|n’)*[" + char_min + "]+|(\\s|^|\\()(Ne\\s+|Ne\\s+les?\\s+|Ne\\s+la\\s+|Ne\\s+l’|N’)*[" + char_min + "]+|(\\s|^|\\()(—\\s|[Cc]ar\\s|[Mm]ais\\s+)*(ne\\s|ne\\s+les?\\s|ne\\s+la\\s|ne\\s+l’|n’)*[" + char_min + "]+|(\\s|’|^|\\-)([" + char_maj + "][" + char_min + "]*|ga|gang|i|pygma|ta|trub))lions" + fin_mot, // *-lions < -tions en fin de mot
"nls?" + fin_mot, // *-nl(s) < -nt(s) en fin de mot
"(?<!(\\s|’|^|\\-)([" + char_maj + "][" + char_min + "]*|mai|erle|n[eé]a|(con|de|inter|par|re|sou|sur)*vî|(appar|abs|con|dé|entre|main|ob|re|sou)*tî))nm", // *-nm- < -nn- ou -mm-
"œ" + fin_mot, // *-œ < -æ en fin de mot
"oeu", // *-oeu- < -œu-
"[Qq]n", // *-qn- < -qu-
"quils?" + fin_mot, // *quil(s) < qu'il(s)
"(?<!(\\s|’|^)[Ee]a||(\\s|^)[Gg]i|(\\s|^)[Jj]a)rl" + fin_mot, // *-rl < -rt en fin de mot
"(?<!(\\s|^)[Bb]aske|(\\s|^)[Ff]oo|(\\s|^)[Hh]au|(\\s|^)[Mm]on)tb", // *-tb- < -th-
"(?<!g|o|q|(\\s|^|\\-|’|\\()Alc|(\\s|^|\\-|\\()[Jj])uin" + fin_mot, // *-uin < -ain ou -oin en fin de mot
"(?<=" + ponct_forte + ")" + "11" + fin_mot, // *11 < Il
// ACCENTS MANQUANTS OU FAUTIFS
"^A\\s+(?!priori|posteriori|fortiori)", // *A < À en début d'élément
"(?<![a-zà-ÿſæœ])\\s+A\\s+(?!priori|posteriori|fortiori)", // *A < À en milieu d'élément
deb_mot_voy + "([Ii]l|[Oo]n)\\s+à", // *il/on à < il/on a (À FAIRE : pour elle à, il faut exclure toutes les prépositions avant ''elle'')
deb_mot + "[ÂâÄäåæù]" + fin_mot, // erreurs pour à isolé
deb_mot + "([Aa]bim|[Cc]hain|[Dd]échain|[Dd]é[sſ]enchain|[Ee]nchain|[Rr]enchain|[Cc]lot[u\\s\\.\\,\\)\\]$]|[Cc]onnait|[Cc]roit[^\\s\\.\\,\\-\\)\\]\\<$]|[Aa]ccroit|[Dd]écroit|[Rr]ecroit|[Ssſ]urcroit|[Dd]épots?[\\s\\.\\,\\)\\]\\<$]|[Dd]iner|[ÉéEe]pitre|[Gg]out[^t]|[Ii]les?[\\s\\.\\,\\)\\]\\<$]|[Mm]aitr|[Nn]ait|[Rr]enait|[Pp]ait|[Rr]epait|(?<!(\\s|^)se\\s+)[Pp]arait|[Aa]pparait|[Dd]i[sſ]parait|[Rr]eparait|[Cc]omparait(r|\\s+devant)|[Tt]ran[sſ]parait|[Pp]lait|[Cc]omplait|[Dd]éplait|[Ss]urement|[Tt]rain[^s\\s\\.\\,\\)\\]\\<$]|[Ee]ntrain[^s\\s\\.\\,\\)\\]\\<$]|[Vv]out)[" + char + "]*" + fin_mot, // accents circonflexes sur i ou u
"(?<=[Nn]ous\\s+)[" + char_min + "]+(a|i|in|u)mes" + fin_mot, // accents circonflexes manquants sur le passé simple, 1re du pluriel
"(?<=[Vv]ous\\s+)[" + char_min + "]+(a|[^ad]i|in|u)tes" + fin_mot, // accents circonflexes manquants sur le passé simple, 2e du pluriel
deb_mot_voy + "E(res?|ve|ches?)" + fin_mot, // accent grave sur E
deb_mot_voy + "[EÉÈ]tres?" + fin_mot, // accent circonflexe sur E
deb_mot_voy + "I(les?|l[eo]ts?)" + fin_mot, // accent circonflexe sur I
"(?<=(\\s|^)([Ll]e|[Ll]a|[Ll]es|[Aa]u|[Aa]ux|[Dd]u|[Dd]es)\\s+)" + deb_mot_cons + "[nv]otres?" + fin_mot, // *notre(s)/votre(s) < nôtre(s)/vôtre(s)
"[aà] peu prés", // *à peu prés < à peu près
"(?<=\\s)tr[éê][sſ]" + fin_mot, // *trés/três < très
deb_mot_cons + "[Cc]’a" + fin_mot, // *c'a < ç'a
deb_mot_cons + "[Cc]a" + fin_mot, // *ca < ça
// MOTS MIS POUR UN AUTRE : lettre A
deb_mot_voy + "[AÀaà]la" + fin_mot, // *ala < a la
deb_mot_voy + "[Aa]igent" + fin_mot, // *aigent < argent
"(?<!(\\s|’|^)[Uu]n\\s+|(\\s|^)[Ll]’|(\\s|^)nouvel\\s+|(\\s|^)[Pp]ar\\s+|(\\s|’|^)1\\u00a0)" + deb_mot + "[Aa]n" + fin_mot + "(?!\\u00a0[0-9]+|\\s+(mil|dernier|passé|prochain|qu[ei])(\\s|\\.|,|\\)|\\]|\\>|$))", // *an < au
"(?<!(\\s|’|^)[Uu]n\\s+|(\\s|^)[Ll]’)" + deb_mot_voy + "[Aa]na" + fin_mot, // *ana < ans
deb_mot_voy + "[Aa]nx" + fin_mot, // *anx < aux
deb_mot_voy + "[Aa]ntre" + fin_mot, // *antre < autre
"(?<!(\\s|^)[Ll]’|artère\\s+)aorte" + fin_mot, // *aorte < sorte
"(?<!(\\s|^)[LlDd]’)" + deb_mot_voy + "[Aa]rec" + fin_mot, // *arec < avec
saufsi_masc_voy + "atout" + fin_mot, // *atout < a tout
deb_mot_voy + "[Aa]u(dessus|deſſus|dessous|deſſous|del[aà])" + fin_mot, // *au... < au-...
deb_mot_voy + "[Aa]ue" + fin_mot, // *aue < aise, aux, que ?
"(?<!(\\s|^)[Dd]’|(\\s|^)[Dd]es\\s+|(\\s|^)[Dd]eux\\s+|(\\s|^)[Ll]eurs\\s+|(\\s|^)[Ssſ]es\\s+)" + deb_mot_voy + "[Aa]vals" + fin_mot, // *ana < ans
deb_mot_voy + "[Aa]veo" + fin_mot, // *aveo < avec
deb_mot_voy + "[Aa]yec" + fin_mot, // *ayec < avec
// MOTS MIS POUR UN AUTRE : lettre B
deb_mot_cons + "[Bb]arrés" + fin_mot, // *Barrés < Barrès
"(?<=(\\s|^)[Mm]e\\s+|(\\s|^)[Ssſ]e\\s+|(\\s|^)[Ll]a\\s+)bâte" + fin_mot, // *bâte < hâte
"(?<=(\\s|^)[Ssſ]e\\s+)(bâter|bâta)" + fin_mot, // *bâter/bâta < hâter/hâta
"(?<=(\\s|^)[Tt]e\\s+)bâtes" + fin_mot, // *bâtes < hâtes
deb_mot + "[Bb]aute?s?" + fin_mot, // *baut(e)(s) < haut(e)(s)
saufsi_verb_cons + "[Bb]êles?" + fin_mot, // *bêle/bêles < bête/bêtes
deb_mot + "Biai[sſ]e" + fin_mot, // *Biaise < Blaise
saufsi_verb_cons + "boites?" + fin_mot, // *boite/boites < boîte/boîtes
si_fem_cons + "bouté" + fin_mot, // *bouté < bonté
deb_mot_cons + "[Bb]ren" + fin_mot, // *bren < bien
// MOTS MIS POUR UN AUTRE : lettre C
saufsi_plur + "[Cc]ardans" + fin_mot, // *cardans < car dans
saufsi_verb_compl + saufsi_verb_cons + "cari[ae]s?" + fin_mot, // *carie/caries/caria < car le/car les/car la
deb_mot_cons + "[Cc][céèê]" + fin_mot, // *cc/cé < ce
"(?<!(\\s|^)[Jj]e\\s+)" + deb_mot_cons + "celai" + fin_mot, // *celai < celui
deb_mot_cons + "[Cc]el" + fin_mot, // *cel < cet
deb_mot_cons + "[Cc]elle" + fin_mot + "(?!\\s+$|\\s+à(\\s|$)|\\s+ainsi(\\s|$)|\\s+au(\\s|$)|\\s+autour(\\s|$)|\\s+avec(\\s|$)|\\s+d’|\\s+dans(\\s|$)|\\s+de(\\s|$)|\\s+du(\\s|$)|\\s+des(\\s|$)|\\s+dont(\\s|$)|\\s+en(\\s|$)|\\s+entre(\\s|$)|\\s+même(\\s|$)|\\s+où(\\s|$|,)|\\s+par(\\s|$)|\\s+pour(\\s|$)|\\s+qu[ei](\\s|$|,)|\\s+qu’|\\s+[sſ]ous(\\s|$)|\\s+[sſ]ur(\\s|$)|-ci|-là)", // *celle < cette
deb_mot_cons + "celtes?(?!" + ponct_forte + ")", // *celte < celle
"(?<!(\\s|^)[Ll][ae]\\s+|(\\s|^)[Ll]es\\s+|(\\s|^)[Uu]n\\s+|(\\s|^)[Dd]es\\s+|(\\s|^)[Dd]u\\s+)" + deb_mot_cons + "Celtes?" + "(?!" + ponct_forte + ")", // *Celte < Celle
deb_mot_cons + "[Cc]est" + fin_mot, // *cest < c'est
deb_mot_cons + "[Cc]ette(?=\\s+à(\\s|$)|\\s+ainsi(\\s|$)|\\s+au(\\s|$)|\\s+autour(\\s|$)|\\s+avec(\\s|$)|\\s+d’|\\s+dans(\\s|$)|\\s+de(\\s|$)|\\s+du(\\s|$)|\\s+des(\\s|$)|\\s+dont(\\s|$)|\\s+en(\\s|$)|\\s+entre(\\s|$)|\\s+où(\\s|$|,)|\\s+par(\\s|$)|\\s+pour(\\s|$)|\\s+qu[ei](\\s|$|,)|\\s+qu’|\\s+[sſ]ous(\\s|$)|\\s+[sſ]ur(\\s|$)|-ci|-là)", // *cette < celle
"(?<!(\\s|’|^)[Uu]n\\s+|(\\s|^)[Ll]e\\s+|(\\s|^)du\\s+)Chariot" + fin_mot + "(?!\\s+d’|\\s+de(\\s|$)|\\s+des(\\s|$)|\\s+du(\\s|$))", // *Chariot < Charlot
deb_mot_cons + "[Cc]ho[sſ]er" + fin_mot, // *choser < choses
deb_mot_cons + "[Cc]l" + fin_mot, // *cl < ci
saufsi_verb_cons + "clames?" + fin_mot, // *clame(s) < dame(s)
saufsi_plur + "clans" + fin_mot + "(?<!\\.|\\,|\\s;|\\s:|\\)|\\s\\!|\\s\\?)", // *clans < dans
deb_mot_cons + "clic" + fin_mot, // *clic < elle
deb_mot_cons + "(cloute|clouter|cloutes)" + fin_mot, // *cloute(r/s) < doute(r/s)
deb_mot_cons + "[Cc]o" + fin_mot, // *co < ce
saufsi_fem_cons + "[Cc]onne" + fin_mot, // *conne < comme
deb_mot_cons + "cos" + fin_mot, // *cos < ces
"(?<=" + ponct_forte + ")" + "Cos" + fin_mot, // *Cos < Ces
"(?<!(\\s|^)[Ll][ea]\\s+|(\\s|^)[Dd]u\\s+|(\\s|^)[Nn]oix\\s+de\\s+)" + deb_mot_cons + "[Cc]ola" + fin_mot, // *cola < cela
deb_mot_cons + "cotes?" + fin_mot + "(?!\\s+mal\\s+taillée)", // *cote(s) < côte(s)
"(?<!(\\s|^)(cours|est|[sſ]ont|sera|seront|serait|seraient|soit|soient|été|étant)\\s+)" + deb_mot_cons + "cotés?" + fin_mot, // *coté(s) < côté(s)
saufsi_fem_cons + "[Cc]otte" + fin_mot, // *cotte < cette
saufsi_masc_cons + '[Cc]outre' + fin_mot, // *coutre < contre
si_masc_cons + "[Cc]uite" + fin_mot, // *cuite < culte
deb_mot_cons + "curent" + fin_mot, // *curent < eurent
// MOTS MIS POUR UN AUTRE : lettre D
"(?<!(\\s|^)[Oo]ui[\\-\\s]|(\\s|^)[Nn]on[\\-\\s]|(\\s|^)[Nn]enni[\\-\\s])" + deb_mot_cons + "da" + fin_mot, // *da < du
deb_mot_cons + "[Dd]aines?" + fin_mot, // *daine(s) < dame(s)
deb_mot_cons + "[Dd]c" + fin_mot, // *dc < de
deb_mot_cons + "[Dd]ela" + fin_mot, // *dela < de la, de là, delà
"(?<!(\\s|’|^)[Aa]u[\\s\-]|(\\s|^)[Pp]ar[\\s\-]|(\\s|^)[Ee]n[\\s\-]|(\\s|^)[Dd]e\\s+|(\\s|^)[Dd]eci\\s+)delà" + fin_mot, // *delà < de là, de la
deb_mot_cons + "[Dd]ês?" + fin_mot, // *dê(s) < dé(s)/dès
saufsi_masc_cons + "[Dd]é" + fin_mot, // *dé < de
deb_mot_cons + "[Dd]éplus" + fin_mot, // *déplus < de plus
saufsi_plur + "[Dd]és" + fin_mot, // *dés < des
"(?<=[Ll]’un\\s+)" + deb_mot_cons + "deux" + fin_mot, // *deux < d'eux
deb_mot_cons + "[Dd]îte" + fin_mot, // *dîte < dite
"(?<!(\\s|^)[Vv]ous\\s+)" + deb_mot_cons + "[Dd]îtes" + fin_mot + "(?!\\-vous[\\s\\.,\\)\\]\\<$])", // *dîtes < dites
deb_mot_cons + "[Dd]o" + fin_mot + "(?!(\\s|^)(majeur|mineur|bémol|bécarre|diè[sz]e)[\\s\\.,\\)\\]\\<$])", // *do < de
"(?<!dos\\s+à\\s+)" + saufsi_masc_cons + saufsi_plur + "[Dd]os" + fin_mot + "(?!(\\s|^)(à|au|contre|de)[\\s\\.,\\)\\]\\<$]|(\\s|^)d’)", // *dos < des
deb_mot_cons + "dont\\s+ou" + fin_mot, // *ou < on
// MOTS MIS POUR UN AUTRE : lettre E
deb_mot_cons + "[Ee]a" + fin_mot, // *ea < eu/en
"(?<=[Ii]ls?\\s+|[Ee]lles?\\s+|[NVnv]ous\\s+|l’)" + deb_mot_voy + "[Éé]coul(ait|e|aient)" + fin_mot, // *écouler < écouter
deb_mot_voy + "[Ee]h" + fin_mot + "(?!(\\s|^)(bien|donc|quoi|non|oui)[\\s\\.,\\)\\]\\<$]|" + ponct + ")", // *eh < et
deb_mot_voy + "[Ee]l" + fin_mot, // *el < et
deb_mot_voy + "[EeÉé]lé" + fin_mot, // *élé/elé < été
deb_mot_voy + "[Éé]l(ions|iez)" + fin_mot, // *élions, éliez < étions, étiez
si_fem_voy + "[EÉé]lude" + fin_mot, // *élude < étude
si_plur + "[EÉé]ludes" + fin_mot, // *éludes < études
deb_mot_voy + "[Ee]n\\s+en" + fin_mot + "(?!\\s+[a-zà-ù]+ant)", // *en en < en
deb_mot_voy + "[Ee]ntant" + fin_mot, // *entant < enfant/en tant
si_masc_voy + "épouvantait" + fin_mot, // *épouvantait < épouvantail
deb_mot_voy + "[Ee][sſ]i" + fin_mot, // *esi < est
deb_mot_voy + "[Ee][sſ]tce" + fin_mot, // *esi < est
"(?<!\\ss’)étalent" + fin_mot, // *étalent < étaient
deb_mot_voy + "[EÉé]tal[st]" + fin_mot, // *étal(s/t) < étai(s/t)
"est-a-dire", // *est-a-dire < est-à-dire
deb_mot_voy + "[EÉÈéè]tes" + fin_mot, // *étes, ètes < êtes/étés
si_verb_voy + "études?" + fin_mot, // *étude(s) < élude(s)
"(?<!(\\s|’|^)([Aa]voir|[Aa]yant|ai|as|[Aa]|avons|avez|ont|av[ao]is|av[ao]it|avions|aviez|av[ao]ient|aurai|auras|aura|aurons|aurez|auront|aur[ao]is|aur[ao]it|aurions|auriez|aur[ao]ient|aie|ais|ait|ayons|ayez|aient|eu[sſ][sſ]es?|eût|eu[sſ][sſ]ions|eu[sſ][sſ]iez|eu[sſ][sſ]ent|déjà|donc|encore|jamais|guère|pas|peut-être|plus|point|rien|[sſ]ouvent|toujours)\\s+|(-je|-tu|-il|-elle|-on|-nous|-vous|-ils|elles)\\s+|$)" + deb_mot_voy + "eu" + fin_mot + "(?!\\s+égard)", // *eu < en
deb_mot_voy + "[Ee]u\\s+(?=(outre|proie|effet|hiver|automne|terre|général|route|marche|lien|est)[\\s\\.,\\)\\]$])", // *eu < en
si_masc_voy + "[Ee]xempte" + fin_mot, // *exempte < exemple
// MOTS MIS POUR UN AUTRE : lettre F
deb_mot_cons + "fa" + fin_mot + "(?!\\s+(majeur|mineur|bémol|bécarre|diè[sz]e)[\\s\\.,\\)\\]$])", // *fa < sa
si_masc_cons + "[Ff]aite" + fin_mot, // *faite < faîte
si_plur + "[Ff]aites" + fin_mot + "(?!\\s+pas[\\s\\.,\\)\\]$])", // *faites < faîtes
saufsi_masc_cons + "[Ff]aîte" + fin_mot, // *faîte < faite
saufsi_plur + "[Ff]aîtes" + fin_mot, // *faîtes < faites
deb_mot_cons + "Fart" + fin_mot, // *Fart < l'art
deb_mot_cons + "[Ff]artes?" + fin_mot, //* farte(s) < forte(s), sorte(s)
deb_mot_cons + "Fauteur" + fin_mot + "(?!\\s+de\\s+troubles[\\s\\.,\\)\\]\\<$])", //* Fauteur < l'auteur
deb_mot_cons + "[Ff]dle" + fin_mot, // *fdle < fille
"(?<!(\\s|^)[Je][ea]\\s+|(\\s|^)[Tt]u\\s+|(\\s|^)[Mm]e\\s+)" + deb_mot_cons + "fiançais" + fin_mot, // *fiançais < français
deb_mot_cons + "Fiançais" + fin_mot, // *Fiançais < Français
si_fem_cons + "Fiance" + fin_mot, // *Fiance < France
saufsi_masc_cons + "fil" + fin_mot, // *fil < fit
deb_mot_cons + "Fil" + fin_mot, // *Fil < Fit
deb_mot_cons + "fo" + fin_mot, // *Fo < ???
saufsi_fem_cons + "[Ff]oire" + fin_mot, // *foire < faire
"(?<!(\\s|^)[Nn]ous\\s+)" + deb_mot_cons + "[Ff]ondions" + fin_mot, // *fondions < fonctions
"(?<!(\\s|^)[Ll]e\\s+|(\\s|’|^)[Uu]n\\s+|(\\s|’|^)[Aa]u\\s+|(\\s|^)[Dd]u\\s+)" + deb_mot_cons + "[Ff]oret" + fin_mot, // *foret < forêt
deb_mot_cons + "[Ff]ouie" + fin_mot, // *fouie < foule
deb_mot_cons + "[Ff]out" + fin_mot + "(?=\\s+([" + char + "]+er|[" + char + "]+re|[" + char + "]+ir)[\\s\\.,\\)\\]\\<$])", // *fout < font
deb_mot_cons + "[Ff]ols" + fin_mot, // *fols < fois
"(?<=(\\s|’|^)[Ii]l\\s+|(\\s|’|^)[Ee]lle\\s+|(\\s|’|^)[Oo]n\\s+|(\\s|^)[Nn]e\\s+)" + "[Ff][uû]i" + fin_mot, // *fui < fut
"(?<!(\\s|’|^)[Aa]u\\s+)" + deb_mot_cons + "[Ff][uû]r" + fin_mot, // *fur < fut
// MOTS MIS POUR UN AUTRE : lettre G
deb_mot_cons + "Ge" + fin_mot, // *Ge < Ce
deb_mot_cons + "Gela" + fin_mot, // *Gela < Cela
deb_mot_cons + "[Gg]ènes?" + fin_mot, // *gène(s) < gêne(s)
deb_mot_cons + "Gomme" + fin_mot, // *Gomme < comment
deb_mot_cons + "Gomment" + fin_mot, // *Gomment < Comment
deb_mot_cons + "gue" + fin_mot, // *gue < que
"(?<!(\\s|^)[Ll]e\\s+|(\\s|^)[Dd]u\\s+)" + deb_mot_cons + "gui" + fin_mot, // *gui < qui
deb_mot_cons + "guis" + fin_mot, // *guis < suis
// MOTS MIS POUR UN AUTRE : lettre H
deb_mot_cons + "Hais" + fin_mot, // *Hais < fiais/Mais
deb_mot_cons + "[Hh]onnète" + fin_mot, // *honnète < honnête
// MOTS MIS POUR UN AUTRE : lettre I
deb_mot_voy + "[Îî]" + fin_mot, // *î < ???
deb_mot_voy + "[Ii]ei" + fin_mot, // *iei < ici
deb_mot_voy + "[Ii]i" + fin_mot, // *ii < il
deb_mot_voy + "[Ii]me?" + fin_mot, // *im(e) < un(e)
deb_mot_cons + "[Ii]noi" + fin_mot, // *inoi < moi
deb_mot_cons + "[Ii]ni" + fin_mot, // *ini < lui
si_masc_cons + "[Ii]nonde" + fin_mot, // *inonde < monde
si_plur + "[Ii]nondes" + fin_mot, // *inondes < mondes
deb_mot_voy + "[Ii]ncuite" + fin_mot, // *incuite < inculte
deb_mot_voy + "[Ii]n[sſ]tru" + fin_mot, // *instru (mot coupé à la ligne)
deb_mot_voy + "[Ii]t" + fin_mot, // *it < il
"\\-[Ii]t" + fin_mot, // *it < il
// MOTS MIS POUR UN AUTRE : lettre J
deb_mot_voy + "j" + fin_mot, // *j < j'
deb_mot_voy + "[Jj]oucs?" + fin_mot, // *jouc(s) < joue(s)
// MOTS MIS POUR UN AUTRE : lettre K
// MOTS MIS POUR UN AUTRE : lettre L
"(?<!(\\s|’|^)acide\\s+|(\\s|^)ferment\\s+|(\\s|^)fermentation\\s+)" + deb_mot_cons + "lactique" + fin_mot, // *lactique < tactique
"(?<!(\\s|^)ferments\\s+|(\\s|^)fermentations\\s+)" + deb_mot_cons + "lactiques" + fin_mot, // *lactiques < tactiques
deb_mot_cons + "laits" + fin_mot, // *laits < faits
"(?<!(\\s|^)[Ll]a\\s+|(\\s|’|^)[Uu]ne\\s+)" + deb_mot_cons + "laite" + fin_mot, // *laite < faite
"(?<!(\\s|^)[Ll]es\\s+|(\\s|^)[Dd]es\\s+)" + deb_mot_cons + "laites" + fin_mot, // *laites < faites
"(?<!(\\s|^)bleu\\s+)" + deb_mot_cons + "lapis" + fin_mot + "(?!(\\s|-)lazz?ulis?[\\s\\.,\\)\\]\\<])", // *lapis < tapis
saufsi_masc_cons + "lard" + fin_mot, // *lard < tard
si_fem_cons + "laveur" + fin_mot, // *laveur < faveur, saveur
saufsi_masc_cons + "lemme" + fin_mot, // *lemme < femme
"(?<!(\\s|^)[Ll]e\\s+|(\\s|’|^)[Uu]ne\\s+|(\\s|^)[Dd]u\\s+)" + deb_mot_cons + "lé" + fin_mot, // *lé < le
"(?<!(\\s|^)[Ll]es\\s+|(\\s|^)[Dd]es\\s+)" + deb_mot_cons + "lés" + fin_mot, // *lés < les
deb_mot_cons + "[Ll]ès" + fin_mot, // *lès < les
"(?<!(\\s|^)[Qq]ueue\\s+|(\\s|^)[Ll]eu\\s+)" + deb_mot_cons + "leu" + fin_mot, // *leu < ???
"(?<!(\\s|’|^)[Hh]ommes?(\\s|\\-)|(\\s|’|^)[Hh]ommages?(\\s|\\-))" + deb_mot_cons + "liges?" + fin_mot, // *lige(s) < tige(s)
deb_mot_cons + "ligures?" + fin_mot, // *ligure(s) < figure(s)
saufsi_masc_cons + "lin" + fin_mot, // *lin < fin
deb_mot_cons + "lins" + fin_mot, // *lins < fins
"(?<![0-9]+\\u00a0)" + deb_mot_cons + "litres" + fin_mot + "(?!\\s+de\\s+(bière|blanc|lait|pétrole|rouge|sang|vin)[\\s\\.,\\)\\]\\<]|\\s+d’(air|alcool|huile|eau)[\\s\\.,\\)\\]\\<])", // *litres < titres
deb_mot_cons + "ll" + fin_mot, // *ll < Il
deb_mot_cons + "los?" + fin_mot, // *lo(s) < le(s)
"\\-loi" + fin_mot, // *-loi < -toi
"(?<=(\\s|’|^)[Uu]ne\\s+|(\\s|^)[Cc]ette\\s+|(\\s|^)première\\s+|(\\s|^)dernière\\s+|(\\s|^)[Ll]a\\s+)" + deb_mot_cons + "lois" + fin_mot, // *lois < fois
deb_mot_cons + "lous" + fin_mot, // *lous < tous
deb_mot_cons + "ls" + fin_mot, // *ls < ils/la/le/les
deb_mot_cons + "luf" + fin_mot, // *luf < tuf
"(?<!(\\s|^)pleine\\s+|(\\s|^)nouvelle\\s+|(\\s|^)vieille\\s+)" + saufsi_fem_cons + "lune" + fin_mot, // *lune < l'une
// MOTS MIS POUR UN AUTRE : lettre M
deb_mot_cons + "[Mm]aia" + fin_mot, // *mais < mais
saufsi_plur + "[Mm]ails" + fin_mot, // *mails < mais
saufsi_masc_cons + "[Mm]aïs" + fin_mot, // *maïs < mais
deb_mot_cons + "mats" + fin_mot, // *mats < mais
"(?<!(\\s|^)petit\\s)" + deb_mot_cons + "Mats" + fin_mot, // *Mats < Mais
"(?<!(\\s|^)[Pp]as\\s+|(\\s|^)[Pp]lus\\s+|(\\s|^)[Tt]rè[sſ][\\s\\-]|(\\s|^)[Tt]rop\\s+|(\\s|^)[Aa]ssez\\s+|(\\s|^)[Cc]orps\\s+|(\\s|’|^)[Ee]sprits?\\s+|(\\s|^)[Pp]rincipes?\\s+|(\\s|’|^)[Aa]irs?\\s+)" + deb_mot_cons + "malins?" + fin_mot + "(?!\\s+esprits?)", // *malin(s) < matin(s)
si_fem_cons + "[Mm]aniéré" + fin_mot, // *maniéré < manière
si_plur + "[Mm]aniérés" + fin_mot, // *maniérés < manières
deb_mot_cons + "[Mm]èmes?" + fin_mot, // *mème(s) < même(s)
deb_mot_cons + "[Mm]émo" + fin_mot, // *mémo < même
"(?<!(\\s|^)et\\s+)" + saufsi_verb_compl + saufsi_verb_cons + "ment" + fin_mot, // *ment (fin de mot coupé à la ligne)
"(?<!(\\s|^)[Dd][eu]\\s+|(\\s|’|^)[Aa]n\\s+)" + deb_mot_cons + "mil" + fin_mot, // *mil < mit
"(?<!(\\s|^)[Àà]\\s+qui\\s+)" + deb_mot_cons + "mieux\\s+mieux" + fin_mot, // *mieux mieux < mieux
"(?<!(\\s|^)[Nn]ous\\s+|(\\s|^)[Nn]e\\s+)" + deb_mot_cons + "misons" + fin_mot, // *misons < maisons/raisons
deb_mot_cons + "[Mm]os?" + fin_mot, // *mo(s) < me(s)
deb_mot_cons + "[Mm]ôle" + fin_mot, // *môle < mêle
deb_mot_cons + "[Mm]ôme" + fin_mot, // *môme < même
deb_mot_cons + "[Mm]or" + fin_mot, // *mor < mon, mer
deb_mot_cons + "[Mm]ou" + fin_mot, // *mou < mon
deb_mot_cons + "[Mm]oti[eé]s?" + fin_mot, // *motie/motié < moitié
deb_mot_cons + "[Mm]oulon" + fin_mot, // *moulon < mouton
"(?<!(\\s|^)[Nn]ous\\s+)" + deb_mot_cons + "[Mm]oulons" + fin_mot, // *moulons < moutons
deb_mot_cons + "[Mm]oyeu" + fin_mot, // *moyeu < moyen
// MOTS MIS POUR UN AUTRE : lettre N
"(?<!(\\s|^)[Ll][ea]\\s+|(\\s|^)[Ll]es\\s+)" + saufsi_verb_cons + "ni[ae]" + fin_mot + "(?!\\s+pas[\\s\\.,\\)\\]\\<]|\\s+point[\\s\\.,\\)\\]\\<]|\\s+que[\\s,\\)\\]\\<]|\\s+qu’|\\-t\\-)", // *nia/nie < ma/me
"(?<!(\\s|^)[Ll][ea]\\s+|(\\s|^)[Ll]es\\s+)" + saufsi_verb_cons + "nies" + fin_mot + "(?!\\s+pas[\\s\\.,\\)\\]\\<]|\\s+point[\\s\\.,\\)\\]\\<]|\\s+que[\\s,\\)\\]\\<]|\\s+qu’|\\-tu[\\s\\.,\\)\\]\\<])", // *nies < mes
saufsi_masc_cons + "niais" + fin_mot, // *niais < mais
deb_mot_cons + "nia[sſ][sſ]e" + fin_mot, // *niasse < masse
deb_mot_cons + "[Nn]o" + fin_mot, // *no < ne
"(?<!(\\s|^)[Jj]e\\s+|(\\s|’|^)[Ii]l\\s+|(\\s|’|^)[Oo]n\\s+|lui\\s+)(?<=(\\s|’|^)[Uu]n\\s+|(\\s|^)[Ll]’|(\\s|^)[Cc]et\\s+|(\\s|^)[MmTtSsſ]on\\s+|(\\s|^)bel\\s+|(\\s|^)[Jj]eune\\s+|(\\s|^)premier\\s+|(\\s|^)[Vv]ieil\\s+)" + deb_mot_cons + "nomme" + fin_mot + "(?!\\s+pas[\\s\\.,\\)\\]\\<]|\\s+point[\\s\\.,\\)\\]\\<]|\\-t\\-)", // *nomme < homme
"(?<!(\\s|^)[Tt]u\\s+)(?<=(\\s|^)[Dd]es\\s+|(\\s|^)[Les]es\\s+|(\\s|^)[Cc]es\\s+|(\\s|^)[MmTtSsſ]es\\s+|(\\s|^)beaux\\s+|(\\s|^)[Jj]eunes\\s+|(\\s|^)premiers\\s+|(\\s|^)[Vv]ieux\\s+)" + deb_mot_cons + "nommes" + fin_mot + "(?!\\s+pas[\\s\\.,\\)\\]\\<]|\\s+point[\\s\\.,\\)\\]\\<]|\\-tu[\\s\\.,\\)\\]\\<])", // *nommes < hommes
deb_mot_cons + "[Nn]oua" + fin_mot, // *noua < nous
// MOTS MIS POUR UN AUTRE : lettre O
"[Oo]\\/[Oo]", // *o/o < %
deb_mot_voy + "[Oo]n" + fin_mot + "(?=\\s+(un|une|des?|ces?|cet|cette|[mtsſ]on|[mtsſ]a|[mtsſ]es|[nv]otre|[nv]os|avant|arrière|automne|bien|effet|été|face|général|hiver|lien|mal|nombre|plusieurs|plutôt|printemps|quels?|quelles?|quelque?|route|[" + char_min + "]+ant)[\\s\\.,\\)\\]\\<])", // *on < en/ou
deb_mot_voy + "[Vv]ous\\s+ôtes" + fin_mot, // *ôtes < êtes
deb_mot_voy + "ôtes-vous" + fin_mot, // *ôtes < êtes
deb_mot_voy + "[Oo]ti" + fin_mot, // *oti < où
deb_mot_voy + "[Oo]ut" + fin_mot, // *out < ont
// MOTS MIS POUR UN AUTRE : lettre P
deb_mot_cons + "[PFT]onde" + fin_mot, // *Ponde < l'onde
deb_mot_cons + "[PFTt]air" + fin_mot, // *Pair < l'air
deb_mot_cons + "[Pp]ai" + fin_mot, // *pai < par
deb_mot_cons + "[PFTt]an" + fin_mot, // *pan < l'an
deb_mot_cons + "[Pp]arce" + fin_mot + "(?!\\s+qu|\\s$)", // *parce < par ce
deb_mot_cons + "[Pp]arces" + fin_mot, // *parces < par ces
saufsi_verb_compl + saufsi_verb_cons + "parl(e|a)" + fin_mot + "(?!\\s+(à|ain[sſ]i|au[sſ][sſ]i|aux?|avec|ce|cependant|ces|cet|cette|comme|dans|des?|du|donc|en|et|ici|jamais|là|la|les?|leur|lui|moi|ni|parfois|pas|pendant|pour|que|[sſ]ans|[sſ]ous|[sſ]ouvent|[sſ]ur|toujours|un|vraiment)[\\s\\.,\\)\\]\\<]|\\s+[dl]’|\\s+[aâeéèêiîou]|" + ponct +")", // *parle/parla < par le/la (exceptions : si suivi d'adverbe ou préposition ou article défini ou mot commençant par une voyelle ou ponctuation)
saufsi_verb_compl + saufsi_verb_cons + "parles" + fin_mot + "(?!\\s+(la|les?|un|des?)[\\s\\.,\\)\\]\\<]|\\s+[dl]’|" + ponct +")", // *parles < par les (exceptions : si suivi d'une ponctuation ou d'un autre article)
deb_mot_cons + "[PTR]avons" + fin_mot, // *Pavons < l'avons
deb_mot_cons + "[Pp]ax" + fin_mot, // *pax < par
deb_mot_cons + "peul" + fin_mot, // *peul < peut
deb_mot_cons + "[Pp]o" + fin_mot, // *po < ???
deb_mot_cons + "[Pp]rêles?" + fin_mot, // *prêle(s) < prête(s)
saufsi_plur + "[Pp]rés" + fin_mot, // *prés < près
"(?<!(\\s|^)se\\s+)" + deb_mot_cons + "(profil[eéèaoiâ][snoeimrt]?[snzteai]?[snei]?[tsoenz]?[nzt]?[st]?)" + fin_mot, // *profil < profit (et dérivés)
si_masc_cons + "[Pp]ublie" + fin_mot, // *publie < public
// MOTS MIS POUR UN AUTRE : lettre Q
deb_mot_cons + "[Qq]a['’]", // *qa < qu
deb_mot_cons + "[Qq]h" + fin_mot, // *qh < qu
deb_mot_cons + "[Qq]u" + fin_mot, // *qu < qu'
deb_mot_cons + "Quanta" + fin_mot, // *Quanta < Quant à
saufsi_plur + "quanta" + fin_mot, // *quanta < quant à
"(?<!(\\s|^)[DdLl]es\\s+)" + deb_mot_cons + "quanta" + fin_mot, // *quanta < quant à
"(?<!(\\s|^)statu\\s+)" + deb_mot_cons + "[Qq]uo" + fin_mot, // *quo < que
// MOTS MIS POUR UN AUTRE : lettre R
deb_mot_cons + "raffaire" + fin_mot, // *raffaire < l'affaire
deb_mot_cons + "rait" + fin_mot, // *rait < l'ait
saufsi_plur + "rais" + fin_mot, // *rais < l'ais
deb_mot_cons + "(rap|re|rem)" + fin_mot, // *mots coupés à la ligne
deb_mot_cons + "rembarras" + fin_mot, // *rembarras < l'embarras
deb_mot_cons + "(a|à)\\s+rencontre" + fin_mot, // *rencontre < l'encontre'
"(?<=(\\s|’|^)[Àà]\\s+|=(\\s|^)[Dd]ans\\s+)" + deb_mot_cons + "rentrée" + fin_mot, // *rentrée < l'entrée
deb_mot_cons + "rétendue" + fin_mot, // *rétendue < l'étendue
"(?<=(\\s|^)[Pp]rompt\\s+)" + saufsi_masc_cons + "rétabli[sſ][sſ]ement" + fin_mot, // *rétablissement < l'établissement
deb_mot_cons + "rie" + fin_mot, // *rie < ne
deb_mot_cons + "rintérêt" + fin_mot, // *rintérêt < l'intérêt
"(?<=(\\s|^)[Jj]e\\s+|(\\s|^)[Nn]e\\s+|(\\s|’|^)[Yy]\\s+)" + deb_mot_cons + "[Rr]ivai" + fin_mot, // *rivai < rival
deb_mot_cons + "rouies?" + fin_mot, // *rouie(s) < roule(s)/route(s)
"(?<!(\\s|^)[Jj]e\\s+|(\\s|^)[Tt]u\\s+|(\\s|’|^)[Ii]l\\s+|(\\s|’|^)[Ee]lle\\s+|(\\s|’|^)[Oo][nù]\\s+|(\\s|^)[MmTtSsſ]e\\s+|(\\s|^)[Qq]u[ei]\\s+)" + deb_mot_cons + "roules?" + fin_mot, // *roule(s) < route(s)
// MOTS MIS POUR UN AUTRE : lettre S
deb_mot_cons + "[Ss]ana" + fin_mot, // *sana < sans
deb_mot_cons + "[Ss]aris" + fin_mot, // *saris < sans
deb_mot_cons + "[Ss][cs]s?" + fin_mot, // *sc(s)/so(s) < ses
deb_mot_cons + "[Ss]dr" + fin_mot, // *sdr < sur
deb_mot_cons + "[Ss]en" + fin_mot, // *sen < s'en
"(?<!(\\s|^)[Jj]e\\s+|(\\s|^)[Tt]u\\s+)" + deb_mot_cons + "[Ssſ]oldais?" + fin_mot, // *soldai(s) < soldat(s)
"(?<!(\\s|’|^)([Aa]voir|[Aa]yant|[Aa]|[Oo]nt|avait|avaient|aura|auront|aurait|auraient|ait|aient|eût|eu[sſ][sſ]ent)\\s+)" + deb_mot_cons + "[Ssſ]ombré" + fin_mot, // *sen < s'en
deb_mot_cons + "[Ssſ]ons" + fin_mot + "(?=\\s+[Ll][ea][\\s\\.,\\)\\]\\<]|\\s+[Ll]’|\\s+[Ll]es[\\s\\.,\\)\\]\\<]|\\s+[Uu]ne?[\\s\\.,\\)\\]\\<])", // *sons < sous
"(?<!(\\s|^)[Ll][ea]\\s+|(\\s|’|^)[Uu]n\\s+)" + deb_mot_cons + "sou" + fin_mot, // *sou < son
deb_mot_cons + "[Ssſ]out" + fin_mot, // *sout < sont
deb_mot_cons + "[Ssſ]ubles?" + fin_mot, // *suble(s) < subie(s)
// MOTS MIS POUR UN AUTRE : lettre T
deb_mot_cons + "[Tt]apas" + fin_mot, // *l'a pas < tapas
deb_mot_cons + "[Tt]audis\\s+qu", // *taudis < tandis
si_masc_cons + "[Tt]ernie" + fin_mot, // *ternie < terme
si_plur + "[Tt]ernies" + fin_mot, // *ternies < termes
deb_mot_cons + "[Tt]ètes?" + fin_mot, // *tète < tête
deb_mot_cons + "[Tt]f" + fin_mot, // *tf < ???
deb_mot_cons + "[Tt]i[eé]s??" + fin_mot, // *tie(s) < ???
deb_mot_cons + "(TI|IT|TII|ITI|IIT|TTI|TIT|ITT)" + fin_mot, // *chiffres romains
"(?<!(\\s|^)[Ll]e\\s+|(\\s|^)[Dd]u\\s+|(\\s|’|^)[Aa]u\\s+)" + deb_mot_cons + "[Tt]ien" + fin_mot, // *tien < lien
deb_mot_cons + "[Tt]in" + fin_mot, // *tin < fin
"(?<!(\\s|^)[JjLlMmNn]e\\s+|(\\s|’|^)[Ee]n\\s+|(\\s|’|^)[Yy])" + deb_mot_cons + "[Tt]ins" + fin_mot, // *tins < fins
deb_mot_cons + "[Tt]n" + fin_mot, // *tn < ta
deb_mot_cons + "[Tt]os?" + fin_mot, // *to(s) < te(s)
"(?<!^|\\n|" + ponct_forte + ")" + deb_mot_cons + "Ton" + fin_mot, // *Ton < l'on
deb_mot_cons + "Tons" + fin_mot, // *Tons < Tous
"(?<!(\\s|^)[CcDdLlMmSsſTt]es\\s+|(\\s|^)[NnVv]os\\s+|(\\s|^)[Ll]eurs\\s+|(\\s|’|^)[Aa]ux\\s+|(\\s|^)[Qq]uelques\\s+|(\\s|^)[Dd]eux\\s+|(\\s|^)[Tt]rois\\s+|(\\s|^)[Dd]ix\\s+|(\\s|^)[Cc]ent\\s+|(\\s|^)[Mm]ille\\s+|(\\s|^)[Dd]emi\\-)" + deb_mot_cons + "tons" + fin_mot, // *tons < tous
"(?<!(\\s|^)[mtsſ]e\\s+)" + deb_mot_cons + "[Tt]ontes?" + fin_mot, // *tonte < toute
deb_mot_cons + "[Tt]ordre" + fin_mot, // *tordre < l'ordre
deb_mot_cons + "[Tt]oules?" + fin_mot, // *toules < toutes
deb_mot_cons + "[Tt]out\\s+à\\s+lait" + fin_mot, // *tout à lait < tout à fait
deb_mot_cons + "[Tt]une?" + fin_mot, // *tun(e) < l'un(e)
// MOTS MIS POUR UN AUTRE : lettre U
deb_mot_cons + "Us" + fin_mot, // *Us < Ils
// MOTS MIS POUR UN AUTRE : lettre V
deb_mot_cons + "[Vv]êlements?" + fin_mot, // *vêlement(s) < vêtement(s)
deb_mot_cons + "[Vv]oila" + fin_mot, // *voila < voilà
deb_mot_cons + "[Vv]oua" + fin_mot, // *voua < vous
// MOTS MIS POUR UN AUTRE : lettre W
// MOTS MIS POUR UN AUTRE : lettre X
// MOTS MIS POUR UN AUTRE : lettre Y
deb_mot_cons + "yeut" + fin_mot, // *yeut < veut
deb_mot_cons + '([Jj]e|[Tt]u|[Nn]e|[Qq]ui|(J’|j’|Tu\\s+|tu\\s+)en|[Yy])\\s+' + "yeux" + fin_mot, // *yeux < veux
deb_mot_cons + "yie" + fin_mot, // *yie < vie
saufsi_fem_cons + "yoles?" + fin_mot, // *yole(s) < vole(s)
// MOTS MIS POUR UN AUTRE : lettre Z
]);
}
};
if ( !mw.user.isAnon() ) {
$(document).ready(select_multiple_text.default_select);
}