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=\".*\"|&nbsp;|&mdash;|<!--.*-->|\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);
}