Index: gc_core/js/lang_core/gc_engine.js
==================================================================
--- gc_core/js/lang_core/gc_engine.js
+++ gc_core/js/lang_core/gc_engine.js
@@ -321,13 +321,13 @@
 
     load: function (sContext="JavaScript", sPath="") {
         try {
             if (typeof(require) !== 'undefined') {
                 var spellchecker = require("resource://grammalecte/graphspell/spellchecker.js");
-                _oSpellChecker = new spellchecker.SpellChecker("${lang}", "", "${dic_main_filename_js}", "${dic_extended_filename_js}", "${dic_personal_filename_js}");
+                _oSpellChecker = new spellchecker.SpellChecker("${lang}", "", "${dic_main_filename_js}", "${dic_extended_filename_js}", "${dic_community_filename_js}", "${dic_personal_filename_js}");
             } else {
-                _oSpellChecker = new SpellChecker("${lang}", sPath, "${dic_main_filename_js}", "${dic_extended_filename_js}", "${dic_personal_filename_js}");
+                _oSpellChecker = new SpellChecker("${lang}", sPath, "${dic_main_filename_js}", "${dic_extended_filename_js}", "${dic_community_filename_js}", "${dic_personal_filename_js}");
             }
             _sAppContext = sContext;
             _dOptions = gc_options.getOptions(sContext).gl_shallowCopy();     // duplication necessary, to be able to reset to default
         }
         catch (e) {

Index: gc_core/py/lang_core/gc_engine.py
==================================================================
--- gc_core/py/lang_core/gc_engine.py
+++ gc_core/py/lang_core/gc_engine.py
@@ -290,11 +290,11 @@
 def load (sContext="Python"):
     global _oSpellChecker
     global _sAppContext
     global _dOptions
     try:
-        _oSpellChecker = SpellChecker("${lang}", "${dic_main_filename_py}", "${dic_extended_filename_py}", "${dic_personal_filename_py}")
+        _oSpellChecker = SpellChecker("${lang}", "${dic_main_filename_py}", "${dic_extended_filename_py}", "${dic_community_filename_py}", "${dic_personal_filename_py}")
         _sAppContext = sContext
         _dOptions = dict(gc_options.getOptions(sContext))   # duplication necessary, to be able to reset to default
     except:
         traceback.print_exc()
 

Index: gc_core/py/oxt/Grammalecte.py
==================================================================
--- gc_core/py/oxt/Grammalecte.py
+++ gc_core/py/oxt/Grammalecte.py
@@ -1,21 +1,22 @@
-# -*- encoding: UTF-8 -*-
 # Grammalecte for Writer
 # License: MPL 2
 # A derivative work of Lightproof from László Németh (http://cgit.freedesktop.org/libreoffice/lightproof/)
 
 import uno
 import unohelper
+import json
 import sys
 import traceback
 from collections import deque
 
 from com.sun.star.linguistic2 import XProofreader, XSupportedLocales
 from com.sun.star.linguistic2 import ProofreadingResult
 from com.sun.star.lang import XServiceInfo, XServiceName, XServiceDisplayName
 from com.sun.star.lang import Locale
 
+import helpers
 import grammalecte.${lang} as gce
 #import lightproof_handler_${implname} as opt_handler
 import Options
 
 
@@ -36,17 +37,18 @@
         gce.load("Writer")
         # GC options
         # opt_handler.load(xCurCtx)
         dOpt = Options.load(xCurCtx)
         gce.setOptions(dOpt)
+        # dictionaries options
+        self.loadUserDictionaries()
         # store for results of big paragraphs
         self.dResult = {}
         self.nMaxRes = 1500
         self.lLastRes = deque(maxlen=self.nMaxRes)
         self.nRes = 0
-        #oSpellChecker = gce.getSpellChecker();
-        #oSpellChecker.setPersonalDictionary("fr.personal.json")
+
 
     # XServiceName method implementations
     def getServiceName (self):
         return self.ImplementationName
 
@@ -134,12 +136,24 @@
         return gce.name
 
     # Grammalecte
     def getSpellChecker (self):
         return gce.getSpellChecker()
+
+    def loadUserDictionaries (self):
+        try:
+            xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", False)
+            xChild = xSettingNode.getByName("o_${lang}")
+            if xChild.getPropertyValue("use_personal_dic"):
+                sJSON = xChild.getPropertyValue("personal_dic")
+                if sJSON:
+                    oSpellChecker = gce.getSpellChecker();
+                    oSpellChecker.setPersonalDictionary(json.loads(sJSON))
+        except:
+            traceback.print_exc()
 
 
 g_ImplementationHelper = unohelper.ImplementationHelper()
 g_ImplementationHelper.addImplementation(Grammalecte, "org.openoffice.comp.pyuno.Lightproof."+gce.pkg, ("com.sun.star.linguistic2.Proofreader",),)
 
 # g_ImplementationHelper.addImplementation( opt_handler.LightproofOptionsEventHandler, \
 #     "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + gce.pkg, ("com.sun.star.awt.XContainerWindowEventHandler",),)

Index: gc_core/py/oxt/OptionsDialog.xcs
==================================================================
--- gc_core/py/oxt/OptionsDialog.xcs
+++ gc_core/py/oxt/OptionsDialog.xcs
@@ -14,14 +14,30 @@
             <info>
                 <desc>The data for one leaf.</desc>
             </info>
             ${xcs_options}
         </group>
+
+        <group oor:name="o_${lang}">
+            <info>
+                <desc>The data for one leaf.</desc>
+            </info>
+            <prop oor:name="use_graphspell" oor:type="xs:int"><value>1</value></prop>
+            <prop oor:name="use_graphspell_sugg" oor:type="xs:int"><value>1</value></prop>
+            <prop oor:name="use_extended_dic" oor:type="xs:int"><value>0</value></prop>
+            <prop oor:name="use_personal_dic" oor:type="xs:int"><value>1</value></prop>
+            <prop oor:name="extended_dic" oor:type="xs:string"><value></value></prop>
+            <prop oor:name="personal_dic" oor:type="xs:string"><value></value></prop>
+        </group>
     </templates>
 
     <component>
         <group oor:name="Leaves">
             <node-ref oor:name="${lang}" oor:node-type="${lang}" />
         </group>
+
+        <group oor:name="Other">
+            <node-ref oor:name="o_${lang}" oor:node-type="o_${lang}" />
+        </group>
     </component>
 
 </oor:component-schema>

ADDED   gc_core/py/oxt/helpers.py
Index: gc_core/py/oxt/helpers.py
==================================================================
--- /dev/null
+++ gc_core/py/oxt/helpers.py
@@ -0,0 +1,74 @@
+# Helpers for LibreOffice extension
+
+import os
+import traceback
+
+import uno
+
+from com.sun.star.beans import PropertyValue
+from com.sun.star.uno import RuntimeException as _rtex
+
+
+def xray (myObject):
+    "XRay - API explorer"
+    try:
+        sm = uno.getComponentContext().ServiceManager
+        mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
+        scriptPro = mspf.createScriptProvider("")
+        xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application")
+        xScript.invoke((myObject,), (), ())
+        return
+    except:
+        raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext())
+
+
+def mri (ctx, xTarget):
+    "MRI - API Explorer"
+    try:
+        xMri = ctx.ServiceManager.createInstanceWithContext("mytools.Mri", ctx)
+        xMri.inspect(xTarget)
+    except:
+        raise _rtex("\nPython extension MRI is not installed", uno.getComponentContext())
+
+
+def getConfigSetting (sNodeConfig, bUpdate=False):
+    "get a configuration node"
+    # example: xNode = getConfigSetting("/org.openoffice.Office.Common/Path/Current", False)
+    xSvMgr = uno.getComponentContext().ServiceManager
+    xConfigProvider = xSvMgr.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", uno.getComponentContext())
+    xPropertyValue = uno.createUnoStruct("com.sun.star.beans.PropertyValue")
+    xPropertyValue.Name = "nodepath"
+    xPropertyValue.Value = sNodeConfig
+    if bUpdate:
+        sService = "com.sun.star.configuration.ConfigurationUpdateAccess"
+    else:
+        sService = "com.sun.star.configuration.ConfigurationAccess"
+    return xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,)) # return xNode
+
+
+def printServices (o):
+    for s in o.getAvailableServiceNames():
+        print(' > '+s)
+
+
+def getWindowSize ():
+    "return main window size"
+    xCurCtx = uno.getComponentContext()
+    xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx)
+    xContainerWindow = xDesktop.getCurrentComponent().CurrentController.Frame.ContainerWindow
+    xWindowSize = xContainerWindow.convertSizeToLogic(xContainerWindow.Size, uno.getConstantByName("com.sun.star.util.MeasureUnit.POINT"))
+    #print(xContainerWindow.Size.Width, ">", xWindowSize.Width)
+    #print(xContainerWindow.Size.Height, ">", xWindowSize.Height)
+    xWindowSize.Width = xWindowSize.Width * 0.666
+    xWindowSize.Height = xWindowSize.Height * 0.666
+    return xWindowSize
+
+
+def getAbsolutePathOf (sPath=""):
+    xDefaultContext = uno.getComponentContext().ServiceManager.DefaultContext
+    xPackageInfoProvider = xDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
+    sFullPath = xPackageInfoProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR")
+    if sPath and not sPath.startswith("/"):
+        sPath = "/" + sPath
+    sFullPath = sFullPath[8:] + sPath
+    return os.path.abspath(sFullPath)

Index: gc_lang/fr/config.ini
==================================================================
--- gc_lang/fr/config.ini
+++ gc_lang/fr/config.ini
@@ -20,10 +20,14 @@
 dic_name = French
 # extended dictionary
 lexicon_extended_src = lexicons/French.extended.lex
 dic_extended_filename = fr.extended
 dic_extended_name = Français - dictionnaire étendu
+# community dictionary
+lexicon_community_src = lexicons/French.community.lex
+dic_community_filename = fr.community
+dic_community_name = Français - dictionnaire communautaire
 # personal dictionary
 lexicon_personal_src = lexicons/French.personal.lex
 dic_personal_filename = fr.personal
 dic_personal_name = Français - dictionnaire personnel
 # Finite state automaton compression: 1, 2 (experimental) or 3 (experimental)
@@ -73,19 +77,27 @@
 oxt/_img/Algoo_logo.png = img/Algoo_logo.png
 oxt/_img/grammalecte_16.bmp = img/grammalecte_16.bmp
 oxt/_img/french_flag_16.bmp = img/french_flag_16.bmp
 # AppLauncher
 oxt/AppLauncher.py = AppLauncher.py
-oxt/helpers.py = pythonpath/helpers.py
 # About
 oxt/About/About.py = pythonpath/About.py
 oxt/About/ab_strings.py = pythonpath/ab_strings.py
 # Dictionaries
 oxt/Dictionnaires/dictionaries = dictionaries
 oxt/Dictionnaires/dictionaries.xcu = dictionaries.xcu
 oxt/Dictionnaires/DictionarySwitcher.py = pythonpath/DictionarySwitcher.py
 oxt/Dictionnaires/ds_strings.py = pythonpath/ds_strings.py
+# Dictionary Options
+oxt/DictOptions/DictOptions.py = pythonpath/DictOptions.py
+oxt/DictOptions/do_strings.py = pythonpath/do_strings.py
+oxt/DictOptions/LexiconEditor.py = pythonpath/LexiconEditor.py
+oxt/DictOptions/lxe_strings.py = pythonpath/lxe_strings.py
+oxt/DictOptions/SearchWords.py = pythonpath/SearchWords.py
+oxt/DictOptions/sw_strings.py = pythonpath/sw_strings.py
+oxt/DictOptions/TagsInfo.py = pythonpath/TagsInfo.py
+oxt/DictOptions/ti_strings.py = pythonpath/ti_strings.py
 # ContextMenu
 oxt/ContextMenu/ContextMenu.py = ContextMenu.py
 oxt/ContextMenu/jobs.xcu = config/jobs.xcu
 # TextFormatter
 oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py

ADDED   gc_lang/fr/modules-js/conj_generator.js
Index: gc_lang/fr/modules-js/conj_generator.js
==================================================================
--- /dev/null
+++ gc_lang/fr/modules-js/conj_generator.js
@@ -0,0 +1,2023 @@
+//  JavaScript
+
+/*
+    Conjugation generator
+    beta stage, unfinished, the root for a new way to generate flexions…
+*/
+
+"use strict";
+
+
+var conj_generator = {
+
+    conjugate: function (sVerb, sVerbTag="i_____a", bVarPpas=true) {
+        let lEntry = [];
+        let cGroup = this.getVerbGroupChar(sVerb);
+        for (let [nCut, sAdd, sFlexTags, sPattern] of this.getConjRules(sVerb, bVarPpas)) {
+            if (!sPattern || RegExp(sPattern).test(sVerb)) {
+                let sFlexion = (nCut > 0) ? sVerb.slice(0, -nCut) + sAdd : sVerb + sAdd;
+                lEntry.push( [sFlexion, ":V" + cGroup + "_" + sVerbTag + sFlexTags] );
+            }
+        }
+        return lEntry;
+    },
+
+    getVerbGroupChar: function (sVerb) {
+        sVerb = sVerb.toLowerCase();
+        if (sVerb.endsWith("er")) {
+            return "1";
+        }
+        if (sVerb.endsWith("ir")) {
+            return "2";
+        }
+        if (sVerb == "être" || sVerb == "avoir") {
+            return "0";
+        }
+        if (sVerb.endsWith("re")) {
+            return "3";
+        }
+        return "4";
+    },
+
+    getConjRules: function (sVerb, bVarPpas=true, nGroup=2) {
+        let lConj = null;
+        let sVarPpas = (bVarPpas) ? "true" : "false";
+        if (sVerb.endsWith("er")) {
+            // premier groupe, conjugaison en fonction de la terminaison du lemme
+            // 5 lettres
+            if (sVerb.slice(-5) in this.oConj["V1"]) {
+                lConj = Array.from(this.oConj["V1"][sVerb.slice(-5)]);
+            }
+            // 4 lettres
+            else if (sVerb.slice(-4) in this.oConj["V1"]) {
+                if (sVerb.endsWith("eler") || sVerb.endsWith("eter")) {
+                    lConj = Array.from(this.oConj["V1"][sVerb.slice(-4)]["1"]);
+                } else {
+                    lConj = Array.from(this.oConj["V1"][sVerb.slice(-4)]);
+                }
+            }
+            // 3 lettres
+            else if (sVerb.slice(-3) in this.oConj["V1"]) {
+                lConj = Array.from(this.oConj["V1"][sVerb.slice(-3)]);
+            }
+            // 2 lettres
+            else {
+                lConj = Array.from(this.oConj["V1"]["er"]);
+            }
+            lConj.push(...this.oConj["V1_ppas"][sVarPpas]);
+        }
+        else if (sVerb.endsWith("ir") && nGroup <= 2) {
+            // deuxième groupe
+            lConj = Array.from(this.oConj["V2"]);
+            lConj.push(...this.oConj["V2_ppas"][sVarPpas]);
+        }
+        else {
+            // TODO: troisième groupe
+            lConj = [ [0, "", ":Y/*", false] ];
+        }
+        return lConj;
+    },
+
+    oConj: {
+        "V1_ppas": {
+            "true": [
+                [2,     "é",           ":Q:A:1ŝ:m:s/*",     false],
+                [2,     "és",          ":Q:A:m:p/*",        false],
+                [2,     "ée",          ":Q:A:f:s/*",        false],
+                [2,     "ées",         ":Q:A:f:p/*",        false],
+            ],
+            "false": [
+                [2,     "é",           ":Q:e:i/*",          false],
+            ]
+        },
+
+        "V2_ppas": {
+            "true": [
+                [2,     "i",           ":Q:A:m:s/*",        false],
+                [2,     "is",          ":Q:A:m:p/*",        false],
+                [2,     "ie",          ":Q:A:f:s/*",        false],
+                [2,     "ies",         ":Q:A:f:p/*",        false],
+            ],
+            "false": [
+                [2,     "i",           ":Q:e:i/*",          false],
+            ]
+        },
+
+        // deuxième groupe (le seul groupe régulier)
+        "V2": [
+            [2,     "ir",           ":Y/*",             false],
+            [2,     "issant",       ":P/*",             false],
+            [2,     "is",           ":Ip:Is:1s:2s/*",   false],
+            [2,     "it",           ":Ip:Is:3s/*",      false],
+            [2,     "issons",       ":Ip:1p/*",         false],
+            [2,     "issez",        ":Ip:2p/*",         false],
+            [2,     "issent",       ":Ip:Sp:Sq:3p/*",   false],
+            [2,     "issais",       ":Iq:1s:2s/*",      false],
+            [2,     "issait",       ":Iq:3s/*",         false],
+            [2,     "issions",      ":Iq:Sp:Sq:1p/*",   false],
+            [2,     "issiez",       ":Iq:Sp:Sq:2p/*",   false],
+            [2,     "issaient",     ":Iq:3p/*",         false],
+            [2,     "îmes",         ":Is:1p/*",         false],
+            [2,     "îtes",         ":Is:2p/*",         false],
+            [2,     "irent",        ":Is:3p!/*",        false],
+            [2,     "irai",         ":If:1s/*",         false],
+            [2,     "iras",         ":If:2s/*",         false],
+            [2,     "ira",          ":If:3s/*",         false],
+            [2,     "irons",        ":If:1p/*",         false],
+            [2,     "irez",         ":If:2p/*",         false],
+            [2,     "iront",        ":If:3p!/*",        false],
+            [2,     "irais",        ":K:1s:2s/*",       false],
+            [2,     "irait",        ":K:3s/*",          false],
+            [2,     "irions",       ":K:1p/*",          false],
+            [2,     "iriez",        ":K:2p/*",          false],
+            [2,     "iraient",      ":K:3p/*",          false],
+            [2,     "isse",         ":Sp:Sq:1s/*",      false],
+            [2,     "isses",        ":Sp:Sq:2s/*",      false],
+            [2,     "isse",         ":Sp:3s/*",         false],
+            [2,     "ît",           ":Sq:3s/*",         false],
+            [2,     "is",           ":E:2s/*",          false],
+            [2,     "issons",       ":E:1p/*",          false],
+            [2,     "issez",        ":E:2p/*",          false]
+        ],
+        
+        // premier groupe (bien plus irrégulier que prétendu)
+        "V1": {
+            // a
+            // verbes en -er, -ger, -yer, -cer
+            "er": [
+                [2,      "er",        ":Y/*",               false],
+                [2,      "ant",       ":P/*",               false],
+                [2,      "e",         ":Ip:Sp:1s:3s/*",     false],
+                [2,      "è",         ":Ip:1ś/*",           false],
+                [2,      "es",        ":Ip:Sp:2s/*",        false],
+                [2,      "ons",       ":Ip:1p/*",           false],
+                [2,      "ez",        ":Ip:2p/*",           false],
+                [2,      "ent",       ":Ip:Sp:3p/*",        false],
+                [2,      "ais",       ":Iq:1s:2s/*",        false],
+                [2,      "ait",       ":Iq:3s/*",           false],
+                [2,      "ions",      ":Iq:Sp:1p/*",        false],
+                [2,      "iez",       ":Iq:Sp:2p/*",        false],
+                [2,      "aient",     ":Iq:3p/*",           false],
+                [2,      "ai",        ":Is:1s/*",           false],
+                [2,      "as",        ":Is:2s/*",           false],
+                [2,      "a",         ":Is:3s/*",           false],
+                [2,      "âmes",      ":Is:1p/*",           false],
+                [2,      "âtes",      ":Is:2p/*",           false],
+                [2,      "èrent",     ":Is:3p!/*",          false],
+                [2,      "erai",      ":If:1s/*",           false],
+                [2,      "eras",      ":If:2s/*",           false],
+                [2,      "era",       ":If:3s/*",           false],
+                [2,      "erons",     ":If:1p/*",           false],
+                [2,      "erez",      ":If:2p/*",           false],
+                [2,      "eront",     ":If:3p!/*",          false],
+                [2,      "erais",     ":K:1s:2s/*",         false],
+                [2,      "erait",     ":K:3s/*",            false],
+                [2,      "erions",    ":K:1p/*",            false],
+                [2,      "eriez",     ":K:2p/*",            false],
+                [2,      "eraient",   ":K:3p/*",            false],
+                [2,      "asse",      ":Sq:1s/*",           false],
+                [2,      "asses",     ":Sq:2s/*",           false],
+                [2,      "ât",        ":Sq:3s/*",           false],
+                [2,      "assions",   ":Sq:1p/*",           false],
+                [2,      "assiez",    ":Sq:2p/*",           false],
+                [2,      "assent",    ":Sq:3p/*",           false],
+                [2,      "e",         ":E:2s/*",            false],
+                [2,      "ons",       ":E:1p/*",            false],
+                [2,      "ez",        ":E:2p/*",            false]
+            ],
+
+            "ger": [
+                [2,      "er",        ":Y/*",               false],
+                [2,      "eant",      ":P/*",               false],
+                [2,      "e",         ":Ip:Sp:1s:3s/*",     false],
+                [2,      "è",         ":Ip:1ś/*",           false],
+                [2,      "es",        ":Ip:Sp:2s/*",        false],
+                [2,      "eons",      ":Ip:1p/*",           false],
+                [2,      "ez",        ":Ip:2p/*",           false],
+                [2,      "ent",       ":Ip:Sp:3p/*",        false],
+                [2,      "eais",      ":Iq:1s:2s/*",        false],
+                [2,      "eait",      ":Iq:3s/*",           false],
+                [2,      "ions",      ":Iq:Sp:1p/*",        false],
+                [2,      "iez",       ":Iq:Sp:2p/*",        false],
+                [2,      "eaient",    ":Iq:3p/*",           false],
+                [2,      "eai",       ":Is:1s/*",           false],
+                [2,      "eas",       ":Is:2s/*",           false],
+                [2,      "ea",        ":Is:3s/*",           false],
+                [2,      "eâmes",     ":Is:1p/*",           false],
+                [2,      "eâtes",     ":Is:2p/*",           false],
+                [2,      "èrent",     ":Is:3p!/*",          false],
+                [2,      "erai",      ":If:1s/*",           false],
+                [2,      "eras",      ":If:2s/*",           false],
+                [2,      "era",       ":If:3s/*",           false],
+                [2,      "erons",     ":If:1p/*",           false],
+                [2,      "erez",      ":If:2p/*",           false],
+                [2,      "eront",     ":If:3p!/*",          false],
+                [2,      "erais",     ":K:1s:2s/*",         false],
+                [2,      "erait",     ":K:3s/*",            false],
+                [2,      "erions",    ":K:1p/*",            false],
+                [2,      "eriez",     ":K:2p/*",            false],
+                [2,      "eraient",   ":K:3p/*",            false],
+                [2,      "easse",     ":Sq:1s/*",           false],
+                [2,      "easses",    ":Sq:2s/*",           false],
+                [2,      "eât",       ":Sq:3s/*",           false],
+                [2,      "eassions",  ":Sq:1p/*",           false],
+                [2,      "eassiez",   ":Sq:2p/*",           false],
+                [2,      "eassent",   ":Sq:3p/*",           false],
+                [2,      "e",         ":E:2s/*",            false],
+                [2,      "eons",      ":E:1p/*",            false],
+                [2,      "ez",        ":E:2p/*",            false]
+            ],
+
+            "cer": [
+                [2,      "er",        ":Y/*",               false],
+                [3,      "çant",      ":P/*",               false],
+                [2,      "e",         ":Ip:Sp:1s:3s/*",     false],
+                [2,      "è",         ":Ip:1ś/*",           false],
+                [2,      "es",        ":Ip:Sp:2s/*",        false],
+                [3,      "çons",      ":Ip:1p/*",           false],
+                [2,      "ez",        ":Ip:2p/*",           false],
+                [2,      "ent",       ":Ip:Sp:3p/*",        false],
+                [3,      "çais",      ":Iq:1s:2s/*",        false],
+                [3,      "çait",      ":Iq:3s/*",           false],
+                [2,      "ions",      ":Iq:Sp:1p/*",        false],
+                [2,      "iez",       ":Iq:Sp:2p/*",        false],
+                [3,      "çaient",    ":Iq:3p/*",           false],
+                [3,      "çai",       ":Is:1s/*",           false],
+                [3,      "ças",       ":Is:2s/*",           false],
+                [3,      "ça",        ":Is:3s/*",           false],
+                [3,      "çâmes",     ":Is:1p/*",           false],
+                [3,      "çâtes",     ":Is:2p/*",           false],
+                [2,      "èrent",     ":Is:3p!/*",          false],
+                [2,      "erai",      ":If:1s/*",           false],
+                [2,      "eras",      ":If:2s/*",           false],
+                [2,      "era",       ":If:3s/*",           false],
+                [2,      "erons",     ":If:1p/*",           false],
+                [2,      "erez",      ":If:2p/*",           false],
+                [2,      "eront",     ":If:3p!/*",          false],
+                [2,      "erais",     ":K:1s:2s/*",         false],
+                [2,      "erait",     ":K:3s/*",            false],
+                [2,      "erions",    ":K:1p/*",            false],
+                [2,      "eriez",     ":K:2p/*",            false],
+                [2,      "eraient",   ":K:3p/*",            false],
+                [3,      "çasse",     ":Sq:1s/*",           false],
+                [3,      "çasses",    ":Sq:2s/*",           false],
+                [3,      "çât",       ":Sq:3s/*",           false],
+                [3,      "çassions",  ":Sq:1p/*",           false],
+                [3,      "çassiez",   ":Sq:2p/*",           false],
+                [3,      "çassent",   ":Sq:3p/*",           false],
+                [2,      "e",         ":E:2s/*",            false],
+                [3,      "çons",      ":E:1p/*",            false],
+                [2,      "ez",        ":E:2p/*",            false]
+            ],
+
+            "yer": [
+                [2,     "er",         ":Y/*",               false],
+                [2,     "ant",        ":P/*",               false],
+                [3,     "ye",         ":Ip:Sp:1s:3s/*",     "[^ou]yer$"],
+                [3,     "ie",         ":Ip:Sp:1s:3s/*",     "[aou]yer$"],
+                [2,     "è",          ":Ip:1ś/*",           false],
+                [3,     "yes",        ":Ip:Sp:2s/*",        "[^ou]yer$"],
+                [3,     "ies",        ":Ip:Sp:2s/*",        "[aou]yer$"],
+                [2,     "ons",        ":Ip:1p/*",           false],
+                [2,     "ez",         ":Ip:2p/*",           false],
+                [3,     "yent",       ":Ip:Sp:3p/*",        "[^ou]yer$"],
+                [3,     "ient",       ":Ip:Sp:3p/*",        "[aou]yer$"],
+                [2,     "ais",        ":Iq:1s:2s/*",        false],
+                [2,     "ait",        ":Iq:3s/*",           false],
+                [2,     "ions",       ":Iq:Sp:1p/*",        false],
+                [2,     "iez",        ":Iq:Sp:2p/*",        false],
+                [2,     "aient",      ":Iq:3p/*",           false],
+                [2,     "ai",         ":Is:1s/*",           false],
+                [2,     "as",         ":Is:2s/*",           false],
+                [2,     "a",          ":Is:3s/*",           false],
+                [2,     "âmes",       ":Is:1p/*",           false],
+                [2,     "âtes",       ":Is:2p/*",           false],
+                [2,     "èrent",      ":Is:3p!/*",          false],
+                [3,     "yerai",      ":If:1s/*",           "[^ou]yer$"],
+                [3,     "ierai",      ":If:1s/*",           "[aou]yer$"],
+                [3,     "yeras",      ":If:2s/*",           "[^ou]yer$"],
+                [3,     "ieras",      ":If:2s/*",           "[aou]yer$"],
+                [3,     "yera",       ":If:3s/*",           "[^ou]yer$"],
+                [3,     "iera",       ":If:3s/*",           "[aou]yer$"],
+                [3,     "yerons",     ":If:1p/*",           "[^ou]yer$"],
+                [3,     "ierons",     ":If:1p/*",           "[aou]yer$"],
+                [3,     "yerez",      ":If:2p/*",           "[^ou]yer$"],
+                [3,     "ierez",      ":If:2p/*",           "[aou]yer$"],
+                [3,     "yeront",     ":If:3p!/*",          "[^ou]yer$"],
+                [3,     "ieront",     ":If:3p!/*",          "[aou]yer$"],
+                [3,     "yerais",     ":K:1s:2s/*",         "[^ou]yer$"],
+                [3,     "ierais",     ":K:1s:2s/*",         "[aou]yer$"],
+                [3,     "yerait",     ":K:3s/*",            "[^ou]yer$"],
+                [3,     "ierait",     ":K:3s/*",            "[aou]yer$"],
+                [3,     "yerions",    ":K:1p/*",            "[^ou]yer$"],
+                [3,     "ierions",    ":K:1p/*",            "[aou]yer$"],
+                [3,     "yeriez",     ":K:2p/*",            "[^ou]yer$"],
+                [3,     "ieriez",     ":K:2p/*",            "[aou]yer$"],
+                [3,     "yeraient",   ":K:3p/*",            "[^ou]yer$"],
+                [3,     "ieraient",   ":K:3p/*",            "[aou]yer$"],
+                [2,     "asse",       ":Sq:1s/*",           false],
+                [2,     "asses",      ":Sq:2s/*",           false],
+                [2,     "ât",         ":Sq:3s/*",           false],
+                [2,     "assions",    ":Sq:1p/*",           false],
+                [2,     "assiez",     ":Sq:2p/*",           false],
+                [2,     "assent",     ":Sq:3p/*",           false],
+                [3,     "ye",         ":E:2s/*",            "[^ou]yer$"],
+                [3,     "ie",         ":E:2s/*",            "[aou]yer$"],
+                [2,     "ons",        ":E:1p/*",            false],
+                [2,     "ez",         ":E:2p/*",            false]
+            ],
+
+            // b
+            // verbes en -ecer, -emer, -ener, -eper, -erer, -eser, -ever, -evrer
+            // verbes en -eler, -eter (pas de doublement de la consonne: acheter, celer, déceler, receler, ciseler, démanteler,
+            // écarteler, encasteler, geler, dégeler, congeler, surgeler, marteler, modeler, peler, acheter, racheter,
+            // bégueter, corseter, crocheter, fileter, fureter, haleter)
+            // changement du e en è avant syllabe muette
+            "ecer": [
+                [2,     "er",           ":Y/*",                 false],
+                [3,     "çant",         ":P/*",                 false],
+                [4,     "èce",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èces",         ":Ip:Sp:2s/*",          false],
+                [3,     "çons",         ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "ècent",        ":Ip:Sp:3p/*",          false],
+                [3,     "çais",         ":Iq:1s:2s/*",          false],
+                [3,     "çait",         ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [3,     "çaient",       ":Iq:3p/*",             false],
+                [3,     "çai",          ":Is:1s/*",             false],
+                [3,     "ças",          ":Is:2s/*",             false],
+                [3,     "ça",           ":Is:3s/*",             false],
+                [3,     "çâmes",        ":Is:1p/*",             false],
+                [3,     "çâtes",        ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "ècerai",       ":If:1s/*",             false],
+                [4,     "èceras",       ":If:2s/*",             false],
+                [4,     "ècera",        ":If:3s/*",             false],
+                [4,     "ècerons",      ":If:1p/*",             false],
+                [4,     "ècerez",       ":If:2p/*",             false],
+                [4,     "èceront",      ":If:3p!/*",            false],
+                [4,     "ècerais",      ":K:1s:2s/*",           false],
+                [4,     "ècerait",      ":K:3s/*",              false],
+                [4,     "ècerions",     ":K:1p/*",              false],
+                [4,     "èceriez",      ":K:2p/*",              false],
+                [4,     "èceraient",    ":K:3p/*",              false],
+                [3,     "çasse",        ":Sq:1s/*",             false],
+                [3,     "çasses",       ":Sq:2s/*",             false],
+                [3,     "çât",          ":Sq:3s/*",             false],
+                [3,     "çassions",     ":Sq:1p/*",             false],
+                [3,     "çassiez",      ":Sq:2p/*",             false],
+                [3,     "çassent",      ":Sq:3p/*",             false],
+                [4,     "èce",          ":E:2s/*",              false],
+                [3,     "çons",         ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "eler": {
+                "1": [
+                    [2,     "er",           ":Y/*",             false],
+                    [2,     "ant",          ":P/*",             false],
+                    [4,     "èle",          ":Ip:Sp:1s:3s/*",   false],
+                    [2,     "è",            ":Ip:1ś/R",         false],
+                    [4,     "èles",         ":Ip:Sp:2s/*",      false],
+                    [2,     "ons",          ":Ip:1p/*",         false],
+                    [2,     "ez",           ":Ip:2p/*",         false],
+                    [4,     "èlent",        ":Ip:Sp:3p/*",      false],
+                    [2,     "ais",          ":Iq:1s:2s/*",      false],
+                    [2,     "ait",          ":Iq:3s/*",         false],
+                    [2,     "ions",         ":Iq:Sp:1p/*",      false],
+                    [2,     "iez",          ":Iq:Sp:2p/*",      false],
+                    [2,     "aient",        ":Iq:3p/*",         false],
+                    [2,     "ai",           ":Is:1s/*",         false],
+                    [2,     "as",           ":Is:2s/*",         false],
+                    [2,     "a",            ":Is:3s/*",         false],
+                    [2,     "âmes",         ":Is:1p/*",         false],
+                    [2,     "âtes",         ":Is:2p/*",         false],
+                    [2,     "èrent",        ":Is:3p!/*",        false],
+                    [4,     "èlerai",       ":If:1s/*",         false],
+                    [4,     "èleras",       ":If:2s/*",         false],
+                    [4,     "èlera",        ":If:3s/*",         false],
+                    [4,     "èlerons",      ":If:1p/*",         false],
+                    [4,     "èlerez",       ":If:2p/*",         false],
+                    [4,     "èleront",      ":If:3p!/*",        false],
+                    [4,     "èlerais",      ":K:1s:2s/*",       false],
+                    [4,     "èlerait",      ":K:3s/*",          false],
+                    [4,     "èlerions",     ":K:1p/*",          false],
+                    [4,     "èleriez",      ":K:2p/*",          false],
+                    [4,     "èleraient",    ":K:3p/*",          false],
+                    [2,     "asse",         ":Sq:1s/*",         false],
+                    [2,     "asses",        ":Sq:2s/*",         false],
+                    [2,     "ât",           ":Sq:3s/*",         false],
+                    [2,     "assions",      ":Sq:1p/*",         false],
+                    [2,     "assiez",       ":Sq:2p/*",         false],
+                    [2,     "assent",       ":Sq:3p/*",         false],
+                    [4,     "èle",          ":E:2s/*",          false],
+                    [2,     "ons",          ":E:1p/*",          false],
+                    [2,     "ez",           ":E:2p/*",          false]
+                ],
+                "2": [
+                    // d. verbes en -eler : doublement de la consonne l.
+                    [2,     "er",           ":Y/*",             false],
+                    [2,     "ant",          ":P/*",             false],
+                    [4,     "elle",         ":Ip:Sp:1s:3s/*",   "ppeler$"],
+                    [4,     "elle",         ":Ip:Sp:1s:3s/M",   "[^p].eler$"],
+                    [4,     "èle",          ":Ip:Sp:1s:3s/R",   "[^p].eler$"],
+                    [2,     "è",            ":Ip:1ś/R",         false],
+                    [4,     "elles",        ":Ip:Sp:2s/*",      "ppeler$"],
+                    [4,     "elles",        ":Ip:Sp:2s/M",      "[^p].eler$"],
+                    [4,     "èles",         ":Ip:Sp:2s/R",      "[^p].eler$"],
+                    [2,     "ons",          ":Ip:1p/*",         false],
+                    [2,     "ez",           ":Ip:2p/*",         false],
+                    [4,     "ellent",       ":Ip:Sp:3p/*",      "ppeler$"],
+                    [4,     "ellent",       ":Ip:Sp:3p/M",      "[^p].eler$"],
+                    [4,     "èlent",        ":Ip:Sp:3p/R",      "[^p].eler$"],
+                    [2,     "ais",          ":Iq:1s:2s/*",      false],
+                    [2,     "ait",          ":Iq:3s/*",         false],
+                    [2,     "ions",         ":Iq:Sp:1p/*",      false],
+                    [2,     "iez",          ":Iq:Sp:2p/*",      false],
+                    [2,     "aient",        ":Iq:3p/*",         false],
+                    [2,     "ai",           ":Is:1s/*",         false],
+                    [2,     "as",           ":Is:2s/*",         false],
+                    [2,     "a",            ":Is:3s/*",         false],
+                    [2,     "âmes",         ":Is:1p/*",         false],
+                    [2,     "âtes",         ":Is:2p/*",         false],
+                    [2,     "èrent",        ":Is:3p!/*",        false],
+                    [4,     "ellerai",      ":If:1s/*",         "ppeler$"],
+                    [4,     "ellerai",      ":If:1s/M",         "[^p].eler$"],
+                    [4,     "èlerai",       ":If:1s/R",         "[^p].eler$"],
+                    [4,     "elleras",      ":If:2s/*",         "ppeler$"],
+                    [4,     "elleras",      ":If:2s/M",         "[^p].eler$"],
+                    [4,     "èleras",       ":If:2s/R",         "[^p].eler$"],
+                    [4,     "ellera",       ":If:3s/*",         "ppeler$"],
+                    [4,     "ellera",       ":If:3s/M",         "[^p].eler$"],
+                    [4,     "èlera",        ":If:3s/R",         "[^p].eler$"],
+                    [4,     "ellerons",     ":If:1p/*",         "ppeler$"],
+                    [4,     "ellerons",     ":If:1p/M",         "[^p].eler$"],
+                    [4,     "èlerons",      ":If:1p/R",         "[^p].eler$"],
+                    [4,     "ellerez",      ":If:2p/*",         "ppeler$"],
+                    [4,     "ellerez",      ":If:2p/M",         "[^p].eler$"],
+                    [4,     "èlerez",       ":If:2p/R",         "[^p].eler$"],
+                    [4,     "elleront",     ":If:3p!/*",        "ppeler$"],
+                    [4,     "elleront",     ":If:3p!/M",        "[^p].eler$"],
+                    [4,     "èleront",      ":If:3p!/R",        "[^p].eler$"],
+                    [4,     "ellerais",     ":K:1s:2s/*",       "ppeler$"],
+                    [4,     "ellerais",     ":K:1s:2s/M",       "[^p].eler$"],
+                    [4,     "èlerais",      ":K:1s:2s/R",       "[^p].eler$"],
+                    [4,     "ellerait",     ":K:3s/*",          "ppeler$"],
+                    [4,     "ellerait",     ":K:3s/M",          "[^p].eler$"],
+                    [4,     "èlerait",      ":K:3s/R",          "[^p].eler$"],
+                    [4,     "ellerions",    ":K:1p/*",          "ppeler$"],
+                    [4,     "ellerions",    ":K:1p/M",          "[^p].eler$"],
+                    [4,     "èlerions",     ":K:1p/R",          "[^p].eler$"],
+                    [4,     "elleriez",     ":K:2p/*",          "ppeler$"],
+                    [4,     "elleriez",     ":K:2p/M",          "[^p].eler$"],
+                    [4,     "èleriez",      ":K:2p/R",          "[^p].eler$"],
+                    [4,     "elleraient",   ":K:3p/*",          "ppeler$"],
+                    [4,     "elleraient",   ":K:3p/M",          "[^p].eler$"],
+                    [4,     "èleraient",    ":K:3p/R",          "[^p].eler$"],
+                    [2,     "asse",         ":Sq:1s/*",         false],
+                    [2,     "asses",        ":Sq:2s/*",         false],
+                    [2,     "ât",           ":Sq:3s/*",         false],
+                    [2,     "assions",      ":Sq:1p/*",         false],
+                    [2,     "assiez",       ":Sq:2p/*",         false],
+                    [2,     "assent",       ":Sq:3p/*",         false],
+                    [4,     "elle",         ":E:2s/*",          "ppeler$"],
+                    [4,     "elle",         ":E:2s/M",          "[^p].eler$"],
+                    [4,     "èle",          ":E:2s/R",          "[^p].eler$"],
+                    [2,     "ons",          ":E:1p/*",          false],
+                    [2,     "ez",           ":E:2p/*",          false]
+                ],
+            },
+
+            "emer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ème",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èmes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èment",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "èmerai",       ":If:1s/*",             false],
+                [4,     "èmeras",       ":If:2s/*",             false],
+                [4,     "èmera",        ":If:3s/*",             false],
+                [4,     "èmerons",      ":If:1p/*",             false],
+                [4,     "èmerez",       ":If:2p/*",             false],
+                [4,     "èmeront",      ":If:3p!/*",            false],
+                [4,     "èmerais",      ":K:1s:2s/*",           false],
+                [4,     "èmerait",      ":K:3s/*",              false],
+                [4,     "èmerions",     ":K:1p/*",              false],
+                [4,     "èmeriez",      ":K:2p/*",              false],
+                [4,     "èmeraient",    ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ème",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "ener": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ène",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "ènes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "ènent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "ènerai",       ":If:1s/*",             false],
+                [4,     "èneras",       ":If:2s/*",             false],
+                [4,     "ènera",        ":If:3s/*",             false],
+                [4,     "ènerons",      ":If:1p/*",             false],
+                [4,     "ènerez",       ":If:2p/*",             false],
+                [4,     "èneront",      ":If:3p!/*",            false],
+                [4,     "ènerais",      ":K:1s:2s/*",           false],
+                [4,     "ènerait",      ":K:3s/*",              false],
+                [4,     "ènerions",     ":K:1p/*",              false],
+                [4,     "èneriez",      ":K:2p/*",              false],
+                [4,     "èneraient",    ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ène",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "eper": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "èpe",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èpes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èpent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "èperai",       ":If:1s/*",             false],
+                [4,     "èperas",       ":If:2s/*",             false],
+                [4,     "èpera",        ":If:3s/*",             false],
+                [4,     "èperons",      ":If:1p/*",             false],
+                [4,     "èperez",       ":If:2p/*",             false],
+                [4,     "èperont",      ":If:3p!/*",            false],
+                [4,     "èperais",      ":K:1s:2s/*",           false],
+                [4,     "èperait",      ":K:3s/*",              false],
+                [4,     "èperions",     ":K:1p/*",              false],
+                [4,     "èperiez",      ":K:2p/*",              false],
+                [4,     "èperaient",    ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "èpe",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "erer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ère",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "ères",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èrent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "èrerai",       ":If:1s/*",             false],
+                [4,     "èreras",       ":If:2s/*",             false],
+                [4,     "èrera",        ":If:3s/*",             false],
+                [4,     "èrerons",      ":If:1p/*",             false],
+                [4,     "èrerez",       ":If:2p/*",             false],
+                [4,     "èreront",      ":If:3p!/*",            false],
+                [4,     "èrerais",      ":K:1s:2s/*",           false],
+                [4,     "èrerait",      ":K:3s/*",              false],
+                [4,     "èrerions",     ":K:1p/*",              false],
+                [4,     "èreriez",      ":K:2p/*",              false],
+                [4,     "èreraient",    ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ère",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "eser": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "èse",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èses",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èsent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "èserai",       ":If:1s/*",             false],
+                [4,     "èseras",       ":If:2s/*",             false],
+                [4,     "èsera",        ":If:3s/*",             false],
+                [4,     "èserons",      ":If:1p/*",             false],
+                [4,     "èserez",       ":If:2p/*",             false],
+                [4,     "èseront",      ":If:3p!/*",            false],
+                [4,     "èserais",      ":K:1s:2s/*",           false],
+                [4,     "èserait",      ":K:3s/*",              false],
+                [4,     "èserions",     ":K:1p/*",              false],
+                [4,     "èseriez",      ":K:2p/*",              false],
+                [4,     "èseraient",    ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "èse",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "eter": {
+                "1": [
+                    [2,     "er",           ":Y/*",                 false],
+                    [2,     "ant",          ":P/*",                 false],
+                    [4,     "ète",          ":Ip:Sp:1s:3s/*",       false],
+                    [2,     "è",            ":Ip:1ś/R",             false],
+                    [4,     "ètes",         ":Ip:Sp:2s/*",          false],
+                    [2,     "ons",          ":Ip:1p/*",             false],
+                    [2,     "ez",           ":Ip:2p/*",             false],
+                    [4,     "ètent",        ":Ip:Sp:3p/*",          false],
+                    [2,     "ais",          ":Iq:1s:2s/*",          false],
+                    [2,     "ait",          ":Iq:3s/*",             false],
+                    [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                    [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                    [2,     "aient",        ":Iq:3p/*",             false],
+                    [2,     "ai",           ":Is:1s/*",             false],
+                    [2,     "as",           ":Is:2s/*",             false],
+                    [2,     "a",            ":Is:3s/*",             false],
+                    [2,     "âmes",         ":Is:1p/*",             false],
+                    [2,     "âtes",         ":Is:2p/*",             false],
+                    [2,     "èrent",        ":Is:3p!/*",            false],
+                    [4,     "èterai",       ":If:1s/*",             false],
+                    [4,     "èteras",       ":If:2s/*",             false],
+                    [4,     "ètera",        ":If:3s/*",             false],
+                    [4,     "èterons",      ":If:1p/*",             false],
+                    [4,     "èterez",       ":If:2p/*",             false],
+                    [4,     "èteront",      ":If:3p!/*",            false],
+                    [4,     "èterais",      ":K:1s:2s/*",           false],
+                    [4,     "èterait",      ":K:3s/*",              false],
+                    [4,     "èterions",     ":K:1p/*",              false],
+                    [4,     "èteriez",      ":K:2p/*",              false],
+                    [4,     "èteraient",    ":K:3p/*",              false],
+                    [2,     "asse",         ":Sq:1s/*",             false],
+                    [2,     "asses",        ":Sq:2s/*",             false],
+                    [2,     "ât",           ":Sq:3s/*",             false],
+                    [2,     "assions",      ":Sq:1p/*",             false],
+                    [2,     "assiez",       ":Sq:2p/*",             false],
+                    [2,     "assent",       ":Sq:3p/*",             false],
+                    [4,     "ète",          ":E:2s/*",              false],
+                    [2,     "ons",          ":E:1p/*",              false],
+                    [2,     "ez",           ":E:2p/*",              false]
+                ],
+                "2": [
+                    // d. verbes en -eter : doublement de la consonne t
+                    [2,     "er",           ":Y/*",                 false],
+                    [2,     "ant",          ":P/*",                 false],
+                    [4,     "ette",         ":Ip:Sp:1s:3s/*",       "jeter$"],
+                    [4,     "ette",         ":Ip:Sp:1s:3s/M",       "[^j]eter$"],
+                    [4,     "ète",          ":Ip:Sp:1s:3s/R",       "[^j]eter$"],
+                    [2,     "è",            ":Ip:1ś/R",             false],
+                    [4,     "ettes",        ":Ip:Sp:2s/*",          "jeter$"],
+                    [4,     "ettes",        ":Ip:Sp:2s/M",          "[^j]eter$"],
+                    [4,     "ètes",         ":Ip:Sp:2s/R",          "[^j]eter$"],
+                    [2,     "ons",          ":Ip:1p/*",             false],
+                    [2,     "ez",           ":Ip:2p/*",             false],
+                    [4,     "ettent",       ":Ip:Sp:3p/*",          "jeter$"],
+                    [4,     "ettent",       ":Ip:Sp:3p/M",          "[^j]eter$"],
+                    [4,     "ètent",        ":Ip:Sp:3p/R",          "[^j]eter$"],
+                    [2,     "ais",          ":Iq:1s:2s/*",          false],
+                    [2,     "ait",          ":Iq:3s/*",             false],
+                    [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                    [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                    [2,     "aient",        ":Iq:3p/*",             false],
+                    [2,     "ai",           ":Is:1s/*",             false],
+                    [2,     "as",           ":Is:2s/*",             false],
+                    [2,     "a",            ":Is:3s/*",             false],
+                    [2,     "âmes",         ":Is:1p/*",             false],
+                    [2,     "âtes",         ":Is:2p/*",             false],
+                    [2,     "èrent",        ":Is:3p!/*",            false],
+                    [4,     "etterai",      ":If:1s/*",             "jeter$"],
+                    [4,     "etterai",      ":If:1s/M",             "[^j]eter$"],
+                    [4,     "èterai",       ":If:1s/R",             "[^j]eter$"],
+                    [4,     "etteras",      ":If:2s/*",             "jeter$"],
+                    [4,     "etteras",      ":If:2s/M",             "[^j]eter$"],
+                    [4,     "èteras",       ":If:2s/R",             "[^j]eter$"],
+                    [4,     "ettera",       ":If:3s/*",             "jeter$"],
+                    [4,     "ettera",       ":If:3s/M",             "[^j]eter$"],
+                    [4,     "ètera",        ":If:3s/R",             "[^j]eter$"],
+                    [4,     "etterons",     ":If:1p/*",             "jeter$"],
+                    [4,     "etterons",     ":If:1p/M",             "[^j]eter$"],
+                    [4,     "èterons",      ":If:1p/R",             "[^j]eter$"],
+                    [4,     "etterez",      ":If:2p/*",             "jeter$"],
+                    [4,     "etterez",      ":If:2p/M",             "[^j]eter$"],
+                    [4,     "èterez",       ":If:2p/R",             "[^j]eter$"],
+                    [4,     "etteront",     ":If:3p!/*",            "jeter$"],
+                    [4,     "etteront",     ":If:3p!/M",            "[^j]eter$"],
+                    [4,     "èteront",      ":If:3p!/R",            "[^j]eter$"],
+                    [4,     "etterais",     ":K:1s:2s/*",           "jeter$"],
+                    [4,     "etterais",     ":K:1s:2s/M",           "[^j]eter$"],
+                    [4,     "èterais",      ":K:1s:2s/R",           "[^j]eter$"],
+                    [4,     "etterait",     ":K:3s/*",              "jeter$"],
+                    [4,     "etterait",     ":K:3s/M",              "[^j]eter$"],
+                    [4,     "èterait",      ":K:3s/R",              "[^j]eter$"],
+                    [4,     "etterions",    ":K:1p/*",              "jeter$"],
+                    [4,     "etterions",    ":K:1p/M",              "[^j]eter$"],
+                    [4,     "èterions",     ":K:1p/R",              "[^j]eter$"],
+                    [4,     "etteriez",     ":K:2p/*",              "jeter$"],
+                    [4,     "etteriez",     ":K:2p/M",              "[^j]eter$"],
+                    [4,     "èteriez",      ":K:2p/R",              "[^j]eter$"],
+                    [4,     "etteraient",   ":K:3p/*",              "jeter$"],
+                    [4,     "etteraient",   ":K:3p/M",              "[^j]eter$"],
+                    [4,     "èteraient",    ":K:3p/R",              "[^j]eter$"],
+                    [2,     "asse",         ":Sq:1s/*",             false],
+                    [2,     "asses",        ":Sq:2s/*",             false],
+                    [2,     "ât",           ":Sq:3s/*",             false],
+                    [2,     "assions",      ":Sq:1p/*",             false],
+                    [2,     "assiez",       ":Sq:2p/*",             false],
+                    [2,     "assent",       ":Sq:3p/*",             false],
+                    [4,     "ette",         ":E:2s/*",              "jeter$"],
+                    [4,     "ette",         ":E:2s/M",              "[^j]eter$"],
+                    [4,     "ète",          ":E:2s/R",              "[^j]eter$"],
+                    [2,     "ons",          ":E:1p/*",              false],
+                    [2,     "ez",           ":E:2p/*",              false]
+                ]
+            },
+
+            "ever": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ève",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èves",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èvent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [4,     "èverai",       ":If:1s/*",             false],
+                [4,     "èveras",       ":If:2s/*",             false],
+                [4,     "èvera",        ":If:3s/*",             false],
+                [4,     "èverons",      ":If:1p/*",             false],
+                [4,     "èverez",       ":If:2p/*",             false],
+                [4,     "èveront",      ":If:3p!/*",            false],
+                [4,     "èverais",      ":K:1s:2s/*",           false],
+                [4,     "èverait",      ":K:3s/*",              false],
+                [4,     "èverions",     ":K:1p/*",              false],
+                [4,     "èveriez",      ":K:2p/*",              false],
+                [4,     "èveraient",    ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ève",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "evrer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "èvre",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "èvres",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èvrent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [5,     "èvrerai",      ":If:1s/*",             false],
+                [5,     "èvreras",      ":If:2s/*",             false],
+                [5,     "èvrera",       ":If:3s/*",             false],
+                [5,     "èvrerons",     ":If:1p/*",             false],
+                [5,     "èvrerez",      ":If:2p/*",             false],
+                [5,     "èvreront",     ":If:3p!/*",            false],
+                [5,     "èvrerais",     ":K:1s:2s/*",           false],
+                [5,     "èvrerait",     ":K:3s/*",              false],
+                [5,     "èvrerions",    ":K:1p/*",              false],
+                [5,     "èvreriez",     ":K:2p/*",              false],
+                [5,     "èvreraient",   ":K:3p/*",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "èvre",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            // c
+            // verbes en -ébrer, -écer, -écher, -écrer, -éder, -éger, -égler, -égner, -égrer, -éguer,
+            //           -éler, -émer, -éner, -éper, -équer, -érer, -éser, -éter, -étrer, -évrer, -éyer
+            // changement du é en è
+
+            "écer": [
+                [2,     "er",           ":Y/*",                 false],
+                [4,     "éçant",        ":P/*",                 false],
+                [4,     "èce",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èces",         ":Ip:Sp:2s/*",          false],
+                [4,     "éçons",        ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "ècent",        ":Ip:Sp:3p/*",          false],
+                [4,     "éçais",        ":Iq:1s:2s/*",          false],
+                [4,     "éçait",        ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [4,     "éçaient",      ":Iq:3p/*",             false],
+                [4,     "éçai",         ":Is:1s/*",             false],
+                [4,     "éças",         ":Is:2s/*",             false],
+                [4,     "éça",          ":Is:3s/*",             false],
+                [4,     "éçâmes",       ":Is:1p/*",             false],
+                [4,     "éçâtes",       ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "ècerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èceras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "ècera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "ècerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "ècerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èceront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "ècerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "ècerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "ècerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èceriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èceraient",    ":K:3p/R",              false],
+                [4,     "éçasse",       ":Sq:1s/*",             false],
+                [4,     "éçasses",      ":Sq:2s/*",             false],
+                [4,     "éçât",         ":Sq:3s/*",             false],
+                [4,     "éçassions",    ":Sq:1p/*",             false],
+                [4,     "éçassiez",     ":Sq:2p/*",             false],
+                [4,     "éçassent",     ":Sq:3p/*",             false],
+                [4,     "èce",          ":E:2s/*",              false],
+                [4,     "éçons",        ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éger": [
+                [2,     "er",           ":Y/*",                 false],
+                [4,     "égeant",       ":P/*",                 false],
+                [4,     "ège",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èges",         ":Ip:Sp:2s/*",          false],
+                [4,     "égeons",       ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "ègent",        ":Ip:Sp:3p/*",          false],
+                [4,     "égeais",       ":Iq:1s:2s/*",          false],
+                [4,     "égeait",       ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [4,     "égeaient",     ":Iq:3p/*",             false],
+                [4,     "égeai",        ":Is:1s/*",             false],
+                [4,     "égeas",        ":Is:2s/*",             false],
+                [4,     "égea",         ":Is:3s/*",             false],
+                [4,     "égeâmes",      ":Is:1p/*",             false],
+                [4,     "égeâtes",      ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "ègerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "ègeras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "ègera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "ègerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "ègerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "ègeront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "ègerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "ègerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "ègerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "ègeriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "ègeraient",    ":K:3p/R",              false],
+                [4,     "égeasse",      ":Sq:1s/*",             false],
+                [4,     "égeasses",     ":Sq:2s/*",             false],
+                [4,     "égeât",        ":Sq:3s/*",             false],
+                [4,     "égeassions",   ":Sq:1p/*",             false],
+                [4,     "égeassiez",    ":Sq:2p/*",             false],
+                [4,     "égeassent",    ":Sq:3p/*",             false],
+                [4,     "ège",          ":E:2s/*",              false],
+                [4,     "égeons",       ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "ébrer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "èbre",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "èbres",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èbrent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "èbrerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "èbreras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "èbrera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "èbrerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "èbrerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "èbreront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "èbrerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "èbrerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "èbrerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "èbreriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "èbreraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "èbre",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "écher": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "èche",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "èches",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èchent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "ècherai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ècheras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "èchera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "ècherons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "ècherez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ècheront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "ècherais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "ècherait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "ècherions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ècheriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ècheraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "èche",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "écrer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "ècre",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "ècres",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "ècrent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "ècrerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ècreras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "ècrera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "ècrerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "ècrerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ècreront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "ècrerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "ècrerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "ècrerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ècreriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ècreraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "ècre",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éder": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ède",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èdes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èdent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èderai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èderas",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èdera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èderons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èderez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èderont",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èderais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èderait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èderions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èderiez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èderaient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ède",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "égler": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "ègle",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "ègles",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èglent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "èglerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ègleras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "èglera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "èglerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "èglerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ègleront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "èglerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "èglerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "èglerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ègleriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ègleraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "ègle",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "égner": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "ègne",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "ègnes",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "ègnent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "ègnerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ègneras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "ègnera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "ègnerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "ègnerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ègneront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "ègnerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "ègnerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "ègnerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ègneriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ègneraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "ègne",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "égrer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "ègre",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "ègres",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "ègrent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "ègrerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ègreras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "ègrera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "ègrerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "ègrerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ègreront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "ègrerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "ègrerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "ègrerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ègreriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ègreraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "ègre",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éguer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "ègue",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "ègues",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èguent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "èguerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ègueras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "èguera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "èguerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "èguerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ègueront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "èguerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "èguerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "èguerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ègueriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ègueraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "ègue",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éler": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "èle",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èles",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èlent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èlerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èleras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èlera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èlerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èlerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èleront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èlerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èlerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èlerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èleriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èleraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "èle",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "émer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ème",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èmes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èment",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èmerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èmeras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èmera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èmerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èmerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èmeront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èmerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èmerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èmerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èmeriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èmeraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ème",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éner": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ène",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "ènes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "ènent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "ènerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èneras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "ènera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "ènerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "ènerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èneront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "ènerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "ènerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "ènerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èneriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èneraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ène",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éper": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "èpe",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èpes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èpent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èperai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èperas",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èpera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èperons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èperez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èperont",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èperais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èperait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èperions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èperiez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èperaient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "èpe",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "équer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "èque",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "èques",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èquent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "èquerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "èqueras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "èquera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "èquerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "èquerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "èqueront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "èquerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "èquerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "èquerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "èqueriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "èqueraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "èque",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "érer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ère",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "ères",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èrent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èrerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èreras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èrera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èrerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èrerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èreront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èrerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èrerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èrerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èreriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èreraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ère",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éser": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "èse",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èses",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èsent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èserai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èseras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èsera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èserons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èserez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èseront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èserais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èserait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èserions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èseriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èseraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "èse",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éter": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "ète",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "ètes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "ètent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èterai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èteras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "ètera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èterons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èterez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èteront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èterais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èterait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èterions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èteriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èteraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "ète",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "étrer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "ètre",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "ètres",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "ètrent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "ètrerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "ètreras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "ètrera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "ètrerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "ètrerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "ètreront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "ètrerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "ètrerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "ètrerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "ètreriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "ètreraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "ètre",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "évrer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [5,     "èvre",         ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [5,     "èvres",        ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [5,     "èvrent",       ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [5,     "èvrerai",      ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [5,     "èvreras",      ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [5,     "èvrera",       ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [5,     "èvrerons",     ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [5,     "èvrerez",      ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [5,     "èvreront",     ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [5,     "èvrerais",     ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [5,     "èvrerait",     ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [5,     "èvrerions",    ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [5,     "èvreriez",     ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [5,     "èvreraient",   ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [5,     "èvre",         ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ],
+
+            "éyer": [
+                [2,     "er",           ":Y/*",                 false],
+                [2,     "ant",          ":P/*",                 false],
+                [4,     "èye",          ":Ip:Sp:1s:3s/*",       false],
+                [2,     "è",            ":Ip:1ś/R",             false],
+                [4,     "èyes",         ":Ip:Sp:2s/*",          false],
+                [2,     "ons",          ":Ip:1p/*",             false],
+                [2,     "ez",           ":Ip:2p/*",             false],
+                [4,     "èyent",        ":Ip:Sp:3p/*",          false],
+                [2,     "ais",          ":Iq:1s:2s/*",          false],
+                [2,     "ait",          ":Iq:3s/*",             false],
+                [2,     "ions",         ":Iq:Sp:1p/*",          false],
+                [2,     "iez",          ":Iq:Sp:2p/*",          false],
+                [2,     "aient",        ":Iq:3p/*",             false],
+                [2,     "ai",           ":Is:1s/*",             false],
+                [2,     "as",           ":Is:2s/*",             false],
+                [2,     "a",            ":Is:3s/*",             false],
+                [2,     "âmes",         ":Is:1p/*",             false],
+                [2,     "âtes",         ":Is:2p/*",             false],
+                [2,     "èrent",        ":Is:3p!/*",            false],
+                [2,     "erai",         ":If:1s/M",             false],
+                [4,     "èyerai",       ":If:1s/R",             false],
+                [2,     "eras",         ":If:2s/M",             false],
+                [4,     "èyeras",       ":If:2s/R",             false],
+                [2,     "era",          ":If:3s/M",             false],
+                [4,     "èyera",        ":If:3s/R",             false],
+                [2,     "erons",        ":If:1p/M",             false],
+                [4,     "èyerons",      ":If:1p/R",             false],
+                [2,     "erez",         ":If:2p/M",             false],
+                [4,     "èyerez",       ":If:2p/R",             false],
+                [2,     "eront",        ":If:3p!/M",            false],
+                [4,     "èyeront",      ":If:3p!/R",            false],
+                [2,     "erais",        ":K:1s:2s/M",           false],
+                [4,     "èyerais",      ":K:1s:2s/R",           false],
+                [2,     "erait",        ":K:3s/M",              false],
+                [4,     "èyerait",      ":K:3s/R",              false],
+                [2,     "erions",       ":K:1p/M",              false],
+                [4,     "èyerions",     ":K:1p/R",              false],
+                [2,     "eriez",        ":K:2p/M",              false],
+                [4,     "èyeriez",      ":K:2p/R",              false],
+                [2,     "eraient",      ":K:3p/M",              false],
+                [4,     "èyeraient",    ":K:3p/R",              false],
+                [2,     "asse",         ":Sq:1s/*",             false],
+                [2,     "asses",        ":Sq:2s/*",             false],
+                [2,     "ât",           ":Sq:3s/*",             false],
+                [2,     "assions",      ":Sq:1p/*",             false],
+                [2,     "assiez",       ":Sq:2p/*",             false],
+                [2,     "assent",       ":Sq:3p/*",             false],
+                [4,     "èye",          ":E:2s/*",              false],
+                [2,     "ons",          ":E:1p/*",              false],
+                [2,     "ez",           ":E:2p/*",              false]
+            ]
+        }
+    }
+};

Index: gc_lang/fr/modules-js/lexicographe.js
==================================================================
--- gc_lang/fr/modules-js/lexicographe.js
+++ gc_lang/fr/modules-js/lexicographe.js
@@ -12,104 +12,104 @@
 if (typeof (require) !== 'undefined') {
     var helpers = require("resource://grammalecte/graphspell/helpers.js");
 }
 
 const _dTag = new Map([
-    [':G', "[mot grammatical]"],
-    [':N', " nom,"],
-    [':A', " adjectif,"],
-    [':M1', " prénom,"],
-    [':M2', " patronyme,"],
-    [':MP', " nom propre,"],
-    [':W', " adverbe,"],
-    [':X', " adverbe de négation,"],
-    [':U', " adverbe interrogatif,"],
-    [':J', " interjection,"],
-    [':B', " nombre,"],
-    [':T', " titre,"],
-
-    [':R', " préposition,"],
-    [':Rv', " préposition verbale,"],
-    [':D', " déterminant,"],
-    [':Dd', " déterminant démonstratif,"],
-    [':De', " déterminant exclamatif,"],
-    [':Dp', " déterminant possessif,"],
-    [':Di', " déterminant indéfini,"],
-    [':Dn', " déterminant négatif,"],
-    [':Od', " pronom démonstratif,"],
-    [':Oi', " pronom indéfini,"],
-    [':On', " pronom indéfini négatif,"],
-    [':Ot', " pronom interrogatif,"],
-    [':Or', " pronom relatif,"],
-    [':Ow', " pronom adverbial,"],
-    [':Os', " pronom personnel sujet,"],
-    [':Oo', " pronom personnel objet,"],
-    [':C',  " conjonction,"],
-    [':Ĉ',  " conjonction (él.),"],
-    [':Cc', " conjonction de coordination,"],
-    [':Cs', " conjonction de subordination,"],
-    [':Ĉs', " conjonction de subordination (él.),"],
-
-    [':Ŵ', " locution adverbiale (él.),"],
-    [':Ñ', " locution nominale (él.),"],
-    [':Â', " locution adjectivale (él.),"],
-    [':Ṽ', " locution verbale (él.),"],
-    [':Ŕ', " locution prépositive (él.),"],
-    [':Ĵ', " locution interjective (él.),"],
-
-    [':Zp', " préfixe,"],
-    [':Zs', " suffixe,"],
-
-    [':V1', " verbe (1ᵉʳ gr.),"],
-    [':V2', " verbe (2ᵉ gr.),"],
-    [':V3', " verbe (3ᵉ gr.),"],
-    [':V0e', " verbe,"],
-    [':V0a', " verbe,"],
-
-    [':O1', " 1ʳᵉ pers.,"],
-    [':O2', " 2ᵉ pers.,"],
-    [':O3', " 3ᵉ pers.,"],
-
-    [':e', " épicène"],
-    [':m', " masculin"],
-    [':f', " féminin"],
-    [':s', " singulier"],
-    [':p', " pluriel"],
-    [':i', " invariable"],
-
-    [':Y', " infinitif,"],
-    [':P', " participe présent,"],
-    [':Q', " participe passé,"],
-
-    [':Ip', " présent,"],
-    [':Iq', " imparfait,"],
-    [':Is', " passé simple,"],
-    [':If', " futur,"],
-    [':K', " conditionnel présent,"],
-    [':Sp', " subjonctif présent,"],
-    [':Sq', " subjonctif imparfait,"],
-    [':E', " impératif,"],
-
-    [':1s', " 1ʳᵉ p. sg.,"],
-    [':1ŝ', " présent interr. 1ʳᵉ p. sg.,"],
-    [':1ś', " présent interr. 1ʳᵉ p. sg.,"],
-    [':2s', " 2ᵉ p. sg.,"],
-    [':3s', " 3ᵉ p. sg.,"],
-    [':1p', " 1ʳᵉ p. pl.,"],
-    [':2p', " 2ᵉ p. pl.,"],
-    [':3p', " 3ᵉ p. pl.,"],
-    [':3p!', " 3ᵉ p. pl.,"],
-
-    [';S', " : symbole (unité de mesure)"],
-
-    ['/*', ""],
-    ['/C', " {classique}"],
-    ['/M', ""],
-    ['/R', " {réforme}"],
-    ['/A', ""],
-    ['/X', ""]
+    [':N', [" nom,", "Nom"]],
+    [':A', [" adjectif,", "Adjectif"]],
+    [':M1', [" prénom,", "Prénom"]],
+    [':M2', [" patronyme,", "Patronyme, matronyme, nom de famille…"]],
+    [':MP', [" nom propre,", "Nom propre"]],
+    [':W', [" adverbe,", "Adverbe"]],
+    [':J', [" interjection,", "Interjection"]],
+    [':B', [" nombre,", "Nombre"]],
+    [':T', [" titre,", "Titre de civilité"]],
+
+    [':e', [" épicène", "épicène"]],
+    [':m', [" masculin", "masculin"]],
+    [':f', [" féminin", "féminin"]],
+    [':s', [" singulier", "singulier"]],
+    [':p', [" pluriel", "pluriel"]],
+    [':i', [" invariable", "invariable"]],
+
+    [':V1', [" verbe (1ᵉʳ gr.),", "Verbe du 1ᵉʳ groupe"]],
+    [':V2', [" verbe (2ᵉ gr.),", "Verbe du 2ᵉ groupe"]],
+    [':V3', [" verbe (3ᵉ gr.),", "Verbe du 3ᵉ groupe"]],
+    [':V0e', [" verbe,", "Verbe auxiliaire être"]],
+    [':V0a', [" verbe,", "Verbe auxiliaire avoir"]],
+
+    [':Y', [" infinitif,", "Infinitif"]],
+    [':P', [" participe présent,", "Participe présent"]],
+    [':Q', [" participe passé,", "Participe passé"]],
+
+    [':Ip', [" présent,", "Indicatif présent"]],
+    [':Iq', [" imparfait,", "Indicatif imparfait"]],
+    [':Is', [" passé simple,", "Indicatif passé simple"]],
+    [':If', [" futur,", "Indicatif futur"]],
+    [':K', [" conditionnel présent,", "Conditionnel présent"]],
+    [':Sp', [" subjonctif présent,", "Subjonctif présent"]],
+    [':Sq', [" subjonctif imparfait,", "Subjonctif imparfait"]],
+    [':E', [" impératif,", "Impératif"]],
+
+    [':1s', [" 1ʳᵉ p. sg.,", "Verbe à la 1ʳᵉ personne du singulier"]],
+    [':1ŝ', [" présent interr. 1ʳᵉ p. sg.,", "Verbe à la 1ʳᵉ personne du singulier (présent interrogatif)"]],
+    [':1ś', [" présent interr. 1ʳᵉ p. sg.,", "Verbe à la 1ʳᵉ personne du singulier (présent interrogatif)"]],
+    [':2s', [" 2ᵉ p. sg.,", "Verbe à la 2ᵉ personne du singulier"]],
+    [':3s', [" 3ᵉ p. sg.,", "Verbe à la 3ᵉ personne du singulier"]],
+    [':1p', [" 1ʳᵉ p. pl.,", "Verbe à la 1ʳᵉ personne du pluriel"]],
+    [':2p', [" 2ᵉ p. pl.,", "Verbe à la 2ᵉ personne du pluriel"]],
+    [':3p', [" 3ᵉ p. pl.,", "Verbe à la 3ᵉ personne du pluriel"]],
+    [':3p!', [" 3ᵉ p. pl.,", "Verbe à la 3ᵉ personne du pluriel (prononciation distinctive)"]],
+
+    [':G', ["[mot grammatical]", "Mot grammatical"]],
+    [':X', [" adverbe de négation,", "Adverbe de négation"]],
+    [':U', [" adverbe interrogatif,", "Adverbe interrogatif"]],
+    [':R', [" préposition,", "Préposition"]],
+    [':Rv', [" préposition verbale,", "Préposition verbale"]],
+    [':D', [" déterminant,", "Déterminant"]],
+    [':Dd', [" déterminant démonstratif,", "Déterminant démonstratif"]],
+    [':De', [" déterminant exclamatif,", "Déterminant exclamatif"]],
+    [':Dp', [" déterminant possessif,", "Déterminant possessif"]],
+    [':Di', [" déterminant indéfini,", "Déterminant indéfini"]],
+    [':Dn', [" déterminant négatif,", "Déterminant négatif"]],
+    [':Od', [" pronom démonstratif,", "Pronom démonstratif"]],
+    [':Oi', [" pronom indéfini,", "Pronom indéfini"]],
+    [':On', [" pronom indéfini négatif,", "Pronom indéfini négatif"]],
+    [':Ot', [" pronom interrogatif,", "Pronom interrogatif"]],
+    [':Or', [" pronom relatif,", "Pronom relatif"]],
+    [':Ow', [" pronom adverbial,", "Pronom adverbial"]],
+    [':Os', [" pronom personnel sujet,", "Pronom personnel sujet"]],
+    [':Oo', [" pronom personnel objet,", "Pronom personnel objet"]],
+    [':O1', [" 1ʳᵉ pers.,", "Pronom : 1ʳᵉ personne"]],
+    [':O2', [" 2ᵉ pers.,", "Pronom : 2ᵉ personne"]],
+    [':O3', [" 3ᵉ pers.,", "Pronom : 3ᵉ personne"]],
+    [':C', [" conjonction,", "Conjonction"]],
+    [':Ĉ', [" conjonction (él.),", "Conjonction (élément)"]],
+    [':Cc', [" conjonction de coordination,", "Conjonction de coordination"]],
+    [':Cs', [" conjonction de subordination,", "Conjonction de subordination"]],
+    [':Ĉs', [" conjonction de subordination (él.),", "Conjonction de subordination (élément)"]],
+    
+    [':Ñ', [" locution nominale (él.),", "Locution nominale (élément)"]],
+    [':Â', [" locution adjectivale (él.),", "Locution adjectivale (élément)"]],
+    [':Ṽ', [" locution verbale (él.),", "Locution verbale (élément)"]],
+    [':Ŵ', [" locution adverbiale (él.),", "Locution adverbiale (élément)"]],
+    [':Ŕ', [" locution prépositive (él.),", "Locution prépositive (élément)"]],
+    [':Ĵ', [" locution interjective (él.),", "Locution interjective (élément)"]],
+
+    [':Zp', [" préfixe,", "Préfixe"]],
+    [':Zs', [" suffixe,", "Suffixe"]],
+
+    [';S', [" : symbole (unité de mesure)", "Symbole (unité de mesure)"]],
+
+    ['/*', ["", "sous-dictionnaire <Commun>"]],
+    ['/C', [" <classique>", "sous-dictionnaire <Classique>"]],
+    ['/M', ["", "sous-dictionnaire <Moderne>"]],
+    ['/R', [" <réforme>", "sous-dictionnaire <Réforme 1990>"]],
+    ['/A', ["", "sous-dictionnaire <Annexe>"]],
+    ['/X', ["", "sous-dictionnaire <Contributeurs>"]]
 ]);
+
 
 const _dLocTag = new Map([
     [':L', "locution"],
     [':LN', "locution nominale"],
     [':LA', "locution adjectivale"],
@@ -376,11 +376,11 @@
     _formatTags (sTags) {
         let sRes = "";
         sTags = sTags.replace(/V([0-3][ea]?)[itpqnmr_eaxz]+/, "V$1");
         let m;
         while ((m = this._zTag.exec(sTags)) !== null) {
-            sRes += _dTag.get(m[0]);
+            sRes += _dTag.get(m[0])[0];
         }
         if (sRes.startsWith(" verbe") && !sRes.includes("infinitif")) {
             sRes += " [" + sTags.slice(1, sTags.indexOf(" ")) + "]";
         }
         if (!sRes) {

ADDED   gc_lang/fr/modules/conj_generator.py
Index: gc_lang/fr/modules/conj_generator.py
==================================================================
--- /dev/null
+++ gc_lang/fr/modules/conj_generator.py
@@ -0,0 +1,2000 @@
+# Conjugation generator
+# beta stage, unfinished, the root for a new way to generate flexions…
+
+import re
+
+
+def conjugate (sVerb, sVerbTag="i_____a", bVarPpas=True):
+    lConj = []
+    cGroup = getVerbGroupChar(sVerb)
+    for nCut, sAdd, sFlexTags, sPattern in getConjRules(sVerb, bVarPpas):
+        if not sPattern or re.search(sPattern, sVerb):
+            sFlexion = sVerb[0:-nCut] + sAdd  if nCut  else sVerb + sAdd
+            lConj.append((sFlexion, ":V" + cGroup + "_" + sVerbTag + sFlexTags))
+    return lConj
+
+
+def getVerbGroupChar (sVerb, ):
+    sVerb = sVerb.lower()
+    if sVerb.endswith("er"):
+        return "1"
+    if sVerb.endswith("ir"):
+        return "2"
+    if sVerb == "être" or sVerb == "avoir":
+        return "0"
+    if sVerb.endswith("re"):
+        return "3"
+    return "4"
+
+
+def getConjRules (sVerb, bVarPpas=True, nGroup=2):
+    if sVerb.endswith("er"):
+        # premier groupe, conjugaison en fonction de la terminaison du lemme
+        # 5 lettres
+        if sVerb[-5:] in oConj["V1"]:
+            lConj = list(oConj["V1"][sVerb[-5:]])
+        # 4 lettres
+        elif sVerb[-4:] in oConj["V1"]:
+            if sVerb.endswith(("eler", "eter")):
+                lConj = list(oConj["V1"][sVerb[-4:]]["1"])
+            else:
+                lConj = list(oConj["V1"][sVerb[-4:]])
+        # 3 lettres
+        elif sVerb[-3:] in oConj["V1"]:
+            lConj = list(oConj["V1"][sVerb[-3:]])
+        # 2 lettres
+        else:
+            lConj = list(oConj["V1"]["er"])
+        lConj.extend(oConj["V1_ppas"][bVarPpas])
+    elif sVerb.endswith("ir") and nGroup <= 2:
+        # deuxième groupe
+        lConj = list(oConj["V2"])
+        lConj.extend(oConj["V2_ppas"][bVarPpas])
+    else:
+        # TODO: troisième groupe
+        lConj = [ [0, "", ":Y/*", False] ]
+    return lConj
+
+
+oConj = {
+    "V1_ppas": {
+        True: [
+            [2,     "é",           ":Q:A:1ŝ:m:s/*",     False],
+            [2,     "és",          ":Q:A:m:p/*",        False],
+            [2,     "ée",          ":Q:A:f:s/*",        False],
+            [2,     "ées",         ":Q:A:f:p/*",        False],
+        ],
+        False: [
+            [2,     "é",           ":Q:e:i/*",          False],
+        ]
+    },
+
+    "V2_ppas": {
+        True: [
+            [2,     "i",           ":Q:A:m:s/*",        False],
+            [2,     "is",          ":Q:A:m:p/*",        False],
+            [2,     "ie",          ":Q:A:f:s/*",        False],
+            [2,     "ies",         ":Q:A:f:p/*",        False],
+        ],
+        False: [
+            [2,     "i",           ":Q:e:i/*",          False],
+        ]
+    },
+
+    # deuxième groupe (le seul groupe régulier)
+    "V2": [
+        [2,     "ir",           ":Y/*",             False],
+        [2,     "issant",       ":P/*",             False],
+        [2,     "is",           ":Ip:Is:1s:2s/*",   False],
+        [2,     "it",           ":Ip:Is:3s/*",      False],
+        [2,     "issons",       ":Ip:1p/*",         False],
+        [2,     "issez",        ":Ip:2p/*",         False],
+        [2,     "issent",       ":Ip:Sp:Sq:3p/*",   False],
+        [2,     "issais",       ":Iq:1s:2s/*",      False],
+        [2,     "issait",       ":Iq:3s/*",         False],
+        [2,     "issions",      ":Iq:Sp:Sq:1p/*",   False],
+        [2,     "issiez",       ":Iq:Sp:Sq:2p/*",   False],
+        [2,     "issaient",     ":Iq:3p/*",         False],
+        [2,     "îmes",         ":Is:1p/*",         False],
+        [2,     "îtes",         ":Is:2p/*",         False],
+        [2,     "irent",        ":Is:3p!/*",        False],
+        [2,     "irai",         ":If:1s/*",         False],
+        [2,     "iras",         ":If:2s/*",         False],
+        [2,     "ira",          ":If:3s/*",         False],
+        [2,     "irons",        ":If:1p/*",         False],
+        [2,     "irez",         ":If:2p/*",         False],
+        [2,     "iront",        ":If:3p!/*",        False],
+        [2,     "irais",        ":K:1s:2s/*",       False],
+        [2,     "irait",        ":K:3s/*",          False],
+        [2,     "irions",       ":K:1p/*",          False],
+        [2,     "iriez",        ":K:2p/*",          False],
+        [2,     "iraient",      ":K:3p/*",          False],
+        [2,     "isse",         ":Sp:Sq:1s/*",      False],
+        [2,     "isses",        ":Sp:Sq:2s/*",      False],
+        [2,     "isse",         ":Sp:3s/*",         False],
+        [2,     "ît",           ":Sq:3s/*",         False],
+        [2,     "is",           ":E:2s/*",          False],
+        [2,     "issons",       ":E:1p/*",          False],
+        [2,     "issez",        ":E:2p/*",          False]
+    ],
+    
+    # premier groupe (bien plus irrégulier que prétendu)
+    "V1": {
+        # a
+        # verbes en -er, -ger, -yer, -cer
+        "er": [
+            [2,      "er",        ":Y/*",               False],
+            [2,      "ant",       ":P/*",               False],
+            [2,      "e",         ":Ip:Sp:1s:3s/*",     False],
+            [2,      "è",         ":Ip:1ś/*",           False],
+            [2,      "es",        ":Ip:Sp:2s/*",        False],
+            [2,      "ons",       ":Ip:1p/*",           False],
+            [2,      "ez",        ":Ip:2p/*",           False],
+            [2,      "ent",       ":Ip:Sp:3p/*",        False],
+            [2,      "ais",       ":Iq:1s:2s/*",        False],
+            [2,      "ait",       ":Iq:3s/*",           False],
+            [2,      "ions",      ":Iq:Sp:1p/*",        False],
+            [2,      "iez",       ":Iq:Sp:2p/*",        False],
+            [2,      "aient",     ":Iq:3p/*",           False],
+            [2,      "ai",        ":Is:1s/*",           False],
+            [2,      "as",        ":Is:2s/*",           False],
+            [2,      "a",         ":Is:3s/*",           False],
+            [2,      "âmes",      ":Is:1p/*",           False],
+            [2,      "âtes",      ":Is:2p/*",           False],
+            [2,      "èrent",     ":Is:3p!/*",          False],
+            [2,      "erai",      ":If:1s/*",           False],
+            [2,      "eras",      ":If:2s/*",           False],
+            [2,      "era",       ":If:3s/*",           False],
+            [2,      "erons",     ":If:1p/*",           False],
+            [2,      "erez",      ":If:2p/*",           False],
+            [2,      "eront",     ":If:3p!/*",          False],
+            [2,      "erais",     ":K:1s:2s/*",         False],
+            [2,      "erait",     ":K:3s/*",            False],
+            [2,      "erions",    ":K:1p/*",            False],
+            [2,      "eriez",     ":K:2p/*",            False],
+            [2,      "eraient",   ":K:3p/*",            False],
+            [2,      "asse",      ":Sq:1s/*",           False],
+            [2,      "asses",     ":Sq:2s/*",           False],
+            [2,      "ât",        ":Sq:3s/*",           False],
+            [2,      "assions",   ":Sq:1p/*",           False],
+            [2,      "assiez",    ":Sq:2p/*",           False],
+            [2,      "assent",    ":Sq:3p/*",           False],
+            [2,      "e",         ":E:2s/*",            False],
+            [2,      "ons",       ":E:1p/*",            False],
+            [2,      "ez",        ":E:2p/*",            False]
+        ],
+
+        "ger": [
+            [2,      "er",        ":Y/*",               False],
+            [2,      "eant",      ":P/*",               False],
+            [2,      "e",         ":Ip:Sp:1s:3s/*",     False],
+            [2,      "è",         ":Ip:1ś/*",           False],
+            [2,      "es",        ":Ip:Sp:2s/*",        False],
+            [2,      "eons",      ":Ip:1p/*",           False],
+            [2,      "ez",        ":Ip:2p/*",           False],
+            [2,      "ent",       ":Ip:Sp:3p/*",        False],
+            [2,      "eais",      ":Iq:1s:2s/*",        False],
+            [2,      "eait",      ":Iq:3s/*",           False],
+            [2,      "ions",      ":Iq:Sp:1p/*",        False],
+            [2,      "iez",       ":Iq:Sp:2p/*",        False],
+            [2,      "eaient",    ":Iq:3p/*",           False],
+            [2,      "eai",       ":Is:1s/*",           False],
+            [2,      "eas",       ":Is:2s/*",           False],
+            [2,      "ea",        ":Is:3s/*",           False],
+            [2,      "eâmes",     ":Is:1p/*",           False],
+            [2,      "eâtes",     ":Is:2p/*",           False],
+            [2,      "èrent",     ":Is:3p!/*",          False],
+            [2,      "erai",      ":If:1s/*",           False],
+            [2,      "eras",      ":If:2s/*",           False],
+            [2,      "era",       ":If:3s/*",           False],
+            [2,      "erons",     ":If:1p/*",           False],
+            [2,      "erez",      ":If:2p/*",           False],
+            [2,      "eront",     ":If:3p!/*",          False],
+            [2,      "erais",     ":K:1s:2s/*",         False],
+            [2,      "erait",     ":K:3s/*",            False],
+            [2,      "erions",    ":K:1p/*",            False],
+            [2,      "eriez",     ":K:2p/*",            False],
+            [2,      "eraient",   ":K:3p/*",            False],
+            [2,      "easse",     ":Sq:1s/*",           False],
+            [2,      "easses",    ":Sq:2s/*",           False],
+            [2,      "eât",       ":Sq:3s/*",           False],
+            [2,      "eassions",  ":Sq:1p/*",           False],
+            [2,      "eassiez",   ":Sq:2p/*",           False],
+            [2,      "eassent",   ":Sq:3p/*",           False],
+            [2,      "e",         ":E:2s/*",            False],
+            [2,      "eons",      ":E:1p/*",            False],
+            [2,      "ez",        ":E:2p/*",            False]
+        ],
+
+        "cer": [
+            [2,      "er",        ":Y/*",               False],
+            [3,      "çant",      ":P/*",               False],
+            [2,      "e",         ":Ip:Sp:1s:3s/*",     False],
+            [2,      "è",         ":Ip:1ś/*",           False],
+            [2,      "es",        ":Ip:Sp:2s/*",        False],
+            [3,      "çons",      ":Ip:1p/*",           False],
+            [2,      "ez",        ":Ip:2p/*",           False],
+            [2,      "ent",       ":Ip:Sp:3p/*",        False],
+            [3,      "çais",      ":Iq:1s:2s/*",        False],
+            [3,      "çait",      ":Iq:3s/*",           False],
+            [2,      "ions",      ":Iq:Sp:1p/*",        False],
+            [2,      "iez",       ":Iq:Sp:2p/*",        False],
+            [3,      "çaient",    ":Iq:3p/*",           False],
+            [3,      "çai",       ":Is:1s/*",           False],
+            [3,      "ças",       ":Is:2s/*",           False],
+            [3,      "ça",        ":Is:3s/*",           False],
+            [3,      "çâmes",     ":Is:1p/*",           False],
+            [3,      "çâtes",     ":Is:2p/*",           False],
+            [2,      "èrent",     ":Is:3p!/*",          False],
+            [2,      "erai",      ":If:1s/*",           False],
+            [2,      "eras",      ":If:2s/*",           False],
+            [2,      "era",       ":If:3s/*",           False],
+            [2,      "erons",     ":If:1p/*",           False],
+            [2,      "erez",      ":If:2p/*",           False],
+            [2,      "eront",     ":If:3p!/*",          False],
+            [2,      "erais",     ":K:1s:2s/*",         False],
+            [2,      "erait",     ":K:3s/*",            False],
+            [2,      "erions",    ":K:1p/*",            False],
+            [2,      "eriez",     ":K:2p/*",            False],
+            [2,      "eraient",   ":K:3p/*",            False],
+            [3,      "çasse",     ":Sq:1s/*",           False],
+            [3,      "çasses",    ":Sq:2s/*",           False],
+            [3,      "çât",       ":Sq:3s/*",           False],
+            [3,      "çassions",  ":Sq:1p/*",           False],
+            [3,      "çassiez",   ":Sq:2p/*",           False],
+            [3,      "çassent",   ":Sq:3p/*",           False],
+            [2,      "e",         ":E:2s/*",            False],
+            [3,      "çons",      ":E:1p/*",            False],
+            [2,      "ez",        ":E:2p/*",            False]
+        ],
+
+        "yer": [
+            [2,     "er",         ":Y/*",               False],
+            [2,     "ant",        ":P/*",               False],
+            [3,     "ye",         ":Ip:Sp:1s:3s/*",     "[^ou]yer$"],
+            [3,     "ie",         ":Ip:Sp:1s:3s/*",     "[aou]yer$"],
+            [2,     "è",          ":Ip:1ś/*",           False],
+            [3,     "yes",        ":Ip:Sp:2s/*",        "[^ou]yer$"],
+            [3,     "ies",        ":Ip:Sp:2s/*",        "[aou]yer$"],
+            [2,     "ons",        ":Ip:1p/*",           False],
+            [2,     "ez",         ":Ip:2p/*",           False],
+            [3,     "yent",       ":Ip:Sp:3p/*",        "[^ou]yer$"],
+            [3,     "ient",       ":Ip:Sp:3p/*",        "[aou]yer$"],
+            [2,     "ais",        ":Iq:1s:2s/*",        False],
+            [2,     "ait",        ":Iq:3s/*",           False],
+            [2,     "ions",       ":Iq:Sp:1p/*",        False],
+            [2,     "iez",        ":Iq:Sp:2p/*",        False],
+            [2,     "aient",      ":Iq:3p/*",           False],
+            [2,     "ai",         ":Is:1s/*",           False],
+            [2,     "as",         ":Is:2s/*",           False],
+            [2,     "a",          ":Is:3s/*",           False],
+            [2,     "âmes",       ":Is:1p/*",           False],
+            [2,     "âtes",       ":Is:2p/*",           False],
+            [2,     "èrent",      ":Is:3p!/*",          False],
+            [3,     "yerai",      ":If:1s/*",           "[^ou]yer$"],
+            [3,     "ierai",      ":If:1s/*",           "[aou]yer$"],
+            [3,     "yeras",      ":If:2s/*",           "[^ou]yer$"],
+            [3,     "ieras",      ":If:2s/*",           "[aou]yer$"],
+            [3,     "yera",       ":If:3s/*",           "[^ou]yer$"],
+            [3,     "iera",       ":If:3s/*",           "[aou]yer$"],
+            [3,     "yerons",     ":If:1p/*",           "[^ou]yer$"],
+            [3,     "ierons",     ":If:1p/*",           "[aou]yer$"],
+            [3,     "yerez",      ":If:2p/*",           "[^ou]yer$"],
+            [3,     "ierez",      ":If:2p/*",           "[aou]yer$"],
+            [3,     "yeront",     ":If:3p!/*",          "[^ou]yer$"],
+            [3,     "ieront",     ":If:3p!/*",          "[aou]yer$"],
+            [3,     "yerais",     ":K:1s:2s/*",         "[^ou]yer$"],
+            [3,     "ierais",     ":K:1s:2s/*",         "[aou]yer$"],
+            [3,     "yerait",     ":K:3s/*",            "[^ou]yer$"],
+            [3,     "ierait",     ":K:3s/*",            "[aou]yer$"],
+            [3,     "yerions",    ":K:1p/*",            "[^ou]yer$"],
+            [3,     "ierions",    ":K:1p/*",            "[aou]yer$"],
+            [3,     "yeriez",     ":K:2p/*",            "[^ou]yer$"],
+            [3,     "ieriez",     ":K:2p/*",            "[aou]yer$"],
+            [3,     "yeraient",   ":K:3p/*",            "[^ou]yer$"],
+            [3,     "ieraient",   ":K:3p/*",            "[aou]yer$"],
+            [2,     "asse",       ":Sq:1s/*",           False],
+            [2,     "asses",      ":Sq:2s/*",           False],
+            [2,     "ât",         ":Sq:3s/*",           False],
+            [2,     "assions",    ":Sq:1p/*",           False],
+            [2,     "assiez",     ":Sq:2p/*",           False],
+            [2,     "assent",     ":Sq:3p/*",           False],
+            [3,     "ye",         ":E:2s/*",            "[^ou]yer$"],
+            [3,     "ie",         ":E:2s/*",            "[aou]yer$"],
+            [2,     "ons",        ":E:1p/*",            False],
+            [2,     "ez",         ":E:2p/*",            False]
+        ],
+
+        # b
+        # verbes en -ecer, -emer, -ener, -eper, -erer, -eser, -ever, -evrer
+        # verbes en -eler, -eter (pas de doublement de la consonne: acheter, celer, déceler, receler, ciseler, démanteler,
+        # écarteler, encasteler, geler, dégeler, congeler, surgeler, marteler, modeler, peler, acheter, racheter,
+        # bégueter, corseter, crocheter, fileter, fureter, haleter)
+        # changement du e en è avant syllabe muette
+        "ecer": [
+            [2,     "er",           ":Y/*",                 False],
+            [3,     "çant",         ":P/*",                 False],
+            [4,     "èce",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èces",         ":Ip:Sp:2s/*",          False],
+            [3,     "çons",         ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "ècent",        ":Ip:Sp:3p/*",          False],
+            [3,     "çais",         ":Iq:1s:2s/*",          False],
+            [3,     "çait",         ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [3,     "çaient",       ":Iq:3p/*",             False],
+            [3,     "çai",          ":Is:1s/*",             False],
+            [3,     "ças",          ":Is:2s/*",             False],
+            [3,     "ça",           ":Is:3s/*",             False],
+            [3,     "çâmes",        ":Is:1p/*",             False],
+            [3,     "çâtes",        ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "ècerai",       ":If:1s/*",             False],
+            [4,     "èceras",       ":If:2s/*",             False],
+            [4,     "ècera",        ":If:3s/*",             False],
+            [4,     "ècerons",      ":If:1p/*",             False],
+            [4,     "ècerez",       ":If:2p/*",             False],
+            [4,     "èceront",      ":If:3p!/*",            False],
+            [4,     "ècerais",      ":K:1s:2s/*",           False],
+            [4,     "ècerait",      ":K:3s/*",              False],
+            [4,     "ècerions",     ":K:1p/*",              False],
+            [4,     "èceriez",      ":K:2p/*",              False],
+            [4,     "èceraient",    ":K:3p/*",              False],
+            [3,     "çasse",        ":Sq:1s/*",             False],
+            [3,     "çasses",       ":Sq:2s/*",             False],
+            [3,     "çât",          ":Sq:3s/*",             False],
+            [3,     "çassions",     ":Sq:1p/*",             False],
+            [3,     "çassiez",      ":Sq:2p/*",             False],
+            [3,     "çassent",      ":Sq:3p/*",             False],
+            [4,     "èce",          ":E:2s/*",              False],
+            [3,     "çons",         ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "eler": {
+            "1": [
+                [2,     "er",           ":Y/*",             False],
+                [2,     "ant",          ":P/*",             False],
+                [4,     "èle",          ":Ip:Sp:1s:3s/*",   False],
+                [2,     "è",            ":Ip:1ś/R",         False],
+                [4,     "èles",         ":Ip:Sp:2s/*",      False],
+                [2,     "ons",          ":Ip:1p/*",         False],
+                [2,     "ez",           ":Ip:2p/*",         False],
+                [4,     "èlent",        ":Ip:Sp:3p/*",      False],
+                [2,     "ais",          ":Iq:1s:2s/*",      False],
+                [2,     "ait",          ":Iq:3s/*",         False],
+                [2,     "ions",         ":Iq:Sp:1p/*",      False],
+                [2,     "iez",          ":Iq:Sp:2p/*",      False],
+                [2,     "aient",        ":Iq:3p/*",         False],
+                [2,     "ai",           ":Is:1s/*",         False],
+                [2,     "as",           ":Is:2s/*",         False],
+                [2,     "a",            ":Is:3s/*",         False],
+                [2,     "âmes",         ":Is:1p/*",         False],
+                [2,     "âtes",         ":Is:2p/*",         False],
+                [2,     "èrent",        ":Is:3p!/*",        False],
+                [4,     "èlerai",       ":If:1s/*",         False],
+                [4,     "èleras",       ":If:2s/*",         False],
+                [4,     "èlera",        ":If:3s/*",         False],
+                [4,     "èlerons",      ":If:1p/*",         False],
+                [4,     "èlerez",       ":If:2p/*",         False],
+                [4,     "èleront",      ":If:3p!/*",        False],
+                [4,     "èlerais",      ":K:1s:2s/*",       False],
+                [4,     "èlerait",      ":K:3s/*",          False],
+                [4,     "èlerions",     ":K:1p/*",          False],
+                [4,     "èleriez",      ":K:2p/*",          False],
+                [4,     "èleraient",    ":K:3p/*",          False],
+                [2,     "asse",         ":Sq:1s/*",         False],
+                [2,     "asses",        ":Sq:2s/*",         False],
+                [2,     "ât",           ":Sq:3s/*",         False],
+                [2,     "assions",      ":Sq:1p/*",         False],
+                [2,     "assiez",       ":Sq:2p/*",         False],
+                [2,     "assent",       ":Sq:3p/*",         False],
+                [4,     "èle",          ":E:2s/*",          False],
+                [2,     "ons",          ":E:1p/*",          False],
+                [2,     "ez",           ":E:2p/*",          False]
+            ],
+            "2": [
+                # d. verbes en -eler : doublement de la consonne l.
+                [2,     "er",           ":Y/*",             False],
+                [2,     "ant",          ":P/*",             False],
+                [4,     "elle",         ":Ip:Sp:1s:3s/*",   "ppeler$"],
+                [4,     "elle",         ":Ip:Sp:1s:3s/M",   "[^p].eler$"],
+                [4,     "èle",          ":Ip:Sp:1s:3s/R",   "[^p].eler$"],
+                [2,     "è",            ":Ip:1ś/R",         False],
+                [4,     "elles",        ":Ip:Sp:2s/*",      "ppeler$"],
+                [4,     "elles",        ":Ip:Sp:2s/M",      "[^p].eler$"],
+                [4,     "èles",         ":Ip:Sp:2s/R",      "[^p].eler$"],
+                [2,     "ons",          ":Ip:1p/*",         False],
+                [2,     "ez",           ":Ip:2p/*",         False],
+                [4,     "ellent",       ":Ip:Sp:3p/*",      "ppeler$"],
+                [4,     "ellent",       ":Ip:Sp:3p/M",      "[^p].eler$"],
+                [4,     "èlent",        ":Ip:Sp:3p/R",      "[^p].eler$"],
+                [2,     "ais",          ":Iq:1s:2s/*",      False],
+                [2,     "ait",          ":Iq:3s/*",         False],
+                [2,     "ions",         ":Iq:Sp:1p/*",      False],
+                [2,     "iez",          ":Iq:Sp:2p/*",      False],
+                [2,     "aient",        ":Iq:3p/*",         False],
+                [2,     "ai",           ":Is:1s/*",         False],
+                [2,     "as",           ":Is:2s/*",         False],
+                [2,     "a",            ":Is:3s/*",         False],
+                [2,     "âmes",         ":Is:1p/*",         False],
+                [2,     "âtes",         ":Is:2p/*",         False],
+                [2,     "èrent",        ":Is:3p!/*",        False],
+                [4,     "ellerai",      ":If:1s/*",         "ppeler$"],
+                [4,     "ellerai",      ":If:1s/M",         "[^p].eler$"],
+                [4,     "èlerai",       ":If:1s/R",         "[^p].eler$"],
+                [4,     "elleras",      ":If:2s/*",         "ppeler$"],
+                [4,     "elleras",      ":If:2s/M",         "[^p].eler$"],
+                [4,     "èleras",       ":If:2s/R",         "[^p].eler$"],
+                [4,     "ellera",       ":If:3s/*",         "ppeler$"],
+                [4,     "ellera",       ":If:3s/M",         "[^p].eler$"],
+                [4,     "èlera",        ":If:3s/R",         "[^p].eler$"],
+                [4,     "ellerons",     ":If:1p/*",         "ppeler$"],
+                [4,     "ellerons",     ":If:1p/M",         "[^p].eler$"],
+                [4,     "èlerons",      ":If:1p/R",         "[^p].eler$"],
+                [4,     "ellerez",      ":If:2p/*",         "ppeler$"],
+                [4,     "ellerez",      ":If:2p/M",         "[^p].eler$"],
+                [4,     "èlerez",       ":If:2p/R",         "[^p].eler$"],
+                [4,     "elleront",     ":If:3p!/*",        "ppeler$"],
+                [4,     "elleront",     ":If:3p!/M",        "[^p].eler$"],
+                [4,     "èleront",      ":If:3p!/R",        "[^p].eler$"],
+                [4,     "ellerais",     ":K:1s:2s/*",       "ppeler$"],
+                [4,     "ellerais",     ":K:1s:2s/M",       "[^p].eler$"],
+                [4,     "èlerais",      ":K:1s:2s/R",       "[^p].eler$"],
+                [4,     "ellerait",     ":K:3s/*",          "ppeler$"],
+                [4,     "ellerait",     ":K:3s/M",          "[^p].eler$"],
+                [4,     "èlerait",      ":K:3s/R",          "[^p].eler$"],
+                [4,     "ellerions",    ":K:1p/*",          "ppeler$"],
+                [4,     "ellerions",    ":K:1p/M",          "[^p].eler$"],
+                [4,     "èlerions",     ":K:1p/R",          "[^p].eler$"],
+                [4,     "elleriez",     ":K:2p/*",          "ppeler$"],
+                [4,     "elleriez",     ":K:2p/M",          "[^p].eler$"],
+                [4,     "èleriez",      ":K:2p/R",          "[^p].eler$"],
+                [4,     "elleraient",   ":K:3p/*",          "ppeler$"],
+                [4,     "elleraient",   ":K:3p/M",          "[^p].eler$"],
+                [4,     "èleraient",    ":K:3p/R",          "[^p].eler$"],
+                [2,     "asse",         ":Sq:1s/*",         False],
+                [2,     "asses",        ":Sq:2s/*",         False],
+                [2,     "ât",           ":Sq:3s/*",         False],
+                [2,     "assions",      ":Sq:1p/*",         False],
+                [2,     "assiez",       ":Sq:2p/*",         False],
+                [2,     "assent",       ":Sq:3p/*",         False],
+                [4,     "elle",         ":E:2s/*",          "ppeler$"],
+                [4,     "elle",         ":E:2s/M",          "[^p].eler$"],
+                [4,     "èle",          ":E:2s/R",          "[^p].eler$"],
+                [2,     "ons",          ":E:1p/*",          False],
+                [2,     "ez",           ":E:2p/*",          False]
+            ],
+        },
+
+        "emer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ème",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èmes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èment",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "èmerai",       ":If:1s/*",             False],
+            [4,     "èmeras",       ":If:2s/*",             False],
+            [4,     "èmera",        ":If:3s/*",             False],
+            [4,     "èmerons",      ":If:1p/*",             False],
+            [4,     "èmerez",       ":If:2p/*",             False],
+            [4,     "èmeront",      ":If:3p!/*",            False],
+            [4,     "èmerais",      ":K:1s:2s/*",           False],
+            [4,     "èmerait",      ":K:3s/*",              False],
+            [4,     "èmerions",     ":K:1p/*",              False],
+            [4,     "èmeriez",      ":K:2p/*",              False],
+            [4,     "èmeraient",    ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ème",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "ener": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ène",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "ènes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "ènent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "ènerai",       ":If:1s/*",             False],
+            [4,     "èneras",       ":If:2s/*",             False],
+            [4,     "ènera",        ":If:3s/*",             False],
+            [4,     "ènerons",      ":If:1p/*",             False],
+            [4,     "ènerez",       ":If:2p/*",             False],
+            [4,     "èneront",      ":If:3p!/*",            False],
+            [4,     "ènerais",      ":K:1s:2s/*",           False],
+            [4,     "ènerait",      ":K:3s/*",              False],
+            [4,     "ènerions",     ":K:1p/*",              False],
+            [4,     "èneriez",      ":K:2p/*",              False],
+            [4,     "èneraient",    ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ène",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "eper": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "èpe",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èpes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èpent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "èperai",       ":If:1s/*",             False],
+            [4,     "èperas",       ":If:2s/*",             False],
+            [4,     "èpera",        ":If:3s/*",             False],
+            [4,     "èperons",      ":If:1p/*",             False],
+            [4,     "èperez",       ":If:2p/*",             False],
+            [4,     "èperont",      ":If:3p!/*",            False],
+            [4,     "èperais",      ":K:1s:2s/*",           False],
+            [4,     "èperait",      ":K:3s/*",              False],
+            [4,     "èperions",     ":K:1p/*",              False],
+            [4,     "èperiez",      ":K:2p/*",              False],
+            [4,     "èperaient",    ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "èpe",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "erer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ère",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "ères",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èrent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "èrerai",       ":If:1s/*",             False],
+            [4,     "èreras",       ":If:2s/*",             False],
+            [4,     "èrera",        ":If:3s/*",             False],
+            [4,     "èrerons",      ":If:1p/*",             False],
+            [4,     "èrerez",       ":If:2p/*",             False],
+            [4,     "èreront",      ":If:3p!/*",            False],
+            [4,     "èrerais",      ":K:1s:2s/*",           False],
+            [4,     "èrerait",      ":K:3s/*",              False],
+            [4,     "èrerions",     ":K:1p/*",              False],
+            [4,     "èreriez",      ":K:2p/*",              False],
+            [4,     "èreraient",    ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ère",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "eser": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "èse",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èses",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èsent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "èserai",       ":If:1s/*",             False],
+            [4,     "èseras",       ":If:2s/*",             False],
+            [4,     "èsera",        ":If:3s/*",             False],
+            [4,     "èserons",      ":If:1p/*",             False],
+            [4,     "èserez",       ":If:2p/*",             False],
+            [4,     "èseront",      ":If:3p!/*",            False],
+            [4,     "èserais",      ":K:1s:2s/*",           False],
+            [4,     "èserait",      ":K:3s/*",              False],
+            [4,     "èserions",     ":K:1p/*",              False],
+            [4,     "èseriez",      ":K:2p/*",              False],
+            [4,     "èseraient",    ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "èse",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "eter": {
+            "1": [
+                [2,     "er",           ":Y/*",                 False],
+                [2,     "ant",          ":P/*",                 False],
+                [4,     "ète",          ":Ip:Sp:1s:3s/*",       False],
+                [2,     "è",            ":Ip:1ś/R",             False],
+                [4,     "ètes",         ":Ip:Sp:2s/*",          False],
+                [2,     "ons",          ":Ip:1p/*",             False],
+                [2,     "ez",           ":Ip:2p/*",             False],
+                [4,     "ètent",        ":Ip:Sp:3p/*",          False],
+                [2,     "ais",          ":Iq:1s:2s/*",          False],
+                [2,     "ait",          ":Iq:3s/*",             False],
+                [2,     "ions",         ":Iq:Sp:1p/*",          False],
+                [2,     "iez",          ":Iq:Sp:2p/*",          False],
+                [2,     "aient",        ":Iq:3p/*",             False],
+                [2,     "ai",           ":Is:1s/*",             False],
+                [2,     "as",           ":Is:2s/*",             False],
+                [2,     "a",            ":Is:3s/*",             False],
+                [2,     "âmes",         ":Is:1p/*",             False],
+                [2,     "âtes",         ":Is:2p/*",             False],
+                [2,     "èrent",        ":Is:3p!/*",            False],
+                [4,     "èterai",       ":If:1s/*",             False],
+                [4,     "èteras",       ":If:2s/*",             False],
+                [4,     "ètera",        ":If:3s/*",             False],
+                [4,     "èterons",      ":If:1p/*",             False],
+                [4,     "èterez",       ":If:2p/*",             False],
+                [4,     "èteront",      ":If:3p!/*",            False],
+                [4,     "èterais",      ":K:1s:2s/*",           False],
+                [4,     "èterait",      ":K:3s/*",              False],
+                [4,     "èterions",     ":K:1p/*",              False],
+                [4,     "èteriez",      ":K:2p/*",              False],
+                [4,     "èteraient",    ":K:3p/*",              False],
+                [2,     "asse",         ":Sq:1s/*",             False],
+                [2,     "asses",        ":Sq:2s/*",             False],
+                [2,     "ât",           ":Sq:3s/*",             False],
+                [2,     "assions",      ":Sq:1p/*",             False],
+                [2,     "assiez",       ":Sq:2p/*",             False],
+                [2,     "assent",       ":Sq:3p/*",             False],
+                [4,     "ète",          ":E:2s/*",              False],
+                [2,     "ons",          ":E:1p/*",              False],
+                [2,     "ez",           ":E:2p/*",              False]
+            ],
+            "2": [
+                # d. verbes en -eter : doublement de la consonne t
+                [2,     "er",           ":Y/*",                 False],
+                [2,     "ant",          ":P/*",                 False],
+                [4,     "ette",         ":Ip:Sp:1s:3s/*",       "jeter$"],
+                [4,     "ette",         ":Ip:Sp:1s:3s/M",       "[^j]eter$"],
+                [4,     "ète",          ":Ip:Sp:1s:3s/R",       "[^j]eter$"],
+                [2,     "è",            ":Ip:1ś/R",             False],
+                [4,     "ettes",        ":Ip:Sp:2s/*",          "jeter$"],
+                [4,     "ettes",        ":Ip:Sp:2s/M",          "[^j]eter$"],
+                [4,     "ètes",         ":Ip:Sp:2s/R",          "[^j]eter$"],
+                [2,     "ons",          ":Ip:1p/*",             False],
+                [2,     "ez",           ":Ip:2p/*",             False],
+                [4,     "ettent",       ":Ip:Sp:3p/*",          "jeter$"],
+                [4,     "ettent",       ":Ip:Sp:3p/M",          "[^j]eter$"],
+                [4,     "ètent",        ":Ip:Sp:3p/R",          "[^j]eter$"],
+                [2,     "ais",          ":Iq:1s:2s/*",          False],
+                [2,     "ait",          ":Iq:3s/*",             False],
+                [2,     "ions",         ":Iq:Sp:1p/*",          False],
+                [2,     "iez",          ":Iq:Sp:2p/*",          False],
+                [2,     "aient",        ":Iq:3p/*",             False],
+                [2,     "ai",           ":Is:1s/*",             False],
+                [2,     "as",           ":Is:2s/*",             False],
+                [2,     "a",            ":Is:3s/*",             False],
+                [2,     "âmes",         ":Is:1p/*",             False],
+                [2,     "âtes",         ":Is:2p/*",             False],
+                [2,     "èrent",        ":Is:3p!/*",            False],
+                [4,     "etterai",      ":If:1s/*",             "jeter$"],
+                [4,     "etterai",      ":If:1s/M",             "[^j]eter$"],
+                [4,     "èterai",       ":If:1s/R",             "[^j]eter$"],
+                [4,     "etteras",      ":If:2s/*",             "jeter$"],
+                [4,     "etteras",      ":If:2s/M",             "[^j]eter$"],
+                [4,     "èteras",       ":If:2s/R",             "[^j]eter$"],
+                [4,     "ettera",       ":If:3s/*",             "jeter$"],
+                [4,     "ettera",       ":If:3s/M",             "[^j]eter$"],
+                [4,     "ètera",        ":If:3s/R",             "[^j]eter$"],
+                [4,     "etterons",     ":If:1p/*",             "jeter$"],
+                [4,     "etterons",     ":If:1p/M",             "[^j]eter$"],
+                [4,     "èterons",      ":If:1p/R",             "[^j]eter$"],
+                [4,     "etterez",      ":If:2p/*",             "jeter$"],
+                [4,     "etterez",      ":If:2p/M",             "[^j]eter$"],
+                [4,     "èterez",       ":If:2p/R",             "[^j]eter$"],
+                [4,     "etteront",     ":If:3p!/*",            "jeter$"],
+                [4,     "etteront",     ":If:3p!/M",            "[^j]eter$"],
+                [4,     "èteront",      ":If:3p!/R",            "[^j]eter$"],
+                [4,     "etterais",     ":K:1s:2s/*",           "jeter$"],
+                [4,     "etterais",     ":K:1s:2s/M",           "[^j]eter$"],
+                [4,     "èterais",      ":K:1s:2s/R",           "[^j]eter$"],
+                [4,     "etterait",     ":K:3s/*",              "jeter$"],
+                [4,     "etterait",     ":K:3s/M",              "[^j]eter$"],
+                [4,     "èterait",      ":K:3s/R",              "[^j]eter$"],
+                [4,     "etterions",    ":K:1p/*",              "jeter$"],
+                [4,     "etterions",    ":K:1p/M",              "[^j]eter$"],
+                [4,     "èterions",     ":K:1p/R",              "[^j]eter$"],
+                [4,     "etteriez",     ":K:2p/*",              "jeter$"],
+                [4,     "etteriez",     ":K:2p/M",              "[^j]eter$"],
+                [4,     "èteriez",      ":K:2p/R",              "[^j]eter$"],
+                [4,     "etteraient",   ":K:3p/*",              "jeter$"],
+                [4,     "etteraient",   ":K:3p/M",              "[^j]eter$"],
+                [4,     "èteraient",    ":K:3p/R",              "[^j]eter$"],
+                [2,     "asse",         ":Sq:1s/*",             False],
+                [2,     "asses",        ":Sq:2s/*",             False],
+                [2,     "ât",           ":Sq:3s/*",             False],
+                [2,     "assions",      ":Sq:1p/*",             False],
+                [2,     "assiez",       ":Sq:2p/*",             False],
+                [2,     "assent",       ":Sq:3p/*",             False],
+                [4,     "ette",         ":E:2s/*",              "jeter$"],
+                [4,     "ette",         ":E:2s/M",              "[^j]eter$"],
+                [4,     "ète",          ":E:2s/R",              "[^j]eter$"],
+                [2,     "ons",          ":E:1p/*",              False],
+                [2,     "ez",           ":E:2p/*",              False]
+            ]
+        },
+
+        "ever": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ève",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èves",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èvent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [4,     "èverai",       ":If:1s/*",             False],
+            [4,     "èveras",       ":If:2s/*",             False],
+            [4,     "èvera",        ":If:3s/*",             False],
+            [4,     "èverons",      ":If:1p/*",             False],
+            [4,     "èverez",       ":If:2p/*",             False],
+            [4,     "èveront",      ":If:3p!/*",            False],
+            [4,     "èverais",      ":K:1s:2s/*",           False],
+            [4,     "èverait",      ":K:3s/*",              False],
+            [4,     "èverions",     ":K:1p/*",              False],
+            [4,     "èveriez",      ":K:2p/*",              False],
+            [4,     "èveraient",    ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ève",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "evrer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "èvre",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "èvres",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èvrent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [5,     "èvrerai",      ":If:1s/*",             False],
+            [5,     "èvreras",      ":If:2s/*",             False],
+            [5,     "èvrera",       ":If:3s/*",             False],
+            [5,     "èvrerons",     ":If:1p/*",             False],
+            [5,     "èvrerez",      ":If:2p/*",             False],
+            [5,     "èvreront",     ":If:3p!/*",            False],
+            [5,     "èvrerais",     ":K:1s:2s/*",           False],
+            [5,     "èvrerait",     ":K:3s/*",              False],
+            [5,     "èvrerions",    ":K:1p/*",              False],
+            [5,     "èvreriez",     ":K:2p/*",              False],
+            [5,     "èvreraient",   ":K:3p/*",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "èvre",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        # c
+        # verbes en -ébrer, -écer, -écher, -écrer, -éder, -éger, -égler, -égner, -égrer, -éguer,
+        #           -éler, -émer, -éner, -éper, -équer, -érer, -éser, -éter, -étrer, -évrer, -éyer
+        # changement du é en è
+
+        "écer": [
+            [2,     "er",           ":Y/*",                 False],
+            [4,     "éçant",        ":P/*",                 False],
+            [4,     "èce",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èces",         ":Ip:Sp:2s/*",          False],
+            [4,     "éçons",        ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "ècent",        ":Ip:Sp:3p/*",          False],
+            [4,     "éçais",        ":Iq:1s:2s/*",          False],
+            [4,     "éçait",        ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [4,     "éçaient",      ":Iq:3p/*",             False],
+            [4,     "éçai",         ":Is:1s/*",             False],
+            [4,     "éças",         ":Is:2s/*",             False],
+            [4,     "éça",          ":Is:3s/*",             False],
+            [4,     "éçâmes",       ":Is:1p/*",             False],
+            [4,     "éçâtes",       ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "ècerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èceras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "ècera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "ècerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "ècerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èceront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "ècerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "ècerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "ècerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èceriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èceraient",    ":K:3p/R",              False],
+            [4,     "éçasse",       ":Sq:1s/*",             False],
+            [4,     "éçasses",      ":Sq:2s/*",             False],
+            [4,     "éçât",         ":Sq:3s/*",             False],
+            [4,     "éçassions",    ":Sq:1p/*",             False],
+            [4,     "éçassiez",     ":Sq:2p/*",             False],
+            [4,     "éçassent",     ":Sq:3p/*",             False],
+            [4,     "èce",          ":E:2s/*",              False],
+            [4,     "éçons",        ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éger": [
+            [2,     "er",           ":Y/*",                 False],
+            [4,     "égeant",       ":P/*",                 False],
+            [4,     "ège",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èges",         ":Ip:Sp:2s/*",          False],
+            [4,     "égeons",       ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "ègent",        ":Ip:Sp:3p/*",          False],
+            [4,     "égeais",       ":Iq:1s:2s/*",          False],
+            [4,     "égeait",       ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [4,     "égeaient",     ":Iq:3p/*",             False],
+            [4,     "égeai",        ":Is:1s/*",             False],
+            [4,     "égeas",        ":Is:2s/*",             False],
+            [4,     "égea",         ":Is:3s/*",             False],
+            [4,     "égeâmes",      ":Is:1p/*",             False],
+            [4,     "égeâtes",      ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "ègerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "ègeras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "ègera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "ègerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "ègerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "ègeront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "ègerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "ègerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "ègerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "ègeriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "ègeraient",    ":K:3p/R",              False],
+            [4,     "égeasse",      ":Sq:1s/*",             False],
+            [4,     "égeasses",     ":Sq:2s/*",             False],
+            [4,     "égeât",        ":Sq:3s/*",             False],
+            [4,     "égeassions",   ":Sq:1p/*",             False],
+            [4,     "égeassiez",    ":Sq:2p/*",             False],
+            [4,     "égeassent",    ":Sq:3p/*",             False],
+            [4,     "ège",          ":E:2s/*",              False],
+            [4,     "égeons",       ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "ébrer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "èbre",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "èbres",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èbrent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "èbrerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "èbreras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "èbrera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "èbrerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "èbrerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "èbreront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "èbrerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "èbrerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "èbrerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "èbreriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "èbreraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "èbre",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "écher": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "èche",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "èches",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èchent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "ècherai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ècheras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "èchera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "ècherons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "ècherez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ècheront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "ècherais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "ècherait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "ècherions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ècheriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ècheraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "èche",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "écrer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "ècre",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "ècres",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "ècrent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "ècrerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ècreras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "ècrera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "ècrerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "ècrerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ècreront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "ècrerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "ècrerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "ècrerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ècreriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ècreraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "ècre",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éder": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ède",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èdes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èdent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èderai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èderas",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èdera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èderons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èderez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èderont",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èderais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èderait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èderions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èderiez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èderaient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ède",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "égler": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "ègle",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "ègles",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èglent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "èglerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ègleras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "èglera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "èglerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "èglerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ègleront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "èglerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "èglerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "èglerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ègleriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ègleraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "ègle",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "égner": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "ègne",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "ègnes",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "ègnent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "ègnerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ègneras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "ègnera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "ègnerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "ègnerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ègneront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "ègnerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "ègnerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "ègnerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ègneriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ègneraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "ègne",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "égrer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "ègre",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "ègres",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "ègrent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "ègrerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ègreras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "ègrera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "ègrerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "ègrerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ègreront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "ègrerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "ègrerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "ègrerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ègreriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ègreraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "ègre",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éguer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "ègue",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "ègues",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èguent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "èguerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ègueras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "èguera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "èguerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "èguerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ègueront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "èguerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "èguerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "èguerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ègueriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ègueraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "ègue",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éler": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "èle",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èles",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èlent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èlerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èleras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èlera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èlerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èlerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èleront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èlerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èlerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èlerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èleriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èleraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "èle",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "émer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ème",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èmes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èment",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èmerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èmeras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èmera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èmerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èmerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èmeront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èmerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èmerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èmerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èmeriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èmeraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ème",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éner": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ène",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "ènes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "ènent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "ènerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èneras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "ènera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "ènerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "ènerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èneront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "ènerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "ènerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "ènerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èneriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èneraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ène",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éper": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "èpe",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èpes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èpent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èperai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èperas",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èpera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èperons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èperez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èperont",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èperais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èperait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èperions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èperiez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èperaient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "èpe",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "équer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "èque",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "èques",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èquent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "èquerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "èqueras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "èquera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "èquerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "èquerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "èqueront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "èquerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "èquerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "èquerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "èqueriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "èqueraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "èque",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "érer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ère",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "ères",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èrent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èrerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èreras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èrera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èrerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èrerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èreront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èrerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èrerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èrerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èreriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èreraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ère",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éser": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "èse",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èses",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èsent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èserai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èseras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èsera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èserons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èserez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èseront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èserais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èserait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èserions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èseriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èseraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "èse",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éter": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "ète",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "ètes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "ètent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èterai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èteras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "ètera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èterons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èterez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èteront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èterais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èterait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èterions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èteriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èteraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "ète",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "étrer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "ètre",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "ètres",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "ètrent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "ètrerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "ètreras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "ètrera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "ètrerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "ètrerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "ètreront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "ètrerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "ètrerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "ètrerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "ètreriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "ètreraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "ètre",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "évrer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [5,     "èvre",         ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [5,     "èvres",        ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [5,     "èvrent",       ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [5,     "èvrerai",      ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [5,     "èvreras",      ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [5,     "èvrera",       ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [5,     "èvrerons",     ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [5,     "èvrerez",      ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [5,     "èvreront",     ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [5,     "èvrerais",     ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [5,     "èvrerait",     ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [5,     "èvrerions",    ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [5,     "èvreriez",     ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [5,     "èvreraient",   ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [5,     "èvre",         ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ],
+
+        "éyer": [
+            [2,     "er",           ":Y/*",                 False],
+            [2,     "ant",          ":P/*",                 False],
+            [4,     "èye",          ":Ip:Sp:1s:3s/*",       False],
+            [2,     "è",            ":Ip:1ś/R",             False],
+            [4,     "èyes",         ":Ip:Sp:2s/*",          False],
+            [2,     "ons",          ":Ip:1p/*",             False],
+            [2,     "ez",           ":Ip:2p/*",             False],
+            [4,     "èyent",        ":Ip:Sp:3p/*",          False],
+            [2,     "ais",          ":Iq:1s:2s/*",          False],
+            [2,     "ait",          ":Iq:3s/*",             False],
+            [2,     "ions",         ":Iq:Sp:1p/*",          False],
+            [2,     "iez",          ":Iq:Sp:2p/*",          False],
+            [2,     "aient",        ":Iq:3p/*",             False],
+            [2,     "ai",           ":Is:1s/*",             False],
+            [2,     "as",           ":Is:2s/*",             False],
+            [2,     "a",            ":Is:3s/*",             False],
+            [2,     "âmes",         ":Is:1p/*",             False],
+            [2,     "âtes",         ":Is:2p/*",             False],
+            [2,     "èrent",        ":Is:3p!/*",            False],
+            [2,     "erai",         ":If:1s/M",             False],
+            [4,     "èyerai",       ":If:1s/R",             False],
+            [2,     "eras",         ":If:2s/M",             False],
+            [4,     "èyeras",       ":If:2s/R",             False],
+            [2,     "era",          ":If:3s/M",             False],
+            [4,     "èyera",        ":If:3s/R",             False],
+            [2,     "erons",        ":If:1p/M",             False],
+            [4,     "èyerons",      ":If:1p/R",             False],
+            [2,     "erez",         ":If:2p/M",             False],
+            [4,     "èyerez",       ":If:2p/R",             False],
+            [2,     "eront",        ":If:3p!/M",            False],
+            [4,     "èyeront",      ":If:3p!/R",            False],
+            [2,     "erais",        ":K:1s:2s/M",           False],
+            [4,     "èyerais",      ":K:1s:2s/R",           False],
+            [2,     "erait",        ":K:3s/M",              False],
+            [4,     "èyerait",      ":K:3s/R",              False],
+            [2,     "erions",       ":K:1p/M",              False],
+            [4,     "èyerions",     ":K:1p/R",              False],
+            [2,     "eriez",        ":K:2p/M",              False],
+            [4,     "èyeriez",      ":K:2p/R",              False],
+            [2,     "eraient",      ":K:3p/M",              False],
+            [4,     "èyeraient",    ":K:3p/R",              False],
+            [2,     "asse",         ":Sq:1s/*",             False],
+            [2,     "asses",        ":Sq:2s/*",             False],
+            [2,     "ât",           ":Sq:3s/*",             False],
+            [2,     "assions",      ":Sq:1p/*",             False],
+            [2,     "assiez",       ":Sq:2p/*",             False],
+            [2,     "assent",       ":Sq:3p/*",             False],
+            [4,     "èye",          ":E:2s/*",              False],
+            [2,     "ons",          ":E:1p/*",              False],
+            [2,     "ez",           ":E:2p/*",              False]
+        ]
+    }
+}

Index: gc_lang/fr/modules/lexicographe.py
==================================================================
--- gc_lang/fr/modules/lexicographe.py
+++ gc_lang/fr/modules/lexicographe.py
@@ -5,103 +5,102 @@
 import re
 import traceback
 
 
 _dTAGS = {  
-    ':G': "",
-    ':N': " nom,",
-    ':A': " adjectif,",
-    ':M1': " prénom,",
-    ':M2': " patronyme,",
-    ':MP': " nom propre,",
-    ':W': " adverbe,",
-    ':X': " adverbe de négation,",
-    ':U': " adverbe interrogatif,",
-    ':J': " interjection,",
-    ':B': " nombre,",
-    ':T': " titre,",
-
-    ':R': " préposition,",
-    ':Rv': " préposition verbale,",
-    ':D': " déterminant,",
-    ':Dd': " déterminant démonstratif,",
-    ':De': " déterminant exclamatif,",
-    ':Dp': " déterminant possessif,",
-    ':Di': " déterminant indéfini,",
-    ':Dn': " déterminant négatif,",
-    ':Od': " pronom démonstratif,",
-    ':Oi': " pronom indéfini,",
-    ':On': " pronom indéfini négatif,",
-    ':Ot': " pronom interrogatif,",
-    ':Or': " pronom relatif,",
-    ':Ow': " pronom adverbial,",
-    ':Os': " pronom personnel sujet,",
-    ':Oo': " pronom personnel objet,",
-    ':C': " conjonction,",
-    ':Ĉ': " conjonction (él.),",
-    ':Cc': " conjonction de coordination,",
-    ':Cs': " conjonction de subordination,",
-    ':Ĉs': " conjonction de subordination (él.),",
-    
-    ':Ŵ': " locution adverbiale (él.),",
-    ':Ñ': " locution nominale (él.),",
-    ':Â': " locution adjectivale (él.),",
-    ':Ṽ': " locution verbale (él.),",
-    ':Ŕ': " locution prépositive (él.),",
-    ':Ĵ': " locution interjective (él.),",
-
-    ':Zp': " préfixe,",
-    ':Zs': " suffixe,",
-
-    ':V1': " verbe (1ᵉʳ gr.),",
-    ':V2': " verbe (2ᵉ gr.),",
-    ':V3': " verbe (3ᵉ gr.),",
-    ':V0e': " verbe,",
-    ':V0a': " verbe,",
-
-    ':O1': " 1ʳᵉ pers.,",
-    ':O2': " 2ᵉ pers.,",
-    ':O3': " 3ᵉ pers.,",
-    
-    ':e': " épicène",
-    ':m': " masculin",
-    ':f': " féminin",
-    ':s': " singulier",
-    ':p': " pluriel",
-    ':i': " invariable",
-
-    ':Y': " infinitif,",
-    ':P': " participe présent,",
-    ':Q': " participe passé,",
-
-    ':Ip': " présent,",
-    ':Iq': " imparfait,",
-    ':Is': " passé simple,",
-    ':If': " futur,",
-    ':K': " conditionnel présent,",
-    ':Sp': " subjonctif présent,",
-    ':Sq': " subjonctif imparfait,",
-    ':E': " impératif,",
-
-    ':1s': " 1ʳᵉ p. sg.,",
-    ':1ŝ': " présent interr. 1ʳᵉ p. sg.,",
-    ':1ś': " présent interr. 1ʳᵉ p. sg.,",
-    ':2s': " 2ᵉ p. sg.,",
-    ':3s': " 3ᵉ p. sg.,",
-    ':1p': " 1ʳᵉ p. pl.,",
-    ':2p': " 2ᵉ p. pl.,",
-    ':3p': " 3ᵉ p. pl.,",
-    ':3p!': " 3ᵉ p. pl.,",
-
-    ';S': " : symbole (unité de mesure)",
-
-    '/*': "",
-    '/C': " {classique}",
-    '/M': "",
-    '/R': " {réforme}",
-    '/A': "",
-    '/X': ""
+    ':N': (" nom,", "Nom"),
+    ':A': (" adjectif,", "Adjectif"),
+    ':M1': (" prénom,", "Prénom"),
+    ':M2': (" patronyme,", "Patronyme, matronyme, nom de famille…"),
+    ':MP': (" nom propre,", "Nom propre"),
+    ':W': (" adverbe,", "Adverbe"),
+    ':J': (" interjection,", "Interjection"),
+    ':B': (" nombre,", "Nombre"),
+    ':T': (" titre,", "Titre de civilité"),
+
+    ':e': (" épicène", "épicène"),
+    ':m': (" masculin", "masculin"),
+    ':f': (" féminin", "féminin"),
+    ':s': (" singulier", "singulier"),
+    ':p': (" pluriel", "pluriel"),
+    ':i': (" invariable", "invariable"),
+
+    ':V1': (" verbe (1ᵉʳ gr.),", "Verbe du 1ᵉʳ groupe"),
+    ':V2': (" verbe (2ᵉ gr.),", "Verbe du 2ᵉ groupe"),
+    ':V3': (" verbe (3ᵉ gr.),", "Verbe du 3ᵉ groupe"),
+    ':V0e': (" verbe,", "Verbe auxiliaire être"),
+    ':V0a': (" verbe,", "Verbe auxiliaire avoir"),
+
+    ':Y': (" infinitif,", "Infinitif"),
+    ':P': (" participe présent,", "Participe présent"),
+    ':Q': (" participe passé,", "Participe passé"),
+
+    ':Ip': (" présent,", "Indicatif présent"),
+    ':Iq': (" imparfait,", "Indicatif imparfait"),
+    ':Is': (" passé simple,", "Indicatif passé simple"),
+    ':If': (" futur,", "Indicatif futur"),
+    ':K': (" conditionnel présent,", "Conditionnel présent"),
+    ':Sp': (" subjonctif présent,", "Subjonctif présent"),
+    ':Sq': (" subjonctif imparfait,", "Subjonctif imparfait"),
+    ':E': (" impératif,", "Impératif"),
+
+    ':1s': (" 1ʳᵉ p. sg.,", "Verbe à la 1ʳᵉ personne du singulier"),
+    ':1ŝ': (" présent interr. 1ʳᵉ p. sg.,", "Verbe à la 1ʳᵉ personne du singulier (présent interrogatif)"),
+    ':1ś': (" présent interr. 1ʳᵉ p. sg.,", "Verbe à la 1ʳᵉ personne du singulier (présent interrogatif)"),
+    ':2s': (" 2ᵉ p. sg.,", "Verbe à la 2ᵉ personne du singulier"),
+    ':3s': (" 3ᵉ p. sg.,", "Verbe à la 3ᵉ personne du singulier"),
+    ':1p': (" 1ʳᵉ p. pl.,", "Verbe à la 1ʳᵉ personne du pluriel"),
+    ':2p': (" 2ᵉ p. pl.,", "Verbe à la 2ᵉ personne du pluriel"),
+    ':3p': (" 3ᵉ p. pl.,", "Verbe à la 3ᵉ personne du pluriel"),
+    ':3p!': (" 3ᵉ p. pl.,", "Verbe à la 3ᵉ personne du pluriel (prononciation distinctive)"),
+
+    ':G': ("", "Mot grammatical"),
+    ':X': (" adverbe de négation,", "Adverbe de négation"),
+    ':U': (" adverbe interrogatif,", "Adverbe interrogatif"),
+    ':R': (" préposition,", "Préposition"),
+    ':Rv': (" préposition verbale,", "Préposition verbale"),
+    ':D': (" déterminant,", "Déterminant"),
+    ':Dd': (" déterminant démonstratif,", "Déterminant démonstratif"),
+    ':De': (" déterminant exclamatif,", "Déterminant exclamatif"),
+    ':Dp': (" déterminant possessif,", "Déterminant possessif"),
+    ':Di': (" déterminant indéfini,", "Déterminant indéfini"),
+    ':Dn': (" déterminant négatif,", "Déterminant négatif"),
+    ':Od': (" pronom démonstratif,", "Pronom démonstratif"),
+    ':Oi': (" pronom indéfini,", "Pronom indéfini"),
+    ':On': (" pronom indéfini négatif,", "Pronom indéfini négatif"),
+    ':Ot': (" pronom interrogatif,", "Pronom interrogatif"),
+    ':Or': (" pronom relatif,", "Pronom relatif"),
+    ':Ow': (" pronom adverbial,", "Pronom adverbial"),
+    ':Os': (" pronom personnel sujet,", "Pronom personnel sujet"),
+    ':Oo': (" pronom personnel objet,", "Pronom personnel objet"),
+    ':O1': (" 1ʳᵉ pers.,", "Pronom : 1ʳᵉ personne"),
+    ':O2': (" 2ᵉ pers.,", "Pronom : 2ᵉ personne"),
+    ':O3': (" 3ᵉ pers.,", "Pronom : 3ᵉ personne"),
+    ':C': (" conjonction,", "Conjonction"),
+    ':Ĉ': (" conjonction (él.),", "Conjonction (élément)"),
+    ':Cc': (" conjonction de coordination,", "Conjonction de coordination"),
+    ':Cs': (" conjonction de subordination,", "Conjonction de subordination"),
+    ':Ĉs': (" conjonction de subordination (él.),", "Conjonction de subordination (élément)"),
+    
+    ':Ñ': (" locution nominale (él.),", "Locution nominale (élément)"),
+    ':Â': (" locution adjectivale (él.),", "Locution adjectivale (élément)"),
+    ':Ṽ': (" locution verbale (él.),", "Locution verbale (élément)"),
+    ':Ŵ': (" locution adverbiale (él.),", "Locution adverbiale (élément)"),
+    ':Ŕ': (" locution prépositive (él.),", "Locution prépositive (élément)"),
+    ':Ĵ': (" locution interjective (él.),", "Locution interjective (élément)"),
+
+    ':Zp': (" préfixe,", "Préfixe"),
+    ':Zs': (" suffixe,", "Suffixe"),
+
+    ';S': (" : symbole (unité de mesure)", "Symbole (unité de mesure)"),
+
+    '/*': ("", "sous-dictionnaire <Commun>"),
+    '/C': (" <classique>", "sous-dictionnaire <Classique>"),
+    '/M': ("", "sous-dictionnaire <Moderne>"),
+    '/R': (" <réforme>", "sous-dictionnaire <Réforme 1990>"),
+    '/A': ("", "sous-dictionnaire <Annexe>"),
+    '/X': ("", "sous-dictionnaire <Contributeurs>")
 }
 
 _dPFX = {
     'd': "(de), déterminant épicène invariable",
     'l': "(le/la), déterminant masculin/féminin singulier",
@@ -204,11 +203,11 @@
     def formatTags (self, sTags):
         sRes = ""
         sTags = re.sub("(?<=V[1-3])[itpqnmr_eaxz]+", "", sTags)
         sTags = re.sub("(?<=V0[ea])[itpqnmr_eaxz]+", "", sTags)
         for m in self._zTag.finditer(sTags):
-            sRes += _dTAGS.get(m.group(0), " [{}]".format(m.group(0)))
+            sRes += _dTAGS.get(m.group(0), " [{}]".format(m.group(0)))[0]
         if sRes.startswith(" verbe") and not sRes.endswith("infinitif"):
             sRes += " [{}]".format(sTags[1:sTags.find(" ")])
         return sRes.rstrip(",")
 
     def _formatSuffix (self, s):

Index: gc_lang/fr/oxt/AppLauncher.py
==================================================================
--- gc_lang/fr/oxt/AppLauncher.py
+++ gc_lang/fr/oxt/AppLauncher.py
@@ -40,10 +40,18 @@
                     xDialog.run()
             elif sCmd == "TF":
                 import TextFormatter
                 xDialog = TextFormatter.TextFormatter(self.ctx)
                 xDialog.run(self.sLang)
+            elif sCmd == "DI":
+                import DictOptions
+                xDialog = DictOptions.DictOptions(self.ctx)
+                xDialog.run(self.sLang)
+            elif sCmd == "LE":
+                import LexiconEditor
+                xDialog = LexiconEditor.LexiconEditor(self.ctx)
+                xDialog.run(self.sLang)
             elif sCmd == "DS":
                 import DictionarySwitcher
                 xDialog = DictionarySwitcher.FrenchDictionarySwitcher(self.ctx)
                 xDialog.run(self.sLang)
             elif sCmd == "MA":

ADDED   gc_lang/fr/oxt/DictOptions/DictOptions.py
Index: gc_lang/fr/oxt/DictOptions/DictOptions.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/DictOptions.py
@@ -0,0 +1,141 @@
+# Dictionary Options
+# by Olivier R.
+# License: MPL 2
+
+import unohelper
+import uno
+import traceback
+import time
+
+import helpers
+import do_strings
+
+from com.sun.star.task import XJobExecutor
+from com.sun.star.awt import XActionListener
+from com.sun.star.beans import PropertyValue
+
+
+class DictOptions (unohelper.Base, XActionListener, XJobExecutor):
+
+    def __init__ (self, ctx):
+        self.ctx = ctx
+        self.xSvMgr = self.ctx.ServiceManager
+        self.xContainer = None
+        self.xDialog = None
+        
+    def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
+        xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
+        xWidget.Name = name
+        xWidget.PositionX = x
+        xWidget.PositionY = y
+        xWidget.Width = w
+        xWidget.Height = h
+        for k, w in kwargs.items():
+            setattr(xWidget, k, w)
+        self.xDialog.insertByName(name, xWidget)
+        return xWidget
+
+    def run (self, sLang):
+        dUI = do_strings.getUI(sLang)
+
+        self.xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", True)
+
+        # dialog
+        self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
+        self.xDialog.Width = 200
+        self.xDialog.Height = 210
+        self.xDialog.Title = dUI.get('title', "#title#")
+        xWindowSize = helpers.getWindowSize()
+        self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
+        self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
+
+        # fonts
+        xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDTitle.Height = 9
+        xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDTitle.Name = "Verdana"
+        
+        xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDSubTitle.Height = 8
+        xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDSubTitle.Name = "Verdana"
+
+        # widget
+        nX = 10
+        nY1 = 10
+        nY2 = nY1 + 50
+        nY3 = nY2 + 70
+
+        nWidth = self.xDialog.Width - 20
+        nHeight = 10
+
+        # Spell checker section
+        self._addWidget("spelling_section", 'FixedLine', nX, nY1, nWidth, nHeight, Label = dUI.get("spelling_section", "#err"), FontDescriptor = xFDTitle)
+        self.xGraphspell = self._addWidget('activate_main', 'CheckBox', nX, nY1+15, nWidth, nHeight, Label = dUI.get('activate_main', "#err"))
+        self._addWidget('activate_main_descr', 'FixedText', nX, nY1+25, nWidth, nHeight*2, Label = dUI.get('activate_main_descr', "#err"), MultiLine = True)
+
+        # Spell suggestion engine section
+        self._addWidget("suggestion_section", 'FixedLine', nX, nY2, nWidth, nHeight, Label = dUI.get("suggestion_section", "#err"), FontDescriptor = xFDTitle)
+        self.xGraphspellSugg = self._addWidget('activate_spell_sugg', 'CheckBox', nX, nY2+15, nWidth, nHeight, Label = dUI.get('activate_spell_sugg', "#err"))
+        self._addWidget('activate_spell_sugg_descr', 'FixedText', nX, nY2+25, nWidth, nHeight*4, Label = dUI.get('activate_spell_sugg_descr', "#err"), MultiLine = True)
+
+        # Personal dictionary section
+        self._addWidget("personal_section", 'FixedLine', nX, nY3, nWidth, nHeight, Label = dUI.get("personal_section", "#err"), FontDescriptor = xFDTitle)
+        self.xPersonalDic = self._addWidget('activate_personal', 'CheckBox', nX, nY3+15, nWidth, nHeight, Label = dUI.get('activate_personal', "#err"))
+        self._addWidget('activate_personnal_descr', 'FixedText', nX, nY3+25, nWidth, nHeight*3, Label = dUI.get('activate_personal_descr', "#err"), MultiLine = True)
+        
+        # Button
+        self._addWidget('apply_button', 'Button', self.xDialog.Width-115, self.xDialog.Height-25, 50, 14, Label = dUI.get('apply_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500)
+        self._addWidget('cancel_button', 'Button', self.xDialog.Width-60, self.xDialog.Height-25, 50, 14, Label = dUI.get('cancel_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)
+
+        self._loadOptions()
+
+        # container
+        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
+        self.xContainer.setModel(self.xDialog)
+        self.xContainer.getControl('apply_button').addActionListener(self)
+        self.xContainer.getControl('apply_button').setActionCommand('Apply')
+        self.xContainer.getControl('cancel_button').addActionListener(self)
+        self.xContainer.getControl('cancel_button').setActionCommand('Cancel')
+        self.xContainer.setVisible(False)
+        toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
+        self.xContainer.createPeer(toolkit, None)
+        self.xContainer.execute()
+
+    # XActionListener
+    def actionPerformed (self, xActionEvent):
+        try:
+            if xActionEvent.ActionCommand == 'Apply':
+                xChild = self.xSettingNode.getByName("o_fr")
+                xChild.setPropertyValue("use_graphspell", self.xGraphspell.State)
+                xChild.setPropertyValue("use_graphspell_sugg", self.xGraphspellSugg.State)
+                #xChild.setPropertyValue("extended_dic", self.xExtendedDic.State)
+                xChild.setPropertyValue("use_personal_dic", self.xPersonalDic.State)
+                self.xSettingNode.commitChanges()
+            else:
+                pass
+            self.xContainer.endExecute()
+        except:
+            traceback.print_exc()
+    
+    # XJobExecutor
+    def trigger (self, args):
+        try:
+            dialog = DictOptions(self.ctx)
+            dialog.run()
+        except:
+            traceback.print_exc()
+
+    def _loadOptions (self):
+        try:
+            xChild = self.xSettingNode.getByName("o_fr")
+            self.xGraphspell.State = xChild.getPropertyValue("use_graphspell")
+            self.xGraphspellSugg.State = xChild.getPropertyValue("use_graphspell_sugg")
+            #self.xExtendedDic.State = xChild.getPropertyValue("extended_dic")
+            self.xPersonalDic.State = xChild.getPropertyValue("use_personal_dic")
+        except:
+            traceback.print_exc()
+
+
+#g_ImplementationHelper = unohelper.ImplementationHelper()
+#g_ImplementationHelper.addImplementation(DictOptions, 'net.grammalecte.graphspell.DictOptions', ('com.sun.star.task.Job',))

ADDED   gc_lang/fr/oxt/DictOptions/LexiconEditor.py
Index: gc_lang/fr/oxt/DictOptions/LexiconEditor.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/LexiconEditor.py
@@ -0,0 +1,558 @@
+# Lexicon Editor
+# by Olivier R.
+# License: MPL 2
+
+import unohelper
+import uno
+import json
+import re
+import traceback
+
+import helpers
+import lxe_strings
+import grammalecte.graphspell as sc
+import grammalecte.graphspell.dawg as dawg
+import grammalecte.graphspell.ibdawg as ibdawg
+import grammalecte.fr.conj as conj
+import grammalecte.fr.conj_generator as conjgen
+
+import SearchWords
+import TagsInfo
+
+from com.sun.star.task import XJobExecutor
+from com.sun.star.awt import XActionListener
+from com.sun.star.awt import XKeyListener
+
+
+def _waitPointer (funcDecorated):
+    def wrapper (*args, **kwargs):
+        # self is the first parameter if the decorator is applied on a object
+        self = args[0]
+        # before
+        xPointer = self.xSvMgr.createInstanceWithContext("com.sun.star.awt.Pointer", self.ctx)
+        xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.WAIT"))
+        xWindowPeer = self.xContainer.getPeer()
+        xWindowPeer.setPointer(xPointer)
+        for x in xWindowPeer.Windows:
+            x.setPointer(xPointer)
+        # processing
+        result = funcDecorated(*args, **kwargs)
+        # after
+        xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.ARROW"))
+        xWindowPeer.setPointer(xPointer)
+        for x in xWindowPeer.Windows:
+            x.setPointer(xPointer)
+        self.xContainer.setVisible(True) # seems necessary to refresh the dialog box and text widgets (why?)
+        # return
+        return result
+    return wrapper
+
+
+class LexiconEditor (unohelper.Base, XActionListener, XKeyListener, XJobExecutor):
+
+    def __init__ (self, ctx):
+        self.ctx = ctx
+        self.xSvMgr = self.ctx.ServiceManager
+        self.xDesktop = self.xSvMgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
+        self.xDocument = self.xDesktop.getCurrentComponent()
+        self.xContainer = None
+        self.xDialog = None
+        self.oSpellChecker = None
+        # data
+        self.sLemma = ""
+        self.lGeneratedFlex = []
+        # options node
+        self.xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", True)
+
+    def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
+        xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
+        xWidget.Name = name
+        xWidget.PositionX = x
+        xWidget.PositionY = y
+        xWidget.Width = w
+        xWidget.Height = h
+        for k, w in kwargs.items():
+            setattr(xWidget, k, w)
+        self.xDialog.insertByName(name, xWidget)
+        return xWidget
+
+    def _addGrid (self, name, x, y, w, h, columns, **kwargs):
+        xGridModel = self.xDialog.createInstance('com.sun.star.awt.grid.UnoControlGridModel')
+        xGridModel.Name = name
+        xGridModel.PositionX = x
+        xGridModel.PositionY = y
+        xGridModel.Width = w
+        xGridModel.Height = h
+        xColumnModel = xGridModel.ColumnModel
+        for e in columns:
+            xCol = xColumnModel.createColumn()
+            for k, w in e.items():
+                setattr(xCol, k, w)
+            xColumnModel.addColumn(xCol)
+        for k, w in kwargs.items():
+            setattr(xGridModel, k, w)
+        self.xDialog.insertByName(name, xGridModel)
+        return xGridModel
+
+    def run (self, sLang):
+        # ui lang
+        self.sLang = sLang
+        self.dUI = lxe_strings.getUI(sLang)
+
+        # dialog
+        self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
+        self.xDialog.Width = 570
+        self.xDialog.Height = 305
+        self.xDialog.Title = self.dUI.get('title', "#title#")
+        xWindowSize = helpers.getWindowSize()
+        self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
+        self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
+
+        # fonts
+        xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDTitle.Height = 9
+        xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDTitle.Name = "Verdana"
+        
+        xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDSubTitle.Height = 8
+        xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDSubTitle.Name = "Verdana"
+
+        # widget
+        nX1 = 10
+        nX2 = 20
+
+        nY0 = 5
+        nY1 = nY0 + 13
+        nY2 = nY1 + 25 # nom commun
+        nY3 = nY2 + 95 # nom propre
+        nY4 = nY3 + 45 # verbe
+        nY5 = nY4 + 68 # adverbe
+        nY6 = nY5 + 13 # autre
+
+        nXB = nX1 + 185
+        nXC = nXB + 165
+
+        nHeight = 10
+
+        #### Dictionary section
+        self._addWidget("dictionary_section", 'FixedLine', nX1, nY0, 180, nHeight, Label = self.dUI.get("dictionary_section", "#err"), FontDescriptor = xFDTitle, TextColor = 0x000088)
+        self._addWidget("save_date_label", 'FixedText', nXB, nY0+2, 80, nHeight, Label = self.dUI.get("save_date_label", "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000088)
+        self._addWidget("num_of_entries_label2", 'FixedText', nXC, nY0+2, 65, nHeight, Label = self.dUI.get("num_of_entries_label", "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000088)
+        self.xDateDic = self._addWidget("save_date", 'FixedText', nXB+85, nY0+2, 75, nHeight, Label = self.dUI.get("void", "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000088)
+        self.xNumDic = self._addWidget("num_of_entries2", 'FixedText', nXC+70, nY0+2, 45, nHeight, Label = "0", FontDescriptor = xFDSubTitle, TextColor = 0x000088)
+        self.xExport = self._addWidget('export_button', 'Button', nXC+150, nY0, 50, 12, Label = self.dUI.get('export_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000055)
+
+        #### Add word
+        self._addWidget("add_section", 'FixedLine', nX1, nY1, 180, nHeight, Label = self.dUI.get("add_section", "#err"), FontDescriptor = xFDTitle)
+        self.xLemma = self._addWidget('lemma', 'Edit', nX1, nY1+10, 110, 14, FontDescriptor = xFDTitle)
+        self._addWidget('search_button', 'Button', nX1+115, nY1+11, 45, 12, Label = self.dUI.get('search_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x555500)
+        self._addWidget('information_button', 'Button', nX1+165, nY1+11, 15, 12, Label = self.dUI.get('information_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x555500)
+
+        # Radio buttons: main POS tag
+        # Note: the only way to group RadioButtons is to create them successively
+        self.xNA = self._addWidget('nom_adj', 'RadioButton', nX1, nY2+12, 60, nHeight, Label = self.dUI.get("nom_adj", "#err"), HelpText = ":N:A")
+        self.xN = self._addWidget('nom', 'RadioButton', nX1, nY2+22, 60, nHeight, Label = self.dUI.get("nom", "#err"), HelpText = ":N")
+        self.xA = self._addWidget('adj', 'RadioButton', nX1, nY2+32, 60, nHeight, Label = self.dUI.get("adj", "#err"), HelpText = ":A")
+        self.xM1 = self._addWidget('M1', 'RadioButton', nX1, nY3+12, 60, nHeight, Label = self.dUI.get("M1", "#err"), HelpText = ":M1")
+        self.xM2 = self._addWidget('M2', 'RadioButton', nX1, nY3+22, 60, nHeight, Label = self.dUI.get("M2", "#err"), HelpText = ":M2")
+        self.xMP = self._addWidget('MP', 'RadioButton', nX1, nY3+32, 60, nHeight, Label = self.dUI.get("MP", "#err"), HelpText = ":MP")
+        self.xV = self._addWidget('verb', 'RadioButton', nX1, nY4+2, 35, nHeight, Label = self.dUI.get("verb", "#err"), FontDescriptor = xFDSubTitle, HelpText = ":V")
+        self.xW = self._addWidget('adv', 'RadioButton', nX1, nY5+2, 35, nHeight, Label = self.dUI.get("adverb", "#err"), FontDescriptor = xFDSubTitle, HelpText = ":W")
+        self.xX = self._addWidget('other', 'RadioButton', nX1, nY6+2, 35, nHeight, Label = self.dUI.get("other", "#err"), FontDescriptor = xFDSubTitle, HelpText = ":X")
+        
+        # Nom, adjectif
+        self._addWidget("fl_nom_adj", 'FixedLine', nX1, nY2, 180, nHeight, Label = self.dUI.get("common_name", "#err"), FontDescriptor = xFDSubTitle)
+        self.xSepi = self._addWidget('Sepi', 'RadioButton', nX1+65, nY2+12, 50, nHeight, Label = self.dUI.get("epi", "#err"), HelpText = ":e")
+        self.xSmas = self._addWidget('Smas', 'RadioButton', nX1+65, nY2+22, 50, nHeight, Label = self.dUI.get("mas", "#err"), HelpText = ":m")
+        self.xSfem = self._addWidget('Sfem', 'RadioButton', nX1+65, nY2+32, 50, nHeight, Label = self.dUI.get("fem", "#err"), HelpText = ":f")
+        self._addWidget("fl_sep1", 'FixedLine', nX1, nY2, 1, nHeight)
+        self.xSs = self._addWidget('Ss', 'RadioButton', nX1+120, nY2+12, 50, nHeight, Label = self.dUI.get("-s", "#err"), HelpText = "·s")
+        self.xSx = self._addWidget('Sx', 'RadioButton', nX1+120, nY2+22, 50, nHeight, Label = self.dUI.get("-x", "#err"), HelpText = "·x")
+        self.xSinv = self._addWidget('Sinv', 'RadioButton', nX1+120, nY2+32, 50, nHeight, Label = self.dUI.get("inv", "#err"), HelpText = ":i")
+
+        self._addWidget("alt_lemma_label", 'FixedLine', nX1+10, nY2+42, 170, nHeight, Label = self.dUI.get("alt_lemma", "#err"))
+        self.xAltLemma = self._addWidget('alt_lemma', 'Edit', nX1+10, nY2+52, 110, nHeight)
+        self.xNA2 = self._addWidget('nom_adj2', 'RadioButton', nX1+10, nY2+65, 60, nHeight, Label = self.dUI.get("nom_adj", "#err"), HelpText = ":N:A")
+        self.xN2 = self._addWidget('nom2', 'RadioButton', nX1+10, nY2+75, 60, nHeight, Label = self.dUI.get("nom", "#err"), HelpText = ":N")
+        self.xA2 = self._addWidget('adj2', 'RadioButton', nX1+10, nY2+85, 60, nHeight, Label = self.dUI.get("adj", "#err"), HelpText = ":A")
+        self._addWidget("fl_sep2", 'FixedLine', nX1, nY2, 1, nHeight)
+        self.xSepi2 = self._addWidget('Sepi2', 'RadioButton', nX1+75, nY2+65, 50, nHeight, Label = self.dUI.get("epi", "#err"), HelpText = ":e")
+        self.xSmas2 = self._addWidget('Smas2', 'RadioButton', nX1+75, nY2+75, 50, nHeight, Label = self.dUI.get("mas", "#err"), HelpText = ":m")
+        self.xSfem2 = self._addWidget('Sfem2', 'RadioButton', nX1+75, nY2+85, 50, nHeight, Label = self.dUI.get("fem", "#err"), HelpText = ":f")
+        self._addWidget("fl_sep3", 'FixedLine', nX1, nY2, 1, nHeight)
+        self.xSs2 = self._addWidget('Ss2', 'RadioButton', nX1+130, nY2+65, 50, nHeight, Label = self.dUI.get("-s", "#err"), HelpText = "·s")
+        self.xSx2 = self._addWidget('Sx2', 'RadioButton', nX1+130, nY2+75, 50, nHeight, Label = self.dUI.get("-x", "#err"), HelpText = "·x")
+        self.xSinv2 = self._addWidget('Sinv2', 'RadioButton', nX1+130, nY2+85, 50, nHeight, Label = self.dUI.get("inv", "#err"), HelpText = ":i")
+
+        # Nom propre
+        self._addWidget("fl_M", 'FixedLine', nX1, nY3, 180, nHeight, Label = self.dUI.get("proper_name", "#err"), FontDescriptor = xFDSubTitle)
+        self.xMepi = self._addWidget('Mepi', 'RadioButton', nX1+65, nY3+12, 50, nHeight, Label = self.dUI.get("epi", "#err"), HelpText = ":e")
+        self.xMmas = self._addWidget('Mmas', 'RadioButton', nX1+65, nY3+22, 50, nHeight, Label = self.dUI.get("mas", "#err"), HelpText = ":m")
+        self.xMfem = self._addWidget('Mfem', 'RadioButton', nX1+65, nY3+32, 50, nHeight, Label = self.dUI.get("fem", "#err"), HelpText = ":f")
+
+        # Verbe
+        self._addWidget("fl_verb", 'FixedLine', nX2+30, nY4, 140, nHeight, FontDescriptor = xFDSubTitle)
+        self.xV_i = self._addWidget('v_i', 'CheckBox', nX2, nY4+12, 60, nHeight, Label = self.dUI.get("v_i", "#err"))
+        self.xV_t = self._addWidget('v_t', 'CheckBox', nX2, nY4+20, 60, nHeight, Label = self.dUI.get("v_t", "#err"))
+        self.xV_n = self._addWidget('v_n', 'CheckBox', nX2, nY4+28, 60, nHeight, Label = self.dUI.get("v_n", "#err"))
+        self.xV_p = self._addWidget('v_p', 'CheckBox', nX2, nY4+36, 60, nHeight, Label = self.dUI.get("v_p", "#err"))
+        self.xV_m = self._addWidget('v_m', 'CheckBox', nX2, nY4+44, 60, nHeight, Label = self.dUI.get("v_m", "#err"))
+
+        self._addWidget('aux', 'FixedText', nX2+75, nY4+10, 90, nHeight, Label = self.dUI.get("aux", "#err"))
+        self.xV_ae = self._addWidget('v_ae', 'CheckBox', nX2+75, nY4+20, 90, nHeight, Label = self.dUI.get("v_ae", "#err"))
+        self.xV_aa = self._addWidget('v_aa', 'CheckBox', nX2+75, nY4+28, 90, nHeight, Label = self.dUI.get("v_aa", "#err"))
+
+        self.xV_pp = self._addWidget('v_pp', 'CheckBox', nX2+75, nY4+44, 90, nHeight, Label = self.dUI.get("v_pp", "#err"))
+
+        self._addWidget('v_pattern_label', 'FixedText', nX2+10, nY4+56, 70, nHeight, Label = self.dUI.get('v_pattern', "#err"), Align = 2)
+        self.xVpattern = self._addWidget('v_pattern', 'Edit', nX2+85, nY4+56, 80, nHeight)
+
+        # Adverbe
+        self._addWidget("fl_adv", 'FixedLine', nX2+30, nY5, 140, nHeight, FontDescriptor = xFDSubTitle)
+
+        # Autre
+        self._addWidget("fl_other", 'FixedLine', nX2+30, nY6, 140, nHeight, FontDescriptor = xFDSubTitle)
+        self._addWidget('flexion_label', 'FixedText', nX2, nY6+11, 35, nHeight, Label = self.dUI.get('flexion', "#err"))
+        self.xFlexion = self._addWidget('flexion', 'Edit', nX2+40, nY6+10, 100, nHeight)
+        self._addWidget('tags_label', 'FixedText', nX2, nY6+23, 35, nHeight, Label = self.dUI.get('tags', "#err"))
+        self.xTags = self._addWidget('tags', 'Edit', nX2+40, nY6+22, 100, nHeight)
+
+        #### Generated words
+        self._addWidget("gwords_section", 'FixedLine', nXB, nY1, 160, nHeight, Label = self.dUI.get("new_section", "#err"), FontDescriptor = xFDTitle)
+        self.xGridModelNew = self._addGrid("list_grid_gwords", nXB, nY1+10, 160, 255, [
+            {"Title": self.dUI.get("lex_flex", "#err"), "ColumnWidth": 80},
+            {"Title": self.dUI.get("lex_tags", "#err"), "ColumnWidth": 80}
+        ], SelectionModel = uno.Enum("com.sun.star.view.SelectionType", "MULTI"))
+        self.xAdd = self._addWidget('add_button', 'Button', nXB, nY1+270, 75, 12, Label = self.dUI.get('add_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x005500, Enabled = False)
+        self.xDelete = self._addWidget('delete_button', 'Button', nXB+80, nY1+270, 80, 12, Label = self.dUI.get('delete_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x550000)
+
+        #### Lexicon section
+        self._addWidget("lexicon_section", 'FixedLine', nXC, nY1, 200, nHeight, Label = self.dUI.get("lexicon_section", "#err"), FontDescriptor = xFDTitle)
+        self.xGridModelLex = self._addGrid("list_grid_lexicon", nXC, nY1+10, 200, 255, [
+            {"Title": self.dUI.get("lex_flex", "#err"), "ColumnWidth": 65},
+            {"Title": self.dUI.get("lex_lemma", "#err"), "ColumnWidth": 50},
+            {"Title": self.dUI.get("lex_tags", "#err"), "ColumnWidth": 65}
+        ], SelectionModel = uno.Enum("com.sun.star.view.SelectionType", "MULTI"))
+        self._addWidget("num_of_entries_label1", 'FixedText', nXC, nY1+272, 60, nHeight, Label = self.dUI.get("num_of_entries_label", "#err"), FontDescriptor = xFDSubTitle)
+        self.xNumLex = self._addWidget("num_of_entries1", 'FixedText', nXC+65, nY1+272, 40, nHeight, Label = "0", FontDescriptor = xFDSubTitle)
+        self.xSave = self._addWidget('save_button', 'Button', nXC+110, nY1+270, 45, 12, Label = self.dUI.get('save_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x005500)
+        self._addWidget('close_button', 'Button', nXC+160, nY1+270, 40, 12, Label = self.dUI.get('close_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x550000)
+
+        self.loadLexicon()
+
+        # container
+        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
+        self.xContainer.setModel(self.xDialog)
+        self.xGridControlNew = self.xContainer.getControl('list_grid_gwords')
+        self.xGridControlLex = self.xContainer.getControl('list_grid_lexicon')
+        #helpers.xray(self.xContainer.getControl('lemma'))
+        self._createKeyListeners(['lemma', 'alt_lemma', "v_pattern", 'flexion', 'tags'], "Update")
+        self._createActionListeners(['nom_adj', 'nom', 'adj', 'M1', 'M2', 'MP', 'verb', 'adv', 'other', \
+                                     'Sepi', 'Smas', 'Sfem', 'Ss', 'Sx', 'Sinv', 'nom_adj2', 'nom2', 'adj2', \
+                                     'Sepi2', 'Smas2', 'Sfem2', 'Ss2', 'Sx2', 'Sinv2', 'Mepi', 'Mmas', 'Mfem', \
+                                     'v_i', 'v_t', 'v_n', 'v_p', 'v_m', 'v_ae', 'v_aa', 'v_pp'], "Update")
+        self.xContainer.getControl('search_button').addActionListener(self)
+        self.xContainer.getControl('search_button').setActionCommand('SearchWords')
+        self.xContainer.getControl('information_button').addActionListener(self)
+        self.xContainer.getControl('information_button').setActionCommand('TagsInfo')
+        self.xContainer.getControl('add_button').addActionListener(self)
+        self.xContainer.getControl('add_button').setActionCommand('Add')
+        self.xContainer.getControl('delete_button').addActionListener(self)
+        self.xContainer.getControl('delete_button').setActionCommand('Delete')
+        self.xContainer.getControl('save_button').addActionListener(self)
+        self.xContainer.getControl('save_button').setActionCommand('Save')
+        self.xContainer.getControl('close_button').addActionListener(self)
+        self.xContainer.getControl('close_button').setActionCommand('Close')
+        self.xContainer.setVisible(False)
+        xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
+        self.xContainer.createPeer(xToolkit, None)
+        self.xContainer.execute()
+
+    def _createKeyListeners (self, lNames, sAction):
+        for sName in lNames:
+            self.xContainer.getControl(sName).addKeyListener(self)
+
+    def _createActionListeners (self, lNames, sAction):
+        for sName in lNames:
+            self.xContainer.getControl(sName).addActionListener(self)
+            self.xContainer.getControl(sName).setActionCommand(sAction)
+
+    # XActionListener
+    def actionPerformed (self, xActionEvent):
+        try:
+            if xActionEvent.ActionCommand == "Update":
+                self.updateGenWords()
+            elif xActionEvent.ActionCommand == "SearchWords":
+                self.launchSearchWords()
+            elif xActionEvent.ActionCommand == "TagsInfo":
+                self.launchTagsInfo()
+            elif xActionEvent.ActionCommand == "Add":
+                self.addToLexicon()
+            elif xActionEvent.ActionCommand == "Delete":
+                self.deleteSelectedEntries()
+            elif xActionEvent.ActionCommand == "Save":
+                self.saveLexicon()
+            elif xActionEvent.ActionCommand == "Import":
+                self.importDictionary()
+            elif xActionEvent.ActionCommand == "Export":
+                self.exportDictionary()
+            elif xActionEvent.ActionCommand == "Close":
+                self.xContainer.endExecute()
+        except:
+            traceback.print_exc()
+    
+    # XKeyListener
+    def keyPressed (self, xKeyEvent):
+        pass
+
+    def keyReleased (self, xKeyEvent):
+        self.updateGenWords()
+
+    # XJobExecutor
+    def trigger (self, args):
+        try:
+            xDialog = LexiconEditor(self.ctx)
+            xDialog.run()
+        except:
+            traceback.print_exc()
+
+    # Code
+    def launchSearchWords (self):
+        xDialog = SearchWords.SearchWords(self.ctx)
+        xDialog.run(self.sLang)
+
+    def launchTagsInfo (self):
+        xDialog = TagsInfo.TagsInfo(self.ctx)
+        xDialog.run(self.sLang)
+
+    #@_waitPointer (don’t: strange behavior)
+    def loadLexicon (self):
+        xChild = self.xSettingNode.getByName("o_fr")
+        sJSON = xChild.getPropertyValue("personal_dic")
+        if sJSON != "":
+            oIBDAWG = ibdawg.IBDAWG(json.loads(sJSON))
+            xGridDataModel = self.xGridModelLex.GridDataModel
+            for i, aEntry in enumerate(oIBDAWG.select()):
+                xGridDataModel.addRow(i, aEntry)
+            self.xNumLex.Label = str(i)
+            self.xNumDic.Label = str(i)
+            self.xDateDic.Label = oIBDAWG.sDate
+
+    @_waitPointer
+    def saveLexicon (self):
+        xGridDataModel = self.xGridModelLex.GridDataModel
+        lEntry = []
+        for i in range(xGridDataModel.RowCount):
+            lEntry.append(xGridDataModel.getRowData(i))
+        xChild = self.xSettingNode.getByName("o_fr")
+        if lEntry:
+            oDAWG = dawg.DAWG(lEntry, "S", "fr", "Français", "Dictionnaire personnel")
+            oJSON = oDAWG.getBinaryAsJSON()
+            xChild.setPropertyValue("personal_dic", json.dumps(oJSON, ensure_ascii=False))
+            self.xSettingNode.commitChanges()
+            self.xNumDic.Label = str(oJSON["nEntry"])
+            self.xDateDic.Label = oJSON["sDate"]
+        else:
+            xChild.setPropertyValue("personal_dic", "")
+            self.xSettingNode.commitChanges()
+            self.xNumDic.Label = "0"
+            self.xDateDic.Label = self.dUI.get("void", "#err")
+
+    def _getRadioValue (self, *args):
+        for x in args:
+            if x.State:
+                return x.HelpText
+        return None
+
+    @_waitPointer
+    def updateGenWords (self):
+        self.lGeneratedFlex = []
+        self.sLemma = self.xLemma.Text.strip()
+        if self.sLemma:
+            if self._getRadioValue(self.xNA, self.xN, self.xA):
+                # Substantif
+                sPOS = self._getRadioValue(self.xNA, self.xN, self.xA)
+                sGenderTag = self._getRadioValue(self.xSepi, self.xSmas, self.xSfem)
+                if sGenderTag:
+                    if self.xSs.State:
+                        self.lGeneratedFlex.append((self.sLemma, sPOS+sGenderTag+":s/*"))
+                        self.lGeneratedFlex.append((self.sLemma+"s", sPOS+sGenderTag+":p/*"))
+                    elif self.xSx.State:
+                        self.lGeneratedFlex.append((self.sLemma, sPOS+sGenderTag+":s/*"))
+                        self.lGeneratedFlex.append((self.sLemma+"x", sPOS+sGenderTag+":p/*"))
+                    elif self.xSinv.State:
+                        self.lGeneratedFlex.append((self.sLemma, sPOS+sGenderTag+":i/*"))
+                    sLemma2 = self.xAltLemma.Text.strip()
+                    if sLemma2 and self._getRadioValue(self.xNA2, self.xN2, self.xA2) and self._getRadioValue(self.xSepi2, self.xSmas2, self.xSfem2):
+                        sTag2 = self._getRadioValue(self.xNA2, self.xN2, self.xA2) + self._getRadioValue(self.xSepi2, self.xSmas2, self.xSfem2)
+                        if self.xSs2.State:
+                            self.lGeneratedFlex.append((sLemma2, sTag2+":s/*"))
+                            self.lGeneratedFlex.append((sLemma2+"s", sTag2+":p/*"))
+                        elif self.xSx2.State:
+                            self.lGeneratedFlex.append((sLemma2, sTag2+":s/*"))
+                            self.lGeneratedFlex.append((sLemma2+"x", sTag2+":p/*"))
+                        elif self.xSinv2.State:
+                            self.lGeneratedFlex.append((sLemma2, sTag2+":i/*"))
+            elif self._getRadioValue(self.xM1, self.xM2, self.xMP):
+                # Nom propre
+                sPOS = self._getRadioValue(self.xM1, self.xM2, self.xMP)
+                self.sLemma = self.sLemma[0:1].upper() + self.sLemma[1:];
+                sGenderTag = self._getRadioValue(self.xMepi, self.xMmas, self.xMfem)
+                if sGenderTag:
+                    self.lGeneratedFlex.append((self.sLemma, sPOS+sGenderTag+":i/*"))
+            elif self.xV.State:
+                # Verbe
+                if self.sLemma.endswith(("er", "ir", "re")):
+                    self.sLemma = self.sLemma.lower()
+                    c_i = "i"  if self.xV_i.State  else "_"
+                    c_t = "t"  if self.xV_t.State  else "_"
+                    c_n = "n"  if self.xV_n.State  else "_"
+                    c_p = "p"  if self.xV_p.State  else "_"
+                    c_m = "m"  if self.xV_m.State  else "_"
+                    c_ae = "e"  if self.xV_ae.State  else "_"
+                    c_aa = "a"  if self.xV_aa.State  else "_"
+                    sVerbTag = c_i + c_t + c_n + c_p + c_m + c_ae + c_aa
+                    if not sVerbTag.endswith("__") and not sVerbTag.startswith("____"):
+                        sVerbPattern = self.xVpattern.Text.strip()
+                        if not sVerbPattern:
+                            # Utilisation du générateur de conjugaison
+                            for sFlexion, sFlexTags in conjgen.conjugate(self.sLemma, sVerbTag, bool(self.xV_pp.State)):
+                                self.lGeneratedFlex.append((sFlexion, sFlexTags))
+                        else:
+                            # copie du motif d’un autre verbe : utilisation du conjugueur
+                            if conj.isVerb(sVerbPattern):
+                                oVerb = conj.Verb(self.sLemma, sVerbPattern)
+                                for sTag1, dFlex in oVerb.dConj.items():
+                                    if sTag1 != ":Q":
+                                        for sTag2, sConj in dFlex.items():
+                                            if sTag2.startswith(":") and sConj:
+                                                self.lGeneratedFlex.append((sConj, ":V" + oVerb.cGroup + "_" + sVerbTag + sTag1 + sTag2))
+                                    else:
+                                        # participes passés
+                                        if dFlex[":Q3"]:
+                                            if dFlex[":Q2"]:
+                                                self.lGeneratedFlex.append((dFlex[":Q1"], ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:s/*"))
+                                                self.lGeneratedFlex.append((dFlex[":Q2"], ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:p/*"))
+                                            else:
+                                                self.lGeneratedFlex.append((dFlex[":Q1"], ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:i/*"))
+                                            self.lGeneratedFlex.append((dFlex[":Q3"], ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:s/*"))
+                                            self.lGeneratedFlex.append((dFlex[":Q4"], ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:p/*"))
+                                        else:
+                                            self.lGeneratedFlex.append((dFlex[":Q1"], ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:e:i/*"))
+            elif self.xW.State:
+                # Adverbe
+                self.sLemma = self.sLemma.lower();
+                self.lGeneratedFlex.append((self.sLemma, ":W/*"))
+            elif self.xX.State:
+                # Autre
+                sFlexion = self.xFlexion.Text.strip()
+                sTags = self.xTags.Text.strip()
+                if sFlexion and sTags.startswith(":"):
+                    self.lGeneratedFlex.append((sFlexion, sTags))
+        self._showGenWords()
+
+    def _showGenWords (self):
+        xGridDataModel = self.xGridModelNew.GridDataModel
+        xGridDataModel.removeAllRows()
+        if not self.lGeneratedFlex:
+            self.xAdd.Enabled = False
+            return
+        for i, (sFlexion, sTag) in enumerate(self.lGeneratedFlex):
+            xGridDataModel.addRow(i, (sFlexion, sTag))
+        self.xAdd.Enabled = True
+
+    def _resetWidgets (self):
+        self.xLemma.Text = ""
+        self.xNA.State = False
+        self.xN.State = False
+        self.xA.State = False
+        self.xM1.State = False
+        self.xM2.State = False
+        self.xMP.State = False
+        self.xV.State = False
+        self.xW.State = False
+        self.xX.State = False
+        self.xSepi.State = False
+        self.xSmas.State = False
+        self.xSfem.State = False
+        self.xSs.State = False
+        self.xSx.State = False
+        self.xSinv.State = False
+        self.xAltLemma.Text = ""
+        self.xNA2.State = False
+        self.xN2.State = False
+        self.xA2.State = False
+        self.xSepi2.State = False
+        self.xSmas2.State = False
+        self.xSfem2.State = False
+        self.xSs2.State = False
+        self.xSx2.State = False
+        self.xSinv2.State = False
+        self.xMepi.State = False
+        self.xMmas.State = False
+        self.xMfem.State = False
+        self.xV_i.State = False
+        self.xV_t.State = False
+        self.xV_n.State = False
+        self.xV_p.State = False
+        self.xV_m.State = False
+        self.xV_ae.State = False
+        self.xV_aa.State = False
+        self.xV_pp.State = False
+        self.xVpattern.Text = ""
+        self.xFlexion.Text = ""
+        self.xTags.Text = ""
+        self.xGridModelNew.GridDataModel.removeAllRows()
+
+    @_waitPointer
+    def addToLexicon (self):
+        self.xAdd.Enabled = False
+        xGridDataModelNew = self.xGridModelNew.GridDataModel
+        xGridDataModelLex = self.xGridModelLex.GridDataModel
+        nStart = xGridDataModelLex.RowCount
+        for i in range(xGridDataModelNew.RowCount):
+            sFlexion, sTag = xGridDataModelNew.getRowData(i)
+            xGridDataModelLex.addRow(nStart + i, (sFlexion, self.sLemma, sTag))
+        self.xSave.Enabled = True
+        self.xNumLex.Label = str(int(self.xNumLex.Label) + xGridDataModelNew.RowCount)
+        self._resetWidgets()
+
+    @_waitPointer
+    def deleteSelectedEntries (self):
+        # generated entries
+        xGridDataModel = self.xGridModelNew.GridDataModel
+        #helpers.xray(xGridDataModel)
+        for i in self.xGridControlNew.getSelectedRows():
+            if i < xGridDataModel.RowCount:
+                xGridDataModel.removeRow(i)
+        self.xGridControlNew.deselectAllRows()
+        # lexicon
+        xGridDataModel = self.xGridModelLex.GridDataModel
+        nSelectedEntries = len(self.xGridControlLex.getSelectedRows())
+        for i in self.xGridControlLex.getSelectedRows():
+            if i < xGridDataModel.RowCount:
+                xGridDataModel.removeRow(i)
+        self.xGridControlLex.deselectAllRows()
+        self.xNumLex.Label = str(xGridDataModel.RowCount)
+
+    @_waitPointer
+    def importDictionary (self):
+        pass
+
+    @_waitPointer
+    def exportDictionary (self):
+        xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.SystemFilePicker', self.ctx)
+        xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
+        #xFilePicker.setDisplayDirectory("")
+        #xFilePicker.setMultiSelectionMode(True)
+        nResult = xFilePicker.execute()
+        if nResult == 1:
+            pass
+            #lFile = xFilePicker.getSelectedFiles()
+            #lFile = xFilePicker.getFiles()
+
+
+#g_ImplementationHelper = unohelper.ImplementationHelper()
+#g_ImplementationHelper.addImplementation(LexiconEditor, 'net.grammalecte.LexiconEditor', ('com.sun.star.task.Job',))

ADDED   gc_lang/fr/oxt/DictOptions/SearchWords.py
Index: gc_lang/fr/oxt/DictOptions/SearchWords.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/SearchWords.py
@@ -0,0 +1,196 @@
+# Search and informations about tags
+# by Olivier R.
+# License: MPL 2
+
+import unohelper
+import uno
+import traceback
+
+import helpers
+import sw_strings
+import grammalecte.graphspell as sc
+import grammalecte.graphspell.ibdawg as ibdawg
+
+from com.sun.star.task import XJobExecutor
+from com.sun.star.awt import XActionListener
+
+
+def _waitPointer (funcDecorated):
+    def wrapper (*args, **kwargs):
+        # self is the first parameter if the decorator is applied on a object
+        self = args[0]
+        # before
+        xPointer = self.xSvMgr.createInstanceWithContext("com.sun.star.awt.Pointer", self.ctx)
+        xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.WAIT"))
+        xWindowPeer = self.xContainer.getPeer()
+        xWindowPeer.setPointer(xPointer)
+        for x in xWindowPeer.Windows:
+            x.setPointer(xPointer)
+        # processing
+        result = funcDecorated(*args, **kwargs)
+        # after
+        xPointer.setType(uno.getConstantByName("com.sun.star.awt.SystemPointer.ARROW"))
+        xWindowPeer.setPointer(xPointer)
+        for x in xWindowPeer.Windows:
+            x.setPointer(xPointer)
+        self.xContainer.setVisible(True) # seems necessary to refresh the dialog box and text widgets (why?)
+        # return
+        return result
+    return wrapper
+
+
+class SearchWords (unohelper.Base, XActionListener):
+
+    def __init__ (self, ctx):
+        self.ctx = ctx
+        self.xSvMgr = self.ctx.ServiceManager
+        self.xDesktop = self.xSvMgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
+        self.xDocument = self.xDesktop.getCurrentComponent()
+        self.xContainer = None
+        self.xDialog = None
+        self.oSpellChecker = None
+        # options node
+        self.xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", True)
+
+    def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
+        xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
+        xWidget.Name = name
+        xWidget.PositionX = x
+        xWidget.PositionY = y
+        xWidget.Width = w
+        xWidget.Height = h
+        for k, w in kwargs.items():
+            setattr(xWidget, k, w)
+        self.xDialog.insertByName(name, xWidget)
+        return xWidget
+
+    def _addGrid (self, name, x, y, w, h, columns, **kwargs):
+        xGridModel = self.xDialog.createInstance('com.sun.star.awt.grid.UnoControlGridModel')
+        xGridModel.Name = name
+        xGridModel.PositionX = x
+        xGridModel.PositionY = y
+        xGridModel.Width = w
+        xGridModel.Height = h
+        xColumnModel = xGridModel.ColumnModel
+        for e in columns:
+            xCol = xColumnModel.createColumn()
+            for k, w in e.items():
+                setattr(xCol, k, w)
+            xColumnModel.addColumn(xCol)
+        for k, w in kwargs.items():
+            setattr(xGridModel, k, w)
+        self.xDialog.insertByName(name, xGridModel)
+        return xGridModel
+
+    def run (self, sLang):
+        # ui lang
+        self.dUI = sw_strings.getUI(sLang)
+
+        # dialog
+        self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
+        self.xDialog.Width = 350
+        self.xDialog.Height = 305
+        self.xDialog.Title = self.dUI.get('title', "#title#")
+        #xWindowSize = helpers.getWindowSize()
+        #self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
+        #self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
+
+        # fonts
+        xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDTitle.Height = 9
+        xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDTitle.Name = "Verdana"
+        
+        xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDSubTitle.Height = 8
+        xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDSubTitle.Name = "Verdana"
+
+        # widget
+        nX1 = 10
+        nX2 = nX1 + 130
+
+        nY0 = 5
+        nY1 = nY0 + 20
+        nY2 = nY1 + 60
+
+        nHeight = 10
+
+        #### Search
+        self._addWidget("search_section", 'FixedLine', nX1, nY0, 120, nHeight, Label = self.dUI.get("search_section", "#err"), FontDescriptor = xFDTitle)
+        self._addWidget("similar_search_section", 'FixedLine', nX1, nY1, 120, nHeight, Label = self.dUI.get("similar_search_section", "#err"), FontDescriptor = xFDSubTitle)
+        self.xWord = self._addWidget('word', 'Edit', nX1, nY1+10, 100, nHeight)
+        self._addWidget('similar_search_button', 'Button', nX1, nY1+22, 55, 12, Label = self.dUI.get('similar_search_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x005500)
+
+
+        self._addWidget("regex_search_section", 'FixedLine', nX1, nY2, 120, nHeight, Label = self.dUI.get("regex_search_section", "#err"), FontDescriptor = xFDSubTitle)
+        self._addWidget('flexion_label', 'FixedText', nX1, nY2+10, 30, nHeight, Label = self.dUI.get('flexion', "#err"))
+        self.xFlexion = self._addWidget('flexion', 'Edit', nX1+35, nY2+10, 85, nHeight)
+        self._addWidget('tags_label', 'FixedText', nX1, nY2+22, 30, nHeight, Label = self.dUI.get('tags', "#err"))
+        self.xTags = self._addWidget('tags', 'Edit', nX1+35, nY2+22, 85, nHeight)
+        self._addWidget('regex_search_button', 'Button', nX1, nY2+34, 55, 12, Label = self.dUI.get('regex_search_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x005500)
+        self._addWidget('result_warning', 'FixedText', nX1, nY2+50, 120, nHeight*7, Label = self.dUI.get('result_warning', '#err'), MultiLine = True)
+
+        #### Results
+        self._addWidget("result_section", 'FixedLine', nX2, nY0, 200, nHeight, Label = self.dUI.get("result_section", "#err"), FontDescriptor = xFDTitle)
+        self.xGridModel = self._addGrid("list_grid_search", nX2, nY0+10, 200, 265, [
+            {"Title": self.dUI.get("res_flexion", "#err"), "ColumnWidth": 70},
+            {"Title": self.dUI.get("res_lemma", "#err"), "ColumnWidth": 60},
+            {"Title": self.dUI.get("res_tags", "#err"), "ColumnWidth": 70}
+        ])
+
+        self._addWidget('close_button', 'Button', self.xDialog.Width-50, self.xDialog.Height-20, 40, 12, Label = self.dUI.get('close_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x550000)
+
+        # container
+        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
+        self.xContainer.setModel(self.xDialog)
+        self.xGridControlSearch = self.xContainer.getControl('list_grid_search')
+        self.xGridControlInfo = self.xContainer.getControl('list_grid_info')
+        self.xContainer.getControl('similar_search_button').addActionListener(self)
+        self.xContainer.getControl('similar_search_button').setActionCommand('SearchSimilar')
+        self.xContainer.getControl('regex_search_button').addActionListener(self)
+        self.xContainer.getControl('regex_search_button').setActionCommand('SearchRegex')
+        self.xContainer.getControl('close_button').addActionListener(self)
+        self.xContainer.getControl('close_button').setActionCommand('Close')
+        self.xContainer.setVisible(False)
+        xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
+        self.xContainer.createPeer(xToolkit, None)
+        self.xContainer.execute()
+
+    # XActionListener
+    def actionPerformed (self, xActionEvent):
+        try:
+            if xActionEvent.ActionCommand == "SearchSimilar":
+                self.searchSimilar()
+            elif xActionEvent.ActionCommand == "SearchRegex":
+                self.searchRegex()
+            elif xActionEvent.ActionCommand == "Close":
+                self.xContainer.endExecute()
+        except:
+            traceback.print_exc()
+
+    def initSpellChecker (self):
+        if not self.oSpellChecker:
+            self.oSpellChecker = sc.SpellChecker("fr", "fr.bdic", "", "", "")
+
+    def searchSimilar (self):
+        self.initSpellChecker()
+        sWord = self.xWord.Text.strip()
+        if sWord:
+            xGridDataModel = self.xGridModel.GridDataModel
+            xGridDataModel.removeAllRows()
+            lResult = self.oSpellChecker.getSimilarEntries(sWord, 20);
+            for i, aEntry in enumerate(lResult):
+                xGridDataModel.addRow(i, aEntry)
+
+    def searchRegex (self):
+        self.initSpellChecker()
+        sFlexPattern = self.xFlexion.Text.strip()
+        sTagsPattern = self.xTags.Text.strip()
+        xGridDataModel = self.xGridModel.GridDataModel
+        xGridDataModel.removeAllRows()
+        for i, aEntry in enumerate(self.oSpellChecker.select(sFlexPattern, sTagsPattern)):
+            xGridDataModel.addRow(i, aEntry)
+            i += 1
+            if i >= 2000:
+                break

ADDED   gc_lang/fr/oxt/DictOptions/TagsInfo.py
Index: gc_lang/fr/oxt/DictOptions/TagsInfo.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/TagsInfo.py
@@ -0,0 +1,146 @@
+# Lexicon editor: Information
+# by Olivier R.
+# License: MPL 2
+
+import unohelper
+import uno
+import traceback
+
+import helpers
+import ti_strings
+
+import grammalecte.fr.lexicographe as lxg
+
+from com.sun.star.task import XJobExecutor
+from com.sun.star.awt import XActionListener
+
+
+
+class TagsInfo (unohelper.Base, XActionListener):
+
+    def __init__ (self, ctx):
+        self.ctx = ctx
+        self.xSvMgr = self.ctx.ServiceManager
+        self.xDesktop = self.xSvMgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
+        self.xDocument = self.xDesktop.getCurrentComponent()
+        self.xContainer = None
+        self.xDialog = None
+
+    def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
+        xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
+        xWidget.Name = name
+        xWidget.PositionX = x
+        xWidget.PositionY = y
+        xWidget.Width = w
+        xWidget.Height = h
+        for k, w in kwargs.items():
+            setattr(xWidget, k, w)
+        self.xDialog.insertByName(name, xWidget)
+        return xWidget
+
+    def _addGrid (self, name, x, y, w, h, columns, **kwargs):
+        xGridModel = self.xDialog.createInstance('com.sun.star.awt.grid.UnoControlGridModel')
+        xGridModel.Name = name
+        xGridModel.PositionX = x
+        xGridModel.PositionY = y
+        xGridModel.Width = w
+        xGridModel.Height = h
+        xColumnModel = xGridModel.ColumnModel
+        for e in columns:
+            xCol = xColumnModel.createColumn()
+            for k, w in e.items():
+                setattr(xCol, k, w)
+            xColumnModel.addColumn(xCol)
+        for k, w in kwargs.items():
+            setattr(xGridModel, k, w)
+        self.xDialog.insertByName(name, xGridModel)
+        return xGridModel
+
+    def run (self, sLang):
+        # ui lang
+        self.dUI = ti_strings.getUI(sLang)
+
+        # dialog
+        self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
+        self.xDialog.Width = 360
+        self.xDialog.Height = 305
+        self.xDialog.Title = self.dUI.get('title', "#title#")
+        #xWindowSize = helpers.getWindowSize()
+        #self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
+        #self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
+
+        # fonts
+        xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDTitle.Height = 9
+        xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDTitle.Name = "Verdana"
+        
+        xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
+        xFDSubTitle.Height = 8
+        xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
+        xFDSubTitle.Name = "Verdana"
+
+        # widget
+        nX1 = 10
+        nX2 = 20
+        nX3 = 120
+
+        nY0 = 5
+        nY1 = nY0 + 13
+        nY2 = nY1 + 60
+        nY3 = nY2 + 60
+        nY4 = nY3 + 80
+
+        nXB = nX1 + 110
+
+        nHeight = 10
+
+        #### Add word
+        self._addWidget("add_section", 'FixedLine', nX1, nY0, 100, nHeight, Label = self.dUI.get("information_section", "#err"), FontDescriptor = xFDTitle)
+        
+        self._addWidget('save_label', 'FixedText', nX1, nY1, 100, nHeight, Label = self.dUI.get('save', "#err"), FontDescriptor = xFDTitle)
+        self._addWidget('save_desc_label', 'FixedText', nX1, nY1+10, 100, nHeight*5, Label = self.dUI.get('save_desc', "#err"), MultiLine=True)
+        
+        self._addWidget('duplicates_label', 'FixedText', nX1, nY2, 100, nHeight, Label = self.dUI.get('duplicates', "#err"), FontDescriptor = xFDTitle)
+        self._addWidget('duplicates_desc_label', 'FixedText', nX1, nY2+10, 100, nHeight*5, Label = self.dUI.get('duplicates_desc', "#err"), MultiLine=True)
+
+        self._addWidget('compilation_label', 'FixedText', nX1, nY3, 100, nHeight, Label = self.dUI.get('compilation', "#err"), FontDescriptor = xFDTitle)
+        self._addWidget('compilation_desc_label', 'FixedText', nX1, nY3+10, 100, nHeight*7, Label = self.dUI.get('compilation_desc', "#err"), MultiLine=True)
+        
+        self._addWidget('warning_label', 'FixedText', nX1, nY4, 100, nHeight, Label = self.dUI.get('warning', "#err"), FontDescriptor = xFDTitle)
+        self._addWidget('warning_desc_label', 'FixedText', nX1, nY4+10, 100, nHeight*7, Label = self.dUI.get('warning_desc', "#err"), MultiLine=True)
+
+        #### Tags
+        self._addWidget("tags_section", 'FixedLine', nXB, nY0, 230, nHeight, Label = self.dUI.get("tags_section", "#err"), FontDescriptor = xFDTitle)
+        self.xGridModel = self._addGrid("list_grid_tags", nXB, nY0+10, 230, 265, [
+            {"Title": self.dUI.get("tags", "#err"), "ColumnWidth": 40},
+            {"Title": self.dUI.get("meaning", "#err"), "ColumnWidth": 190}
+        ])
+
+        self._addWidget('close_button', 'Button', self.xDialog.Width-50, self.xDialog.Height-20, 40, 12, Label = self.dUI.get('close_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x550000)
+
+        self.loadData()
+
+        # container
+        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
+        self.xContainer.setModel(self.xDialog)
+        self.xGridControlInfo = self.xContainer.getControl('list_grid_tags')
+        self.xContainer.getControl('close_button').addActionListener(self)
+        self.xContainer.getControl('close_button').setActionCommand('Close')
+        self.xContainer.setVisible(False)
+        xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
+        self.xContainer.createPeer(xToolkit, None)
+        self.xContainer.execute()
+
+    # XActionListener
+    def actionPerformed (self, xActionEvent):
+        try:
+            if xActionEvent.ActionCommand == "Close":
+                self.xContainer.endExecute()
+        except:
+            traceback.print_exc()
+
+    def loadData (self):
+        xGridDataModel = self.xGridModel.GridDataModel
+        for i, sKey in enumerate(lxg._dTAGS):
+            xGridDataModel.addRow(i, [sKey, lxg._dTAGS[sKey][1]])

ADDED   gc_lang/fr/oxt/DictOptions/do_strings.py
Index: gc_lang/fr/oxt/DictOptions/do_strings.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/do_strings.py
@@ -0,0 +1,43 @@
+def getUI (sLang):
+    if sLang in dStrings:
+        return dStrings[sLang]
+    return dStrings["fr"]
+
+dStrings = {
+    "fr": {
+        "title": "Grammalecte · Options des dictionnaires",
+        
+        "spelling_section": "Correcteur orthographique",
+        "activate_main": "Activer le correcteur orthographique de Grammalecte",
+        "activate_main_descr": "Supplante le correcteur orthographique inclus dans LibreOffice (Hunspell).",
+
+        "suggestion_section": "Moteur de suggestion orthographique",
+        "activate_spell_sugg": "Activer le moteur de suggestion de Grammalecte",
+        "activate_spell_sugg_descr": "Désactivée, cette option remplace la suggestion orthographique de Grammalecte par celle fournie par LibreOffice (Hunspell). Les mots inclus dans le dictionnaire personnalisé ne seront plus inclus aux suggestions.",
+
+        "personal_section": "Dictionnaire personnel",
+        "activate_personal": "Utiliser",
+        "activate_personal_descr": "Le dictionnaire personnel est une commodité pour ajouter le vocabulaire qui vous est utile. Il ne supplante pas le dictionnaire commun ; il ne fait qu’ajouter de nouveaux mots.",
+
+        "apply_button": "Appliquer",
+        "cancel_button": "Annuler",
+    },
+    "en": {
+        "title": "Grammalecte · Options for dictionaries",
+        
+        "spelling_section": "Spell checker",
+        "activate_main": "Activate the spell checker from Grammalecte",
+        "activate_main_descr": "Overrides the spell checker included in LibreOffice (Hunspell)",
+
+        "suggestion_section": "Spell suggestion engine",
+        "activate_spell_sugg": "Activate the suggestion engine of Grammalecte",
+        "activate_spell_sugg_descr": "Disactivated, this option replace the spell suggestion engine of Grammalecte by the one of LibreOffice (Hunspell). Words included in the personal dictionary won’t be included among suggestions.",
+
+        "personal_section": "Personal dictionary",
+        "activate_personal": "Use",
+        "activate_personal_descr": "The personal dictionary is a commodity to add the vocabulary you want. It doesn’t override the common dictionary ; it only adds new words.",
+
+        "apply_button": "Apply",
+        "cancel_button": "Cancel",
+    },
+}

ADDED   gc_lang/fr/oxt/DictOptions/lxe_strings.py
Index: gc_lang/fr/oxt/DictOptions/lxe_strings.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/lxe_strings.py
@@ -0,0 +1,83 @@
+def getUI (sLang):
+    if sLang in dStrings:
+        return dStrings[sLang]
+    return dStrings["fr"]
+
+dStrings = {
+    "fr": {
+        "title": "Grammalecte · Éditeur lexical",
+
+        # Ajout
+        "add_section": "Nouveau mot (lemme)",
+        "lemma": "Lemme",
+        "search_button": "Recherche",
+        "information_button": "<i>",
+
+        # catégories
+        "common_name": "Nom commun",
+        "nom_adj": "Nom et adjectif",
+        "nom": "Nom",
+        "adj": "Adjectif",
+        "alt_lemma": "[optionnel] Autre forme (masculine, féminine, variante, etc.)",
+
+        "proper_name": "Nom propre",
+        "M1": "Prénom",
+        "M2": "Patronyme",
+        "MP": "Autre",
+
+        "gender": "Genre",
+        "epi": "épicène",
+        "mas": "masculin",
+        "fem": "féminin",
+        "plural": "Pluriel",
+        "-s": "pluriel en ·s",
+        "-x": "pluriel en ·x",
+        "inv": "invariable",
+
+        "verb": "Verbe",
+        "v_i": "intransitif",
+        "v_t": "transitif",
+        "v_n": "transitif indirect",
+        "v_p": "pronominal",
+        "v_m": "impersonnel",
+        "aux": "Auxiliaire au passé composé",
+        "v_ae": "être",
+        "v_aa": "avoir",
+        "v_pp": "Participes passés variables",
+        "v_pattern": "Verbe modèle [optionnel]",
+
+        "adverb": "Adverbe",
+
+        "other": "Autre",
+        "flexion": "Flexion",
+        "tags": "Étiquettes",
+
+        # Lexicon
+        "new_section": "Mots générés",
+        "lexicon_section": "Votre lexique",
+        "lex_#": "#",
+        "lex_flex": "Flexions",
+        "lex_lemma": "Lemmes",
+        "lex_tags": "Étiquettes",
+
+        "add_button": "Ajouter au lexique",
+        "delete_button": "Supprimer la sélection",
+        "save_button": "Enregistrer",
+
+        # Dictionary
+        "dictionary_section": "Dictionnaire personnel",
+        "save_date_label": "Date d’enregistrement :",
+        "num_of_entries_label": "Nombre d’entrées :",
+        "export_button": "Exporter",
+        "void": "[néant]",
+
+        #
+        "close_button": "Fermer",
+    },
+    # Traduction délibérément limitée
+    "en": {
+        "title": "Grammalecte · Lexicon editor",
+        
+        "close_button": "Close",
+    },
+}

ADDED   gc_lang/fr/oxt/DictOptions/sw_strings.py
Index: gc_lang/fr/oxt/DictOptions/sw_strings.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/sw_strings.py
@@ -0,0 +1,34 @@
+def getUI (sLang):
+    if sLang in dStrings:
+        return dStrings[sLang]
+    return dStrings["fr"]
+
+dStrings = {
+    "fr": {
+        "title": "Grammalecte · Recherche et informations",
+
+        "search_section": "Recherche",
+
+        "similar_search_section": "Graphies similaires",
+        "similar_search_button": "Chercher",
+
+        "regex_search_section": "Expression régulières",
+        "flexion": "Flexion",
+        "tags": "Étiquettes",
+        "regex_search_button": "Chercher",
+        "result_warning": "La recherche par expressions régulières peut générer un nombre gigantesque de résultats. Seules les 2000 premières occurrences trouvées seront affichées. La recherche peut être longue, parce tout le graphe de mots, qui contient 500 000 flexions, sera parcouru si besoin.",
+
+        "result_section": "Résultats",
+        "res_flexion": "Flexions",
+        "res_lemma": "Lemmes",
+        "res_tags": "Étiquettes",
+        
+        "close_button": "Fermer",
+    },
+
+    "en": {
+        "title": "Grammalecte · Search and informations",
+        
+        "close_button": "Close",
+    },
+}

ADDED   gc_lang/fr/oxt/DictOptions/ti_strings.py
Index: gc_lang/fr/oxt/DictOptions/ti_strings.py
==================================================================
--- /dev/null
+++ gc_lang/fr/oxt/DictOptions/ti_strings.py
@@ -0,0 +1,37 @@
+def getUI (sLang):
+    if sLang in dStrings:
+        return dStrings[sLang]
+    return dStrings["fr"]
+
+dStrings = {
+    "fr": {
+        "title": "Grammalecte · Informations",
+
+        "information_section": "Informations",
+
+        "save": "Enregistrement",
+        "save_desc": "Les modifications apportées au lexique ne sont enregistrées dans le dictionnaire qu’au moment où vous cliquez sur ‹Enregistrer› dans l’onglet ‹Lexique›.",
+
+        "duplicates": "Doublons",
+        "duplicates_desc": "Il est inutile de purger votre lexique des doublons éventuels. Les doublons sont automatiquement supprimés lors de la création du dictionnaire.",
+
+        "compilation": "Compilation du dictionnaire",
+        "compilation_desc": "Le dictionnaire est compilé comme un graphe de mots sous la forme d’une chaîne binaire dans un fichier JSON. Cette opération peut prendre du temps et consommer beaucoup de mémoire si votre lexique contient plusieurs dizaines de milliers d’entrées.",
+
+        "warning": "Avertissement",
+        "warning_desc": "Il est déconseillé d’utiliser la catégorie ‹Autre› pour générer autre chose que des noms, des adjectifs, des noms propres, des verbes et des adverbes. Il n’y a aucune garantie que les étiquettes pour les autres catégories, notamment les mots grammaticaux, ne changeront pas.",
+
+        "tags_section": "Signification des étiquettes",
+        "tags": "Étiquettes",
+        "meaning": "Signification",
+
+
+        "close_button": "Fermer",
+    },
+
+    "en": {
+        "title": "Grammalecte · Informations",
+        
+        "close_button": "Close",
+    },
+}

Index: gc_lang/fr/oxt/TextFormatter/TextFormatter.py
==================================================================
--- gc_lang/fr/oxt/TextFormatter/TextFormatter.py
+++ gc_lang/fr/oxt/TextFormatter/TextFormatter.py
@@ -383,17 +383,12 @@
             for key, lWidget in self.dCheckboxWidgets.items():
                 w = getattr(self, key)
                 dOpt[w.Name] = w.State
                 for w in lWidget:
                     dOpt[w.Name] = w.State
-            # get extension path
-            xDefaultContext = self.ctx.ServiceManager.DefaultContext
-            xPackageInfoProvider = xDefaultContext.getValueByName("/singletons/com.sun.star.deployment.PackageInformationProvider")
-            sExtPath = xPackageInfoProvider.getPackageLocation("French.linguistic.resources.from.Dicollecte.by.OlivierR")
-            sExtPath = sExtPath[8:] + "/pythonpath/tf_options.py"  # remove "file:///"
-            sExtPath = os.path.abspath(sExtPath)
             # write file
+            sExtPath = helpers.getAbsolutePathOf("/pythonpath/tf_options.py")
             if os.path.isfile(sExtPath):
                 hOpt = open(sExtPath, "w")
                 hOpt.write("dDefaultOpt = " + str(tf_options.dDefaultOpt) + "\n")
                 hOpt.write("dOpt = " + str(dOpt))
                 hOpt.close()

Index: gc_lang/fr/oxt/addons.xcu
==================================================================
--- gc_lang/fr/oxt/addons.xcu
+++ gc_lang/fr/oxt/addons.xcu
@@ -75,11 +75,11 @@
                         <value>service:net.grammalecte.AppLauncher?EN</value>
                     </prop>
                     <prop oor:name="Title" oor:type="xs:string">
                         <value/>
                         <value xml:lang="fr">~Recenseur de mots…</value>
-                        <value xml:lang="en-US">~Enumerator of words…</value>
+                        <value xml:lang="en-US">Enumerato~r of words…</value>
                     </prop>
                     <prop oor:name="Target" oor:type="xs:string">
                         <value>_self</value>
                     </prop>
                     <prop oor:name="Context" oor:type="xs:string">
@@ -134,10 +134,48 @@
                     <prop oor:name="ImageIdentifier" oor:type="xs:string">
                         <value>org.dicollecte.images:Grammalecte</value>
                     </prop>
                 </node>
                 <node oor:name="m7" oor:op="replace">
+                    <prop oor:name="URL" oor:type="xs:string">
+                        <value>service:net.grammalecte.AppLauncher?DI</value>
+                    </prop>
+                    <prop oor:name="Title" oor:type="xs:string">
+                        <value/>
+                        <value xml:lang="fr">~Options des dictionnaires…</value>
+                        <value xml:lang="en-US">Dictionaries ~options…</value>
+                    </prop>
+                    <prop oor:name="Target" oor:type="xs:string">
+                        <value>_self</value>
+                    </prop>
+                    <prop oor:name="Context" oor:type="xs:string">
+                        <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
+                    </prop>
+                    <prop oor:name="ImageIdentifier" oor:type="xs:string">
+                        <value>org.dicollecte.images:Frenchflag</value>
+                    </prop>
+                </node>
+                <node oor:name="m8" oor:op="replace">
+                    <prop oor:name="URL" oor:type="xs:string">
+                        <value>service:net.grammalecte.AppLauncher?LE</value>
+                    </prop>
+                    <prop oor:name="Title" oor:type="xs:string">
+                        <value/>
+                        <value xml:lang="fr">Éditeur ~lexical…</value>
+                        <value xml:lang="en-US">~Lexicon editor…</value>
+                    </prop>
+                    <prop oor:name="Target" oor:type="xs:string">
+                        <value>_self</value>
+                    </prop>
+                    <prop oor:name="Context" oor:type="xs:string">
+                        <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
+                    </prop>
+                    <prop oor:name="ImageIdentifier" oor:type="xs:string">
+                        <value>org.dicollecte.images:Frenchflag</value>
+                    </prop>
+                </node>
+                <node oor:name="m9" oor:op="replace">
                     <prop oor:name="URL" oor:type="xs:string">
                         <value>service:net.grammalecte.AppLauncher?DS</value>
                     </prop>
                     <prop oor:name="Title" oor:type="xs:string">
                         <value/>
@@ -152,19 +190,19 @@
                     </prop>
                     <prop oor:name="ImageIdentifier" oor:type="xs:string">
                         <value>org.dicollecte.images:Frenchflag</value>
                     </prop>
                 </node>
-                <node oor:name="m8" oor:op="replace">
+                <node oor:name="m10" oor:op="replace">
                     <prop oor:name="URL" oor:type="xs:string">
                         <value>private:separator</value>
                     </prop>
                     <prop oor:name="Context" oor:type="xs:string">
                         <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
                     </prop>
                 </node>
-                <node oor:name="m9" oor:op="replace">
+                <node oor:name="m11" oor:op="replace">
                     <prop oor:name="URL" oor:type="xs:string">
                         <value>service:net.grammalecte.AppLauncher?About</value>
                     </prop>
                     <prop oor:name="Title" oor:type="xs:string">
                         <value/>

DELETED gc_lang/fr/oxt/helpers.py
Index: gc_lang/fr/oxt/helpers.py
==================================================================
--- gc_lang/fr/oxt/helpers.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- coding: utf8 -*-
-
-import uno
-import traceback
-
-from com.sun.star.beans import PropertyValue
-
-
-# XRay - API explorer
-from com.sun.star.uno import RuntimeException as _rtex
-def xray (myObject):
-    try:
-        sm = uno.getComponentContext().ServiceManager
-        mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
-        scriptPro = mspf.createScriptProvider("")
-        xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application")
-        xScript.invoke((myObject,), (), ())
-        return
-    except:
-        raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext())
-
-
-# MRI - API Explorer
-def mri (ctx, xTarget):
-    try:
-        xMri = ctx.ServiceManager.createInstanceWithContext("mytools.Mri", ctx)
-        xMri.inspect(xTarget)
-    except:
-        raise _rtex("\Python extension MRI is not installed", uno.getComponentContext())
-
-
-def getConfigSetting (sNodeConfig, bUpdate):
-    "get a configuration node"
-    # example: xNode = getConfigSetting("/org.openoffice.Office.Common/Path/Current", False)
-    xSvMgr = uno.getComponentContext().ServiceManager
-    xConfigProvider = xSvMgr.createInstanceWithContext("com.sun.star.configuration.ConfigurationProvider", uno.getComponentContext())
-    xPropertyValue = uno.createUnoStruct("com.sun.star.beans.PropertyValue")
-    xPropertyValue.Name = "nodepath"
-    xPropertyValue.Value = sNodeConfig
-    if bUpdate:
-        sService = "com.sun.star.configuration.ConfigurationUpdateAccess"
-    else:
-        sService = "com.sun.star.configuration.ConfigurationAccess"
-    return xConfigProvider.createInstanceWithArguments(sService, (xPropertyValue,)) # return xNode
-
-
-def printServices (o):
-    for s in o.getAvailableServiceNames():
-        print(' > '+s)
-
-
-def getWindowSize ():
-    "return main window size"
-    xCurCtx = uno.getComponentContext()
-    xDesktop = xCurCtx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', xCurCtx)
-    xContainerWindow = xDesktop.getCurrentComponent().CurrentController.Frame.ContainerWindow
-    xWindowSize = xContainerWindow.convertSizeToLogic(xContainerWindow.Size, uno.getConstantByName("com.sun.star.util.MeasureUnit.POINT"))
-    #print(xContainerWindow.Size.Width, ">", xWindowSize.Width)
-    #print(xContainerWindow.Size.Height, ">", xWindowSize.Height)
-    xWindowSize.Width = xWindowSize.Width * 0.666
-    xWindowSize.Height = xWindowSize.Height * 0.666
-    return xWindowSize

ADDED   gc_lang/fr/tb/content/file_handler.js
Index: gc_lang/fr/tb/content/file_handler.js
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/content/file_handler.js
@@ -0,0 +1,79 @@
+// JavaScript
+
+"use strict";
+
+// Assuming that Cc, Ci and Cu are already loaded
+
+const {TextDecoder, TextEncoder, OS} = Components.utils.import("resource://gre/modules/osfile.jsm", {});
+
+
+const oFileHandler = {
+    // https://developer.mozilla.org/fr/docs/Mozilla/JavaScript_code_modules/OSFile.jsm/OS.File_for_the_main_thread
+
+    xDataFolder: null,
+
+    prepareDataFolder: function () {
+        let xDirectoryService = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
+        // this is a reference to the profile dir (ProfD) now.
+        let xExtFolder = xDirectoryService.get("ProfD", Ci.nsIFile);
+        xExtFolder.append("grammalecte-data");
+        if (!xExtFolder.exists() || !xExtFolder.isDirectory()) {
+            // read and write permissions to owner and group, read-only for others.
+            xExtFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 774);
+        }
+        this.xDataFolder = xExtFolder;
+    },
+
+    createPathFileName: function (sFilename) {
+        let spfDest = this.xDataFolder.path;
+        spfDest += (/^[A-Z]:/.test(this.xDataFolder.path)) ? "\\" + sFilename : "/" + sFilename;
+        return spfDest;
+    },
+
+    loadFile: async function (sFilename) {
+        if (!this.xDataFolder) {
+            this.prepareDataFolder();
+        }
+        try {
+            let xDecoder = new TextDecoder();
+            let array = await OS.File.read(this.createPathFileName(sFilename));
+            return xDecoder.decode(array);
+        }
+        catch (e) {
+            console.error(e);
+            return null;
+        }
+    },
+
+    saveFile: function (sFilename, sData) {
+        if (!this.xDataFolder) {
+            this.prepareDataFolder();
+        }
+        let xEncoder = new TextEncoder();
+        let xEncodedRes = xEncoder.encode(sData);
+        console.log("save dictionary: " + this.createPathFileName(sFilename));
+        OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes);
+        //OS.File.writeAtomic(this.createPathFileName(sFilename), xEncodedRes, {tmpPath: "file.txt.tmp"}); // error with a temporary file (can’t move it)
+    },
+
+    deleteFile: function (sFilename) {
+        if (!this.xDataFolder) {
+            this.prepareDataFolder();
+        }
+        OS.File.remove(this.createPathFileName(sFilename), {ignoreAbsent: true});
+    },
+
+    saveAs: function (sData) {
+        // save anywhere with file picker
+        let xFilePicker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
+        xFilePicker.init(window, "Enregistrer sous", Ci.nsIFilePicker.modeSave);
+        xFilePicker.appendFilters(Ci.nsIFilePicker.filterAll | Ci.nsIFilePicker.filterText);
+        xFilePicker.open(function (nReturnValue) {
+            if (nReturnValue == Ci.nsIFilePicker.returnOK || nReturnValue == Ci.nsIFilePicker.returnReplace) {
+                let xEncoder = new TextEncoder();
+                let xEncodedRes = xEncoder.encode(sData);
+                OS.File.writeAtomic(xFilePicker.file.path, xEncodedRes, {tmpPath: "file.txt.tmp"});
+             }
+        });
+    }
+}

ADDED   gc_lang/fr/tb/content/lex_editor.css
Index: gc_lang/fr/tb/content/lex_editor.css
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/content/lex_editor.css
@@ -0,0 +1,115 @@
+/* CSS */
+
+button {
+    font-weight: bold;
+}
+
+/*
+    Dictionary
+*/ 
+.dictionary {
+    font-size: 18px;
+    font-weight: bold;
+    color: hsl(210, 50%, 50%);
+}
+.dic_text {
+    font-size: 18px;
+    color: hsl(210, 50%, 50%);
+}
+.align_right {
+    text-align: right;
+}
+
+
+/*
+    Add new words
+*/
+.section {
+    font-size: 16px;
+    font-weight: bold;
+    color: hsl(210, 50%, 50%);
+}
+
+.subsection {
+    font-size: 14px;
+    font-weight: bold;
+    color: hsl(210, 50%, 50%);
+}
+
+.option {
+    width: 120px;
+    font-size: 12px;
+}
+
+.m_left {
+    margin-left: 20px;
+}
+
+.m_left2 {
+    margin-left: 40px;
+}
+
+.v_usage {
+    width: 150px;
+}
+.v_textbox {
+    width: 200px;
+}
+
+.other_label {
+    width: 80px;
+}
+.other_textbox {
+    width: 250px;
+}
+
+#generated_words_table {
+    width: 400px;
+    height: 600px;
+}
+
+.delete_entry {
+    color: hsl(0, 100%, 50%);
+    font-weight: bold;
+}
+
+/*
+    Lexicon tab
+*/
+
+#lexicon_table {
+    width: 600px;
+    height: 650px;
+}
+
+.info_label {
+    width: 120px;
+}
+.data {
+    width: 90px;
+}
+
+/*
+    Search tab
+*/
+
+#search_table {
+    width: 600px;
+    height: 650px;
+}
+
+description {
+    width: 200px;
+}
+
+/*
+    Informations tab
+*/
+
+#tags_table {
+    width: 600px;
+    height: 650px;
+    font-family: "Courier new", "Ubuntu Mono", Courier, Consolas, monospace;
+}
+
+

ADDED   gc_lang/fr/tb/content/lex_editor.js
Index: gc_lang/fr/tb/content/lex_editor.js
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/content/lex_editor.js
@@ -0,0 +1,541 @@
+// JavaScript
+
+"use strict";
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+const prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService).getBranch("extensions.grammarchecker.");
+
+
+/*
+    Common functions
+*/
+
+function showError (e) {
+    Cu.reportError(e);
+    console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
+}
+
+function createNode  (sType, oAttr) {
+    try {
+        let xNode = document.createElement(sType);
+        for (let sParam in oAttr) {
+            xNode.setAttribute(sParam, oAttr[sParam]);
+        }
+        return xNode;
+    }
+    catch (e) {
+        showError(e);
+    }
+}
+
+function enableElement (sElemId) {
+    if (document.getElementById(sElemId)) {
+        document.getElementById(sElemId).disabled = false;
+    } else {
+        console.log("HTML node named <" + sElemId + "> not found.")
+    }
+}
+
+function disableElement (sElemId) {
+    if (document.getElementById(sElemId)) {
+        document.getElementById(sElemId).disabled = true;
+    } else {
+        console.log("HTML node named <" + sElemId + "> not found.")
+    }
+}
+
+
+
+class Table {
+
+    constructor (sNodeId, lColumn, lColumnWidth, sProgressBarId, sResultId="") {
+        this.sNodeId = sNodeId;
+        this.xTable = document.getElementById(sNodeId);
+        this.nColumn = lColumn.length;
+        this.lColumn = lColumn;
+        this.lColumnWidth = lColumnWidth;
+        this.xProgressBar = document.getElementById(sProgressBarId);
+        this.xNumEntry = document.getElementById(sResultId);
+        this.iEntryIndex = 0;
+        this.lEntry = [];
+        this.nEntry = 0
+        this._createHeader();
+    }
+
+    _createHeader () {
+        let xListheadNode = createNode("listhead");
+        for (let sColumn of this.lColumn) {
+            xListheadNode.appendChild(createNode("listheader", { label: sColumn }));
+        }
+        this.xTable.appendChild(xListheadNode);
+        let xListcolsNode = createNode("listcols");
+        for (let cColumn of this.lColumnWidth) {
+            xListcolsNode.appendChild(createNode("listcol", { flex: cColumn }));
+        }
+        this.xTable.appendChild(xListcolsNode);
+    }
+
+    clear () {
+        while (this.xTable.firstChild) {
+            this.xTable.removeChild(this.xTable.firstChild);
+        }
+        this.iEntryIndex = 0;
+        this._createHeader();
+    }
+
+    fill (lFlex) {
+        this.clear();
+        if (lFlex.length > 0) {
+            this.xProgressBar.max = lFlex.length;
+            this.xProgressBar.value = 1;
+            for (let lData of lFlex) {
+                this._addRow(lData);
+                this.xProgressBar.value += 1;
+            }
+            this.xProgressBar.value = this.xProgressBar.max;
+            window.setTimeout(() => { this.xProgressBar.value = 0; }, 3000);
+        }
+        this.lEntry = lFlex;
+        this.nEntry = lFlex.length;
+        this.showEntryNumber();
+    }
+
+    addEntries (lFlex) {
+        this.lEntry.push(...lFlex);
+        for (let lData of lFlex) {
+            this._addRow(lData);
+        }
+        this.nEntry += lFlex.length;
+        this.showEntryNumber();
+    }
+
+    showEntryNumber () {
+        if (this.xNumEntry) {
+            this.xNumEntry.value = this.nEntry;
+        }
+    }
+
+    _addRow (lData) {
+        let xRowNode = createNode("listitem", { id: this.sNodeId + "_item_" + this.iEntryIndex, value: this.iEntryIndex });
+        for (let data of lData) {
+            xRowNode.appendChild(createNode("listcell", { label: data }));
+        }
+        this.xTable.appendChild(xRowNode);
+        this.iEntryIndex += 1;
+    }
+
+    deleteSelection () {
+        for (let xItem of this.xTable.selectedItems) {
+            this.lEntry[parseInt(xItem.value)] = null;
+            xItem.style.display = "none";
+            this.nEntry -= 1;
+        }
+        this.showEntryNumber();
+    }
+
+    getEntries () {
+        return this.lEntry.filter((e) => e !== null);
+    }
+}
+
+
+const oGenerator = {
+
+    sLemma: "",
+
+    cMainTag: "",
+
+    lFlexion: [],
+
+    listen: function () {
+        document.getElementById("lemma").addEventListener("keyup", () => { this.update(); }, false);
+        // nom commun
+        document.getElementById("tag_N").addEventListener("click", () => { this.update("N"); }, false);
+        document.getElementById("nom_adj").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("nom").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("adj").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("N_epi").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("N_mas").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("N_fem").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("N_s").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("N_x").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("N_inv").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("lemma2").addEventListener("keyup", () => { this.update(); }, false);
+        // nom propre
+        document.getElementById("tag_M").addEventListener("click", () => { this.update("M"); }, false);
+        document.getElementById("M1").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("M2").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("MP").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("M_epi").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("M_mas").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("M_fem").addEventListener("click", () => { this.update(); }, false);
+        // verbe
+        document.getElementById("tag_V").addEventListener("click", () => { this.update("V"); }, false);
+        document.getElementById("v_i").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_t").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_n").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_p").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_m").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_ae").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_aa").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("v_ppas").addEventListener("click", () => { this.update(); }, false);
+        document.getElementById("verbe_modele").addEventListener("keyup", () => { this.update(); }, false);
+        // adverbe
+        document.getElementById("tag_W").addEventListener("click", () => { this.update("W"); }, false);
+        // autre
+        document.getElementById("tag_X").addEventListener("click", () => { this.update("X"); }, false);
+        document.getElementById("flexion").addEventListener("keyup", () => { this.update(); }, false);
+        document.getElementById("tags").addEventListener("keyup", () => { this.update(); }, false);
+        // ajout
+        document.getElementById("add_to_lexicon").addEventListener("click", () => { this.addToLexicon(); }, false);
+        document.getElementById("delete_selection").addEventListener("click", () => { oGenWordsTable.deleteSelection(); }, false);
+    },
+
+    clear: function () {
+        try {
+            // nom commun
+            document.getElementById("tag_N").checked = false;
+            document.getElementById("nom_adj").checked = false;
+            document.getElementById("nom").checked = false;
+            document.getElementById("adj").checked = false;
+            document.getElementById("N_epi").checked = false;
+            document.getElementById("N_mas").checked = false;
+            document.getElementById("N_fem").checked = false;
+            document.getElementById("N_s").checked = false;
+            document.getElementById("N_x").checked = false;
+            document.getElementById("N_inv").checked = false;
+            document.getElementById("lemma2").value = "";
+            // nom propre
+            document.getElementById("tag_M").checked = false;
+            document.getElementById("M1").checked = false;
+            document.getElementById("M2").checked = false;
+            document.getElementById("MP").checked = false;
+            document.getElementById("M_epi").checked = false;
+            document.getElementById("M_mas").checked = false;
+            document.getElementById("M_fem").checked = false;
+            // verbe
+            document.getElementById("tag_V").checked = false;
+            document.getElementById("v_i").checked = false;
+            document.getElementById("v_t").checked = false;
+            document.getElementById("v_n").checked = false;
+            document.getElementById("v_p").checked = false;
+            document.getElementById("v_m").checked = false;
+            document.getElementById("v_ae").checked = false;
+            document.getElementById("v_aa").checked = false;
+            document.getElementById("v_ppas").checked = true;
+            document.getElementById("verbe_modele").value = "";
+            // adverbe
+            document.getElementById("tag_W").checked = false;
+            // autre
+            document.getElementById("tag_X").checked = false;
+            document.getElementById("flexion").value = "";
+            document.getElementById("tags").value = "";
+        }
+        catch (e) {
+            showError(e);
+        }
+    },
+
+    lTag: ["N", "M", "V", "W", "X"],
+
+    setMainTag: function (cTag) {
+        this.cMainTag = cTag;
+        for (let c of this.lTag) {
+            if (c !== cTag) {
+                document.getElementById("tag_"+c).checked = false;
+            }
+        }
+    },
+
+    update: function (cTag=null) {
+        if (cTag !== null) {
+            this.setMainTag(cTag);
+        }
+        try {
+            this.lFlexion = [];
+            this.sLemma = document.getElementById("lemma").value.trim();
+            if (this.sLemma.length > 0) {
+                switch (this.cMainTag) {
+                    case "N":
+                        if (!this.getRadioValue("pos_nom_commun") || !this.getRadioValue("genre_nom_commun")) {
+                            break;
+                        }
+                        let sTag = this.getRadioValue("pos_nom_commun") + this.getRadioValue("genre_nom_commun");
+                        switch (this.getRadioValue("pluriel_nom_commun")) {
+                            case "s":
+                                this.lFlexion.push([this.sLemma, sTag+":s/*"]);
+                                this.lFlexion.push([this.sLemma+"s", sTag+":p/*"]);
+                                break;
+                            case "x":
+                                this.lFlexion.push([this.sLemma, sTag+":s/*"]);
+                                this.lFlexion.push([this.sLemma+"x", sTag+":p/*"]);
+                                break;
+                            case "i":
+                                this.lFlexion.push([this.sLemma, sTag+":i/*"]);
+                                break;
+                        }
+                        let sLemma2 = document.getElementById("lemma2").value.trim();
+                        if (sLemma2.length > 0  &&  this.getRadioValue("pos_nom_commun2")  &&  this.getRadioValue("genre_nom_commun2")) {
+                            let sTag2 = this.getRadioValue("pos_nom_commun2") + this.getRadioValue("genre_nom_commun2");
+                            switch (this.getRadioValue("pluriel_nom_commun2")) {
+                                case "s":
+                                    this.lFlexion.push([sLemma2, sTag2+":s/*"]);
+                                    this.lFlexion.push([sLemma2+"s", sTag2+":p/*"]);
+                                    break;
+                                case "x":
+                                    this.lFlexion.push([sLemma2, sTag2+":s/*"]);
+                                    this.lFlexion.push([sLemma2+"x", sTag2+":p/*"]);
+                                    break;
+                                case "i":
+                                    this.lFlexion.push([sLemma2, sTag2+":i/*"]);
+                                    break;
+                            }
+                        }
+                        break;
+                    case "V": {
+                        if (!this.sLemma.endsWith("er") && !this.sLemma.endsWith("ir") && !this.sLemma.endsWith("re")) {
+                            break;
+                        }
+                        this.sLemma = this.sLemma.toLowerCase();
+                        let cGroup = "";
+                        let c_i = (document.getElementById("v_i").checked) ? "i" : "_";
+                        let c_t = (document.getElementById("v_t").checked) ? "t" : "_";
+                        let c_n = (document.getElementById("v_n").checked) ? "n" : "_";
+                        let c_p = (document.getElementById("v_p").checked) ? "p" : "_";
+                        let c_m = (document.getElementById("v_m").checked) ? "m" : "_";
+                        let c_ae = (document.getElementById("v_ae").checked) ? "e" : "_";
+                        let c_aa = (document.getElementById("v_aa").checked) ? "a" : "_";
+                        let sVerbTag = c_i + c_t + c_n + c_p + c_m + c_ae + c_aa;
+                        if (!sVerbTag.endsWith("__") && !sVerbTag.startsWith("____")) {
+                            let sVerbPattern = document.getElementById("verbe_modele").value.trim();
+                            if (sVerbPattern.length == 0) {
+                                // utilisation du générateur de conjugaison
+                                let bVarPpas = document.getElementById("v_ppas").checked;
+                                for (let [sFlexion, sFlexTags] of conj_generator.conjugate(this.sLemma, sVerbTag, bVarPpas)) {
+                                    this.lFlexion.push([sFlexion, sFlexTags]);
+                                }
+                            } else {
+                                // copie du motif d’un autre verbe : utilisation du conjugueur
+                                if (conj.isVerb(sVerbPattern)) {
+                                    let oVerb = new Verb(this.sLemma, sVerbPattern);
+                                    for (let [sTag1, dFlex] of oVerb.dConj.entries()) {
+                                        if (sTag1 !== ":Q") {
+                                            for (let [sTag2, sConj] of dFlex.entries()) {
+                                                if (sTag2.startsWith(":") && sConj !== "") {
+                                                    this.lFlexion.push([sConj, ":V" + oVerb.cGroup + "_" + sVerbTag + sTag1 + sTag2]);
+                                                }
+                                            }
+                                        } else {
+                                            // participes passés
+                                            if (dFlex.get(":Q3") !== "") {
+                                                if (dFlex.get(":Q2") !== "") {
+                                                    this.lFlexion.push([dFlex.get(":Q1"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:s/*"]);
+                                                    this.lFlexion.push([dFlex.get(":Q2"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:p/*"]);
+                                                } else {
+                                                    this.lFlexion.push([dFlex.get(":Q1"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:i/*"]);
+                                                }
+                                                this.lFlexion.push([dFlex.get(":Q3"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:s/*"]);
+                                                this.lFlexion.push([dFlex.get(":Q4"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:p/*"]);
+                                            } else {
+                                                this.lFlexion.push([dFlex.get(":Q1"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:e:i/*"]);
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                        break;
+                    }
+                    case "W":
+                        this.sLemma = this.sLemma.toLowerCase();
+                        this.lFlexion.push([this.sLemma, ":W/*"]);
+                        break;
+                    case "M":
+                        this.sLemma = this.sLemma.slice(0,1).toUpperCase() + this.sLemma.slice(1);
+                        let sPOSTag = this.getRadioValue("pos_nom_propre");
+                        let sGenderTag = this.getRadioValue("genre_nom_propre");
+                        if (sGenderTag) {
+                            this.lFlexion.push([this.sLemma, sPOSTag+sGenderTag+":i/*"]);
+                        }
+                        break;
+                    case "X":
+                        let sFlexion = document.getElementById("flexion").value.trim();
+                        let sTags = document.getElementById("tags").value.trim();
+                        if (sFlexion.length > 0 && sTags.startsWith(":")) {
+                            this.lFlexion.push([sFlexion, sTags]);
+                        }
+                        break;
+                }
+            }
+            oGenWordsTable.fill(this.lFlexion);
+        }
+        catch (e) {
+            showError(e);
+        }
+    },
+
+    getRadioValue: function (sName) {
+        if (document.getElementById(sName)) {
+            for (let xNode of document.getElementById(sName).children) {
+                if (xNode.selected) {
+                    return xNode.value;
+                }
+            }
+        }
+        return null;
+    },
+
+    createFlexLemmaTagArray: function () {
+        let lEntry = [];
+        for (let [sFlex, sTags] of oGenWordsTable.getEntries()) {
+            lEntry.push([sFlex, this.sLemma, sTags]);
+        }
+        return lEntry;
+    },
+
+    addToLexicon: function () {
+        try {
+            oLexiconTable.addEntries(this.createFlexLemmaTagArray());
+            oGenWordsTable.clear();
+            document.getElementById("lemma").value = "";
+            document.getElementById("lemma").focus();
+            enableElement("save_button");
+            this.clear();
+            this.cMainTag = "";
+        }
+        catch (e) {
+            showError(e);
+        }
+    }
+}
+
+
+const oBinaryDict = {
+    
+    oIBDAWG: null,
+
+    load: async function () {
+        let sJSON = await oFileHandler.loadFile("fr.personal.json");
+        if (sJSON != "") {
+            let oJSON = JSON.parse(sJSON);
+            this.oIBDAWG = new IBDAWG(oJSON);
+            let lEntry = [];
+            for (let aRes of this.oIBDAWG.select()) {
+                lEntry.push(aRes);
+            }        
+            oLexiconTable.fill(lEntry);
+            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
+            enableElement("export_button");
+        } else {
+            this.setDictData(0, "[néant]");
+            disableElement("export_button");
+        }
+    },
+
+    setDictData: function (nEntries, sDate) {
+        document.getElementById("dic_num_entries").value = nEntries;
+        document.getElementById("dic_save_date").value = sDate;
+    },
+
+    listen: function () {
+        document.getElementById("delete_button").addEventListener("click", () => { oLexiconTable.deleteSelection(); }, false);
+        document.getElementById("save_button").addEventListener("click", () => { this.build(); }, false);
+        document.getElementById("export_button").addEventListener("click", () => { this.export(); }, false);
+        //document.getElementById("import_button").addEventListener("click", () => { this.import(); }, false);
+    },
+
+    build: function () {
+        let xProgressNode = document.getElementById("wait_progress");
+        let lEntry = oLexiconTable.getEntries();
+        if (lEntry.length > 0) {
+            let oDAWG = new DAWG(lEntry, "S", "fr", "Français", "Dictionnaire personnel", xProgressNode);
+            let oJSON = oDAWG.createBinaryJSON(1);
+            oFileHandler.saveFile("fr.personal.json", JSON.stringify(oJSON));
+            this.oIBDAWG = new IBDAWG(oJSON);
+            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
+            //browser.runtime.sendMessage({ sCommand: "setDictionary", dParam: {sType: "personal", oDict: oJSON}, dInfo: {} });
+            enableElement("export_button");
+        } else {
+            oFileHandler.deleteFile("fr.personal.json");
+            this.setDictData(0, "[néant]");
+            disableElement("export_button");
+        }
+    },
+
+    import: function () {
+        console.log("import");
+    },
+
+    export: function () {
+        let sJSON = JSON.stringify(this.oIBDAWG.getJSON());
+        oFileHandler.saveAs(sJSON);
+    }
+}
+
+
+const oSearch = {
+
+    oSpellChecker: null,
+
+    load: function () {
+        this.oSpellChecker = new SpellChecker("fr", "", "fr.json");
+    },
+
+    listen: function () {
+        document.getElementById("search_similar_button").addEventListener("click", () => { this.searchSimilar(); }, false);
+        document.getElementById("search_regex_button").addEventListener("click", () => { this.searchRegex() }, false);
+    },
+
+    searchSimilar: function () {
+        oSearchTable.clear();
+        let sWord = document.getElementById("search_similar").value;
+        if (sWord !== "") {
+            let lResult = this.oSpellChecker.getSimilarEntries(sWord, 20);
+            oSearchTable.fill(lResult);
+        }
+    },
+
+    searchRegex: function () {
+        let sFlexPattern = document.getElementById("search_flexion_pattern").value.trim();
+        let sTagsPattern = document.getElementById("search_tags_pattern").value.trim();
+        let lEntry = [];
+        let i = 0;
+        for (let aRes of this.oSpellChecker.select(sFlexPattern, sTagsPattern)) {
+            lEntry.push(aRes);
+            i++;
+            if (i >= 2000) {
+                break;
+            }
+        }
+        oSearchTable.fill(lEntry);
+    }
+}
+
+
+const oTagsInfo = {
+    load: function () {
+        let lEntry = [];
+        for (let [sTag, [_, sLabel]] of _dTag) {
+            lEntry.push([sTag, sLabel.trim()]);
+        }
+        oTagsTable.fill(lEntry);
+    }
+}
+
+
+const oGenWordsTable = new Table("generated_words_table", ["Flexions", "Étiquettes"], [1, 1], "progress_new_words");
+const oLexiconTable = new Table("lexicon_table", ["Flexions", "Lemmes", "Étiquettes"], [10, 7, 10], "progress_lexicon", "num_entries");
+const oSearchTable = new Table("search_table", ["Flexions", "Lemmes", "Étiquettes"], [10, 7, 10], "progress_search", "search_num_entries");
+const oTagsTable = new Table("tags_table", ["Étiquette", "Signification"], [1, 10], "progress_lexicon");
+
+conj.init(helpers.loadFile("resource://grammalecte/fr/conj_data.json"));
+
+
+oTagsInfo.load();
+oSearch.load();
+oBinaryDict.load();
+oBinaryDict.listen();
+oGenerator.listen();
+oSearch.listen();

ADDED   gc_lang/fr/tb/content/lex_editor.xul
Index: gc_lang/fr/tb/content/lex_editor.xul
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/content/lex_editor.xul
@@ -0,0 +1,326 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://grammarchecker/content/lex_editor.css" type="text/css"?>
+
+<!DOCTYPE dialog SYSTEM "chrome://grammarchecker/locale/lex_editor.dtd">
+
+<dialog
+  id="grammalecte-lexicon-editor-window"
+  title="&window.title;"
+  orient="vertical"
+  buttons="cancel"
+  buttonlabelcancel="&button.cancel.label;"
+  ondialogcancel="return;"
+  width="500"
+  onload="document.getElementById('grammalecte-lexicon-editor-window').centerWindowOnScreen();"
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <!-- Other elements go here -->
+  <hbox>
+    <label class="dictionary" value="Dictionnaire personnel" />
+    <spacer flex="1" />
+    <label class="dic_text align_right" value="Enregistré le :" />
+    <label id="dic_save_date" class="dic_text" value="[néant]" />
+    <spacer flex="1" />
+    <label id="dic_num_entries" class="dic_text align_right" value="0" />
+    <label class="dic_text" value="entrées" />
+    <spacer flex="1" />
+    <button id="export_button" label="Exporter" />
+  </hbox>
+
+  <tabbox id="tabs" selectedIndex="0">
+    <tabs>
+      <tab label="&tab.editor.label;"/>
+      <tab label="&tab.lexicon.label;"/>
+      <tab label="&tab.search.label;"/>
+      <tab label="&tab.info.label;"/>
+    </tabs>
+
+    <tabpanels>
+
+      <!-- NEW WORD -->
+      <tabpanel orient="vertical">
+        
+        <hbox>
+          
+          <vbox>
+            <dialogheader title="Nouveau mot (lemme)" description="Générateur" />
+            <textbox id="lemma" value="" />
+
+            <checkbox id="tag_N" class="subsection" label="Nom et adjectif" />
+            <hbox class="m_left">
+              <radiogroup id="pos_nom_commun" orient="vertical">
+                <radio id="nom_adj" class="option" label="Nom et adjectif" value=":N:A" />
+                <radio id="nom" class="option" label="Nom" value=":N" />
+                <radio id="adj" class="option" label="Adjectif" value=":A" />
+              </radiogroup>
+              <radiogroup id="genre_nom_commun" orient="vertical">
+                <radio id="N_epi" class="option" label="épicène" value=":e" />
+                <radio id="N_mas" class="option" label="masculin" value=":m" />
+                <radio id="N_fem" class="option" label="féminin" value=":f" />
+              </radiogroup>
+              <radiogroup id="pluriel_nom_commun" orient="vertical">
+                <radio id="N_s" class="option" label="pluriel en ·s" value="s" />
+                <radio id="N_x" class="option" label="pluriel en ·x" value="x" />
+                <radio id="N_inv" class="option" label="invariable" value="i" />
+              </radiogroup>
+            </hbox>
+            <vbox class="m_left2">
+              <label class="subsection" value="[optionnel] Autre forme (masculine, féminine, variante…)" />
+              <textbox id="lemma2" value="" />
+              <hbox>
+                <radiogroup id="pos_nom_commun2" orient="vertical">
+                  <radio id="nom_adj2" class="option" label="Nom et adjectif" value=":N:A" />
+                  <radio id="nom2" class="option" label="Nom" value=":N" />
+                  <radio id="adj2" class="option" label="Adjectif" value=":A" />
+                </radiogroup>
+                <radiogroup id="genre_nom_commun2" orient="vertical">
+                  <radio id="N_epi2" class="option" label="épicène" value=":e" />
+                  <radio id="N_mas2" class="option" label="masculin" value=":m" />
+                  <radio id="N_fem2" class="option" label="féminin" value=":f" />
+                </radiogroup>
+                <radiogroup id="pluriel_nom_commun2" orient="vertical">
+                  <radio id="N_s2" class="option" label="pluriel en ·s" value="s" />
+                  <radio id="N_x2" class="option" label="pluriel en ·x" value="x" />
+                  <radio id="N_inv2" class="option" label="invariable" value="inv" />
+                </radiogroup>
+              </hbox>
+            </vbox>
+
+            <checkbox id="tag_M" class="subsection" label="Nom propre" />
+            <hbox class="m_left">
+              <radiogroup id="pos_nom_propre" orient="vertical">
+                <radio id="M1" class="option" label="Prénom" value=":M1" />
+                <radio id="M2" class="option" label="Patronyme" value=":M2" />
+                <radio id="MP" class="option" label="Autre" value=":MP" />
+              </radiogroup>
+              <radiogroup id="genre_nom_propre" orient="vertical">
+                <radio id="M_epi" class="option" label="épicène" value=":e" />
+                <radio id="M_mas" class="option" label="masculin" value=":m" />
+                <radio id="M_fem" class="option" label="féminin" value=":f" />
+              </radiogroup>
+            </hbox>              
+
+            <checkbox id="tag_V" class="subsection" label="Verbe" />
+            <hbox class="m_left">
+              <vbox>
+                <checkbox id="v_i" class="v_usage" label="intransitif" />
+                <checkbox id="v_t" class="v_usage" label="transitif" />
+                <checkbox id="v_n" class="v_usage" label="transitif indirect" />
+                <checkbox id="v_p" class="v_usage" label="pronominal" />
+                <checkbox id="v_m" class="v_usage" label="impersonnel" />
+              </vbox>
+              <vbox>
+                <label value="Auxilaire avec le passé composé" />
+                <checkbox id="v_ae" class="v_usage" label="être" />
+                <checkbox id="v_aa" class="v_usage" label="avoir" />
+                <label value="" />
+                <checkbox id="v_ppas" class="v_usage" label="Participes passés variables" />
+              </vbox>
+            </hbox>
+            <hbox class="m_left">
+              <label class="subsection" value="Verbe modèle [optionnel]" />
+              <textbox id="verbe_modele" class="v_textbox" value="" />
+            </hbox>
+
+            <checkbox id="tag_W" class="subsection" label="Adverbe" />
+
+            <checkbox id="tag_X" class="subsection" label="Autre" />
+            <vbox class="m_left">
+              <hbox>
+                <label class="subsection other_label" value="Flexion" />
+                <textbox id="flexion" class="other_textbox" value="" />
+              </hbox>
+              <hbox>
+                <label class="subsection other_label" value="Étiquettes" />
+                <textbox id="tags" class="other_textbox" value="" />
+              </hbox>
+            </vbox>
+          </vbox>
+
+          <vbox>
+            <dialogheader title="Mots générés" description="" />
+            <listbox id="generated_words_table" seltype="multiple">
+              <!--
+              <listhead>
+                <listheader label="Flexions"/>
+                <listheader label="Étiquettes"/>
+              </listhead>
+
+              <listcols>
+                <listcol flex="1"/>
+                <listcol flex="1"/>
+              </listcols>
+
+              <listitem>
+                <listcell label="George"/>
+                <listcell label="House"/>
+              </listitem>
+              -->
+            </listbox>
+            <progressmeter id="progress_new_words" value="0"/>
+            <hbox>
+              <button id="delete_selection" label="Effacer la sélection" />
+              <spacer flex="1" />
+              <button id="add_to_lexicon" label="Ajouter au lexique" />
+            </hbox>
+          </vbox>
+        </hbox>
+      </tabpanel>
+
+      <!-- LEXICON -->
+      <tabpanel orient="vertical">
+        <dialogheader title="&dialogheader.lexicon.label;" description="" />
+        <hbox>
+          <vbox>
+            <hbox>
+              <label class="info_label" value="Nombre d’entrées : " />
+              <label id="num_entries" class="data" value="0" />
+            </hbox>
+            <spacer flex="1" />
+            <button id="delete_button" label="Supprimer la sélection" />
+            <spacer flex="20" />
+            <progressmeter id="progress_lexicon" value="0"/>
+            <button id="save_button" label="Enregistrer" />
+          </vbox>
+
+          <vbox>
+            <listbox id="lexicon_table" seltype="multiple">
+              <!--
+              <listhead>
+                <listheader label="Flexions"/>
+                <listheader label="Lemmes"/>
+                <listheader label="Étiquettes"/>
+              </listhead>
+
+              <listcols>
+                <listcol flex="4"/>
+                <listcol flex="3"/>
+                <listcol flex="4"/>
+              </listcols>
+
+              <listitem>
+                <listcell label="George"/>
+                <listcell label="House Painter"/>
+                <listcell label="House"/>
+              </listitem>
+              -->
+            </listbox>
+          </vbox>
+        </hbox>
+      </tabpanel>
+
+      <tabpanel orient="vertical">
+        <hbox>
+          <vbox>
+            <dialogheader title="&dialogheader.search.similar.label;" description="" />
+            <hbox>
+              <textbox id="search_similar" value="" />
+              <button id="search_similar_button" label="Chercher" />
+            </hbox>
+
+            <spacer flex="1" />
+
+            <dialogheader title="&dialogheader.search.regex.label;" description="" />
+            <hbox>
+              <label value="Flexion" />
+              <spacer flex="1" />
+              <textbox id="search_flexion_pattern" value="" />
+            </hbox>
+            <hbox>
+              <label value="Étiquettes" />
+              <spacer flex="1" />
+              <textbox id="search_tags_pattern" value="" />
+            </hbox>
+            <button id="search_regex_button" label="Chercher" />
+            <label value="" />
+            <description>La recherche par expressions régulières peut générer un nombre gigantesque de résultats. Seules les 2000 premières occurrences trouvées seront affichées. La recherche peut être longue, parce tout le graphe de mots, qui contient 500 000 flexions, sera parcouru si besoin.</description>
+
+            <spacer flex="1" />
+            
+            <progressmeter id="progress_search" value="0"/>
+            <hbox>
+              <spacer flex="1" />
+              <label id="search_num_entries" class="align_right" value="0" />
+              <label value="entrées" />
+            </hbox>
+          </vbox>
+          <vbox>
+            <dialogheader title="Résultat" description="" />
+            <listbox id="search_table">
+              <!--
+              <listhead>
+                <listheader label="Flexions"/>
+                <listheader label="Lemmes"/>
+                <listheader label="Étiquettes"/>
+              </listhead>
+
+              <listcols>
+                <listcol flex="4"/>
+                <listcol flex="3"/>
+                <listcol flex="4"/>
+              </listcols>
+
+              <listitem>
+                <listcell label="George"/>
+                <listcell label="House Painter"/>
+                <listcell label="House"/>
+              </listitem>
+              -->
+            </listbox>
+          </vbox>
+        </hbox>
+      </tabpanel>
+
+      <tabpanel orient="vertical">
+        <hbox>
+          <vbox>
+            <dialogheader title="&dialogheader.info.label;" description="" />
+            <description>Les modifications apportées au lexique ne sont enregistrées dans le dictionnaire qu’au moment où vous cliquez sur ‹Enregistrer› dans l’onglet ‹Lexique›.</description>
+            <description>Il est inutile de purger votre lexique des doublons éventuels. Les doublons sont automatiquement supprimés lors de la création du dictionnaire.</description>
+            <description>Le dictionnaire est compilé comme un graphe de mots sous la forme d’une chaîne binaire dans un fichier JSON. Cette opération peut prendre du temps et consommer beaucoup de mémoire si votre lexique contient plusieurs dizaines de milliers d’entrées.</description>
+            <spacer flex="1" />
+            <label value="Avertissement :" />
+            <description>Il est déconseillé d’utiliser la catégorie ‹Autre› pour générer autre chose que des noms, des adjectifs, des noms propres, des verbes et des adverbes. Il n’y a aucune garantie que les étiquettes pour les autres catégories, notamment les mots grammaticaux, ne changeront pas.</description>
+          </vbox>
+          <vbox>
+            <dialogheader title="Signification des étiquettes" description="" />
+            <listbox id="tags_table">
+              <!--
+              <listhead>
+                <listheader label="Étiquettes"/>
+                <listheader label="Signification"/>
+              </listhead>
+
+              <listcols>
+                <listcol flex="1"/>
+                <listcol flex="10"/>
+              </listcols>
+
+              <listitem>
+                <listcell label="House Painter"/>
+                <listcell label="House"/>
+              </listitem>
+              -->
+            </listbox>
+          </vbox>
+        </hbox>
+      </tabpanel>
+
+    </tabpanels>
+
+  </tabbox>
+
+  <script type="application/x-javascript" src="resource://grammalecte/graphspell/helpers.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/graphspell/str_transform.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/graphspell/char_player.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/graphspell/dawg.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/graphspell/ibdawg.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/graphspell/spellchecker.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/fr/conj.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/fr/conj_generator.js" />
+  <script type="application/x-javascript" src="resource://grammalecte/fr/lexicographe.js" />
+  <script type="application/x-javascript" src="file_handler.js" />
+  <script type="application/x-javascript" src="lex_editor.js" />
+
+</dialog>

Index: gc_lang/fr/tb/content/overlay.js
==================================================================
--- gc_lang/fr/tb/content/overlay.js
+++ gc_lang/fr/tb/content/overlay.js
@@ -47,20 +47,28 @@
     loadGC: function () {
         if (this.xGCEWorker === null) {
             // Grammar checker
             echo('Loading Grammalecte');
             this.xGCEWorker = new BasePromiseWorker('chrome://promiseworker/content/gce_worker.js');
+            let that = this;
             let xPromise = this.xGCEWorker.post('loadGrammarChecker', [prefs.getCharPref("sGCOptions"), "Thunderbird"]);
             xPromise.then(
                 function (aVal) {
                     echo(aVal);
                     prefs.setCharPref("sGCOptions", aVal);
+                    if (prefs.getBoolPref("bPersonalDictionary")) {
+                        let sDicJSON = oFileHandler.loadFile("fr.personal.json");
+                        if (sDicJSON) {
+                            that.xGCEWorker.post('setDictionary', ["personal", sDicJSON]);
+                        }
+                    }
                 },
                 function (aReason) { echo('Promise rejected - ', aReason); }
             ).catch(
                 function (aCaught) { echo('Promise Error - ', aCaught); }
             );
+
         }
     },
     fullTests: function () {
         echo('Performing tests... Wait...');
         let xPromise = this.xGCEWorker.post('fullTests', ['{"nbsp":true, "esp":true, "unit":true, "num":true}']);
@@ -500,10 +508,13 @@
         oTextFormatter.openPanel();
     },
     onOpenConjugueur: function (e) {
         this.openDialog("chrome://grammarchecker/content/conjugueur.xul", "", "chrome, resizable=no");
     },
+    onOpenLexiconEditor: function (e) {
+        this.openDialog("chrome://grammarchecker/content/lex_editor.xul", "", "chrome, resizable=no");
+    },
     onAbout: function (e) {
         this.openDialog("chrome://grammarchecker/content/about.xul", "", "chrome, dialog, modal, resizable=no");
     }
 };
 

Index: gc_lang/fr/tb/content/overlay.xul
==================================================================
--- gc_lang/fr/tb/content/overlay.xul
+++ gc_lang/fr/tb/content/overlay.xul
@@ -6,10 +6,11 @@
 <overlay id="grammarchecker-overlay"
          xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
   <script type="application/x-javascript" src="overlay.js"/>
+  <script type="application/x-javascript" src="file_handler.js"/>
   <script type="application/x-javascript" src="spellchecker.js"/>
   <script type="application/x-javascript" src="editor.js"/>
 
   <stringbundleset id="stringbundleset">
     <stringbundle id="grammarchecker-strings" src="chrome://grammarchecker/locale/grammarchecker.properties"/>
@@ -44,10 +45,11 @@
         <menuitem id="gl-item-conj" class="menuitem-iconic" label="&grammalectemenu.conjugueur;" oncommand="oGrammarChecker.onOpenConjugueur(event);"/>
         <menuseparator/>
         <menuitem id="gl-item-analyze" class="menuitem-iconic" label="&grammalectemenu.start;" oncommand="oGrammarChecker.onParseText(event);"/>
         <menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.gc_options;" onclick="oGrammarChecker.onOpenGCOptions(event);"/>
         <menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.spell_options;" onclick="oGrammarChecker.onOpenSpellOptions(event);"/>
+        <menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.lexicon_editor;" onclick="oGrammarChecker.onOpenLexiconEditor(event);"/>
         <menuitem id="gl-item-options" class="menuitem-iconic" label="&grammalectemenu.other_options;" onclick="oGrammarChecker.onOpenOptions(event);"/>
         <menuseparator/>
         <menuitem id="gl-item-about" class="menuitem-iconic" label="&grammalectemenu.about;" oncommand="oGrammarChecker.onAbout(event);"/>
       </menupopup>
     </toolbarbutton>

Index: gc_lang/fr/tb/defaults/preferences/grammarchecker.js
==================================================================
--- gc_lang/fr/tb/defaults/preferences/grammarchecker.js
+++ gc_lang/fr/tb/defaults/preferences/grammarchecker.js
@@ -1,11 +1,10 @@
-pref("extensions.grammarchecker.urlpref1", "http://localhost:8081");
-pref("extensions.grammarchecker.urlpref2", "https://languagetool.org:8081/");
-pref("extensions.grammarchecker.langpref", "en");
-pref("extensions.grammarchecker.mothertongue", "");
 pref("extensions.grammarchecker.sGCOptions", "");
 pref("extensions.grammarchecker.sTFOptions", "");
 pref("extensions.grammarchecker.bDictModern", false);
 pref("extensions.grammarchecker.bDictClassic", true);
 pref("extensions.grammarchecker.bDictReform", false);
 pref("extensions.grammarchecker.bDictClassicReform", false);
 pref("extensions.grammarchecker.bCheckSignature", true);
+pref("extensions.grammarchecker.bExtendedDictionary", false);
+pref("extensions.grammarchecker.bCommunityDictionary", false);
+pref("extensions.grammarchecker.bPersonalDictionary", true);

ADDED   gc_lang/fr/tb/locale/en/lex_editor.dtd
Index: gc_lang/fr/tb/locale/en/lex_editor.dtd
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/locale/en/lex_editor.dtd
@@ -0,0 +1,14 @@
+<!ENTITY window.title "Grammalecte · Lexical editor lexical">
+
+<!ENTITY button.cancel.label "Close">
+
+<!ENTITY tab.editor.label "Add">
+<!ENTITY tab.lexicon.label "Lexicon">
+<!ENTITY tab.search.label "Search">
+<!ENTITY tab.info.label "Informations">
+
+<!ENTITY dialogheader.newword.label "New word">
+<!ENTITY dialogheader.lexicon.label "Your lexicon">
+<!ENTITY dialogheader.search.similar.label "Similar spellings">
+<!ENTITY dialogheader.search.regex.label "Regular expressions">
+<!ENTITY dialogheader.info.label "Informations">

Index: gc_lang/fr/tb/locale/en/overlay.dtd
==================================================================
--- gc_lang/fr/tb/locale/en/overlay.dtd
+++ gc_lang/fr/tb/locale/en/overlay.dtd
@@ -5,10 +5,11 @@
 <!ENTITY grammalectemenu.textformatter "Text formatter…">
 <!ENTITY grammalectemenu.conjugueur "Conjugation tool…">
 <!ENTITY grammalectemenu.start "Proofread the text…">
 <!ENTITY grammalectemenu.spell_options "Spelling options…">
 <!ENTITY grammalectemenu.gc_options "Grammar options…">
+<!ENTITY grammalectemenu.lexicon_editor "Lexical editor…">
 <!ENTITY grammalectemenu.other_options "Other options…">
 <!ENTITY grammalectemenu.about "About Grammalecte…">
 
 <!ENTITY detected_mistakes "Detected mistakes">
 

ADDED   gc_lang/fr/tb/locale/fr/lex_editor.dtd
Index: gc_lang/fr/tb/locale/fr/lex_editor.dtd
==================================================================
--- /dev/null
+++ gc_lang/fr/tb/locale/fr/lex_editor.dtd
@@ -0,0 +1,15 @@
+<!ENTITY window.title "Grammalecte · Éditeur lexical">
+
+<!ENTITY button.cancel.label "Fermer">
+
+<!ENTITY tab.editor.label "Ajout">
+<!ENTITY tab.lexicon.label "Lexique">
+<!ENTITY tab.search.label "Recherche">
+<!ENTITY tab.info.label "Informations">
+
+<!ENTITY dialogheader.newword.label "Nouveau mot">
+<!ENTITY dialogheader.lexicon.label "Votre lexique">
+<!ENTITY dialogheader.search.similar.label "Graphies similaires">
+<!ENTITY dialogheader.search.regex.label "Expressions régulières">
+<!ENTITY dialogheader.info.label "Informations">
+

Index: gc_lang/fr/tb/locale/fr/overlay.dtd
==================================================================
--- gc_lang/fr/tb/locale/fr/overlay.dtd
+++ gc_lang/fr/tb/locale/fr/overlay.dtd
@@ -5,10 +5,11 @@
 <!ENTITY grammalectemenu.textformatter "Formateur de texte…">
 <!ENTITY grammalectemenu.conjugueur "Conjugueur…">
 <!ENTITY grammalectemenu.start "Analyser le texte…">
 <!ENTITY grammalectemenu.spell_options "Options orthographiques…">
 <!ENTITY grammalectemenu.gc_options "Options grammaticales…">
+<!ENTITY grammalectemenu.lexicon_editor "Éditeur lexical…">
 <!ENTITY grammalectemenu.other_options "Autres options…">
 <!ENTITY grammalectemenu.about "À propos de Grammalecte…">
 
 <!ENTITY detected_mistakes "Erreurs détectées">
 

Index: gc_lang/fr/tb/worker/gce_worker.js
==================================================================
--- gc_lang/fr/tb/worker/gce_worker.js
+++ gc_lang/fr/tb/worker/gce_worker.js
@@ -75,10 +75,31 @@
         catch (e) {
             console.log("# Error: " + e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
         }
     }
 }
+
+function setDictionary (sTypeDic, sDicJSON) {
+    try {
+        console.log("set dictionary: " + sTypeDic);
+        let oJSON = JSON.parse(sDicJSON);
+        switch (sTypeDic) {
+            case "extended":
+                break;
+            case "community":
+                break;
+            case "personal":
+                oSpellChecker.setPersonalDictionary(oJSON);
+                break;
+            default:
+                console.log("[GCE worker] unknown dictionary type");
+        }
+    }
+    catch (e) {
+        console.error(e);
+    }
+}
 
 function parse (sText, sCountry, bDebug, bContext) {
     let aGrammErr = gce.parse(sText, sCountry, bDebug, bContext);
     return JSON.stringify(aGrammErr);
 }

Index: gc_lang/fr/webext/content_scripts/menu.css
==================================================================
--- gc_lang/fr/webext/content_scripts/menu.css
+++ gc_lang/fr/webext/content_scripts/menu.css
@@ -12,43 +12,36 @@
     box-sizing: border-box;
     display: none;
     margin: -8px 0 0 -8px;
     width: 16px;
     height: 16px;
-    background-color: hsla(210, 80%, 80%, .5);
-    border: 4px solid hsla(210, 80%, 60%, .5);
-    border-top: 4px solid hsla(210, 100%, 40%, .7);
-    border-bottom: 4px solid hsla(210, 100%, 40%, .7);
+    background-color: hsla(210, 80%, 40%, .2);
+    border: 4px solid hsla(210, 80%, 30%, .5);
+    border-top: 4px solid hsla(210, 100%, 70%, .9);
+    border-bottom: 4px solid hsla(210, 100%, 70%, .9);
     border-radius: 50%;
     text-align: center;
     cursor: pointer;
-    box-shadow: 0 0 0 0 hsla(210, 50%, 50%, .5);
+    box-shadow: 0 0 0 0 hsla(210, 80%, 50%, .5);
     /*z-index: 2147483640; /* maximum is 2147483647: https://stackoverflow.com/questions/491052/minimum-and-maximum-value-of-z-index */
     animation: grammalecte-spin 2s ease 1;
 }
 .grammalecte_menu_main_button:hover {
-    border: 4px solid hsla(210, 80%, 35%, .5);
-    background-color: hsla(210, 80%, 55%, .5);
+    background-color: hsla(180, 100%, 55%, .6);
     animation: grammalecte-spin .5s linear infinite;
 }
 
 @keyframes grammalecte-spin {
     0% {
         transform: rotate(0deg) scale(1);
-        border-top: 4px solid hsla(210, 100%, 40%, .7);
-        border-bottom: 4px solid hsla(210, 100%, 40%, .7);
-    }
-    70% {
-        transform: rotate(180deg) scale(.8);
-        border-top: 4px solid hsla(0, 100%, 40%, .7);
-        border-bottom: 4px solid hsla(0, 100%, 40%, .7);
-        box-shadow: 0 0 0 20px hsla(210, 50%, 50%, 0);
+    }
+    50% {
+        transform: rotate(180deg) scale(.9);
+        box-shadow: 0 0 0 10px hsla(210, 50%, 50%, 0);
     }
     100% {
         transform: rotate(360deg) scale(1);
-        border-top: 4px solid hsla(210, 100%, 40%, .7);
-        border-bottom: 4px solid hsla(210, 100%, 40%, .7);
         box-shadow: 0 0 0 0 hsla(210, 50%, 50%, 0);
     }
 }
 
 

Index: gc_lang/fr/webext/content_scripts/panel.css
==================================================================
--- gc_lang/fr/webext/content_scripts/panel.css
+++ gc_lang/fr/webext/content_scripts/panel.css
@@ -125,37 +125,30 @@
     visibility: hidden;
     box-sizing: border-box;
     width: 40px;
     height: 40px;
     position: absolute;
-    top: 0px;
+    top: 2px;
     right: 200px;
-    background-color: hsla(210, 80%, 80%, .5);
-    border: 10px solid hsla(210, 80%, 60%, .5);
-    border-top: 10px solid hsla(210, 100%, 40%, .7);
-    border-bottom: 10px solid hsla(210, 100%, 40%, .7);
+    background-color: hsla(210, 100%, 30%, .1);
+    border: 3px solid hsla(210, 100%, 30%, .1);
+    border-top: 3px solid hsla(210, 100%, 50%, .8);
     border-radius: 50%;
     text-align: center;
     cursor: pointer;
-    box-shadow: 0 0 0 0 hsla(210, 50%, 50%, .5);
-    animation: grammalecte-spin-big .5s linear infinite;
+    box-shadow: 0 0 0 0 hsla(210, 80%, 50%, .5);
+    animation: grammalecte-spin-big 2s linear infinite;
 }
 
 @keyframes grammalecte-spin-big {
     0% {
         transform: rotate(0deg) scale(1);
-        border-top: 10px solid hsla(210, 100%, 40%, .7);
-        border-bottom: 10px solid hsla(210, 100%, 40%, .7);
-    }
-    70% {
-        transform: rotate(180deg) scale(.8);
-        border-top: 10px solid hsla(0, 100%, 40%, .7);
-        border-bottom: 10px solid hsla(0, 100%, 40%, .7);
-        box-shadow: 0 0 0 20px hsla(210, 50%, 50%, 0);
+    }
+    50% {
+        transform: rotate(180deg) scale(.9);
+        box-shadow: 0 0 0 10px hsla(210, 50%, 50%, 0);
     }
     100% {
         transform: rotate(360deg) scale(1);
-        border-top: 10px solid hsla(210, 100%, 40%, .7);
-        border-bottom: 10px solid hsla(210, 100%, 40%, .7);
         box-shadow: 0 0 0 0 hsla(210, 50%, 50%, 0);
     }
 }

Index: gc_lang/fr/webext/gce_worker.js
==================================================================
--- gc_lang/fr/webext/gce_worker.js
+++ gc_lang/fr/webext/gce_worker.js
@@ -318,10 +318,14 @@
             break;
         case "extended":
             oSpellChecker.setExtendedDictionary(oDict);
             postMessage(createResponse("setDictionary", true, dInfo, true));
             break;
+        case "community":
+            oSpellChecker.setCommunityDictionary(oDict);
+            postMessage(createResponse("setDictionary", true, dInfo, true));
+            break;
         case "personal":
             oSpellChecker.setPersonalDictionary(oDict);
             postMessage(createResponse("setDictionary", true, dInfo, true));
             break;
         default:

DELETED gc_lang/fr/webext/panel/lex_conj_data.js
Index: gc_lang/fr/webext/panel/lex_conj_data.js
==================================================================
--- gc_lang/fr/webext/panel/lex_conj_data.js
+++ /dev/null
@@ -1,1952 +0,0 @@
-//  JavaScript
-
-"use strict";
-
-// beta stage, unfinished, may be useless or the root for a new way to generate flexions…
-
-/*
-    Règles de conjugaison
-*/
-
-const oConj = {
-    "V1_ppas": {
-        "var": [
-            [2,     "é",           ":Q:A:1ŝ:m:s/*",     false],
-            [2,     "és",          ":Q:A:m:p/*",        false],
-            [2,     "ée",          ":Q:A:f:s/*",        false],
-            [2,     "ées",         ":Q:A:f:p/*",        false],
-        ],
-        "invar": [
-            [2,     "é",           ":Q:e:i/*",          false],
-        ]
-    },
-
-    "V2_ppas": {
-        "var": [
-            [2,     "i",           ":Q:A:m:s/*",        false],
-            [2,     "is",          ":Q:A:m:p/*",        false],
-            [2,     "ie",          ":Q:A:f:s/*",        false],
-            [2,     "ies",         ":Q:A:f:p/*",        false],
-        ],
-        "invar": [
-            [2,     "i",           ":Q:e:i/*",          false],
-        ]
-    },
-
-    // deuxième groupe (le seul groupe régulier)
-    "V2": [
-        [2,     "ir",           ":Y/*",             false],
-        [2,     "issant",       ":P/*",             false],
-        [2,     "is",           ":Ip:Is:1s:2s/*",   false],
-        [2,     "it",           ":Ip:Is:3s/*",      false],
-        [2,     "issons",       ":Ip:1p/*",         false],
-        [2,     "issez",        ":Ip:2p/*",         false],
-        [2,     "issent",       ":Ip:Sp:Sq:3p/*",   false],
-        [2,     "issais",       ":Iq:1s:2s/*",      false],
-        [2,     "issait",       ":Iq:3s/*",         false],
-        [2,     "issions",      ":Iq:Sp:Sq:1p/*",   false],
-        [2,     "issiez",       ":Iq:Sp:Sq:2p/*",   false],
-        [2,     "issaient",     ":Iq:3p/*",         false],
-        [2,     "îmes",         ":Is:1p/*",         false],
-        [2,     "îtes",         ":Is:2p/*",         false],
-        [2,     "irent",        ":Is:3p!/*",        false],
-        [2,     "irai",         ":If:1s/*",         false],
-        [2,     "iras",         ":If:2s/*",         false],
-        [2,     "ira",          ":If:3s/*",         false],
-        [2,     "irons",        ":If:1p/*",         false],
-        [2,     "irez",         ":If:2p/*",         false],
-        [2,     "iront",        ":If:3p!/*",        false],
-        [2,     "irais",        ":K:1s:2s/*",       false],
-        [2,     "irait",        ":K:3s/*",          false],
-        [2,     "irions",       ":K:1p/*",          false],
-        [2,     "iriez",        ":K:2p/*",          false],
-        [2,     "iraient",      ":K:3p/*",          false],
-        [2,     "isse",         ":Sp:Sq:1s/*",      false],
-        [2,     "isses",        ":Sp:Sq:2s/*",      false],
-        [2,     "isse",         ":Sp:3s/*",         false],
-        [2,     "ît",           ":Sq:3s/*",         false],
-        [2,     "is",           ":E:2s/*",          false],
-        [2,     "issons",       ":E:1p/*",          false],
-        [2,     "issez",        ":E:2p/*",          false]
-    ],
-    
-    // premier groupe (bien plus irrégulier que prétendu)
-    "V1": {
-        // a
-        // verbes en -er, -ger, -yer, -cer
-        "er": [
-            [2,      "er",        ":Y/*",               false],
-            [2,      "ant",       ":P/*",               false],
-            [2,      "e",         ":Ip:Sp:1s:3s/*",     false],
-            [2,      "è",         ":Ip:1ś/*",           false],
-            [2,      "es",        ":Ip:Sp:2s/*",        false],
-            [2,      "ons",       ":Ip:1p/*",           false],
-            [2,      "ez",        ":Ip:2p/*",           false],
-            [2,      "ent",       ":Ip:Sp:3p/*",        false],
-            [2,      "ais",       ":Iq:1s:2s/*",        false],
-            [2,      "ait",       ":Iq:3s/*",           false],
-            [2,      "ions",      ":Iq:Sp:1p/*",        false],
-            [2,      "iez",       ":Iq:Sp:2p/*",        false],
-            [2,      "aient",     ":Iq:3p/*",           false],
-            [2,      "ai",        ":Is:1s/*",           false],
-            [2,      "as",        ":Is:2s/*",           false],
-            [2,      "a",         ":Is:3s/*",           false],
-            [2,      "âmes",      ":Is:1p/*",           false],
-            [2,      "âtes",      ":Is:2p/*",           false],
-            [2,      "èrent",     ":Is:3p!/*",          false],
-            [2,      "erai",      ":If:1s/*",           false],
-            [2,      "eras",      ":If:2s/*",           false],
-            [2,      "era",       ":If:3s/*",           false],
-            [2,      "erons",     ":If:1p/*",           false],
-            [2,      "erez",      ":If:2p/*",           false],
-            [2,      "eront",     ":If:3p!/*",          false],
-            [2,      "erais",     ":K:1s:2s/*",         false],
-            [2,      "erait",     ":K:3s/*",            false],
-            [2,      "erions",    ":K:1p/*",            false],
-            [2,      "eriez",     ":K:2p/*",            false],
-            [2,      "eraient",   ":K:3p/*",            false],
-            [2,      "asse",      ":Sq:1s/*",           false],
-            [2,      "asses",     ":Sq:2s/*",           false],
-            [2,      "ât",        ":Sq:3s/*",           false],
-            [2,      "assions",   ":Sq:1p/*",           false],
-            [2,      "assiez",    ":Sq:2p/*",           false],
-            [2,      "assent",    ":Sq:3p/*",           false],
-            [2,      "e",         ":E:2s/*",            false],
-            [2,      "ons",       ":E:1p/*",            false],
-            [2,      "ez",        ":E:2p/*",            false]
-        ],
-
-        "ger": [
-            [2,      "er",        ":Y/*",               false],
-            [2,      "eant",      ":P/*",               false],
-            [2,      "e",         ":Ip:Sp:1s:3s/*",     false],
-            [2,      "è",         ":Ip:1ś/*",           false],
-            [2,      "es",        ":Ip:Sp:2s/*",        false],
-            [2,      "eons",      ":Ip:1p/*",           false],
-            [2,      "ez",        ":Ip:2p/*",           false],
-            [2,      "ent",       ":Ip:Sp:3p/*",        false],
-            [2,      "eais",      ":Iq:1s:2s/*",        false],
-            [2,      "eait",      ":Iq:3s/*",           false],
-            [2,      "ions",      ":Iq:Sp:1p/*",        false],
-            [2,      "iez",       ":Iq:Sp:2p/*",        false],
-            [2,      "eaient",    ":Iq:3p/*",           false],
-            [2,      "eai",       ":Is:1s/*",           false],
-            [2,      "eas",       ":Is:2s/*",           false],
-            [2,      "ea",        ":Is:3s/*",           false],
-            [2,      "eâmes",     ":Is:1p/*",           false],
-            [2,      "eâtes",     ":Is:2p/*",           false],
-            [2,      "èrent",     ":Is:3p!/*",          false],
-            [2,      "erai",      ":If:1s/*",           false],
-            [2,      "eras",      ":If:2s/*",           false],
-            [2,      "era",       ":If:3s/*",           false],
-            [2,      "erons",     ":If:1p/*",           false],
-            [2,      "erez",      ":If:2p/*",           false],
-            [2,      "eront",     ":If:3p!/*",          false],
-            [2,      "erais",     ":K:1s:2s/*",         false],
-            [2,      "erait",     ":K:3s/*",            false],
-            [2,      "erions",    ":K:1p/*",            false],
-            [2,      "eriez",     ":K:2p/*",            false],
-            [2,      "eraient",   ":K:3p/*",            false],
-            [2,      "easse",     ":Sq:1s/*",           false],
-            [2,      "easses",    ":Sq:2s/*",           false],
-            [2,      "eât",       ":Sq:3s/*",           false],
-            [2,      "eassions",  ":Sq:1p/*",           false],
-            [2,      "eassiez",   ":Sq:2p/*",           false],
-            [2,      "eassent",   ":Sq:3p/*",           false],
-            [2,      "e",         ":E:2s/*",            false],
-            [2,      "eons",      ":E:1p/*",            false],
-            [2,      "ez",        ":E:2p/*",            false]
-        ],
-
-        "cer": [
-            [2,      "er",        ":Y/*",               false],
-            [3,      "çant",      ":P/*",               false],
-            [2,      "e",         ":Ip:Sp:1s:3s/*",     false],
-            [2,      "è",         ":Ip:1ś/*",           false],
-            [2,      "es",        ":Ip:Sp:2s/*",        false],
-            [3,      "çons",      ":Ip:1p/*",           false],
-            [2,      "ez",        ":Ip:2p/*",           false],
-            [2,      "ent",       ":Ip:Sp:3p/*",        false],
-            [3,      "çais",      ":Iq:1s:2s/*",        false],
-            [3,      "çait",      ":Iq:3s/*",           false],
-            [2,      "ions",      ":Iq:Sp:1p/*",        false],
-            [2,      "iez",       ":Iq:Sp:2p/*",        false],
-            [3,      "çaient",    ":Iq:3p/*",           false],
-            [3,      "çai",       ":Is:1s/*",           false],
-            [3,      "ças",       ":Is:2s/*",           false],
-            [3,      "ça",        ":Is:3s/*",           false],
-            [3,      "çâmes",     ":Is:1p/*",           false],
-            [3,      "çâtes",     ":Is:2p/*",           false],
-            [2,      "èrent",     ":Is:3p!/*",          false],
-            [2,      "erai",      ":If:1s/*",           false],
-            [2,      "eras",      ":If:2s/*",           false],
-            [2,      "era",       ":If:3s/*",           false],
-            [2,      "erons",     ":If:1p/*",           false],
-            [2,      "erez",      ":If:2p/*",           false],
-            [2,      "eront",     ":If:3p!/*",          false],
-            [2,      "erais",     ":K:1s:2s/*",         false],
-            [2,      "erait",     ":K:3s/*",            false],
-            [2,      "erions",    ":K:1p/*",            false],
-            [2,      "eriez",     ":K:2p/*",            false],
-            [2,      "eraient",   ":K:3p/*",            false],
-            [3,      "çasse",     ":Sq:1s/*",           false],
-            [3,      "çasses",    ":Sq:2s/*",           false],
-            [3,      "çât",       ":Sq:3s/*",           false],
-            [3,      "çassions",  ":Sq:1p/*",           false],
-            [3,      "çassiez",   ":Sq:2p/*",           false],
-            [3,      "çassent",   ":Sq:3p/*",           false],
-            [2,      "e",         ":E:2s/*",            false],
-            [3,      "çons",      ":E:1p/*",            false],
-            [2,      "ez",        ":E:2p/*",            false]
-        ],
-
-        "yer": [
-            [2,     "er",         ":Y/*",               false],
-            [2,     "ant",        ":P/*",               false],
-            [3,     "ye",         ":Ip:Sp:1s:3s/*",     "[^ou]yer$"],
-            [3,     "ie",         ":Ip:Sp:1s:3s/*",     "[aou]yer$"],
-            [2,     "è",          ":Ip:1ś/*",           false],
-            [3,     "yes",        ":Ip:Sp:2s/*",        "[^ou]yer$"],
-            [3,     "ies",        ":Ip:Sp:2s/*",        "[aou]yer$"],
-            [2,     "ons",        ":Ip:1p/*",           false],
-            [2,     "ez",         ":Ip:2p/*",           false],
-            [3,     "yent",       ":Ip:Sp:3p/*",        "[^ou]yer$"],
-            [3,     "ient",       ":Ip:Sp:3p/*",        "[aou]yer$"],
-            [2,     "ais",        ":Iq:1s:2s/*",        false],
-            [2,     "ait",        ":Iq:3s/*",           false],
-            [2,     "ions",       ":Iq:Sp:1p/*",        false],
-            [2,     "iez",        ":Iq:Sp:2p/*",        false],
-            [2,     "aient",      ":Iq:3p/*",           false],
-            [2,     "ai",         ":Is:1s/*",           false],
-            [2,     "as",         ":Is:2s/*",           false],
-            [2,     "a",          ":Is:3s/*",           false],
-            [2,     "âmes",       ":Is:1p/*",           false],
-            [2,     "âtes",       ":Is:2p/*",           false],
-            [2,     "èrent",      ":Is:3p!/*",          false],
-            [3,     "yerai",      ":If:1s/*",           "[^ou]yer$"],
-            [3,     "ierai",      ":If:1s/*",           "[aou]yer$"],
-            [3,     "yeras",      ":If:2s/*",           "[^ou]yer$"],
-            [3,     "ieras",      ":If:2s/*",           "[aou]yer$"],
-            [3,     "yera",       ":If:3s/*",           "[^ou]yer$"],
-            [3,     "iera",       ":If:3s/*",           "[aou]yer$"],
-            [3,     "yerons",     ":If:1p/*",           "[^ou]yer$"],
-            [3,     "ierons",     ":If:1p/*",           "[aou]yer$"],
-            [3,     "yerez",      ":If:2p/*",           "[^ou]yer$"],
-            [3,     "ierez",      ":If:2p/*",           "[aou]yer$"],
-            [3,     "yeront",     ":If:3p!/*",          "[^ou]yer$"],
-            [3,     "ieront",     ":If:3p!/*",          "[aou]yer$"],
-            [3,     "yerais",     ":K:1s:2s/*",         "[^ou]yer$"],
-            [3,     "ierais",     ":K:1s:2s/*",         "[aou]yer$"],
-            [3,     "yerait",     ":K:3s/*",            "[^ou]yer$"],
-            [3,     "ierait",     ":K:3s/*",            "[aou]yer$"],
-            [3,     "yerions",    ":K:1p/*",            "[^ou]yer$"],
-            [3,     "ierions",    ":K:1p/*",            "[aou]yer$"],
-            [3,     "yeriez",     ":K:2p/*",            "[^ou]yer$"],
-            [3,     "ieriez",     ":K:2p/*",            "[aou]yer$"],
-            [3,     "yeraient",   ":K:3p/*",            "[^ou]yer$"],
-            [3,     "ieraient",   ":K:3p/*",            "[aou]yer$"],
-            [2,     "asse",       ":Sq:1s/*",           false],
-            [2,     "asses",      ":Sq:2s/*",           false],
-            [2,     "ât",         ":Sq:3s/*",           false],
-            [2,     "assions",    ":Sq:1p/*",           false],
-            [2,     "assiez",     ":Sq:2p/*",           false],
-            [2,     "assent",     ":Sq:3p/*",           false],
-            [3,     "ye",         ":E:2s/*",            "[^ou]yer$"],
-            [3,     "ie",         ":E:2s/*",            "[aou]yer$"],
-            [2,     "ons",        ":E:1p/*",            false],
-            [2,     "ez",         ":E:2p/*",            false]
-        ],
-
-        // b
-        // verbes en -ecer, -emer, -ener, -eper, -erer, -eser, -ever, -evrer
-        // verbes en -eler, -eter (pas de doublement de la consonne: acheter, celer, déceler, receler, ciseler, démanteler,
-        // écarteler, encasteler, geler, dégeler, congeler, surgeler, marteler, modeler, peler, acheter, racheter,
-        // bégueter, corseter, crocheter, fileter, fureter, haleter)
-        // changement du e en è avant syllabe muette
-        "ecer": [
-            [2,     "er",           ":Y/*",                 false],
-            [3,     "çant",         ":P/*",                 false],
-            [4,     "èce",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èces",         ":Ip:Sp:2s/*",          false],
-            [3,     "çons",         ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "ècent",        ":Ip:Sp:3p/*",          false],
-            [3,     "çais",         ":Iq:1s:2s/*",          false],
-            [3,     "çait",         ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [3,     "çaient",       ":Iq:3p/*",             false],
-            [3,     "çai",          ":Is:1s/*",             false],
-            [3,     "ças",          ":Is:2s/*",             false],
-            [3,     "ça",           ":Is:3s/*",             false],
-            [3,     "çâmes",        ":Is:1p/*",             false],
-            [3,     "çâtes",        ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "ècerai",       ":If:1s/*",             false],
-            [4,     "èceras",       ":If:2s/*",             false],
-            [4,     "ècera",        ":If:3s/*",             false],
-            [4,     "ècerons",      ":If:1p/*",             false],
-            [4,     "ècerez",       ":If:2p/*",             false],
-            [4,     "èceront",      ":If:3p!/*",            false],
-            [4,     "ècerais",      ":K:1s:2s/*",           false],
-            [4,     "ècerait",      ":K:3s/*",              false],
-            [4,     "ècerions",     ":K:1p/*",              false],
-            [4,     "èceriez",      ":K:2p/*",              false],
-            [4,     "èceraient",    ":K:3p/*",              false],
-            [3,     "çasse",        ":Sq:1s/*",             false],
-            [3,     "çasses",       ":Sq:2s/*",             false],
-            [3,     "çât",          ":Sq:3s/*",             false],
-            [3,     "çassions",     ":Sq:1p/*",             false],
-            [3,     "çassiez",      ":Sq:2p/*",             false],
-            [3,     "çassent",      ":Sq:3p/*",             false],
-            [4,     "èce",          ":E:2s/*",              false],
-            [3,     "çons",         ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "eler": {
-            "1": [
-                [2,     "er",           ":Y/*",             false],
-                [2,     "ant",          ":P/*",             false],
-                [4,     "èle",          ":Ip:Sp:1s:3s/*",   false],
-                [2,     "è",            ":Ip:1ś/R",         false],
-                [4,     "èles",         ":Ip:Sp:2s/*",      false],
-                [2,     "ons",          ":Ip:1p/*",         false],
-                [2,     "ez",           ":Ip:2p/*",         false],
-                [4,     "èlent",        ":Ip:Sp:3p/*",      false],
-                [2,     "ais",          ":Iq:1s:2s/*",      false],
-                [2,     "ait",          ":Iq:3s/*",         false],
-                [2,     "ions",         ":Iq:Sp:1p/*",      false],
-                [2,     "iez",          ":Iq:Sp:2p/*",      false],
-                [2,     "aient",        ":Iq:3p/*",         false],
-                [2,     "ai",           ":Is:1s/*",         false],
-                [2,     "as",           ":Is:2s/*",         false],
-                [2,     "a",            ":Is:3s/*",         false],
-                [2,     "âmes",         ":Is:1p/*",         false],
-                [2,     "âtes",         ":Is:2p/*",         false],
-                [2,     "èrent",        ":Is:3p!/*",        false],
-                [4,     "èlerai",       ":If:1s/*",         false],
-                [4,     "èleras",       ":If:2s/*",         false],
-                [4,     "èlera",        ":If:3s/*",         false],
-                [4,     "èlerons",      ":If:1p/*",         false],
-                [4,     "èlerez",       ":If:2p/*",         false],
-                [4,     "èleront",      ":If:3p!/*",        false],
-                [4,     "èlerais",      ":K:1s:2s/*",       false],
-                [4,     "èlerait",      ":K:3s/*",          false],
-                [4,     "èlerions",     ":K:1p/*",          false],
-                [4,     "èleriez",      ":K:2p/*",          false],
-                [4,     "èleraient",    ":K:3p/*",          false],
-                [2,     "asse",         ":Sq:1s/*",         false],
-                [2,     "asses",        ":Sq:2s/*",         false],
-                [2,     "ât",           ":Sq:3s/*",         false],
-                [2,     "assions",      ":Sq:1p/*",         false],
-                [2,     "assiez",       ":Sq:2p/*",         false],
-                [2,     "assent",       ":Sq:3p/*",         false],
-                [4,     "èle",          ":E:2s/*",          false],
-                [2,     "ons",          ":E:1p/*",          false],
-                [2,     "ez",           ":E:2p/*",          false]
-            ],
-            "2": [
-                // d. verbes en -eler : doublement de la consonne l.
-                [2,     "er",           ":Y/*",             false],
-                [2,     "ant",          ":P/*",             false],
-                [4,     "elle",         ":Ip:Sp:1s:3s/*",   "ppeler$"],
-                [4,     "elle",         ":Ip:Sp:1s:3s/M",   "[^p].eler$"],
-                [4,     "èle",          ":Ip:Sp:1s:3s/R",   "[^p].eler$"],
-                [2,     "è",            ":Ip:1ś/R",         false],
-                [4,     "elles",        ":Ip:Sp:2s/*",      "ppeler$"],
-                [4,     "elles",        ":Ip:Sp:2s/M",      "[^p].eler$"],
-                [4,     "èles",         ":Ip:Sp:2s/R",      "[^p].eler$"],
-                [2,     "ons",          ":Ip:1p/*",         false],
-                [2,     "ez",           ":Ip:2p/*",         false],
-                [4,     "ellent",       ":Ip:Sp:3p/*",      "ppeler$"],
-                [4,     "ellent",       ":Ip:Sp:3p/M",      "[^p].eler$"],
-                [4,     "èlent",        ":Ip:Sp:3p/R",      "[^p].eler$"],
-                [2,     "ais",          ":Iq:1s:2s/*",      false],
-                [2,     "ait",          ":Iq:3s/*",         false],
-                [2,     "ions",         ":Iq:Sp:1p/*",      false],
-                [2,     "iez",          ":Iq:Sp:2p/*",      false],
-                [2,     "aient",        ":Iq:3p/*",         false],
-                [2,     "ai",           ":Is:1s/*",         false],
-                [2,     "as",           ":Is:2s/*",         false],
-                [2,     "a",            ":Is:3s/*",         false],
-                [2,     "âmes",         ":Is:1p/*",         false],
-                [2,     "âtes",         ":Is:2p/*",         false],
-                [2,     "èrent",        ":Is:3p!/*",        false],
-                [4,     "ellerai",      ":If:1s/*",         "ppeler$"],
-                [4,     "ellerai",      ":If:1s/M",         "[^p].eler$"],
-                [4,     "èlerai",       ":If:1s/R",         "[^p].eler$"],
-                [4,     "elleras",      ":If:2s/*",         "ppeler$"],
-                [4,     "elleras",      ":If:2s/M",         "[^p].eler$"],
-                [4,     "èleras",       ":If:2s/R",         "[^p].eler$"],
-                [4,     "ellera",       ":If:3s/*",         "ppeler$"],
-                [4,     "ellera",       ":If:3s/M",         "[^p].eler$"],
-                [4,     "èlera",        ":If:3s/R",         "[^p].eler$"],
-                [4,     "ellerons",     ":If:1p/*",         "ppeler$"],
-                [4,     "ellerons",     ":If:1p/M",         "[^p].eler$"],
-                [4,     "èlerons",      ":If:1p/R",         "[^p].eler$"],
-                [4,     "ellerez",      ":If:2p/*",         "ppeler$"],
-                [4,     "ellerez",      ":If:2p/M",         "[^p].eler$"],
-                [4,     "èlerez",       ":If:2p/R",         "[^p].eler$"],
-                [4,     "elleront",     ":If:3p!/*",        "ppeler$"],
-                [4,     "elleront",     ":If:3p!/M",        "[^p].eler$"],
-                [4,     "èleront",      ":If:3p!/R",        "[^p].eler$"],
-                [4,     "ellerais",     ":K:1s:2s/*",       "ppeler$"],
-                [4,     "ellerais",     ":K:1s:2s/M",       "[^p].eler$"],
-                [4,     "èlerais",      ":K:1s:2s/R",       "[^p].eler$"],
-                [4,     "ellerait",     ":K:3s/*",          "ppeler$"],
-                [4,     "ellerait",     ":K:3s/M",          "[^p].eler$"],
-                [4,     "èlerait",      ":K:3s/R",          "[^p].eler$"],
-                [4,     "ellerions",    ":K:1p/*",          "ppeler$"],
-                [4,     "ellerions",    ":K:1p/M",          "[^p].eler$"],
-                [4,     "èlerions",     ":K:1p/R",          "[^p].eler$"],
-                [4,     "elleriez",     ":K:2p/*",          "ppeler$"],
-                [4,     "elleriez",     ":K:2p/M",          "[^p].eler$"],
-                [4,     "èleriez",      ":K:2p/R",          "[^p].eler$"],
-                [4,     "elleraient",   ":K:3p/*",          "ppeler$"],
-                [4,     "elleraient",   ":K:3p/M",          "[^p].eler$"],
-                [4,     "èleraient",    ":K:3p/R",          "[^p].eler$"],
-                [2,     "asse",         ":Sq:1s/*",         false],
-                [2,     "asses",        ":Sq:2s/*",         false],
-                [2,     "ât",           ":Sq:3s/*",         false],
-                [2,     "assions",      ":Sq:1p/*",         false],
-                [2,     "assiez",       ":Sq:2p/*",         false],
-                [2,     "assent",       ":Sq:3p/*",         false],
-                [4,     "elle",         ":E:2s/*",          "ppeler$"],
-                [4,     "elle",         ":E:2s/M",          "[^p].eler$"],
-                [4,     "èle",          ":E:2s/R",          "[^p].eler$"],
-                [2,     "ons",          ":E:1p/*",          false],
-                [2,     "ez",           ":E:2p/*",          false]
-            ],
-        },
-
-        "emer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ème",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èmes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èment",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "èmerai",       ":If:1s/*",             false],
-            [4,     "èmeras",       ":If:2s/*",             false],
-            [4,     "èmera",        ":If:3s/*",             false],
-            [4,     "èmerons",      ":If:1p/*",             false],
-            [4,     "èmerez",       ":If:2p/*",             false],
-            [4,     "èmeront",      ":If:3p!/*",            false],
-            [4,     "èmerais",      ":K:1s:2s/*",           false],
-            [4,     "èmerait",      ":K:3s/*",              false],
-            [4,     "èmerions",     ":K:1p/*",              false],
-            [4,     "èmeriez",      ":K:2p/*",              false],
-            [4,     "èmeraient",    ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ème",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "ener": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ène",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "ènes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "ènent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "ènerai",       ":If:1s/*",             false],
-            [4,     "èneras",       ":If:2s/*",             false],
-            [4,     "ènera",        ":If:3s/*",             false],
-            [4,     "ènerons",      ":If:1p/*",             false],
-            [4,     "ènerez",       ":If:2p/*",             false],
-            [4,     "èneront",      ":If:3p!/*",            false],
-            [4,     "ènerais",      ":K:1s:2s/*",           false],
-            [4,     "ènerait",      ":K:3s/*",              false],
-            [4,     "ènerions",     ":K:1p/*",              false],
-            [4,     "èneriez",      ":K:2p/*",              false],
-            [4,     "èneraient",    ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ène",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "eper": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "èpe",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èpes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èpent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "èperai",       ":If:1s/*",             false],
-            [4,     "èperas",       ":If:2s/*",             false],
-            [4,     "èpera",        ":If:3s/*",             false],
-            [4,     "èperons",      ":If:1p/*",             false],
-            [4,     "èperez",       ":If:2p/*",             false],
-            [4,     "èperont",      ":If:3p!/*",            false],
-            [4,     "èperais",      ":K:1s:2s/*",           false],
-            [4,     "èperait",      ":K:3s/*",              false],
-            [4,     "èperions",     ":K:1p/*",              false],
-            [4,     "èperiez",      ":K:2p/*",              false],
-            [4,     "èperaient",    ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "èpe",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "erer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ère",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "ères",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èrent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "èrerai",       ":If:1s/*",             false],
-            [4,     "èreras",       ":If:2s/*",             false],
-            [4,     "èrera",        ":If:3s/*",             false],
-            [4,     "èrerons",      ":If:1p/*",             false],
-            [4,     "èrerez",       ":If:2p/*",             false],
-            [4,     "èreront",      ":If:3p!/*",            false],
-            [4,     "èrerais",      ":K:1s:2s/*",           false],
-            [4,     "èrerait",      ":K:3s/*",              false],
-            [4,     "èrerions",     ":K:1p/*",              false],
-            [4,     "èreriez",      ":K:2p/*",              false],
-            [4,     "èreraient",    ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ère",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "eser": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "èse",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èses",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èsent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "èserai",       ":If:1s/*",             false],
-            [4,     "èseras",       ":If:2s/*",             false],
-            [4,     "èsera",        ":If:3s/*",             false],
-            [4,     "èserons",      ":If:1p/*",             false],
-            [4,     "èserez",       ":If:2p/*",             false],
-            [4,     "èseront",      ":If:3p!/*",            false],
-            [4,     "èserais",      ":K:1s:2s/*",           false],
-            [4,     "èserait",      ":K:3s/*",              false],
-            [4,     "èserions",     ":K:1p/*",              false],
-            [4,     "èseriez",      ":K:2p/*",              false],
-            [4,     "èseraient",    ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "èse",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "eter": {
-            "1": [
-                [2,     "er",           ":Y/*",                 false],
-                [2,     "ant",          ":P/*",                 false],
-                [4,     "ète",          ":Ip:Sp:1s:3s/*",       false],
-                [2,     "è",            ":Ip:1ś/R",             false],
-                [4,     "ètes",         ":Ip:Sp:2s/*",          false],
-                [2,     "ons",          ":Ip:1p/*",             false],
-                [2,     "ez",           ":Ip:2p/*",             false],
-                [4,     "ètent",        ":Ip:Sp:3p/*",          false],
-                [2,     "ais",          ":Iq:1s:2s/*",          false],
-                [2,     "ait",          ":Iq:3s/*",             false],
-                [2,     "ions",         ":Iq:Sp:1p/*",          false],
-                [2,     "iez",          ":Iq:Sp:2p/*",          false],
-                [2,     "aient",        ":Iq:3p/*",             false],
-                [2,     "ai",           ":Is:1s/*",             false],
-                [2,     "as",           ":Is:2s/*",             false],
-                [2,     "a",            ":Is:3s/*",             false],
-                [2,     "âmes",         ":Is:1p/*",             false],
-                [2,     "âtes",         ":Is:2p/*",             false],
-                [2,     "èrent",        ":Is:3p!/*",            false],
-                [4,     "èterai",       ":If:1s/*",             false],
-                [4,     "èteras",       ":If:2s/*",             false],
-                [4,     "ètera",        ":If:3s/*",             false],
-                [4,     "èterons",      ":If:1p/*",             false],
-                [4,     "èterez",       ":If:2p/*",             false],
-                [4,     "èteront",      ":If:3p!/*",            false],
-                [4,     "èterais",      ":K:1s:2s/*",           false],
-                [4,     "èterait",      ":K:3s/*",              false],
-                [4,     "èterions",     ":K:1p/*",              false],
-                [4,     "èteriez",      ":K:2p/*",              false],
-                [4,     "èteraient",    ":K:3p/*",              false],
-                [2,     "asse",         ":Sq:1s/*",             false],
-                [2,     "asses",        ":Sq:2s/*",             false],
-                [2,     "ât",           ":Sq:3s/*",             false],
-                [2,     "assions",      ":Sq:1p/*",             false],
-                [2,     "assiez",       ":Sq:2p/*",             false],
-                [2,     "assent",       ":Sq:3p/*",             false],
-                [4,     "ète",          ":E:2s/*",              false],
-                [2,     "ons",          ":E:1p/*",              false],
-                [2,     "ez",           ":E:2p/*",              false]
-            ],
-            "2": [
-                // d. verbes en -eter : doublement de la consonne t
-                [2,     "er",           ":Y/*",                 false],
-                [2,     "ant",          ":P/*",                 false],
-                [4,     "ette",         ":Ip:Sp:1s:3s/*",       "jeter$"],
-                [4,     "ette",         ":Ip:Sp:1s:3s/M",       "[^j]eter$"],
-                [4,     "ète",          ":Ip:Sp:1s:3s/R",       "[^j]eter$"],
-                [2,     "è",            ":Ip:1ś/R",             false],
-                [4,     "ettes",        ":Ip:Sp:2s/*",          "jeter$"],
-                [4,     "ettes",        ":Ip:Sp:2s/M",          "[^j]eter$"],
-                [4,     "ètes",         ":Ip:Sp:2s/R",          "[^j]eter$"],
-                [2,     "ons",          ":Ip:1p/*",             false],
-                [2,     "ez",           ":Ip:2p/*",             false],
-                [4,     "ettent",       ":Ip:Sp:3p/*",          "jeter$"],
-                [4,     "ettent",       ":Ip:Sp:3p/M",          "[^j]eter$"],
-                [4,     "ètent",        ":Ip:Sp:3p/R",          "[^j]eter$"],
-                [2,     "ais",          ":Iq:1s:2s/*",          false],
-                [2,     "ait",          ":Iq:3s/*",             false],
-                [2,     "ions",         ":Iq:Sp:1p/*",          false],
-                [2,     "iez",          ":Iq:Sp:2p/*",          false],
-                [2,     "aient",        ":Iq:3p/*",             false],
-                [2,     "ai",           ":Is:1s/*",             false],
-                [2,     "as",           ":Is:2s/*",             false],
-                [2,     "a",            ":Is:3s/*",             false],
-                [2,     "âmes",         ":Is:1p/*",             false],
-                [2,     "âtes",         ":Is:2p/*",             false],
-                [2,     "èrent",        ":Is:3p!/*",            false],
-                [4,     "etterai",      ":If:1s/*",             "jeter$"],
-                [4,     "etterai",      ":If:1s/M",             "[^j]eter$"],
-                [4,     "èterai",       ":If:1s/R",             "[^j]eter$"],
-                [4,     "etteras",      ":If:2s/*",             "jeter$"],
-                [4,     "etteras",      ":If:2s/M",             "[^j]eter$"],
-                [4,     "èteras",       ":If:2s/R",             "[^j]eter$"],
-                [4,     "ettera",       ":If:3s/*",             "jeter$"],
-                [4,     "ettera",       ":If:3s/M",             "[^j]eter$"],
-                [4,     "ètera",        ":If:3s/R",             "[^j]eter$"],
-                [4,     "etterons",     ":If:1p/*",             "jeter$"],
-                [4,     "etterons",     ":If:1p/M",             "[^j]eter$"],
-                [4,     "èterons",      ":If:1p/R",             "[^j]eter$"],
-                [4,     "etterez",      ":If:2p/*",             "jeter$"],
-                [4,     "etterez",      ":If:2p/M",             "[^j]eter$"],
-                [4,     "èterez",       ":If:2p/R",             "[^j]eter$"],
-                [4,     "etteront",     ":If:3p!/*",            "jeter$"],
-                [4,     "etteront",     ":If:3p!/M",            "[^j]eter$"],
-                [4,     "èteront",      ":If:3p!/R",            "[^j]eter$"],
-                [4,     "etterais",     ":K:1s:2s/*",           "jeter$"],
-                [4,     "etterais",     ":K:1s:2s/M",           "[^j]eter$"],
-                [4,     "èterais",      ":K:1s:2s/R",           "[^j]eter$"],
-                [4,     "etterait",     ":K:3s/*",              "jeter$"],
-                [4,     "etterait",     ":K:3s/M",              "[^j]eter$"],
-                [4,     "èterait",      ":K:3s/R",              "[^j]eter$"],
-                [4,     "etterions",    ":K:1p/*",              "jeter$"],
-                [4,     "etterions",    ":K:1p/M",              "[^j]eter$"],
-                [4,     "èterions",     ":K:1p/R",              "[^j]eter$"],
-                [4,     "etteriez",     ":K:2p/*",              "jeter$"],
-                [4,     "etteriez",     ":K:2p/M",              "[^j]eter$"],
-                [4,     "èteriez",      ":K:2p/R",              "[^j]eter$"],
-                [4,     "etteraient",   ":K:3p/*",              "jeter$"],
-                [4,     "etteraient",   ":K:3p/M",              "[^j]eter$"],
-                [4,     "èteraient",    ":K:3p/R",              "[^j]eter$"],
-                [2,     "asse",         ":Sq:1s/*",             false],
-                [2,     "asses",        ":Sq:2s/*",             false],
-                [2,     "ât",           ":Sq:3s/*",             false],
-                [2,     "assions",      ":Sq:1p/*",             false],
-                [2,     "assiez",       ":Sq:2p/*",             false],
-                [2,     "assent",       ":Sq:3p/*",             false],
-                [4,     "ette",         ":E:2s/*",              "jeter$"],
-                [4,     "ette",         ":E:2s/M",              "[^j]eter$"],
-                [4,     "ète",          ":E:2s/R",              "[^j]eter$"],
-                [2,     "ons",          ":E:1p/*",              false],
-                [2,     "ez",           ":E:2p/*",              false]
-            ]
-        },
-
-        "ever": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ève",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èves",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èvent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [4,     "èverai",       ":If:1s/*",             false],
-            [4,     "èveras",       ":If:2s/*",             false],
-            [4,     "èvera",        ":If:3s/*",             false],
-            [4,     "èverons",      ":If:1p/*",             false],
-            [4,     "èverez",       ":If:2p/*",             false],
-            [4,     "èveront",      ":If:3p!/*",            false],
-            [4,     "èverais",      ":K:1s:2s/*",           false],
-            [4,     "èverait",      ":K:3s/*",              false],
-            [4,     "èverions",     ":K:1p/*",              false],
-            [4,     "èveriez",      ":K:2p/*",              false],
-            [4,     "èveraient",    ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ève",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "evrer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "èvre",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "èvres",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èvrent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [5,     "èvrerai",      ":If:1s/*",             false],
-            [5,     "èvreras",      ":If:2s/*",             false],
-            [5,     "èvrera",       ":If:3s/*",             false],
-            [5,     "èvrerons",     ":If:1p/*",             false],
-            [5,     "èvrerez",      ":If:2p/*",             false],
-            [5,     "èvreront",     ":If:3p!/*",            false],
-            [5,     "èvrerais",     ":K:1s:2s/*",           false],
-            [5,     "èvrerait",     ":K:3s/*",              false],
-            [5,     "èvrerions",    ":K:1p/*",              false],
-            [5,     "èvreriez",     ":K:2p/*",              false],
-            [5,     "èvreraient",   ":K:3p/*",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "èvre",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        // c
-        // verbes en -ébrer, -écer, -écher, -écrer, -éder, -éger, -égler, -égner, -égrer, -éguer,
-        //           -éler, -émer, -éner, -éper, -équer, -érer, -éser, -éter, -étrer, -évrer, -éyer
-        // changement du é en è
-
-        "écer": [
-            [2,     "er",           ":Y/*",                 false],
-            [4,     "éçant",        ":P/*",                 false],
-            [4,     "èce",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èces",         ":Ip:Sp:2s/*",          false],
-            [4,     "éçons",        ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "ècent",        ":Ip:Sp:3p/*",          false],
-            [4,     "éçais",        ":Iq:1s:2s/*",          false],
-            [4,     "éçait",        ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [4,     "éçaient",      ":Iq:3p/*",             false],
-            [4,     "éçai",         ":Is:1s/*",             false],
-            [4,     "éças",         ":Is:2s/*",             false],
-            [4,     "éça",          ":Is:3s/*",             false],
-            [4,     "éçâmes",       ":Is:1p/*",             false],
-            [4,     "éçâtes",       ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "ècerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èceras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "ècera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "ècerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "ècerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èceront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "ècerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "ècerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "ècerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èceriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èceraient",    ":K:3p/R",              false],
-            [4,     "éçasse",       ":Sq:1s/*",             false],
-            [4,     "éçasses",      ":Sq:2s/*",             false],
-            [4,     "éçât",         ":Sq:3s/*",             false],
-            [4,     "éçassions",    ":Sq:1p/*",             false],
-            [4,     "éçassiez",     ":Sq:2p/*",             false],
-            [4,     "éçassent",     ":Sq:3p/*",             false],
-            [4,     "èce",          ":E:2s/*",              false],
-            [4,     "éçons",        ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éger": [
-            [2,     "er",           ":Y/*",                 false],
-            [4,     "égeant",       ":P/*",                 false],
-            [4,     "ège",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èges",         ":Ip:Sp:2s/*",          false],
-            [4,     "égeons",       ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "ègent",        ":Ip:Sp:3p/*",          false],
-            [4,     "égeais",       ":Iq:1s:2s/*",          false],
-            [4,     "égeait",       ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [4,     "égeaient",     ":Iq:3p/*",             false],
-            [4,     "égeai",        ":Is:1s/*",             false],
-            [4,     "égeas",        ":Is:2s/*",             false],
-            [4,     "égea",         ":Is:3s/*",             false],
-            [4,     "égeâmes",      ":Is:1p/*",             false],
-            [4,     "égeâtes",      ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "ègerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "ègeras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "ègera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "ègerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "ègerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "ègeront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "ègerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "ègerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "ègerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "ègeriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "ègeraient",    ":K:3p/R",              false],
-            [4,     "égeasse",      ":Sq:1s/*",             false],
-            [4,     "égeasses",     ":Sq:2s/*",             false],
-            [4,     "égeât",        ":Sq:3s/*",             false],
-            [4,     "égeassions",   ":Sq:1p/*",             false],
-            [4,     "égeassiez",    ":Sq:2p/*",             false],
-            [4,     "égeassent",    ":Sq:3p/*",             false],
-            [4,     "ège",          ":E:2s/*",              false],
-            [4,     "égeons",       ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "ébrer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "èbre",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "èbres",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èbrent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "èbrerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "èbreras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "èbrera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "èbrerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "èbrerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "èbreront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "èbrerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "èbrerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "èbrerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "èbreriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "èbreraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "èbre",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "écher": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "èche",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "èches",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èchent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "ècherai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ècheras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "èchera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "ècherons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "ècherez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ècheront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "ècherais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "ècherait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "ècherions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ècheriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ècheraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "èche",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "écrer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "ècre",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "ècres",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "ècrent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "ècrerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ècreras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "ècrera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "ècrerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "ècrerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ècreront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "ècrerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "ècrerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "ècrerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ècreriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ècreraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "ècre",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éder": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ède",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èdes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èdent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èderai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èderas",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èdera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èderons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èderez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èderont",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èderais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èderait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èderions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èderiez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èderaient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ède",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "égler": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "ègle",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "ègles",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èglent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "èglerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ègleras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "èglera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "èglerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "èglerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ègleront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "èglerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "èglerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "èglerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ègleriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ègleraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "ègle",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "égner": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "ègne",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "ègnes",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "ègnent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "ègnerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ègneras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "ègnera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "ègnerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "ègnerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ègneront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "ègnerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "ègnerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "ègnerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ègneriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ègneraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "ègne",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "égrer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "ègre",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "ègres",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "ègrent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "ègrerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ègreras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "ègrera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "ègrerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "ègrerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ègreront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "ègrerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "ègrerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "ègrerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ègreriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ègreraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "ègre",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éguer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "ègue",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "ègues",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èguent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "èguerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ègueras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "èguera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "èguerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "èguerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ègueront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "èguerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "èguerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "èguerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ègueriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ègueraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "ègue",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éler": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "èle",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èles",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èlent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èlerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èleras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èlera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èlerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èlerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èleront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èlerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èlerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èlerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èleriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èleraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "èle",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "émer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ème",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èmes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èment",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èmerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èmeras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èmera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èmerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èmerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èmeront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èmerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èmerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èmerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èmeriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èmeraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ème",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éner": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ène",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "ènes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "ènent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "ènerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èneras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "ènera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "ènerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "ènerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èneront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "ènerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "ènerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "ènerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èneriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èneraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ène",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éper": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "èpe",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èpes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èpent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èperai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èperas",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èpera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èperons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èperez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èperont",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èperais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èperait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èperions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èperiez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èperaient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "èpe",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "équer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "èque",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "èques",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èquent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "èquerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "èqueras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "èquera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "èquerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "èquerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "èqueront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "èquerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "èquerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "èquerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "èqueriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "èqueraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "èque",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "érer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ère",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "ères",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èrent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èrerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èreras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èrera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èrerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èrerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èreront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èrerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èrerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èrerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èreriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èreraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ère",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éser": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "èse",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èses",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èsent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èserai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èseras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èsera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èserons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èserez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èseront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èserais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èserait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èserions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èseriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èseraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "èse",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éter": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "ète",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "ètes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "ètent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èterai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èteras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "ètera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èterons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èterez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èteront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èterais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èterait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èterions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èteriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èteraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "ète",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "étrer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "ètre",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "ètres",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "ètrent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "ètrerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "ètreras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "ètrera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "ètrerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "ètrerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "ètreront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "ètrerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "ètrerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "ètrerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "ètreriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "ètreraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "ètre",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "évrer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [5,     "èvre",         ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [5,     "èvres",        ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [5,     "èvrent",       ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [5,     "èvrerai",      ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [5,     "èvreras",      ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [5,     "èvrera",       ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [5,     "èvrerons",     ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [5,     "èvrerez",      ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [5,     "èvreront",     ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [5,     "èvrerais",     ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [5,     "èvrerait",     ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [5,     "èvrerions",    ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [5,     "èvreriez",     ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [5,     "èvreraient",   ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [5,     "èvre",         ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ],
-
-        "éyer": [
-            [2,     "er",           ":Y/*",                 false],
-            [2,     "ant",          ":P/*",                 false],
-            [4,     "èye",          ":Ip:Sp:1s:3s/*",       false],
-            [2,     "è",            ":Ip:1ś/R",             false],
-            [4,     "èyes",         ":Ip:Sp:2s/*",          false],
-            [2,     "ons",          ":Ip:1p/*",             false],
-            [2,     "ez",           ":Ip:2p/*",             false],
-            [4,     "èyent",        ":Ip:Sp:3p/*",          false],
-            [2,     "ais",          ":Iq:1s:2s/*",          false],
-            [2,     "ait",          ":Iq:3s/*",             false],
-            [2,     "ions",         ":Iq:Sp:1p/*",          false],
-            [2,     "iez",          ":Iq:Sp:2p/*",          false],
-            [2,     "aient",        ":Iq:3p/*",             false],
-            [2,     "ai",           ":Is:1s/*",             false],
-            [2,     "as",           ":Is:2s/*",             false],
-            [2,     "a",            ":Is:3s/*",             false],
-            [2,     "âmes",         ":Is:1p/*",             false],
-            [2,     "âtes",         ":Is:2p/*",             false],
-            [2,     "èrent",        ":Is:3p!/*",            false],
-            [2,     "erai",         ":If:1s/M",             false],
-            [4,     "èyerai",       ":If:1s/R",             false],
-            [2,     "eras",         ":If:2s/M",             false],
-            [4,     "èyeras",       ":If:2s/R",             false],
-            [2,     "era",          ":If:3s/M",             false],
-            [4,     "èyera",        ":If:3s/R",             false],
-            [2,     "erons",        ":If:1p/M",             false],
-            [4,     "èyerons",      ":If:1p/R",             false],
-            [2,     "erez",         ":If:2p/M",             false],
-            [4,     "èyerez",       ":If:2p/R",             false],
-            [2,     "eront",        ":If:3p!/M",            false],
-            [4,     "èyeront",      ":If:3p!/R",            false],
-            [2,     "erais",        ":K:1s:2s/M",           false],
-            [4,     "èyerais",      ":K:1s:2s/R",           false],
-            [2,     "erait",        ":K:3s/M",              false],
-            [4,     "èyerait",      ":K:3s/R",              false],
-            [2,     "erions",       ":K:1p/M",              false],
-            [4,     "èyerions",     ":K:1p/R",              false],
-            [2,     "eriez",        ":K:2p/M",              false],
-            [4,     "èyeriez",      ":K:2p/R",              false],
-            [2,     "eraient",      ":K:3p/M",              false],
-            [4,     "èyeraient",    ":K:3p/R",              false],
-            [2,     "asse",         ":Sq:1s/*",             false],
-            [2,     "asses",        ":Sq:2s/*",             false],
-            [2,     "ât",           ":Sq:3s/*",             false],
-            [2,     "assions",      ":Sq:1p/*",             false],
-            [2,     "assiez",       ":Sq:2p/*",             false],
-            [2,     "assent",       ":Sq:3p/*",             false],
-            [4,     "èye",          ":E:2s/*",              false],
-            [2,     "ons",          ":E:1p/*",              false],
-            [2,     "ez",           ":E:2p/*",              false]
-        ]
-    }
-};

Index: gc_lang/fr/webext/panel/lex_editor.css
==================================================================
--- gc_lang/fr/webext/panel/lex_editor.css
+++ gc_lang/fr/webext/panel/lex_editor.css
@@ -23,22 +23,21 @@
     background: hsl(0, 0%, 100%) url(../img/lines.png);
     font: normal 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
     color: #505050;
 }
 
-
 .inbox {
-    width: 600px;
+    width: 800px;
     margin: 20px auto 10px auto;
     padding: 10px 30px 30px 30px;
     background: hsl(0, 0%, 100%);
     border: 2px solid #F0F0F0;
     border-radius: 20px;
 }
 
 h1 {
-    margin: 5px 0 20px 0;
+    margin: 5px 0 5px 0;
     color: hsl(210, 50%, 50%);
     font: bold 30px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
     text-align: center;
 }
 h2 {
@@ -50,180 +49,255 @@
     margin: 3px 0 2px 0;
     color: hsl(210, 50%, 50%);
     font: bold 16px "Trebuchet MS", "Fira Sans", "Liberation Sans", sans-serif;
 }
 
+details {
+    font-size: 11px;
+    font-variant: small-caps;
+    color: hsl(210, 50%, 50%);
+    cursor: pointer;
+}
+details > * {
+    font-size: 12px;
+    font-variant: normal;
+    color: hsl(210, 0%, 0%);
+    cursor: auto;
+}
+details.inline {
+    padding: 3px;
+    width: 260px;
+}
+
+
+/*
+    Main buttons
+*/
 #buttons {
-    padding: 10px;
+    padding: 10px 0;
     justify-content: center;
 }
-#lexicon_button {
-    background-color: hsl(210, 80%, 90%);
-}
 .main_button {
     margin: 0 5px;
-    padding: 10px 30px;
+    width: 100px;
+    padding: 10px 20px;
     background-color: hsl(210, 10%, 95%);
     border-radius: 5px;
+    text-align: center;
     cursor: pointer;
 }
+#lexicon_button {
+    background-color: hsl(210, 80%, 90%);
+    color: hsl(210, 80%, 30%);
+    font-weight: bold;
+}
+
 
+.big_block {
+    margin: 10px 0;
+    padding: 10px;
+    background-color: hsl(210, 20%, 96%);
+    border-radius: 5px;
+}
 
-#add_word_page {
+#add_page {
     display: none;
 }
+
+.columns {
+    display: flex;
+}
+
+#word_generator {
+    width: 400px;
+}
+#generated_words {
+    width: 400px;
+}
 
 #editor {
     display: none;
 }
 
-#categories {
-    display: flex;
-    padding: 10px 0;
-}
 
 #word_section2 {
     display: none;
 }
 
 .category {
+    margin-right: 5px;
     padding: 10px;
     border-radius: 3px;
+    background-color: hsl(210, 20%, 96%);
     cursor: pointer;
 }
 .category:hover {
-    background-color: hsl(0, 0%, 90%);
-}
-
-.separator {
-    border-left: 1px solid hsl(210, 0%, 90%);
-}
-
-#section_vide {
-    padding: 50px;
-    font-size: 24px;
-    text-align: center;
-    background-color: hsl(0, 20%, 90%);
-    color: hsl(0, 20%, 50%);
-    border-radius: 5px;
-}
+    background-color: hsl(210, 20%, 90%);
+}
+
 .section {
     display: none;
     padding: 10px;
 }
 
 .container {
     display: flex;
 }
+.dic_container {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+}
 
 .block {
     flex-grow: 1;
     margin: 5px;
     padding: 10px 15px 15px 15px;
     background-color: hsl(0, 10%, 96%);
     border-radius: 3px;
 }
 
+.space_container {
+    display: flex;
+    justify-content: space-between;
+}
 
 .typeline {
     padding: 5px 10px;
 }
 .widelabel {
     display: inline-block;
     min-width: 80px;
 }
+
+.description {
+    font-size: 12px;
+}
 
 .examples_true {
     flex-grow: 1;
     margin: 2px;
     padding: 10px;
     background-color: hsl(120, 10%, 90%);
     color: hsl(120, 10%, 50%);
-    font-size: 14px;
+    font-size: 12px;
     border-radius: 3px;
 }
 .examples_false {
     flex-grow: 1;
     margin: 2px;
     padding: 10px;
     background-color: hsl(0, 10%, 90%);
     color: hsl(0, 10%, 50%);
-    font-size: 14px;
+    font-size: 12px;
     border-radius: 3px;
 }
 
 ul {
     margin-left: 30px;
 }
 
-input[type=text] {
+input[type=text].large {
     display: inline-block;
     width: 250px;
-    margin-left: 5px;
     padding: 5px 10px;
     border: 2px solid hsl(0, 0%, 80%);
     border-radius: 3px;
     height: 24px;
     background: transparent;
     font: normal 20px Tahoma, "Ubuntu Condensed";
     color: hsl(0, 0%, 20%);
 }
+
+input[type=text].medium {
+    display: inline-block;
+    width: 175px;
+    padding: 2px 5px;
+    border: 2px solid hsl(0, 0%, 80%);
+    border-radius: 3px;
+    height: 20px;
+    background: transparent;
+    font: normal 18px Tahoma, "Ubuntu Condensed";
+    color: hsl(0, 0%, 20%);
+}
+
 input[placeholder] {
     color: hsl(0, 0%, 50%);
 }
 
 
-#actions {
-    display: none;
-    padding: 10px;
-}
-
-#results {
-    padding: 10px;
-    background-color: hsl(210, 10%, 90%);
-    border-radius: 3px;
-    margin: 5px 0;
-    font-family: "Courier New", Courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
-}
-
 #buttonline {
+    margin-top: 5px;
     text-align: right;
 }
 
 #add_to_lexicon {
-    display: inline-block;
-    padding: 7px 10px;
-    font-size: 20px;
-    background-color: hsl(0, 30%, 30%);
-    color: hsl(0, 30%, 60%);
+    display: none;
+    width: 200px;
+    padding: 5px 10px;
+    font-size: 16px;
+    background-color: hsl(150, 50%, 50%);
+    color: hsl(150, 50%, 96%);
     border-radius: 3px;
-    text-transform: uppercase;
     text-align: center;
-    text-decoration: none;
     cursor: pointer;
 }
 #add_to_lexicon:hover {
-    background-color: hsl(0, 60%, 40%);
-    color: hsl(0, 60%, 70%);
-    box-shadow: 0 0 2px hsl(0, 60%, 50%);
+    background-color: hsl(150, 60%, 40%);
+    color: hsl(150, 60%, 90%);
+    box-shadow: 0 0 2px hsl(150, 60%, 50%);
 }
 
 
 #lexicon_page {
     
 }
 
-#no_elem_line {
+
+/*
+    Search page
+*/
+#search_page {
+    display: none;
+}
+
+.button_search {
+    margin: 5px 0;
+    width: 100px;
+    padding: 5px 10px;
+    font-size: 16px;
+    background-color: hsl(150, 50%, 50%);
+    color: hsl(150, 50%, 96%);
+    border-radius: 3px;
+    text-align: center;
+    cursor: pointer;
+}
+.button_search:hover {
+    background-color: hsl(150, 60%, 40%);
+    color: hsl(150, 60%, 90%);
+    box-shadow: 0 0 2px hsl(150, 60%, 50%);
+}
+
+#search_table {
+    width: 600px;
+}
+
+/*
+    Information page
+*/
+#info_page {
     display: none;
 }
 
-.button_block {
-    margin: 5px 0px;
-    background-color: hsl(210, 10%, 90%);
-    border-radius: 5px;
-    padding: 15px;
+#tags_table {
+    width: 500px;
 }
+
+
+/*
+    Dictionary
+*/
 #save_button, #export_button, #import_button {
     display: none;
     float: right;
     padding: 2px 10px;
     background-color: hsl(150, 50%, 50%);
@@ -238,30 +312,34 @@
     color: hsl(210, 0%, 100%);
 }
 #import_button {
     display: none;
 }
-
-#build_progress {
-    display: none;
+#wait_progress {
     width: 100%;
+    height: 4px;
 }
 
-#display_progress {
-    display: none;
+
+/*
+    Table
+*/
+table {
+    border: 1px solid hsl(210, 10%, 50%);
     width: 100%;
 }
-
 th {
     padding: 5px 10px;
     border-left: 1px solid hsl(210, 10%, 90%);
     text-align: left;
 }
 td {
     padding: 0 10px;
 }
-
 .delete_entry {
     cursor: pointer;
     font-weight: bold;
     color: hsl(0, 100%, 50%);
 }
+
+
+

Index: gc_lang/fr/webext/panel/lex_editor.html
==================================================================
--- gc_lang/fr/webext/panel/lex_editor.html
+++ gc_lang/fr/webext/panel/lex_editor.html
@@ -1,313 +1,332 @@
 <!DOCTYPE HTML>
 <html>
-    <head>
-        <link rel="stylesheet" type="text/css" href="lex_editor.css" />
-        <title>Grammalecte · Éditeur lexical</title>
-        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
-    </head>
-    
-    <body>
-
-        <div class="inbox">
-
-            <h1>Éditeur lexical</h1>
-
-            <div id="buttons" class="container">
-                <div id="lexicon_button" class="main_button">Lexique</div>
-                <div id="add_word_button" class="main_button">Ajout</div>
-            </div>
-
-            <div id="add_word_page">
-                <h2>Nouveau mot (lemme)</h2>
-                <input type="text" id="lemma" name="lemma" maxlength="60" value="" placeholder="votre mot" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" autofocus />
-
-                <div id="editor">
-
-                    <div id="categories">
-                        <div class="category" id="select_nom" data-tag="N">Nom, adjectif</div>
-                        <div class="category" id="select_verbe" data-tag="V">Verbe</div>
-                        <div class="category" id="select_adverbe" data-tag="W">Adverbe</div>
-                        <div class="category separator" id="select_prenom" data-tag="M1">Prénom</div>
-                        <div class="category" id="select_patronyme" data-tag="M2">Patronyme</div>
-                        <div class="category" id="select_nom_propre" data-tag="MP">Nom propre</div>
-                        <div class="category separator" id="select_autre" data-tag="X">Autre</div>
-                    </div>
-
-
-                    <div id="sections">
-
-                        <div id="section_vide">
-                            Sélectionnez une catégorie.
-                        </div>
-
-                        <div id="section_nom" class="section">
-                            <h2>Nom, adjectif</h2>
-                            <p class="typeline">
-                                <input type="radio" id="up_type_nom" name="POS" value=":N" /> <label class="widelabel" for="up_type_nom">Nom</label>
-                                <input type="radio" id="up_type_adj" name="POS" value=":A" /> <label class="widelabel" for="up_type_adj">Adjectif</label>
-                                <input type="radio" id="up_type_nomadj" name="POS" value=":N:A" /> <label class="widelabel" for="up_type_nomadj">Nom &amp; adjectif</label>
-                            </p>
-                            <div class="container">
-                                <div class="block">
-                                    <h3>Genre</h3>
-                                    <p><input type="radio" id="up_nom_genre_e" name="genre" value=":e" /><label for="up_nom_genre_e"> épicène</label></p>
-                                    <p><input type="radio" id="up_nom_genre_m" name="genre" value=":m" /><label for="up_nom_genre_m"> masculin</label></p>
-                                    <p><input type="radio" id="up_nom_genre_f" name="genre" value=":f" /><label for="up_nom_genre_f"> féminin</label></p>
-                                </div>
-                                <div class="block">
-                                    <h3>Pluriel</h3>
-                                    <p><input type="radio" id="up_nom_pluriel_s" name="pluriel" value="s" /><label for="up_nom_pluriel_s"> pluriel en ·s</label></p>
-                                    <p><input type="radio" id="up_nom_pluriel_x" name="pluriel" value="x" /><label for="up_nom_pluriel_x"> pluriel en ·x</label></p>
-                                    <p><input type="radio" id="up_nom_pluriel_i" name="pluriel" value="i" /><label for="up_nom_pluriel_i"> invariable</label></p>
-                                </div>
-                            </div>
-
-                            <h2>[optionnel] Autre forme (masculine, féminine, variante, etc.)</h2>
-                            <input type="text" id="lemma2" name="lemma2" maxlength="60" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="votre mot" />
-                            <div id="word_section2">
-                                <p class="typeline">
-                                    <input type="radio" id="up_type_nom2" name="POS2" value=":N" /> <label class="widelabel" for="up_type_nom2">Nom</label>
-                                    <input type="radio" id="up_type_adj2" name="POS2" value=":A" /> <label class="widelabel" for="up_type_adj2">Adjectif</label>
-                                    <input type="radio" id="up_type_nomadj2" name="POS2" value=":N:A" /> <label class="widelabel" for="up_type_nomadj2">Nom &amp; adjectif</label>
-                                </p>
-                                <div class="container">
-                                    <div class="block">
-                                        <h3>Genre</h3>
-                                        <p><input type="radio" id="up_nom2_genre_e" name="genre2" value=":e" /><label for="up_nom2_genre_e"> épicène</label></p>
-                                        <p><input type="radio" id="up_nom2_genre_m" name="genre2" value=":m" /><label for="up_nom2_genre_m"> masculin</label></p>
-                                        <p><input type="radio" id="up_nom2_genre_f" name="genre2" value=":f" /><label for="up_nom2_genre_f"> féminin</label></p>
-                                    </div>
-                                    <div class="block">
-                                        <h3>Pluriel</h3>
-                                        <p><input type="radio" id="up_nom2_pluriel_s" name="pluriel2" value="s" /><label for="up_nom2_pluriel_s"> pluriel en ·s</label></p>
-                                        <p><input type="radio" id="up_nom2_pluriel_x" name="pluriel2" value="x" /><label for="up_nom2_pluriel_x"> pluriel en ·x</label></p>
-                                        <p><input type="radio" id="up_nom2_pluriel_i" name="pluriel2" value="i" /><label for="up_nom2_pluriel_i"> invariable</label></p>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-
-                        <div id="section_verbe" class="section">
-                            <h2>Verbe</h2>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_i" value="i" /><label for="up_v_i"> intransitif</label></h3>
-                                <div class="description">Cochez cette case si ce verbe peut s’utiliser sans complément d’objet.</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">Je dors.<br/>Tu pars.<br/>Elle pense.<br/>Nous écrivons.<br/>Vous manifestez.<br/>Ils viennent.</div>
-                                        <div class="examples_false">J’appartiens à ce groupe…</div>
-                                    </div>
-                                </details>
-                            </div>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_t" value="t" /><label for="up_v_t"> transitif direct</label></h3>
-                                <div class="description">Cochez cette case si ce verbe peut s’utiliser avec un complément d’objet direct (COD).</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">Je mange <i>une pomme</i>.<br/>Tu donnes <i>une bonne impression</i>.<br/>Elle écrit <i>un livre</i>.<br/>Nous fabriquons <i>une œuvre</i>.</div>
-                                        <div class="examples_false">Je pars.<br/>J’appartiens à…</div>
-                                    </div>
-                                </details>
-                            </div>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_n" value="n" /><label for="up_v_n"> transitif indirect</label></h3>
-                                <div class="description">Cochez cette case, si ce verbe peut s’utiliser avec un complément d’objet indirect (COI). Attention à ne pas confondre avec un complément circonstanciel de temps, de lieu ou de manière.</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">Je donne un cadeau <i>à sa femme</i>.<br/>Elle appartient <i>à ce groupe</i>.</div>
-                                        <div class="examples_false"></div>
-                                    </div>
-                                </details>
-                            </div>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_p" value="p" /><label for="up_v_p"> pronominal</label></h3>
-                                <div class="description">Cochez cette case si ce verbe peut s’utiliser pronominalement.</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">Je me suis trompé.<br/>Tu t’es étonné toi-même.<br/>Elle s’est souvenu de ses études.<br/>Nous nous sommes égarés.<br/>Vous vous êtes retrouvées.<br/>Ils se sont rappelé leur enfance.</div>
-                                        <div class="examples_false">Je me suis venu.<br/>tu t’es arrivé.<br/>elle s’est marché.<br/>nous nous sommes courus.<br/>vous vous êtes acculés.<br/>Elles se sont capitulées.</div>
-                                    </div>
-                                </details>
-                            </div>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_m" value="m" /><label for="up_v_m"> impersonnel</label></h3>
-                                <div class="description">Cochez cette case si ce verbe ne peut s’utiliser à la première personne, mais uniquement à la troisième personne du singulier ou du pluriel.</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">Il pleut.</div>
-                                        <div class="examples_false">Je pleus.</div>
-                                    </div>
-                                </details>
-                            </div>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_ae" value="e" /><label for="up_v_ae"> passé composé avec l’auxiliaire “être”</label></h3>
-                                <div class="description">Cochez cette case si ce verbe s’emploie au passé composé avec l’auxilaire “être”.</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">Je suis venu.<br/>Je suis parti.</div>
-                                        <div class="examples_false">J’ai venu.<br/>J’ai parti.</div>
-                                    </div>
-                                </details>
-                            </div>
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_v_aa" value="a" /><label for="up_v_aa"> passé composé avec l’auxiliaire “avoir”</label></h3>
-                                <div class="description">Cochez cette case si ce verbe s’emploie au passé composé avec l’auxilaire “avoir”.</div>
-                                <details>
-                                    <div class="container">
-                                        <div class="examples_true">J’ai mangé.<br/>J’ai prié.</div>
-                                        <div class="examples_false">Je suis mangé.<br/>Je suis prié.</div>
-                                    </div>
-                                </details>
-                            </div>
-
-                            <div class="block">
-                                <h3><input type="checkbox" id="up_partpas" checked /><label for="up_partpas"> participes passés variables</label></h3>
-                                <p>Cette option est ignorée si vous utilisez un verbe modèle.</p>
-                            </div>
-
-                            <div class="block">
-                                <h3>Verbe modèle [optionnel]</h3>
-                                <p>Indiquer un verbe qui doit servir de modèle n’est pas nécessaire pour la très grande majorité des verbes du 1ᵉʳ groupe et du 2ᵉ groupe. Failes-le seulement si les formes fléchies engendrées automatiquement ne vous satisfont pas.</p>
-                                <input type="text" id="verb_pattern" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
-                                <details>
-                                    <p>Il est fortement recommandé d’appliquer les règles d’un verbe du même groupe que celui que vous créez. Mais aucune restriction n’est imposée.</p>
-                                    <p><b>Classification des groupes :</b></p>
-                                    <ul>
-                                        <li><b>1ᵉʳ groupe</b> : verbes finissant par -<i>er</i>. Attention : contrairement au préjugé commun, ce groupe est irrégulier. Beaucoup de verbes voient leur racine modifiée dans certaines formes conjuguées :
-                                        <ul>
-                                            <li>ajout ou modification de diacritiques (verbes finissant par -<i>cer</i>, -<i>ecer</i>, -<i>emer</i>, -<i>ener</i>, -<i>eper</i>, -<i>erer</i>, -<i>eser</i>, -<i>ever</i>, -<i>evrer</i>, -<i>eler</i>, -<i>eter</i>, -<i>ébrer</i>, -<i>écer</i>, -<i>écher</i>, -<i>écrer</i>, -<i>éder</i>, -<i>éger</i>, -<i>égler</i>, -<i>égner</i>, -<i>égrer</i>, -<i>éguer</i>, -<i>éler</i>, -<i>émer</i>, -<i>éner</i>, -<i>éper</i>, -<i>équer</i>, -<i>érer</i>, -<i>éser</i>, -<i>éter</i>, -<i>étrer</i>, -<i>évrer</i>, -<i>éyer</i>),</li>
-                                            <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
-                                            <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
-                                            <li>doublement irrégulier de certaines consonnes (<i>geler</i> ne se conjugue pas comme <i>appeler</i>, <i>acheter</i> ne se conjugue pas comme <i>jeter</i>)</li>
-                                            <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…
-                                        </ul></li>
-                                        <li><b>2ᵉ groupe</b> : verbes finissant par -<i>ir</i>. Ce groupe est de loin le plus régulier. Mais de nombreux verbes finissant par -<i>ir</i> appartiennent au 3ᵉ groupe.</li>
-                                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
-                                        <li>Les verbes <i>être</i> et <i>avoir</i> n’appartiennent à aucun groupe. Il est recommandé de ne pas s’en servir comme modèle.</li>
-                                    </ul>
-                                </details>
-                            </div>
-                        </div>
-
-                        <div id="section_adverbe" class="section">
-                            <h2>Adverbe</h2>
-                            <p>Les adverbes sont invariables en genre et en nombre.</p>
-                        </div>
-
-                        <div id="section_prenom" class="section">
-                            <h2>Prénom</h2>
-                            <div class="container">
-                                <div class="block">
-                                    <h3>Genre</h3>
-                                    <p><input type="radio" id="up_prenom_genre_e" name="genre_m1" value=":e" /><label for="up_prenom_genre_e"> épicène</label></p>
-                                    <p><input type="radio" id="up_prenom_genre_m" name="genre_m1" value=":m" /><label for="up_prenom_genre_m"> masculin</label></p>
-                                    <p><input type="radio" id="up_prenom_genre_f" name="genre_m1" value=":f" /><label for="up_prenom_genre_f"> féminin</label></p>
-                                </div>
-                                <div class="block">
-                                    <h3>Pluriel</h3>
-                                    <p>Les prénoms sont invariables en nombre.</p>
-                                </div>
-                            </div>
-                        </div>
-
-                        <div id="section_patronyme" class="section">
-                            <h2>Patronyme</h2>
-                            <div class="container">
-                                <div class="block">
-                                    <h3>Genre</h3>
-                                    <p><input type="radio" id="up_patronyme_genre_e" name="genre_m2" value=":e" /><label for="up_patronyme_genre_e"> épicène</label></p>
-                                    <p><input type="radio" id="up_patronyme_genre_m" name="genre_m2" value=":m" /><label for="up_patronyme_genre_m"> masculin</label></p>
-                                    <p><input type="radio" id="up_patronyme_genre_f" name="genre_m2" value=":f" /><label for="up_patronyme_genre_f"> féminin</label></p>
-                                </div>
-                                <div class="block">
-                                    <h3>Pluriel</h3>
-                                    <p>Les noms de famille sont invariables en nombre.</p>
-                                </div>
-                            </div>
-                        </div>
-
-                        <div id="section_nom_propre" class="section">
-                            <h2>Nom propre</h2>
-                            <div class="container">
-                                <div class="block">
-                                    <h3>Genre</h3>
-                                    <p><input type="radio" id="up_nom_propre_genre_e" name="genre_mp" value=":e" /><label for="up_nom_propre_genre_e"> épicène</label></p>
-                                    <p><input type="radio" id="up_nom_propre_genre_m" name="genre_mp" value=":m" /><label for="up_nom_propre_genre_m"> masculin</label></p>
-                                    <p><input type="radio" id="up_nom_propre_genre_f" name="genre_mp" value=":f" /><label for="up_nom_propre_genre_f"> féminin</label></p>
-                                </div>
-                                <div class="block">
-                                    <h3>Pluriel</h3>
-                                    <p>Les noms propres sont invariables en nombre.</p>
-                                </div>
-                            </div>
-                        </div>
-
-                        <div id="section_autre" class="section">
-                            <h2>Autre</h2>
-                            <p>Indiquez les étiquettes grammaticales que vous voulez appliquer au mot. À utiliser seulement si vous savez ce que vous faites.</p>
-                            <h3>Flexion</h3>
-                            <p><input type="text" id="flexion" name="flexion" maxlength="20" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="flexion" /></p>
-                            <h3>Étiquettes</h3>
-                            <p><input type="text" id="tags" name="tags" maxlength="20" value="" pattern="^:[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ:._-]+$" placeholder="étiquettes" /></p>
-                        </div>
-                    </div>
-                </div>
-                
-                <div id="actions">
-                    <h2>Mots générés</h2>
-                    <h3>Forme fléchie (lemme), étiquettes</h3>
-                    <pre id="results">
-                        
-                    </pre>
-                    
-                    <div id="buttonline">
-                        <div id="add_to_lexicon">Ajouter au dictionnaire</div>
-                    </div>
-                </div>
-            </div>
-
-            <div id="lexicon_page">
-                
-                <h2>Votre lexique</h2>
-
-                <div class="button_block">
-                    <div id="save_button" class="fright">
-                        Enregistrer
-                    </div>
-                    <h3>Lexique</h3>
-                    <p>Nombre d’entrées ajoutées : <span id="num_added_entries">0</span>.</p>
-                    <p>Nombre d’entrées supprimées : <span id="num_deleted_entries">0</span>.</p>
-                    <p>Nombre d’entrées : <span id="num_entries">0</span>.</p>
-                    <p><progress id="build_progress" value="0"></p>
-                    <div id="export_button" class="fright">
-                        Exporter
-                    </div>
-                    <div id="import_button" class="fright">
-                        Importer
-                    </div>
-                    <h3>Dictionnaire enregistré</h3>
-                    <p>Dernière sauvegarde : <span id="save_date">néant</span>.</p>
-                    <p>Nombre d’entrées : <span id="num_entries_saved">0</span>.</p>
-                </div>
-                
-
-                <p id="no_elem_line">Aucun élément.</p>
-                <p><progress id="display_progress" value="0"></p>
-
-                <table id="table">
-                    
-                </table>
-            </div>
-        </div>
-
-
-        <script src="../grammalecte/graphspell/helpers.js"></script>
-        <script src="../grammalecte/graphspell/str_transform.js"></script>
-        <script src="../grammalecte/graphspell/dawg.js"></script>
-        <script src="../grammalecte/graphspell/ibdawg.js"></script>
-        <script src="../grammalecte/fr/conj.js"></script>
-        <script src="lex_conj_data.js"></script>
-        <script src="lex_editor.js"></script>
-    </body>
-    
+  <head>
+    <link rel="stylesheet" type="text/css" href="lex_editor.css" />
+    <title>Grammalecte · Éditeur lexical</title>
+    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
+  </head>
+  
+  <body>
+
+    <div class="inbox">
+
+      <h1>Éditeur lexical</h1>
+
+      <div class="big_block">
+        <div class="dic_container">
+          <div><h3>Dictionnaire personnel</h3></div>
+          <div>Enregistré le : <span id="dic_save_date">—</span></div>
+          <div><span id="dic_num_entries">0</span> entrées</div>
+          <div id="export_button" class="fright">Exporter</div>
+          <div id="import_button" class="fright">Importer</div>
+        </div>
+        <progress id="wait_progress" value="0"></progress>
+      </div>
+
+      <div id="buttons" class="container">
+        <div id="lexicon_button" class="main_button">Lexique</div>
+        <div id="add_button" class="main_button">Ajout</div>
+        <div id="search_button" class="main_button">Recherche</div>
+        <div id="info_button" class="main_button">Informations</div>
+      </div>
+
+      <div id="add_page">
+        <div class="columns">
+          <div id="word_generator">
+            <h2>Nouveau mot (lemme)</h2>
+            <input type="text" id="lemma" class="large" name="lemma" maxlength="60" value="" placeholder="votre mot" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" autofocus />
+
+            <div id="editor">
+
+              <div id="sections">
+                <h3 class="category" id="select_nom" data-tag="N">Nom commun</h3>
+                <div id="section_nom" class="section">
+                  <p class="typeline">
+                    <input type="radio" id="up_type_nom" name="POS" value=":N" /> <label class="widelabel" for="up_type_nom">Nom</label>
+                    <input type="radio" id="up_type_adj" name="POS" value=":A" /> <label class="widelabel" for="up_type_adj">Adjectif</label>
+                    <input type="radio" id="up_type_nomadj" name="POS" value=":N:A" /> <label class="widelabel" for="up_type_nomadj">Nom &amp; adjectif</label>
+                  </p>
+                  <div class="container">
+                    <div class="block">
+                      <h3>Genre</h3>
+                      <p><input type="radio" id="up_nom_genre_e" name="genre" value=":e" /><label for="up_nom_genre_e"> épicène</label></p>
+                      <p><input type="radio" id="up_nom_genre_m" name="genre" value=":m" /><label for="up_nom_genre_m"> masculin</label></p>
+                      <p><input type="radio" id="up_nom_genre_f" name="genre" value=":f" /><label for="up_nom_genre_f"> féminin</label></p>
+                    </div>
+                    <div class="block">
+                      <h3>Pluriel</h3>
+                      <p><input type="radio" id="up_nom_pluriel_s" name="pluriel" value="s" /><label for="up_nom_pluriel_s"> pluriel en ·s</label></p>
+                      <p><input type="radio" id="up_nom_pluriel_x" name="pluriel" value="x" /><label for="up_nom_pluriel_x"> pluriel en ·x</label></p>
+                      <p><input type="radio" id="up_nom_pluriel_i" name="pluriel" value="i" /><label for="up_nom_pluriel_i"> invariable</label></p>
+                    </div>
+                  </div>
+
+                  <h3>[optionnel] Autre forme (masculine, féminine, variante, etc.)</h3>
+                  <input type="text" id="lemma2" class="large" name="lemma2" maxlength="60" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="votre mot" />
+                  <div id="word_section2">
+                    <p class="typeline">
+                      <input type="radio" id="up_type_nom2" name="POS2" value=":N" /> <label class="widelabel" for="up_type_nom2">Nom</label>
+                      <input type="radio" id="up_type_adj2" name="POS2" value=":A" /> <label class="widelabel" for="up_type_adj2">Adjectif</label>
+                      <input type="radio" id="up_type_nomadj2" name="POS2" value=":N:A" /> <label class="widelabel" for="up_type_nomadj2">Nom &amp; adjectif</label>
+                    </p>
+                    <div class="container">
+                      <div class="block">
+                        <h3>Genre</h3>
+                        <p><input type="radio" id="up_nom2_genre_e" name="genre2" value=":e" /><label for="up_nom2_genre_e"> épicène</label></p>
+                        <p><input type="radio" id="up_nom2_genre_m" name="genre2" value=":m" /><label for="up_nom2_genre_m"> masculin</label></p>
+                        <p><input type="radio" id="up_nom2_genre_f" name="genre2" value=":f" /><label for="up_nom2_genre_f"> féminin</label></p>
+                      </div>
+                      <div class="block">
+                        <h3>Pluriel</h3>
+                        <p><input type="radio" id="up_nom2_pluriel_s" name="pluriel2" value="s" /><label for="up_nom2_pluriel_s"> pluriel en ·s</label></p>
+                        <p><input type="radio" id="up_nom2_pluriel_x" name="pluriel2" value="x" /><label for="up_nom2_pluriel_x"> pluriel en ·x</label></p>
+                        <p><input type="radio" id="up_nom2_pluriel_i" name="pluriel2" value="i" /><label for="up_nom2_pluriel_i"> invariable</label></p>
+                      </div>
+                    </div>
+                  </div>
+                </div>
+
+                <h3 class="category" id="select_verbe" data-tag="V">Verbe</h3>
+                <div id="section_verbe" class="section">
+                  <div class="block">
+                    <h3><input type="checkbox" id="up_v_i" value="i" /><label for="up_v_i"> intransitif</label></h3>
+                    <div class="description">Le verbe peut s’utiliser sans complément d’objet.</div>
+                    <details>
+                      <div class="container">
+                        <div class="examples_true">Je dors.<br/>Tu pars.<br/>Elle pense.<br/>Nous écrivons.<br/>Vous manifestez.<br/>Ils viennent.</div>
+                        <div class="examples_false">J’appartiens à ce groupe…<br/>J’accède au niveau supérieur.</div>
+                      </div>
+                    </details>
+                  </div>
+                  <div class="block">
+                    <h3><input type="checkbox" id="up_v_t" value="t" /><label for="up_v_t"> transitif direct</label></h3>
+                    <div class="description">Ce verbe peut s’utiliser avec un complément d’objet direct (COD).</div>
+                    <details>
+                      <div class="container">
+                        <div class="examples_true">Je mange <i>une pomme</i>.<br/>Tu donnes <i>une bonne impression</i>.<br/>Elle écrit <i>un livre</i>.<br/>Nous fabriquons <i>une œuvre</i>.</div>
+                        <div class="examples_false">Je pars ce matin.<br/>J’appartiens à…</div>
+                      </div>
+                    </details>
+                  </div>
+                  <div class="block">
+                    <h3><input type="checkbox" id="up_v_n" value="n" /><label for="up_v_n"> transitif indirect</label></h3>
+                    <div class="description">Ce verbe peut s’utiliser avec un complément d’objet indirect (COI). Attention à ne pas confondre avec un complément circonstanciel de temps, de lieu ou de manière.</div>
+                    <details>
+                      <div class="container">
+                        <div class="examples_true">Je donne un cadeau <i>à sa femme</i>.<br/>Elle appartient <i>à ce groupe</i>.</div>
+                        <div class="examples_false">Elle danse à l’opéra.</div>
+                      </div>
+                    </details>
+                  </div>
+                  <div class="block">
+                    <h3><input type="checkbox" id="up_v_p" value="p" /><label for="up_v_p"> pronominal</label></h3>
+                    <div class="description">Ce verbe peut s’utiliser pronominalement.</div>
+                    <details>
+                      <div class="container">
+                        <div class="examples_true">Je me suis trompé.<br/>Tu t’es étonné toi-même.<br/>Elle s’est souvenu de ses études.<br/>Nous nous sommes égarés.<br/>Vous vous êtes retrouvées.<br/>Ils se sont rappelé leur enfance.</div>
+                        <div class="examples_false">Je me suis venu.<br/>tu t’es arrivé.<br/>elle s’est marché.<br/>nous nous sommes courus.<br/>vous vous êtes acculés.<br/>Elles se sont capitulées.</div>
+                      </div>
+                    </details>
+                  </div>
+                  <div class="block">
+                    <h3><input type="checkbox" id="up_v_m" value="m" /><label for="up_v_m"> impersonnel</label></h3>
+                    <div class="description">Ce verbe ne peut s’utiliser à la première personne, mais uniquement à la troisième personne du singulier ou du pluriel.</div>
+                    <details>
+                      <div class="container">
+                        <div class="examples_true">Il pleut.<br/>Il faut.</div>
+                        <div class="examples_false">Je pleus.<br/>Nous fallons.</div>
+                      </div>
+                    </details>
+                  </div>
+                  <div class="block">
+                    <h3>Auxiliaire pour le passé composé</label></h3>
+                    <div class="space_container">
+                      <div>
+                        <input type="checkbox" id="up_v_ae" value="e" /><label for="up_v_ae"> être</label>
+                      </div>
+                      <details class="inline">
+                        <div class="container">
+                          <div class="examples_true">Je suis venu.<br/>Je suis parti.</div>
+                          <div class="examples_false">J’ai venu.<br/>J’ai parti.</div>
+                        </div>
+                      </details>
+                    </div>
+                      
+                    <div class="space_container">
+                      <div>
+                        <input type="checkbox" id="up_v_aa" value="a" /><label for="up_v_aa"> avoir</label>
+                      </div>
+                      <details class="inline">
+                        <div class="container">
+                          <div class="examples_true">J’ai mangé.<br/>J’ai prié.</div>
+                          <div class="examples_false">Je suis mangé.<br/>Je suis prié.</div>
+                        </div>
+                      </details>
+                    </div>
+                  </div>
+
+                  <div class="block">
+                    <h3><input type="checkbox" id="up_partpas" checked /><label for="up_partpas"> participes passés variables</label></h3>
+                    <p class="description">Cette option est ignorée si vous utilisez un verbe modèle.</p>
+                  </div>
+
+                  <div class="block">
+                    <h3>Verbe modèle [optionnel]</h3>
+                    <p class="description">Il est déconseillé d’utiliser un verbe modèle : ce n’est pas nécessaire la très grande majorité des verbes du 1ᵉʳ groupe et du 2ᵉ groupe. Ce ne peut être utile et bénéfique que pour les cas particuliers.</p>
+                    <input type="text" id="verb_pattern" class="large" name="verb_pattern" maxlength="60" value="" placeholder="verbe modèle" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ-]+$" />
+                    <details>
+                      <p>Il est fortement recommandé d’appliquer les règles d’un verbe du même groupe que celui que vous créez. Mais aucune restriction n’est imposée.</p>
+                      <p><b>Classification des groupes :</b></p>
+                      <ul>
+                        <li>
+                          <b>1ᵉʳ groupe</b> : verbes finissant par -<i>er</i>. Attention : contrairement au préjugé commun, ce groupe est irrégulier. Beaucoup de verbes voient leur racine modifiée dans certaines formes conjuguées :
+                          <ul>
+                            <li>ajout ou modification de diacritiques (verbes finissant par -<i>cer</i>, -<i>ecer</i>, -<i>emer</i>, -<i>ener</i>, -<i>eper</i>, -<i>erer</i>, -<i>eser</i>, -<i>ever</i>, -<i>evrer</i>, -<i>eler</i>, -<i>eter</i>, -<i>ébrer</i>, -<i>écer</i>, -<i>écher</i>, -<i>écrer</i>, -<i>éder</i>, -<i>éger</i>, -<i>égler</i>, -<i>égner</i>, -<i>égrer</i>, -<i>éguer</i>, -<i>éler</i>, -<i>émer</i>, -<i>éner</i>, -<i>éper</i>, -<i>équer</i>, -<i>érer</i>, -<i>éser</i>, -<i>éter</i>, -<i>étrer</i>, -<i>évrer</i>, -<i>éyer</i>),</li>
+                            <li>un ‹e› euphonique est ajouté sur la plupart des verbes finissant par -<i>ger</i>,</li>
+                            <li>certains verbes finissant par -<i>yer</i> remplacent éventuellement le ‹y› par un ‹i›,</li>
+                            <li>doublement irrégulier de certaines consonnes (<i>geler</i> ne se conjugue pas comme <i>appeler</i>, <i>acheter</i> ne se conjugue pas comme <i>jeter</i>)</li>
+                            <li>irrégularités diverses (<i>aller</i>, <i>envoyer</i>, <i>renvoyer</i>)…</li>
+                          </ul>
+                        </li>
+                        <li><b>2ᵉ groupe</b> : verbes finissant par -<i>ir</i>. Ce groupe est de loin le plus régulier. Mais de nombreux verbes finissant par -<i>ir</i> appartiennent au 3ᵉ groupe.</li>
+                        <li><b>3ᵉ groupe</b>. Autres verbes irréguliers.</li>
+                        <li>Les verbes <i>être</i> et <i>avoir</i> n’appartiennent à aucun groupe. Il est recommandé de ne pas s’en servir comme modèle.</li>
+                      </ul>
+                    </details>
+                  </div>
+                </div>
+
+                <h3 class="category" id="select_adverbe" data-tag="W">Adverbe</h3>
+                <div id="section_adverbe" class="section"></div>
+
+                <h3 class="category" id="select_nom_propre" data-tag="M">Nom propre</h3>
+                <div id="section_nom_propre" class="section">
+                  <div class="container">
+                    <div class="block">
+                      <h3>Genre</h3>
+                      <p><input type="radio" id="up_nom_propre_M1" name="pos_nom_propre" value=":M1" /><label for="up_nom_propre_M1"> Prénom</label></p>
+                      <p><input type="radio" id="up_nom_propre_M2" name="pos_nom_propre" value=":M2" /><label for="up_nom_propre_M2"> Patronyme</label></p>
+                      <p><input type="radio" id="up_nom_propre_MP" name="pos_nom_propre" value=":MP" /><label for="up_nom_propre_MP"> Autre</label></p>
+                    </div>
+                    <div class="block">
+                      <h3>Genre</h3>
+                      <p><input type="radio" id="up_nom_propre_genre_e" name="genre_m" value=":e" /><label for="up_nom_propre_genre_e"> épicène</label></p>
+                      <p><input type="radio" id="up_nom_propre_genre_m" name="genre_m" value=":m" /><label for="up_nom_propre_genre_m"> masculin</label></p>
+                      <p><input type="radio" id="up_nom_propre_genre_f" name="genre_m" value=":f" /><label for="up_nom_propre_genre_f"> féminin</label></p>
+                    </div>
+                  </div>
+                </div>
+                <h3 class="category" id="select_autre" data-tag="X">Autre</h3>
+                <div id="section_autre" class="section">
+                  <h3>Flexion</h3>
+                  <p><input type="text" id="flexion" name="flexion" class="large" maxlength="20" value="" pattern="^[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ._-]+$" placeholder="flexion" /></p>
+                  <h3>Étiquettes</h3>
+                  <p><input type="text" id="tags" name="tags" class="large" maxlength="20" value="" pattern="^:[a-zA-Zà-ö0-9À-Öø-ÿØ-ßĀ-ʯ:._-]+$" placeholder="étiquettes" /></p>
+                </div>
+              </div>
+            </div>
+          </div> <!-- #new_word_generator -->
+          
+          <div id="generated_words">
+            <h2>Mots générés</h2>
+            <table id="generated_words_table">
+              
+            </table>
+            <div id="buttonline">
+              <div id="add_to_lexicon">Ajouter au lexique</div>
+            </div>
+          </div> <!-- #generated_words -->
+        </div> <!-- .columns -->
+      </div> <!-- #add_page -->
+
+
+      <div id="lexicon_page">
+        <h2>Votre lexique</h2>
+        <div class="big_block">
+          <div id="save_button" class="fright">
+            Enregistrer
+          </div>
+          <p>Nombre d’entrées : <span id="num_entries">0</span>.</p>
+        </div>
+
+        <table id="lexicon_table">
+              
+        </table>
+      </div> <!-- #lexicon_page -->
+
+
+      <div id="search_page">
+        <div class="columns">
+          <div style="margin-right: 20px;">
+            <h2>Recherche</h2>
+
+            <h3 style="margin-top: 20px;">Graphies similaires</h3>
+            <p><input id="search_similar" class="medium" type="text" /></p>
+            <p><div id="search_similar_button" class="button_search">Chercher</div></p>
+
+            <h3 style="margin-top: 20px;">Expressions régulières</h3>
+            <p><b>Flexion</b></p>
+            <p> <input id="search_flexion_pattern" class="medium" type="text" /></p>
+
+            <p><b>Étiquettes</b></p>
+            <p><input id="search_tags_pattern" class="medium" type="text" /></p>
+            <p><div id="search_regex_button" class="button_search">Chercher</div></p>
+
+            <p style="margin-top: 50px;">La recherche par expressions régulières peut générer un nombre gigantesque de résultats. Seules les 2000 premières occurrences trouvées seront affichées. La recherche peut être longue, parce tout le graphe de mots, qui contient 500 000 flexions, sera parcouru si besoin.</p>
+          </div>
+
+          <div>
+            <h2>Résultats</h2>
+            <table id="search_table">
+                  
+            </table>
+          </div>
+        </div>
+      </div> <!-- #search_page -->
+
+
+      <div id="info_page">
+        <div class="columns">
+          <div style="margin-right: 20px;">
+            <h2>Informations</h2>
+            <dialogheader title="&dialogheader.info.label;" description="" />
+            <h3>Enregistrement</h3>
+            <p>Les modifications apportées au lexique ne sont enregistrées dans le dictionnaire qu’au moment où vous cliquez sur ‹Enregistrer› dans l’onglet ‹Lexique›.</p>
+            <p> </p>
+
+            <h3>Doublons</h3>
+            <p>Il est inutile de purger votre lexique des doublons éventuels. Les doublons sont automatiquement supprimés lors de la création du dictionnaire.</p>
+            <p> </p>
+
+            <h3>Compilation du dictionnaire</h3>
+            <p>Le dictionnaire est compilé comme un graphe de mots sous la forme d’une chaîne binaire dans un fichier JSON. Cette opération peut prendre du temps et consommer beaucoup de mémoire si votre lexique contient plusieurs dizaines de milliers d’entrées.</p>
+            <p> </p>
+
+            <h3>Étiquettes rares</h3>
+            <p>Il est déconseillé d’utiliser la catégorie ‹Autre› pour générer autre chose que des noms, des adjectifs, des noms propres, des verbes et des adverbes. Il n’y a aucune garantie que les étiquettes pour les autres catégories, notamment les mots grammaticaux, ne changeront pas.</p>
+          </div>
+
+          <div>
+            <table id="tags_table">
+              
+            </table>
+          </div>
+        </div>
+      </div> <!-- #info_page -->
+
+    </div>
+
+
+    <script src="../grammalecte/graphspell/helpers.js"></script>
+    <script src="../grammalecte/graphspell/char_player.js"></script>
+    <script src="../grammalecte/graphspell/str_transform.js"></script>
+    <script src="../grammalecte/graphspell/dawg.js"></script>
+    <script src="../grammalecte/graphspell/ibdawg.js"></script>
+    <script src="../grammalecte/graphspell/spellchecker.js"></script>
+    <script src="../grammalecte/fr/conj.js"></script>
+    <script src="../grammalecte/fr/conj_generator.js"></script>
+    <script src="../grammalecte/fr/lexicographe.js"></script>
+    <script src="lex_editor.js"></script>
+  </body>
+  
 </html>

Index: gc_lang/fr/webext/panel/lex_editor.js
==================================================================
--- gc_lang/fr/webext/panel/lex_editor.js
+++ gc_lang/fr/webext/panel/lex_editor.js
@@ -8,10 +8,19 @@
 if (typeof(browser) !== "object") {
     var browser = chrome;
     bChrome = true;
 }
 
+
+/*
+    Common functions
+*/
+
+function showError (e) {
+    console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
+}
+
 function createNode  (sType, oAttr, oDataset=null) {
     try {
         let xNode = document.createElement(sType);
         Object.assign(xNode, oAttr);
         if (oDataset) {
@@ -22,87 +31,227 @@
     catch (e) {
         showError(e);
     }
 }
 
-function showError (e) {
-    console.error(e.fileName + "\n" + e.name + "\nline: " + e.lineNumber + "\n" + e.message);
-}
-
-
-document.getElementById("lexicon_button").addEventListener("click", () => { oWidgets.showPage("lexicon"); }, false);
-document.getElementById("add_word_button").addEventListener("click", () => { oWidgets.showPage("lemma"); }, false);
-
-document.getElementById("table").addEventListener("click", (xEvent) => { oWidgets.onTableClick(xEvent); }, false);
-document.getElementById("save_button").addEventListener("click", () => { oLexicon.save(); }, false);
-document.getElementById("export_button").addEventListener("click", () => { oBinaryDict.export(); }, false);
-
-document.getElementById("editor").addEventListener("click", (xEvent) => { oWidgets.onSelectionClick(xEvent); }, false);
-document.getElementById("lemma").addEventListener("keyup", () => { oWidgets.onWrite(); }, false);
-document.getElementById("lemma2").addEventListener("keyup", () => { oWidgets.onWrite2(); }, false);
-document.getElementById("verb_pattern").addEventListener("keyup", () => { oFlexGen.update(); }, false);
-document.getElementById("flexion").addEventListener("keyup", () => { oFlexGen.update(); }, false);
-document.getElementById("tags").addEventListener("keyup", () => { oFlexGen.update(); }, false);
-document.getElementById("add_to_lexicon").addEventListener("click", () => { oFlexGen.addToLexicon(); }, false);
-
-
-
-/*
-    ACTIONS
-*/
-
-const oWidgets = {
-
-    showPage: function (sPage) {
-        if (sPage == "lexicon") {
-            this.hideElement("add_word_page");
-            this.showElement("lexicon_page");
-            document.getElementById("lexicon_button").style.backgroundColor = "hsl(210, 80%, 90%)";
-            document.getElementById("add_word_button").style.backgroundColor = "hsl(210, 10%, 95%)";
-        } else {
-            this.hideElement("lexicon_page");
-            this.showElement("add_word_page");
-            document.getElementById("lexicon_button").style.backgroundColor = "hsl(210, 10%, 95%)";
-            document.getElementById("add_word_button").style.backgroundColor = "hsl(210, 80%, 90%)";
+function showElement (sElemId) {
+    if (document.getElementById(sElemId)) {
+        document.getElementById(sElemId).style.display = "block";
+    } else {
+        console.log("HTML node named <" + sElemId + "> not found.")
+    }
+}
+
+function hideElement (sElemId) {
+    if (document.getElementById(sElemId)) {
+        document.getElementById(sElemId).style.display = "none";
+    } else {
+        console.log("HTML node named <" + sElemId + "> not found.")
+    }
+}
+
+
+const oTabulations = {
+
+    lPage: ["lexicon_page", "add_page", "search_page", "info_page"],
+
+    showPage: function (sRequestedPage) {
+        for (let sPage of this.lPage) {
+            if (sPage !== sRequestedPage) {
+                hideElement(sPage);
+                this.downlightButton(sPage.slice(0,-5) + "_button");
+            }
+        }
+        showElement(sRequestedPage);
+        this.highlightButton(sRequestedPage.slice(0,-5) + "_button");
+        if (sRequestedPage == "add_page") {
             document.getElementById("lemma").focus();
         }
     },
 
-    showElement: function (sElemId) {
-        if (document.getElementById(sElemId)) {
-            document.getElementById(sElemId).style.display = "block";
-        } else {
-            console.log("HTML node named <" + sElemId + "> not found.")
-        }
-    },
-
-    hideElement: function (sElemId) {
-        if (document.getElementById(sElemId)) {
-            document.getElementById(sElemId).style.display = "none";
-        } else {
-            console.log("HTML node named <" + sElemId + "> not found.")
-        }
-    },
+    highlightButton: function (sButton) {
+        if (document.getElementById(sButton)) {
+            let xButton = document.getElementById(sButton);
+            xButton.style.backgroundColor = "hsl(210, 80%, 90%)";
+            xButton.style.color = "hsl(210, 80%, 30%)";
+            xButton.style.fontWeight = "bold";
+        }
+    },
+
+    downlightButton: function (sButton) {
+        if (document.getElementById(sButton)) {
+            let xButton = document.getElementById(sButton);
+            xButton.style.backgroundColor = "hsl(210, 10%, 95%)";
+            xButton.style.color = "hsl(210, 10%, 50%)";
+            xButton.style.fontWeight = "normal";
+        }
+    },
+
+    listen: function () {
+        document.getElementById("lexicon_button").addEventListener("click", () => { this.showPage("lexicon_page"); }, false);
+        document.getElementById("add_button").addEventListener("click", () => { this.showPage("add_page"); }, false);
+        document.getElementById("search_button").addEventListener("click", () => { this.showPage("search_page"); }, false);
+        document.getElementById("info_button").addEventListener("click", () => { this.showPage("info_page"); }, false);
+    }
+}
+
+
+class Table {
+
+    constructor (sNodeId, lColumn, sProgressBarId, sResultId="", bDeleteButtons=true) {
+        this.sNodeId = sNodeId;
+        this.xTable = document.getElementById(sNodeId);
+        this.nColumn = lColumn.length;
+        this.lColumn = lColumn;
+        this.xProgressBar = document.getElementById(sProgressBarId);
+        this.xNumEntry = document.getElementById(sResultId);
+        this.iEntryIndex = 0;
+        this.lEntry = [];
+        this.nEntry = 0;
+        this.bDeleteButtons = bDeleteButtons;
+        this._createHeader();
+        this.listen();
+    }
+
+    _createHeader () {
+        let xRowNode = createNode("tr");
+        if (this.bDeleteButtons) {
+            xRowNode.appendChild(createNode("th", { textContent: "·", width: "12px" }));
+        }
+        for (let sColumn of this.lColumn) {
+            xRowNode.appendChild(createNode("th", { textContent: sColumn }));
+        }
+        this.xTable.appendChild(xRowNode);
+    }
+
+    clear () {
+        while (this.xTable.firstChild) {
+            this.xTable.removeChild(this.xTable.firstChild);
+        }
+        this.iEntryIndex = 0;
+        this._createHeader();
+    }
+
+    fill (lFlex) {
+        this.clear();
+        if (lFlex.length > 0) {
+            this.xProgressBar.max = lFlex.length;
+            this.xProgressBar.value = 1;
+            for (let lData of lFlex) {
+                this._addRow(lData);
+                this.xProgressBar.value += 1;
+            }
+            this.xProgressBar.value = this.xProgressBar.max;
+        }
+        this.lEntry = lFlex;
+        this.nEntry = lFlex.length;
+        this.showEntryNumber();
+    }
+
+    addEntries (lFlex) {
+        this.lEntry.push(...lFlex);
+        for (let lData of lFlex) {
+            this._addRow(lData);
+        }
+        this.nEntry += lFlex.length;
+        this.showEntryNumber();
+    }
+
+    showEntryNumber () {
+        if (this.xNumEntry) {
+            this.xNumEntry.textContent = this.nEntry;
+        }
+    }
+
+    _addRow (lData) {
+        let xRowNode = createNode("tr", { id: this.sNodeId + "_row_" + this.iEntryIndex });
+        if (this.bDeleteButtons) {
+            xRowNode.appendChild(createNode("td", { textContent: "×", className: "delete_entry", title: "Effacer cette entrée" }, { id_entry: this.iEntryIndex }));
+        }
+        for (let data of lData) {
+            xRowNode.appendChild(createNode("td", { textContent: data }));
+        }
+        this.xTable.appendChild(xRowNode);
+        this.iEntryIndex += 1;
+    }
+
+    listen () {
+        if (this.bDeleteButtons) {
+            this.xTable.addEventListener("click", (xEvent) => { this.onTableClick(xEvent); }, false);
+        }
+    }
+
+    onTableClick (xEvent) {
+        try {
+            let xElem = xEvent.target;
+            if (xElem.className) {
+                if (xElem.className == "delete_entry") {
+                    this.deleteRow(xElem.dataset.id_entry);
+                }
+            }
+        }
+        catch (e) {
+            showError(e);
+        }
+    }
+
+    deleteRow (iEntry) {
+        this.lEntry[parseInt(iEntry)] = null;
+        if (document.getElementById(this.sNodeId + "_row_" + iEntry)) {
+            document.getElementById(this.sNodeId + "_row_" + iEntry).style.display = "none";
+        }
+        this.nEntry -= 1;
+        this.showEntryNumber();
+    }
+
+    getEntries () {
+        return this.lEntry.filter((e) => e !== null);
+    }
+}
+
+
+const oGenerator = {
+
+    sLemma: "",
+
+    cMainTag: "",
+
+    lFlexion: [],
+
+    listen: function () {
+        document.getElementById("editor").addEventListener("click", (xEvent) => { this.onSelectionClick(xEvent); }, false);
+        document.getElementById("lemma").addEventListener("keyup", () => { this.onWrite(); }, false);
+        document.getElementById("lemma2").addEventListener("keyup", () => { this.onWrite2(); }, false);
+        document.getElementById("verb_pattern").addEventListener("keyup", () => { this.update(); }, false);
+        document.getElementById("flexion").addEventListener("keyup", () => { this.update(); }, false);
+        document.getElementById("tags").addEventListener("keyup", () => { this.update(); }, false);
+        document.getElementById("add_to_lexicon").addEventListener("click", () => { this.addToLexicon(); }, false);
+    },
+
+    lSection: ["nom", "verbe", "adverbe", "nom_propre", "autre"],
 
     hideAllSections: function () {
-        for (let xElem of document.getElementById("sections").childNodes) {
-            if (xElem.id) {
-                xElem.style.display = "none";
-            }
+        for (let sSection of this.lSection) {
+            hideElement("section_" + sSection);
+            document.getElementById("select_" + sSection).style.backgroundColor = "";
         }
     },
 
     showSection: function (sName) {
         this.clear();
         this.hideAllSections();
-        this.showElement(sName);
+        if (document.getElementById(sName).style.display == "none") {
+            showElement(sName);
+        } else {
+            hideElement(sName);
+        }
     },
 
     clear: function () {
         try {
             document.getElementById("lemma2").value = "";
-            this.hideElement("word_section2");
+            hideElement("word_section2");
             // nom, adjectif, noms propres
             for (let xElem of document.getElementsByName("POS")) {
                 xElem.checked = false;
             }
             for (let xElem of document.getElementsByName("POS2")) {
@@ -142,14 +291,15 @@
         try {
             let xElem = xEvent.target;
             if (xElem.id) {
                 if (xElem.id.startsWith("select_")) {
                     this.showSection("section_" + xElem.id.slice(7));
-                    oFlexGen.setMainTag(xElem.dataset.tag);
-                    oFlexGen.update();
+                    xElem.style.backgroundColor = "hsl(210, 50%, 90%)";
+                    this.cMainTag = xElem.dataset.tag;
+                    this.update();
                 } else if (xElem.id.startsWith("up_")) {
-                    oFlexGen.update();
+                    this.update();
                 }
             }
         }
         catch (e) {
             showError(e);
@@ -156,196 +306,73 @@
         }
     },
 
     onWrite: function () {
         if (document.getElementById("lemma").value.trim() !== "") {
-            this.showElement("editor");
-            oFlexGen.update();
+            showElement("editor");
+            this.update();
         } else {
-            this.showSection("section_vide");
-            this.hideElement("editor");
-            this.hideElement("actions");
+            hideElement("editor");
         }
     },
 
     onWrite2: function () {
         if (document.getElementById("lemma2").value.trim() !== "") {
-            this.showElement("word_section2");
-            oFlexGen.update();
-        } else {
-            this.hideElement("word_section2");
-        }
-    },
-
-    createTableHeader: function () {
-        let xRowNode = createNode("tr");
-        xRowNode.appendChild(createNode("th", { textContent: "·" }));
-        xRowNode.appendChild(createNode("th", { textContent: "#" }));
-        xRowNode.appendChild(createNode("th", { textContent: "Forme fléchie" }));
-        xRowNode.appendChild(createNode("th", { textContent: "Lemme" }));
-        xRowNode.appendChild(createNode("th", { textContent: "Étiquettes" }));
-        return xRowNode;
-    },
-
-    createRowNode: function (n, sFlexion, sLemma, sTags) {
-        let xRowNode = createNode("tr", { id: "row_" + n });
-        xRowNode.appendChild(createNode("td", { textContent: "×", className: "delete_entry", title: "Effacer cette entrée" }, { id_entry: n }));
-        xRowNode.appendChild(createNode("td", { textContent: n }));
-        xRowNode.appendChild(createNode("td", { textContent: sFlexion }));
-        xRowNode.appendChild(createNode("td", { textContent: sLemma }));
-        xRowNode.appendChild(createNode("td", { textContent: sTags }));
-        return xRowNode;
-    },
-
-    displayTable: function (lFlex) {
-        this.clearTable();
-        if (lFlex.length > 0) {
-            this.showElement("display_progress");
-            let xDisplayProgress = document.getElementById("display_progress");
-            let xTable = document.getElementById("table");
-            let n = 0;
-            xDisplayProgress.max = lFlex.length;
-            xDisplayProgress.value = 1;
-            this.hideElement("no_elem_line");
-            xTable.appendChild(this.createTableHeader());
-            for (let [sFlexion, sLemma, sTags] of lFlex) {
-                xTable.appendChild(this.createRowNode(n, sFlexion, sLemma, sTags));
-                n += 1;
-                xDisplayProgress.value += 1;
-            }
-            xDisplayProgress.value = xDisplayProgress.max;
-            this.hideElement("display_progress");
-        } else {
-            this.showElement("no_elem_line");
-        }
-        this.updateData();
-    },
-
-    clearTable: function () {
-        let xTable = document.getElementById("table");
-        while (xTable.firstChild) {
-            xTable.removeChild(xTable.firstChild);
-        }
-    },
-
-    onTableClick: function (xEvent) {
-        try {
-            let xElem = xEvent.target;
-            if (xElem.className) {
-                if (xElem.className == "delete_entry") {
-                    this.deleteEntry(xElem.dataset.id_entry);
-                }
-            }
-        }
-        catch (e) {
-            showError(e);
-        }
-    },
-
-    addEntriesToTable: function (iStart, lFlex) {
-        let xTable = document.getElementById("table");
-        if (lFlex.length > 0) {
-            if (document.getElementById("no_elem_line").style.display !== "none") {
-                this.hideElement("no_elem_line");
-                xTable.appendChild(this.createTableHeader());
-            }
-            for (let [sFlexion, sLemma, sTags] of lFlex) {
-                xTable.appendChild(this.createRowNode(iStart, sFlexion, sLemma, sTags));
-                iStart += 1;
-            }
-        }
-        this.updateData();
-    },
-
-    deleteEntry: function (iEntry) {
-        oLexicon.deleteEntry(iEntry);
-        this.hideElement("row_"+iEntry);
-        this.showElement("save_button");
-        this.updateData();
-    },
-
-    updateData: function () {
-        document.getElementById("num_added_entries").textContent = oLexicon.nAddedEntries;
-        document.getElementById("num_deleted_entries").textContent = oLexicon.nDeletedEntries;
-        document.getElementById("num_entries").textContent = oLexicon.nEntries;
-    },
-
-    setDictData: function (nEntries, sDate) {
-        document.getElementById("num_entries_saved").textContent = nEntries;
-        document.getElementById("save_date").textContent = sDate;
-    }
-}
-
-
-
-const oFlexGen = {
-
-    cMainTag: "",
-
-    lFlexion: [],
-
-    clear: function () {
-        this.lFlexion = [];
-        oWidgets.hideElement("actions");
-    },
-
-    setMainTag: function (sValue) {
-        this.cMainTag = sValue;
-    },
-
-    addFlexion: function (sFlexion, sLemma, sTag) {
-        this.lFlexion.push( [sFlexion, sLemma, sTag] );
+            showElement("word_section2");
+            this.update();
+        } else {
+            hideElement("word_section2");
+        }
     },
 
     update: function () {
         try {
-            this.clear();
-            let sGenderTag = "";
-            let sLemma = document.getElementById("lemma").value.trim();
-            if (sLemma.length > 0) {
+            this.lFlexion = [];
+            this.sLemma = document.getElementById("lemma").value.trim();
+            if (this.sLemma.length > 0) {
                 switch (this.cMainTag) {
                     case "N":
                         if (!this.getRadioValue("POS") || !this.getRadioValue("genre")) {
                             break;
                         }
                         let sTag = this.getRadioValue("POS") + this.getRadioValue("genre");
                         switch (this.getRadioValue("pluriel")) {
                             case "s":
-                                this.addFlexion(sLemma, sLemma, sTag+":s/*");
-                                this.addFlexion(sLemma+"s", sLemma, sTag+":p/*");
+                                this.lFlexion.push([this.sLemma, sTag+":s/*"]);
+                                this.lFlexion.push([this.sLemma+"s", sTag+":p/*"]);
                                 break;
                             case "x":
-                                this.addFlexion(sLemma, sLemma, sTag+":s/*");
-                                this.addFlexion(sLemma+"x", sLemma, sTag+":p/*");
+                                this.lFlexion.push([this.sLemma, sTag+":s/*"]);
+                                this.lFlexion.push([this.sLemma+"x", sTag+":p/*"]);
                                 break;
                             case "i":
-                                this.addFlexion(sLemma, sLemma, sTag+":i/*");
+                                this.lFlexion.push([this.sLemma, sTag+":i/*"]);
                                 break;
                         }
                         let sLemma2 = document.getElementById("lemma2").value.trim();
                         if (sLemma2.length > 0  &&  this.getRadioValue("POS2")  &&  this.getRadioValue("genre2")) {
                             let sTag2 = this.getRadioValue("POS2") + this.getRadioValue("genre2");
                             switch (this.getRadioValue("pluriel2")) {
                                 case "s":
-                                    this.addFlexion(sLemma2, sLemma, sTag2+":s/*");
-                                    this.addFlexion(sLemma2+"s", sLemma, sTag2+":p/*");
+                                    this.lFlexion.push([sLemma2, sTag2+":s/*"]);
+                                    this.lFlexion.push([sLemma2+"s", sTag2+":p/*"]);
                                     break;
                                 case "x":
-                                    this.addFlexion(sLemma2, sLemma, sTag2+":s/*");
-                                    this.addFlexion(sLemma2+"x", sLemma, sTag2+":p/*");
+                                    this.lFlexion.push([sLemma2, sTag2+":s/*"]);
+                                    this.lFlexion.push([sLemma2+"x", sTag2+":p/*"]);
                                     break;
                                 case "i":
-                                    this.addFlexion(sLemma2, sLemma, sTag2+":i/*");
+                                    this.lFlexion.push([sLemma2, sTag2+":i/*"]);
                                     break;
                             }
                         }
                         break;
                     case "V": {
-                        if (!sLemma.endsWith("er") && !sLemma.endsWith("ir") && !sLemma.endsWith("re")) {
+                        if (!this.sLemma.endsWith("er") && !this.sLemma.endsWith("ir") && !this.sLemma.endsWith("re")) {
                             break;
                         }
-                        sLemma = sLemma.toLowerCase();
+                        this.sLemma = this.sLemma.toLowerCase();
                         let cGroup = "";
                         let c_i = (document.getElementById("up_v_i").checked) ? "i" : "_";
                         let c_t = (document.getElementById("up_v_t").checked) ? "t" : "_";
                         let c_n = (document.getElementById("up_v_n").checked) ? "n" : "_";
                         let c_p = (document.getElementById("up_v_p").checked) ? "p" : "_";
@@ -354,219 +381,113 @@
                         let c_aa = (document.getElementById("up_v_aa").checked) ? "a" : "_";
                         let sVerbTag = c_i + c_t + c_n + c_p + c_m + c_ae + c_aa;
                         if (!sVerbTag.endsWith("__") && !sVerbTag.startsWith("____")) {
                             let sVerbPattern = document.getElementById("verb_pattern").value.trim();
                             if (sVerbPattern.length == 0) {
-                                if (!sLemma.endsWith("er") && !sLemma.endsWith("ir")) {
-                                    break;
-                                }
-                                // tables de conjugaison du 1er et du 2e groupe
-                                let cGroup = (sLemma.endsWith("er")) ? "1" : "2";
-                                for (let [nCut, sAdd, sFlexTags, sPattern] of this._getConjRules(sLemma)) {
-                                    if (!sPattern || RegExp(sPattern).test(sLemma)) {
-                                        this.addFlexion(sLemma.slice(0,-nCut)+sAdd, sLemma, ":V" + cGroup + "_" + sVerbTag + sFlexTags);
-                                    }
-                                }
-                                // participes passés
-                                let bPpasVar = (document.getElementById("up_partpas").checked) ? "var" : "invar";
-                                let lPpasRules = (sLemma.endsWith("er")) ? oConj["V1_ppas"][bPpasVar] : oConj["V2_ppas"][bPpasVar];
-                                for (let [nCut, sAdd, sFlexTags, sPattern] of lPpasRules) {
-                                    if (!sPattern || RegExp(sPattern).test(sLemma)) {
-                                        this.addFlexion(sLemma.slice(0,-nCut)+sAdd, sLemma, ":V" + cGroup + "_" + sVerbTag + sFlexTags);
-                                    }
+                                // utilisation du générateur de conjugaison
+                                let bVarPpas = document.getElementById("up_partpas").checked;
+                                for (let [sFlexion, sFlexTags] of conj_generator.conjugate(this.sLemma, sVerbTag, bVarPpas)) {
+                                    this.lFlexion.push([sFlexion, sFlexTags]);
                                 }
                             } else {
                                 // copie du motif d’un autre verbe : utilisation du conjugueur
                                 if (conj.isVerb(sVerbPattern)) {
-                                    let oVerb = new Verb(sLemma, sVerbPattern);
+                                    let oVerb = new Verb(this.sLemma, sVerbPattern);
                                     for (let [sTag1, dFlex] of oVerb.dConj.entries()) {
                                         if (sTag1 !== ":Q") {
                                             for (let [sTag2, sConj] of dFlex.entries()) {
                                                 if (sTag2.startsWith(":") && sConj !== "") {
-                                                    this.addFlexion(sConj, sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + sTag1 + sTag2);
+                                                    this.lFlexion.push([sConj, ":V" + oVerb.cGroup + "_" + sVerbTag + sTag1 + sTag2]);
                                                 }
                                             }
                                         } else {
                                             // participes passés
                                             if (dFlex.get(":Q3") !== "") {
                                                 if (dFlex.get(":Q2") !== "") {
-                                                    this.addFlexion(dFlex.get(":Q1"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:s/*");
-                                                    this.addFlexion(dFlex.get(":Q2"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:p/*");
-                                                } else {
-                                                    this.addFlexion(dFlex.get(":Q1"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:i/*");
-                                                }
-                                                this.addFlexion(dFlex.get(":Q3"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:s/*");
-                                                this.addFlexion(dFlex.get(":Q4"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:p/*");
-                                            } else {
-                                                this.addFlexion(dFlex.get(":Q1"), sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:e:i/*");
+                                                    this.lFlexion.push([dFlex.get(":Q1"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:s/*"]);
+                                                    this.lFlexion.push([dFlex.get(":Q2"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:p/*"]);
+                                                } else {
+                                                    this.lFlexion.push([dFlex.get(":Q1"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:i/*"]);
+                                                }
+                                                this.lFlexion.push([dFlex.get(":Q3"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:s/*"]);
+                                                this.lFlexion.push([dFlex.get(":Q4"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:p/*"]);
+                                            } else {
+                                                this.lFlexion.push([dFlex.get(":Q1"), ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:e:i/*"]);
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                         break;
                     }
                     case "W":
-                        sLemma = sLemma.toLowerCase();
-                        this.addFlexion(sLemma, sLemma, ":W/*");
-                        break;
-                    case "M1":
-                        sLemma = sLemma.slice(0,1).toUpperCase() + sLemma.slice(1);
-                        sGenderTag = this.getRadioValue("genre_m1");
-                        if (sGenderTag) {
-                            this.addFlexion(sLemma, sLemma, ":M1"+sGenderTag+":i/*");
-                        }
-                        break;
-                    case "M2":
-                        sLemma = sLemma.slice(0,1).toUpperCase() + sLemma.slice(1);
-                        sGenderTag = this.getRadioValue("genre_m2");
-                        if (sGenderTag) {
-                            this.addFlexion(sLemma, sLemma, ":M2"+sGenderTag+":i/*");
-                        }
-                        break;
-                    case "MP":
-                        sGenderTag = this.getRadioValue("genre_mp");
-                        if (sGenderTag) {
-                            this.addFlexion(sLemma, sLemma, ":MP"+sGenderTag+":i/*");
+                        this.sLemma = this.sLemma.toLowerCase();
+                        this.lFlexion.push([this.sLemma, ":W/*"]);
+                        break;
+                    case "M":
+                        this.sLemma = this.sLemma.slice(0,1).toUpperCase() + this.sLemma.slice(1);
+                        let sPOSTag = this.getRadioValue("pos_nom_propre")
+                        let sGenderTag = this.getRadioValue("genre_m");
+                        if (sGenderTag) {
+                            this.lFlexion.push([this.sLemma, sPOSTag+sGenderTag+":i/*"]);
                         }
                         break;
                     case "X":
                         let sFlexion = document.getElementById("flexion").value.trim();
                         let sTags = document.getElementById("tags").value.trim();
                         if (sFlexion.length > 0 && sTags.startsWith(":")) {
-                            this.addFlexion(sFlexion, sLemma, sTags);
+                            this.lFlexion.push([sFlexion, sTags]);
                         }
                         break;
                 }
             }
-            this.show();
+            if (this.lFlexion.length > 0) {
+                showElement("add_to_lexicon");
+            } else {
+                hideElement("add_to_lexicon");
+            }
+            oGenWordsTable.fill(this.lFlexion);
         }
         catch (e) {
             showError(e);
         }
     },
 
-    _getConjRules: function (sVerb) {
-        if (sVerb.endsWith("ir")) {
-            // deuxième groupe
-            return oConj["V2"];
-        } else if (sVerb.endsWith("er")) {
-            // premier groupe, conjugaison en fonction de la terminaison du lemme
-            // 5 lettres
-            if (sVerb.slice(-5) in oConj["V1"]) {
-                return oConj["V1"][sVerb.slice(-5)];
-            }
-            // 4 lettres
-            if (sVerb.slice(-4) in oConj["V1"]) {
-                if (sVerb.endsWith("eler") || sVerb.endsWith("eter")) {
-                    return oConj["V1"][sVerb.slice(-4)]["1"];
-                }
-                return oConj["V1"][sVerb.slice(-4)];
-            }
-            // 3 lettres
-            if (sVerb.slice(-3) in oConj["V1"]) {
-                return oConj["V1"][sVerb.slice(-3)];
-            }
-            return oConj["V1"]["er"];
-        } else {
-            // troisième groupe
-            return [ [0, "", ":Y/*", false] ];
-        }
-    },
-
     getRadioValue: function (sName) {
         if (document.querySelector('input[name="' + sName + '"]:checked')) {
             return document.querySelector('input[name="' + sName + '"]:checked').value;
         }
         return null;
     },
 
-    show: function () {
-        let sText = "";
-        for (let [sFlexion, sLemma, sTag] of this.lFlexion) {
-            sText += sFlexion + " (" + sLemma + ") " + sTag + "\n";
-        }
-        if (sText) {
-            document.getElementById("results").textContent = sText;
-            oWidgets.showElement("actions");
-        } else {
-            oWidgets.hideElement("actions");
-        }
+    createFlexLemmaTagArray: function () {
+        let lEntry = [];
+        for (let [sFlex, sTags] of oGenWordsTable.getEntries()) {
+            lEntry.push([sFlex, this.sLemma, sTags]);
+        }
+        return lEntry;
     },
 
     addToLexicon: function () {
         try {
-            oLexicon.addFlexions(this.lFlexion);
+            oLexiconTable.addEntries(this.createFlexLemmaTagArray());
+            oGenWordsTable.clear();
             document.getElementById("lemma").value = "";
             document.getElementById("lemma").focus();
-            oWidgets.showSection("section_vide");
-            oWidgets.hideElement("editor");
-            oWidgets.hideElement("actions");
-            oWidgets.clear();
-            oWidgets.showElement("save_button");
+            this.hideAllSections();
+            hideElement("editor");
+            showElement("save_button");
             this.clear();
             this.cMainTag = "";
         }
         catch (e) {
             showError(e);
         }
     }
 }
 
-
-
-const oLexicon = {
-
-    lFlexion: [],
-    nEntries: 0,
-    nDeletedEntries: 0,
-    nAddedEntries: 0,
-
-    set: function (lFlexion) {
-        this.lFlexion = lFlexion;
-        this.resetModif();
-        oWidgets.displayTable(this.lFlexion);
-        if (this.lFlexion.length > 0) {
-            oWidgets.showElement("export_button");
-        } else {
-            oWidgets.hideElement("export_button");
-        }
-    },
-
-    addFlexions: function (lNewFlex) {
-        let iStart = this.lFlexion.length;
-        for (let aFlex of lNewFlex) {
-            this.lFlexion.push(aFlex);
-        }
-        this.nAddedEntries += lNewFlex.length;
-        this.nEntries += lNewFlex.length;
-        oWidgets.addEntriesToTable(iStart, lNewFlex);
-    },
-
-    deleteEntry: function (iEntry) {
-        this.lFlexion[parseInt(iEntry)] = null;
-        this.nDeletedEntries++;
-        this.nEntries--;
-    },
-
-    resetModif: function () {
-        this.nEntries = this.lFlexion.length;
-        this.nAddedEntries = 0;
-        this.nDeletedEntries = 0;
-    },
-
-    save: function () {
-        oWidgets.hideElement("save_button");
-        this.lFlexion = this.lFlexion.filter((e) => e !== null);
-        oBinaryDict.build(this.lFlexion);
-        this.resetModif();
-        oWidgets.displayTable(this.lFlexion);
-        oWidgets.updateData();
-    }
-}
-
 
 const oBinaryDict = {
     
     oIBDAWG: null,
 
@@ -579,48 +500,127 @@
         xPromise.then(this._load.bind(this), showError);
     },
 
     _load: function (oResult) {
         if (!oResult.hasOwnProperty("oPersonalDictionary")) {
-            oWidgets.hideElement("export_button");
+            hideElement("export_button");
             return;
         }
         let oJSON = oResult.oPersonalDictionary;
         this.oIBDAWG = new IBDAWG(oJSON);
         let lEntry = [];
-        for (let s of this.oIBDAWG.select()) {
-            lEntry.push(s.split("\t"));
-        }        
-        oLexicon.set(lEntry);
-        oWidgets.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
-        oWidgets.showElement("export_button");
-    },
-
-    build: function (lEntry) {
-        oWidgets.showElement("build_progress");
-        let xProgressNode = document.getElementById("build_progress");
-        let oDAWG = new DAWG(lEntry, "S", "fr", "Français", "Dictionnaire personnel", xProgressNode);
-        let oJSON = oDAWG.createBinaryJSON(1);
-        this.save(oJSON);
-        this.oIBDAWG = new IBDAWG(oJSON);
-        oWidgets.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
-        oWidgets.hideElement("build_progress");
-        oWidgets.showElement("export_button");
-        browser.runtime.sendMessage({ sCommand: "setDictionary", dParam: {sType: "personal", oDict: oJSON}, dInfo: {} });
-    },
-
-    save: function (oJSON) {
-        browser.storage.local.set({ "oPersonalDictionary": oJSON });
+        for (let aRes of this.oIBDAWG.select()) {
+            lEntry.push(aRes);
+        }        
+        oLexiconTable.fill(lEntry);
+        this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
+        showElement("export_button");
+    },
+
+    setDictData: function (nEntries, sDate) {
+        document.getElementById("dic_num_entries").textContent = nEntries;
+        document.getElementById("dic_save_date").textContent = sDate;
+    },
+
+    listen: function () {
+        document.getElementById("save_button").addEventListener("click", () => { this.build(); }, false);
+        document.getElementById("export_button").addEventListener("click", () => { this.export(); }, false);
+        document.getElementById("import_button").addEventListener("click", () => { this.import(); }, false);
+    },
+
+    build: function () {
+        let xProgressNode = document.getElementById("wait_progress");
+        let lEntry = oLexiconTable.getEntries();
+        if (lEntry.length > 0) {
+            let oDAWG = new DAWG(lEntry, "S", "fr", "Français", "Dictionnaire personnel", xProgressNode);
+            let oJSON = oDAWG.createBinaryJSON(1);
+            browser.storage.local.set({ "oPersonalDictionary": oJSON });
+            this.oIBDAWG = new IBDAWG(oJSON);
+            this.setDictData(this.oIBDAWG.nEntry, this.oIBDAWG.sDate);
+            browser.runtime.sendMessage({ sCommand: "setDictionary", dParam: {sType: "personal", oDict: oJSON}, dInfo: {} });
+            showElement("export_button");
+        } else {
+            this.setDictData(0, "[néant]");
+            browser.storage.local.set({ "oPersonalDictionary": "" });
+            browser.runtime.sendMessage({ sCommand: "setDictionary", dParam: {sType: "personal", oDict: null}, dInfo: {} });
+        }
     },
 
     import: function () {
-        // TO DO
+        console.log("import");
     },
 
     export: function () {
         let xBlob = new Blob([ JSON.stringify(this.oIBDAWG.getJSON()) ], {type: 'application/json'}); 
         let sURL = URL.createObjectURL(xBlob);
         browser.downloads.download({ filename: "fr.personal.json", url: sURL, saveAs: true });
     }
 }
 
+
+const oSearch = {
+
+    oSpellChecker: null,
+
+    load: function () {
+        this.oSpellChecker = new SpellChecker("fr", browser.extension.getURL("")+"grammalecte/graphspell/_dictionaries", "fr.json");
+    },
+
+    loadOtherDictionaries: function () {
+        //TODO
+    },
+
+    listen: function () {
+        document.getElementById("search_similar_button").addEventListener("click", () => { this.searchSimilar(); }, false);
+        document.getElementById("search_regex_button").addEventListener("click", () => { this.searchRegex() }, false);
+    },
+
+    searchSimilar: function () {
+        oSearchTable.clear();
+        let sWord = document.getElementById("search_similar").value;
+        if (sWord !== "") {
+            let lResult = this.oSpellChecker.getSimilarEntries(sWord, 20);
+            oSearchTable.fill(lResult);
+        }
+    },
+
+    searchRegex: function () {
+        let sFlexPattern = document.getElementById("search_flexion_pattern").value.trim();
+        let sTagsPattern = document.getElementById("search_tags_pattern").value.trim();
+        let lEntry = [];
+        let i = 0;
+        for (let aRes of this.oSpellChecker.select(sFlexPattern, sTagsPattern)) {
+            lEntry.push(aRes);
+            i++;
+            if (i >= 2000) {
+                break;
+            }
+        }
+        oSearchTable.fill(lEntry);
+    }
+}
+
+
+const oTagsInfo = {
+    load: function () {
+        let lEntry = [];
+        for (let [sTag, [_, sLabel]] of _dTag) {
+            lEntry.push([sTag, sLabel.trim()]);
+        }
+        oTagsTable.fill(lEntry);
+    }
+}
+
+
+const oGenWordsTable = new Table("generated_words_table", ["Flexions", "Étiquettes"], "wait_progress");
+const oLexiconTable = new Table("lexicon_table", ["Flexions", "Lemmes", "Étiquettes"], "wait_progress", "num_entries");
+const oSearchTable = new Table("search_table", ["Flexions", "Lemmes", "Étiquettes"], "wait_progress", "search_num_entries", false);
+const oTagsTable = new Table("tags_table", ["Étiquette", "Signification"], "wait_progress", "", false);
+
+
+oTagsInfo.load();
+oSearch.load();
 oBinaryDict.load();
+oBinaryDict.listen();
+oGenerator.listen();
+oTabulations.listen();
+oSearch.listen();

Index: gc_lang/fr/webext/panel/main.js
==================================================================
--- gc_lang/fr/webext/panel/main.js
+++ gc_lang/fr/webext/panel/main.js
@@ -142,10 +142,23 @@
 
 
 function showTestResult (sText) {
     document.getElementById("tests_result").textContent = sText;
 }
+
+function openConjugueurTab () {
+    if (bChrome) {
+        browser.tabs.create({
+            url: browser.extension.getURL("panel/conjugueur.html")
+        });
+        return;
+    }
+    let xConjTab = browser.tabs.create({
+        url: browser.extension.getURL("panel/conjugueur.html")
+    });
+    xConjTab.then(onCreated, onError);
+}
 
 function openConjugueurTab () {
     if (bChrome) {
         browser.tabs.create({
             url: browser.extension.getURL("panel/conjugueur.html")

Index: grammalecte-cli.py
==================================================================
--- grammalecte-cli.py
+++ grammalecte-cli.py
@@ -188,12 +188,20 @@
                         for lSugg in oSpellChecker.suggest(sWord):
                             echo(" | ".join(lSugg))
             elif sText.startswith(">"):
                 oSpellChecker.drawPath(sText[1:].strip())
             elif sText.startswith("="):
-                for sRes in oSpellChecker.select(sText[1:].strip()):
-                    echo(sRes)
+                sSearch = sText[1:].strip()
+                if "=" in sSearch:
+                    nCut = sSearch.find("=")
+                    sFlexPattern = sSearch[0:nCut]
+                    sTagsPattern = sSearch[nCut+1:]
+                else:
+                    sFlexPattern = sSearch
+                    sTagsPattern = ""
+                for aRes in oSpellChecker.select(sFlexPattern, sTagsPattern):
+                    echo("\t".join(aRes))
             elif sText.startswith("/+ "):
                 oGrammarChecker.gce.setOptions({ opt:True  for opt in sText[3:].strip().split()  if opt in oGrammarChecker.gce.getOptions() })
                 echo("done")
             elif sText.startswith("/- "):
                 oGrammarChecker.gce.setOptions({ opt:False  for opt in sText[3:].strip().split()  if opt in oGrammarChecker.gce.getOptions() })

Index: graphspell-js/dawg.js
==================================================================
--- graphspell-js/dawg.js
+++ graphspell-js/dawg.js
@@ -78,10 +78,14 @@
             lEntry.push([sFlex, dAff.get(sAff), dTag.get(sTag)]);
         }
         if (lEntry.length == 0) {
             throw "Error. Empty lexicon";
         }
+
+        lEntry = [...new Set(lEntry.map(e => JSON.stringify(e)))].map(s => JSON.parse(s));
+        // Set can’t distinguish similar lists, so we transform list item in string given to the Set
+        // then we transform items in list a new.
         
         // Preparing DAWG
         console.log(" > Preparing list of words");
         let lVal = lChar.concat(lAff).concat(lTag);
         let lWord = [];

Index: graphspell-js/ibdawg.js
==================================================================
--- graphspell-js/ibdawg.js
+++ graphspell-js/ibdawg.js
@@ -415,39 +415,55 @@
     }
 
     // morph (sWord) {
     //     is defined in constructor
     // }
-    
-    * select (sPattern="") {
-        // generator: returns all entries which morphology fits <sPattern>
-        let zPattern = null;
-        if (sPattern !== "") {
-            try {
-                zPattern = new RegExp(sPattern);
-            }
-            catch (e) {
-                console.log("Error in regex pattern");
-                console.log(e.message);
+    getSimilarEntries (sWord, nSuggLimit=10) {
+        // return a list of tuples (similar word, stem, morphology)
+        if (sWord == "") {
+            return [];
+        }
+        let lResult = [];
+        for (let sSimilar of this.suggest(sWord, nSuggLimit)) {
+            for (let sMorph of this.getMorph(sSimilar)) {
+                let nCut = sMorph.indexOf(" ");
+                lResult.push( [sSimilar, sMorph.slice(1, nCut), sMorph.slice(nCut+1)] );
             }
         }
-        yield* this._select1(zPattern, 0, "");
+        return lResult;
+    }
+
+    * select (sFlexPattern="", sTagsPattern="") {
+        // generator: returns all entries which flexion fits <sFlexPattern> and morphology fits <sTagsPattern>
+        let zFlexPattern = null;
+        let zTagsPattern = null;
+        try {
+            zFlexPattern = (sFlexPattern !== "") ? new RegExp(sFlexPattern) : null;
+            zTagsPattern = (sTagsPattern !== "") ? new RegExp(sTagsPattern) : null;
+        }
+        catch (e) {
+            console.log("Error in regex pattern");
+            console.log(e.message);
+        }
+        yield* this._select1(zFlexPattern, zTagsPattern, 0, "");
     }
 
     // VERSION 1
 
-    * _select1 (zPattern, iAddr, sWord) {
+    * _select1 (zFlexPattern, zTagsPattern, iAddr, sWord) {
         // recursive generator
         for (let [nVal, jAddr] of this._getArcs1(iAddr)) {
             if (nVal <= this.nChar) {
                 // simple character
-                yield* this._select1(zPattern, jAddr, sWord + this.lArcVal[nVal]);
+                yield* this._select1(zFlexPattern, zTagsPattern, jAddr, sWord + this.lArcVal[nVal]);
             } else {
-                let sEntry = sWord + "\t" + this.funcStemming(sWord, this.lArcVal[nVal]);
-                for (let [nMorphVal, _] of this._getArcs1(jAddr)) {
-                    if (!zPattern || zPattern.test(this.lArcVal[nMorphVal])) {
-                        yield sEntry + "\t" + this.lArcVal[nMorphVal];
+                if (!zFlexPattern || zFlexPattern.test(sWord)) {
+                    let sStem = this.funcStemming(sWord, this.lArcVal[nVal]);
+                    for (let [nMorphVal, _] of this._getArcs1(jAddr)) {
+                        if (!zTagsPattern || zTagsPattern.test(this.lArcVal[nMorphVal])) {
+                            yield [sWord, sStem, this.lArcVal[nMorphVal]];
+                        }
                     }
                 }
             }
         }
     }            

Index: graphspell-js/spellchecker.js
==================================================================
--- graphspell-js/spellchecker.js
+++ graphspell-js/spellchecker.js
@@ -2,11 +2,12 @@
 // Wrapper for the IBDAWG class.
 // Useful to check several dictionaries at once.
 
 // To avoid iterating over a pile of dictionaries, it is assumed that 3 are enough:
 // - the main dictionary, bundled with the package
-// - the extended dictionary, added by an organization
+// - the extended dictionary
+// - the community dictionary, added by an organization
 // - the personal dictionary, created by the user for its own convenience
 
 
 "use strict";
 
@@ -26,19 +27,23 @@
 ]);
 
 
 class SpellChecker {
 
-    constructor (sLangCode, sPath="", mainDic="", extentedDic="", personalDic="") {
+    constructor (sLangCode, sPath="", mainDic="", extentedDic="", communityDic="", personalDic="") {
         // returns true if the main dictionary is loaded
         this.sLangCode = sLangCode;
         if (!mainDic) {
             mainDic = dDefaultDictionaries.gl_get(sLangCode, "");
         }
         this.oMainDic = this._loadDictionary(mainDic, sPath, true);
         this.oExtendedDic = this._loadDictionary(extentedDic, sPath);
+        this.oCommunityDic = this._loadDictionary(communityDic, sPath);
         this.oPersonalDic = this._loadDictionary(personalDic, sPath);
+        this.bExtendedDic = Boolean(this.oExtendedDic);
+        this.bCommunityDic = Boolean(this.oCommunityDic);
+        this.bPersonalDic = Boolean(this.oPersonalDic);
         this.oTokenizer = null;
     }
 
     _loadDictionary (dictionary, sPath, bNecessary=false) {
         // returns an IBDAWG object
@@ -85,18 +90,52 @@
     }
 
     setExtendedDictionary (dictionary) {
         // returns true if the dictionary is loaded
         this.oExtendedDic = this._loadDictionary(dictionary);
-        return Boolean(this.oExtendedDic);
+        this.bExtendedDic = Boolean(this.oExtendedDic);
+        return this.bExtendedDic;
+    }
+
+    setCommunityDictionary (dictionary) {
+        // returns true if the dictionary is loaded
+        this.oCommunityDic = this._loadDictionary(dictionary);
+        this.bCommunityDic = Boolean(this.oCommunityDic);
+        return this.bCommunityDic;
     }
 
     setPersonalDictionary (dictionary) {
         // returns true if the dictionary is loaded
         this.oPersonalDic = this._loadDictionary(dictionary);
-        return Boolean(this.oPersonalDic);
+        this.bPersonalDic = Boolean(this.oPersonalDic);
+        return this.bPersonalDic;
+    }
+
+    activateExtendedDictionary () {
+        this.bExtendedDic = Boolean(this.oExtendedDic);
+    }
+
+    activateCommunityDictionary () {
+        this.bCommunityDic = Boolean(this.oCommunityDic);
+    }
+
+    activatePersonalDictionary () {
+        this.bPersonalDic = Boolean(this.oPersonalDic);
+    }
+
+    deactivateExtendedDictionary () {
+        this.bExtendedDic = false;
+    }
+
+    deactivateCommunityDictionary () {
+        this.bCommunityDic = false;
+    }
+
+    deactivatePersonalDictionary () {
+        this.bPersonalDic = false;
     }
+
 
     // parse text functions
 
     parseParagraph (sText) {
         if (!this.oTokenizer) {
@@ -116,14 +155,17 @@
     isValidToken (sToken) {
         // checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked)
         if (this.oMainDic.isValidToken(sToken)) {
             return true;
         }
-        if (this.oExtendedDic && this.oExtendedDic.isValidToken(sToken)) {
+        if (this.bExtendedDic && this.oExtendedDic.isValidToken(sToken)) {
+            return true;
+        }
+        if (this.bCommunityDic && this.oCommunityDic.isValidToken(sToken)) {
             return true;
         }
-        if (this.oPersonalDic && this.oPersonalDic.isValidToken(sToken)) {
+        if (this.bPersonalDic && this.oPersonalDic.isValidToken(sToken)) {
             return true;
         }
         return false;
     }
 
@@ -130,14 +172,17 @@
     isValid (sWord) {
         // checks if sWord is valid (different casing tested if the first letter is a capital)
         if (this.oMainDic.isValid(sWord)) {
             return true;
         }
-        if (this.oExtendedDic && this.oExtendedDic.isValid(sWord)) {
+        if (this.bExtendedDic && this.oExtendedDic.isValid(sWord)) {
+            return true;
+        }
+        if (this.bCommunityDic && this.oCommunityDic.isValid(sToken)) {
             return true;
         }
-        if (this.oPersonalDic && this.oPersonalDic.isValid(sWord)) {
+        if (this.bPersonalDic && this.oPersonalDic.isValid(sWord)) {
             return true;
         }
         return false;
     }
 
@@ -144,52 +189,79 @@
     lookup (sWord) {
         // checks if sWord is in dictionary as is (strict verification)
         if (this.oMainDic.lookup(sWord)) {
             return true;
         }
-        if (this.oExtendedDic && this.oExtendedDic.lookup(sWord)) {
+        if (this.bExtendedDic && this.oExtendedDic.lookup(sWord)) {
+            return true;
+        }
+        if (this.bCommunityDic && this.oCommunityDic.lookup(sToken)) {
             return true;
         }
-        if (this.oPersonalDic && this.oPersonalDic.lookup(sWord)) {
+        if (this.bPersonalDic && this.oPersonalDic.lookup(sWord)) {
             return true;
         }
         return false;
     }
 
     getMorph (sWord) {
         // retrieves morphologies list, different casing allowed
         let lResult = this.oMainDic.getMorph(sWord);
-        if (this.oExtendedDic) {
+        if (this.bExtendedDic) {
             lResult.push(...this.oExtendedDic.getMorph(sWord));
         }
-        if (this.oPersonalDic) {
+        if (this.bCommunityDic) {
+            lResult.push(...this.oCommunityDic.getMorph(sWord));
+        }
+        if (this.bPersonalDic) {
             lResult.push(...this.oPersonalDic.getMorph(sWord));
         }
         return lResult;
     }
 
     * suggest (sWord, nSuggLimit=10) {
         // generator: returns 1, 2 or 3 lists of suggestions
         yield this.oMainDic.suggest(sWord, nSuggLimit);
-        if (this.oExtendedDic) {
+        if (this.bExtendedDic) {
             yield this.oExtendedDic.suggest(sWord, nSuggLimit);
         }
-        if (this.oPersonalDic) {
+        if (this.bCommunityDic) {
+            yield this.oCommunityDic.suggest(sWord, nSuggLimit);
+        }
+        if (this.bPersonalDic) {
             yield this.oPersonalDic.suggest(sWord, nSuggLimit);
         }
     }
 
-    * select (sPattern="") {
-        // generator: returns all entries which morphology fits <sPattern>
-        yield* this.oMainDic.select(sPattern)
-        if (this.oExtendedDic) {
-            yield* this.oExtendedDic.select(sPattern);
-        }
-        if (this.oPersonalDic) {
-            yield* this.oPersonalDic.select(sPattern);
-        }
+    * select (sFlexPattern="", sTagsPattern="") {
+        // generator: returns all entries which flexion fits <sFlexPattern> and morphology fits <sTagsPattern>
+        yield* this.oMainDic.select(sFlexPattern, sTagsPattern)
+        if (this.bExtendedDic) {
+            yield* this.oExtendedDic.select(sFlexPattern, sTagsPattern);
+        }
+        if (this.bCommunityDic) {
+            yield* this.oCommunityDic.select(sFlexPattern, sTagsPattern);
+        }
+        if (this.bPersonalDic) {
+            yield* this.oPersonalDic.select(sFlexPattern, sTagsPattern);
+        }
+    }
+
+    getSimilarEntries (sWord, nSuggLimit=10) {
+        // return a list of tuples (similar word, stem, morphology)
+        let lResult = this.oMainDic.getSimilarEntries(sWord, nSuggLimit);
+        if (this.bExtendedDic) {
+            lResult.push(...this.oExtendedDic.getSimilarEntries(sWord, nSuggLimit));
+        }
+        if (this.bCommunityDic) {
+            lResult.push(...this.oCommunityDic.getSimilarEntries(sWord, nSuggLimit));
+        }
+        if (this.bPersonalDic) {
+            lResult.push(...this.oPersonalDic.getSimilarEntries(sWord, nSuggLimit));
+        }
+        return lResult;
     }
 }
 
 if (typeof(exports) !== 'undefined') {
     exports.SpellChecker = SpellChecker;
 }

Index: graphspell/dawg.py
==================================================================
--- graphspell/dawg.py
+++ graphspell/dawg.py
@@ -25,11 +25,11 @@
     if os.path.isfile(spf):
         with open(spf, "r", encoding="utf-8") as hSrc:
             for sLine in hSrc:
                 sLine = sLine.strip()
                 if sLine and not sLine.startswith("#"):
-                    yield sLine
+                    yield sLine.split("\t")
     else:
         raise OSError("# Error. File not found or not loadable: " + spf)
 
 
 
@@ -39,11 +39,11 @@
     # We store suffix/affix codes and tags within the graph after the “real” word.
     # A word is a list of numbers [ c1, c2, c3 . . . cN, iAffix, iTags]
     # Each arc is an index in self.lArcVal, where are stored characters, suffix/affix codes for stemming and tags.
     # Important: As usual, the last node (after ‘iTags’) is tagged final, AND the node after ‘cN’ is ALSO tagged final.
 
-    def __init__ (self, spfSrc, cStemming, sLangCode, sLangName="", sDicName=""):
+    def __init__ (self, src, cStemming, sLangCode, sLangName="", sDicName=""):
         print("===== Direct Acyclic Word Graph - Minimal Acyclic Finite State Automaton =====")
         cStemming = cStemming.upper()
         if cStemming == "A":
             funcStemmingGen = st.defineAffixCode
         elif cStemming == "S":
@@ -51,60 +51,59 @@
         elif cStemming == "N":
             funcStemmingGen = st.noStemming
         else:
             raise ValueError("# Error. Unknown stemming code: {}".format(cStemming))
 
-        lEntry = []
+        aEntry = set()
         lChar = ['']; dChar = {}; nChar = 1; dCharOccur = {}
         lAff  = [];   dAff  = {}; nAff  = 0; dAffOccur = {}
         lTag  = [];   dTag  = {}; nTag  = 0; dTagOccur = {}
         nErr = 0
-        
+
         # read lexicon
-        for sLine in readFile(spfSrc):
-            sFlex, sStem, sTag = sLine.split("\t")
+        if type(src) is str:
+            iterable = readFile(src)
+        else:
+            iterable = src
+        for sFlex, sStem, sTag in iterable:
             addWordToCharDict(sFlex)
             # chars
             for c in sFlex:
                 if c not in dChar:
                     dChar[c] = nChar
                     lChar.append(c)
                     nChar += 1
                 dCharOccur[c] = dCharOccur.get(c, 0) + 1
             # affixes to find stem from flexion
-            aff = funcStemmingGen(sFlex, sStem)
-            if aff not in dAff:
-                dAff[aff] = nAff
-                lAff.append(aff)
+            sAff = funcStemmingGen(sFlex, sStem)
+            if sAff not in dAff:
+                dAff[sAff] = nAff
+                lAff.append(sAff)
                 nAff += 1
-            dAffOccur[aff] = dCharOccur.get(aff, 0) + 1
+            dAffOccur[sAff] = dCharOccur.get(sAff, 0) + 1
             # tags
             if sTag not in dTag:
                 dTag[sTag] = nTag
                 lTag.append(sTag)
                 nTag += 1
             dTagOccur[sTag] = dTagOccur.get(sTag, 0) + 1
-            lEntry.append((sFlex, dAff[aff], dTag[sTag]))
-        if not lEntry:
+            aEntry.add((sFlex, dAff[sAff], dTag[sTag]))
+        if not aEntry:
             raise ValueError("# Error. Empty lexicon")
         
         # Preparing DAWG
         print(" > Preparing list of words")
         lVal = lChar + lAff + lTag
-        lWord = [ [dChar[c] for c in sFlex] + [iAff+nChar] + [iTag+nChar+nAff]  for sFlex, iAff, iTag in lEntry ]
-        lEntry = None
+        lWord = [ [dChar[c] for c in sFlex] + [iAff+nChar] + [iTag+nChar+nAff]  for sFlex, iAff, iTag in aEntry ]
+        aEntry = None
         
         # Dictionary of arc values occurrency, to sort arcs of each node
         dValOccur = dict( [ (dChar[c], dCharOccur[c])  for c in dChar ] \
                         + [ (dAff[aff]+nChar, dAffOccur[aff]) for aff in dAff ] \
                         + [ (dTag[tag]+nChar+nAff, dTagOccur[tag]) for tag in dTag ] )
-        #with open(spfSrc[:-8]+".valuesfreq.txt", 'w', encoding='utf-8') as hFreqDst:  # DEBUG
-        #    for iKey, nOcc in sorted(dValOccur.items(), key=lambda t: t[1], reverse=True):
-        #        hFreqDst.write("{}: {}\n".format(lVal[iKey], nOcc))
-        #    hFreqDst.close()
         
-        self.sFileName = spfSrc
+        self.sFileName = src  if type(src) is str  else "[None]"
         self.sLangCode = sLangCode
         self.sLangName = sLangName
         self.sDicName = sDicName
         self.nEntry = len(lWord)
         self.aPreviousEntry = []
@@ -308,11 +307,11 @@
                     if not zPattern or zPattern.search(self.lArcVal[nMorphVal]):
                         yield sEntry + "\t" + self.lArcVal[nMorphVal]
 
 
     # BINARY CONVERSION
-    def createBinary (self, sPathFile, nCompressionMethod, bDebug=False):
+    def _calculateBinary (self, nCompressionMethod):
         print(" > Write DAWG as an indexable binary dictionary [method: %d]" % nCompressionMethod)
         if nCompressionMethod == 1:
             self.nBytesArc = ( (self.nArcVal.bit_length() + 2) // 8 ) + 1   # We add 2 bits. See DawgNode.convToBytes1()
             self.nBytesOffset = 0
             self._calcNumBytesNodeAddress()
@@ -332,14 +331,10 @@
             print(" # Error: unknown compression method")
         print("   Arc values (chars, affixes and tags): {}  ->  {} bytes".format( self.nArcVal, len("\t".join(self.lArcVal).encode("utf-8")) ))
         print("   Arc size: {} bytes, Address size: {} bytes   ->   {} * {} = {} bytes".format( self.nBytesArc, self.nBytesNodeAddress, \
                                                                                                 self.nBytesArc+self.nBytesNodeAddress, self.nArc, \
                                                                                                 (self.nBytesArc+self.nBytesNodeAddress)*self.nArc ))
-        self._writeBinary(sPathFile, nCompressionMethod)
-        self._writeAsJSObject(sPathFile, nCompressionMethod)
-        if bDebug:
-            self._writeNodes(sPathFile, nCompressionMethod)
 
     def _calcNumBytesNodeAddress (self):
         "how many bytes needed to store all nodes/arcs in the binary dictionary"
         self.nBytesNodeAddress = 1
         while ((self.nBytesArc + self.nBytesNodeAddress) * self.nArc) > (2 ** (self.nBytesNodeAddress * 8)):
@@ -387,13 +382,12 @@
                         nSize -= nDiff
                 if self.lSortedNodes[i].size != nSize:
                     self.lSortedNodes[i].size = nSize
                     bEnd = False
 
-    def _writeAsJSObject (self, spfDst, nCompressionMethod, bInJSModule=False, bBinaryDictAsHexString=True):
-        if not spfDst.endswith(".json"):
-            spfDst += "."+str(nCompressionMethod)+".json"
+    def getBinaryAsJSON (self, nCompressionMethod=1, bBinaryDictAsHexString=True):
+        self._calculateBinary(nCompressionMethod)
         byDic = b""
         if nCompressionMethod == 1:
             byDic = self.oRoot.convToBytes1(self.nBytesArc, self.nBytesNodeAddress)
             for oNode in self.lMinimizedNodes:
                 byDic += oNode.convToBytes1(self.nBytesArc, self.nBytesNodeAddress)
@@ -403,44 +397,48 @@
                 byDic += oNode.convToBytes2(self.nBytesArc, self.nBytesNodeAddress)
         elif nCompressionMethod == 3:
             byDic = self.oRoot.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset)
             for oNode in self.lSortedNodes:
                 byDic += oNode.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset)
+        return {
+            "sHeader": "/pyfsa/",
+            "sLangCode": self.sLangCode,
+            "sLangName": self.sLangName,
+            "sDicName": self.sDicName,
+            "sFileName": self.sFileName,
+            "sDate": self._getDate(),
+            "nEntry": self.nEntry,
+            "nChar": self.nChar,
+            "nAff": self.nAff,
+            "nTag": self.nTag,
+            "cStemming": self.cStemming,
+            "dChar": self.dChar,
+            "nNode": self.nNode,
+            "nArc": self.nArc,
+            "nArcVal": self.nArcVal,
+            "lArcVal": self.lArcVal,
+            "nCompressionMethod": nCompressionMethod,
+            "nBytesArc": self.nBytesArc,
+            "nBytesNodeAddress": self.nBytesNodeAddress,
+            "nBytesOffset": self.nBytesOffset,
+            # Mozilla’s JS parser don’t like file bigger than 4 Mb!
+            # So, if necessary, we use an hexadecimal string, that we will convert later in Firefox’s extension.
+            # https://github.com/mozilla/addons-linter/issues/1361
+            "sByDic": byDic.hex()  if bBinaryDictAsHexString  else [ e  for e in byDic ]
+        }
 
+    def writeAsJSObject (self, spfDst, nCompressionMethod, bInJSModule=False, bBinaryDictAsHexString=True):
+        if not spfDst.endswith(".json"):
+            spfDst += "."+str(nCompressionMethod)+".json"
         with open(spfDst, "w", encoding="utf-8", newline="\n") as hDst:
             if bInJSModule:
                 hDst.write('// JavaScript\n// Generated data (do not edit)\n\n"use strict";\n\nconst dictionary = ')
-            hDst.write(json.dumps({
-                            "sHeader": "/pyfsa/",
-                            "sLangCode": self.sLangCode,
-                            "sLangName": self.sLangName,
-                            "sDicName": self.sDicName,
-                            "sFileName": self.sFileName,
-                            "sDate": self._getDate(),
-                            "nEntry": self.nEntry,
-                            "nChar": self.nChar,
-                            "nAff": self.nAff,
-                            "nTag": self.nTag,
-                            "cStemming": self.cStemming,
-                            "dChar": self.dChar,
-                            "nNode": self.nNode,
-                            "nArc": self.nArc,
-                            "nArcVal": self.nArcVal,
-                            "lArcVal": self.lArcVal,
-                            "nCompressionMethod": nCompressionMethod,
-                            "nBytesArc": self.nBytesArc,
-                            "nBytesNodeAddress": self.nBytesNodeAddress,
-                            "nBytesOffset": self.nBytesOffset,
-                            # JavaScript is a pile of shit, so Mozilla’s JS parser don’t like file bigger than 4 Mb!
-                            # So, if necessary, we use an hexadecimal string, that we will convert later in Firefox’s extension.
-                            # https://github.com/mozilla/addons-linter/issues/1361
-                            "sByDic": byDic.hex()  if bBinaryDictAsHexString  else [ e  for e in byDic ]
-                        }, ensure_ascii=False))
+            hDst.write( json.dumps(self.getBinaryAsJSON(nCompressionMethod, bBinaryDictAsHexString), ensure_ascii=False) )
             if bInJSModule:
                 hDst.write(";\n\nexports.dictionary = dictionary;\n")
 
-    def _writeBinary (self, sPathFile, nCompressionMethod):
+    def writeBinary (self, sPathFile, nCompressionMethod, bDebug=False):
         """
         Format of the binary indexable dictionary:
         Each section is separated with 4 bytes of \0
         
         - Section Header:
@@ -471,10 +469,11 @@
         
         - Section Word Graph (nodes / arcs)
                 * A list of nodes which are a list of arcs with an address of the next node.
                   See DawgNode.convToBytes() for details.
         """
+        self._calculateBinary(nCompressionMethod)
         if not sPathFile.endswith(".bdic"):
             sPathFile += "."+str(nCompressionMethod)+".bdic"
         with open(sPathFile, 'wb') as hDst:
             # header
             hDst.write("/pyfsa/{}/".format(nCompressionMethod).encode("utf-8"))
@@ -499,11 +498,12 @@
                     hDst.write(oNode.convToBytes2(self.nBytesArc, self.nBytesNodeAddress))
             elif nCompressionMethod == 3:
                 hDst.write(self.oRoot.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset))
                 for oNode in self.lSortedNodes:
                     hDst.write(oNode.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset))
-            hDst.close()
+        if bDebug:
+            self._writeNodes(sPathFile, nCompressionMethod)
 
     def _getDate (self):
         return time.strftime("%Y.%m.%d, %H:%M")
 
     def _writeNodes (self, sPathFile, nCompressionMethod):
@@ -522,23 +522,10 @@
             if nCompressionMethod == 3:
                 hDst.write(self.oRoot.getTxtRepr3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset, self.lArcVal)+"\n")
                 #hDst.write( ''.join( [ "%02X " %  z  for z in self.oRoot.convToBytes3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset) ] ).strip() )
                 for oNode in self.lSortedNodes:
                     hDst.write(oNode.getTxtRepr3(self.nBytesArc, self.nBytesNodeAddress, self.nBytesOffset, self.lArcVal)+"\n")
-            hDst.close()
-    
-    def writeResults (self, sPathFile):
-        bFileExits = os.path.isfile("_lexicons.res.txt")
-        with open("_lexicons.res.txt", "a", encoding='utf-8', newline="\n") as hDst:
-            sFormat1 = "{:<12} {:>12} {:>5} {:>8} {:>8} {:>6} {:>8} {:>9} {:>9} {:>15} {:>12} {:>12}\n"
-            sFormat2 = "{:<12} {:>12,} {:>5,} {:>8,} {:>8} {:>6,} {:>8,} {:>9,} {:>9,} {:>15,} {:>12,} {:>12,}\n"
-            if not bFileExits:
-                hDst.write(sFormat1.format("Lexicon", "Entries", "Chars", "Affixes", "Stemming", "Tags", "Values", "Nodes", "Arcs", "Lexicon (Kb)", "Dict (Kb)", "LT Dict (Kb)"))
-            hDst.write(sFormat2.format(self.sLangName, self.nEntry, self.nChar, self.nAff, self.cStemming + "FX", self.nTag, self.nArcVal, \
-                                       self.nNode, self.nArc, os.path.getsize(self.sFileName), os.path.getsize(sPathFile), \
-                                       os.path.getsize("cfsa/dict/{}.dict".format(self.sLangName)) if os.path.isfile("cfsa/dict/{}.dict".format(self.sLangName)) else 0))
-            hDst.close()
 
 
 
 class DawgNode:
     NextId = 0

Index: graphspell/ibdawg.py
==================================================================
--- graphspell/ibdawg.py
+++ graphspell/ibdawg.py
@@ -77,23 +77,26 @@
 
 
 class IBDAWG:
     """INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH"""
 
-    def __init__ (self, sfDict):
-        self.by = pkgutil.get_data(__package__, "_dictionaries/" + sfDict)
-        if not self.by:
-            raise OSError("# Error. File not found or not loadable: "+sfDict)
-
-        if sfDict.endswith(".bdic"):
-            self._initBinary()
-        elif sfDict.endswith(".json"):
-            self._initJSON()
+    def __init__ (self, source):
+        if type(source) is str:
+            self.by = pkgutil.get_data(__package__, "_dictionaries/" + source)
+            if not self.by:
+                raise OSError("# Error. File not found or not loadable: "+source)
+
+            if source.endswith(".bdic"):
+                self._initBinary()
+            elif source.endswith(".json"):
+                self._initJSON(json.loads(self.by.decode("utf-8")))     #json.loads(self.by)    # In Python 3.6, can read directly binary strings
+            else:
+                raise OSError("# Error. Unknown file type: "+source)
         else:
-            raise OSError("# Error. Unknown file type: "+sfDict)
+            self._initJSON(source)
 
-        self.sFileName = sfDict
+        self.sFileName = source  if type(source) is str  else "[None]"
 
         self._arcMask = (2 ** ((self.nBytesArc * 8) - 3)) - 1
         self._finalNodeMask = 1 << ((self.nBytesArc * 8) - 1)
         self._lastArcMask = 1 << ((self.nBytesArc * 8) - 2)
         self._addrBitMask = 1 << ((self.nBytesArc * 8) - 3)  # version 2
@@ -167,14 +170,13 @@
         for i in range(1, self.nChar+1):
             self.dChar[self.lArcVal[i]] = i
         self.dCharVal = { v: k  for k, v in self.dChar.items() }
         self.nBytesOffset = 1 # version 3
 
-    def _initJSON (self):
+    def _initJSON (self, oJSON):
         "initialize with a JSON text file"
-        self.__dict__.update(json.loads(self.by.decode("utf-8")))
-        #self.__dict__.update(json.loads(self.by))                  # In Python 3.6, can read directly binary strings
+        self.__dict__.update(oJSON)
         self.byDic = binascii.unhexlify(self.sByDic)
 
     def getInfo (self):
         return  "  Language: {0.sLangName}   Lang code: {0.sLangCode}   Dictionary name: {0.sDicName}" \
                 "  Compression method: {0.nCompressionMethod:>2}   Date: {0.sDate}   Stemming: {0.cStemming}FX\n" \
@@ -405,36 +407,51 @@
             return
         if iPos >= 0:
             print("\n   "+ " " * iPos + "|")
             self.drawPath(sWord[1:], iNextNodeAddr)
 
-    def select (self, sPattern=""):
-        "generator: returns all entries which morphology fits <sPattern>"
-        zPattern = None
-        if sPattern:
-            try:
-                zPattern = re.compile(sPattern)
-            except:
-                print("# Error in regex pattern")
-                traceback.print_exc()
-        yield from self._select1(zPattern, 0, "")
+    def getSimilarEntries (self, sWord, nSuggLimit=10):
+        "return a list of tuples (similar word, stem, morphology)"
+        if not sWord:
+            return []
+        lResult = []
+        for sSimilar in self.suggest(sWord, nSuggLimit):
+            for sMorph in self.getMorph(sSimilar):
+                nCut = sMorph.find(" ")
+                lResult.append( (sSimilar, sMorph[1:nCut], sMorph[nCut+1:]) )
+        return lResult
+
+    def select (self, sFlexPattern="", sTagsPattern=""):
+        "generator: returns all entries which flexion fits <sFlexPattern> and morphology fits <sTagsPattern>"
+        zFlexPattern = None
+        zTagsPattern = None
+        try:
+            if sFlexPattern:
+                zFlexPattern = re.compile(sFlexPattern)
+            if sTagsPattern:
+                zTagsPattern = re.compile(sTagsPattern)
+        except:
+            print("# Error in regex pattern")
+            traceback.print_exc()
+        yield from self._select1(zFlexPattern, zTagsPattern, 0, "")
 
     # def morph (self, sWord):
     #     is defined in __init__
 
     # VERSION 1
-    def _select1 (self, zPattern, iAddr, sWord):
+    def _select1 (self, zFlexPattern, zTagsPattern, iAddr, sWord):
         # recursive generator
         for nVal, jAddr in self._getArcs1(iAddr):
             if nVal <= self.nChar:
                 # simple character
-                yield from self._select1(zPattern, jAddr, sWord + self.lArcVal[nVal])
+                yield from self._select1(zFlexPattern, zTagsPattern, jAddr, sWord + self.lArcVal[nVal])
             else:
-                sEntry = sWord + "\t" + self.funcStemming(sWord, self.lArcVal[nVal])
-                for nMorphVal, _ in self._getArcs1(jAddr):
-                    if not zPattern or zPattern.search(self.lArcVal[nMorphVal]):
-                        yield sEntry + "\t" + self.lArcVal[nMorphVal]
+                if not zFlexPattern or zFlexPattern.search(sWord):
+                    sStem = self.funcStemming(sWord, self.lArcVal[nVal])
+                    for nMorphVal, _ in self._getArcs1(jAddr):
+                        if not zTagsPattern or zTagsPattern.search(self.lArcVal[nMorphVal]):
+                            yield [sWord, sStem, self.lArcVal[nMorphVal]]
 
     def _morph1 (self, sWord):
         "returns morphologies of <sWord>"
         iAddr = 0
         for c in sWord:

Index: graphspell/spellchecker.py
==================================================================
--- graphspell/spellchecker.py
+++ graphspell/spellchecker.py
@@ -2,11 +2,12 @@
 # Wrapper for the IBDAWG class.
 # Useful to check several dictionaries at once.
 
 # To avoid iterating over a pile of dictionaries, it is assumed that 3 are enough:
 # - the main dictionary, bundled with the package
-# - the extended dictionary, added by an organization
+# - the extended dictionary
+# - the community dictionary, added by an organization
 # - the personal dictionary, created by the user for its own convenience
 
 
 import traceback
 
@@ -20,30 +21,34 @@
 }
 
 
 class SpellChecker ():
 
-    def __init__ (self, sLangCode, sfMainDic="", sfExtendedDic="", sfPersonalDic=""):
+    def __init__ (self, sLangCode, sfMainDic="", sfExtendedDic="", sfCommunityDic="", sfPersonalDic=""):
         "returns True if the main dictionary is loaded"
         self.sLangCode = sLangCode
         if not sfMainDic:
             sfMainDic = dDefaultDictionaries.get(sLangCode, "")
         self.oMainDic = self._loadDictionary(sfMainDic, True)
         self.oExtendedDic = self._loadDictionary(sfExtendedDic)
+        self.oCommunityDic = self._loadDictionary(sfCommunityDic)
         self.oPersonalDic = self._loadDictionary(sfPersonalDic)
+        self.bExtendedDic = bool(self.oExtendedDic)
+        self.bCommunityDic = bool(self.oCommunityDic)
+        self.bPersonalDic = bool(self.oPersonalDic)
         self.oTokenizer = None
 
-    def _loadDictionary (self, sfDictionary, bNecessary=False):
+    def _loadDictionary (self, source, bNecessary=False):
         "returns an IBDAWG object"
-        if not sfDictionary:
+        if not source:
             return None
         try:
-            return ibdawg.IBDAWG(sfDictionary)
+            return ibdawg.IBDAWG(source)
         except Exception as e:
             if bNecessary:
-                raise Exception(str(e), "Error: <" + sfDictionary + "> not loaded.")
-            print("Error: <" + sfDictionary + "> not loaded.")
+                raise Exception(str(e), "Error: <" + str(source) + "> not loaded.")
+            print("Error: <" + str(source) + "> not loaded.")
             traceback.print_exc()
             return None
 
     def loadTokenizer (self):
         self.oTokenizer = tokenizer.Tokenizer(self.sLangCode)
@@ -51,24 +56,51 @@
     def getTokenizer (self):
         if not self.oTokenizer:
             self.loadTokenizer()
         return self.oTokenizer
 
-    def setMainDictionary (self, sfDictionary):
+    def setMainDictionary (self, source):
         "returns True if the dictionary is loaded"
-        self.oMainDic = self._loadDictionary(sfDictionary)
+        self.oMainDic = self._loadDictionary(source)
         return bool(self.oMainDic)
             
-    def setExtendedDictionary (self, sfDictionary):
-        "returns True if the dictionary is loaded"
-        self.oExtendedDic = self._loadDictionary(sfDictionary)
-        return bool(self.oExtendedDic)
-
-    def setPersonalDictionary (self, sfDictionary):
-        "returns True if the dictionary is loaded"
-        self.oPersonalDic = self._loadDictionary(sfDictionary)
-        return bool(self.oPersonalDic)
+    def setExtendedDictionary (self, source):
+        "returns True if the dictionary is loaded"
+        self.oExtendedDic = self._loadDictionary(source)
+        self.bExtendedDic = bool(self.oExtendedDic)
+        return self.bExtendedDic
+
+    def setCommunityDictionary (self, source):
+        "returns True if the dictionary is loaded"
+        self.oCommunityDic = self._loadDictionary(source)
+        self.bCommunityDic = bool(self.oCommunityDic)
+        return self.bCommunityDic
+
+    def setPersonalDictionary (self, source):
+        "returns True if the dictionary is loaded"
+        self.oPersonalDic = self._loadDictionary(source)
+        self.bPersonalDic = bool(self.oPersonalDic)
+        return self.bPersonalDic
+
+    def activateExtendedDictionary (self):
+        self.bExtendedDic = bool(self.oExtendedDic)
+
+    def activateCommunityDictionary (self):
+        self.bCommunityDic = bool(self.oCommunityDic)
+
+    def activatePersonalDictionary (self):
+        self.bPersonalDic = bool(self.oPersonalDic)
+
+    def deactivateExtendedDictionary (self):
+        self.bExtendedDic = False
+
+    def deactivateCommunityDictionary (self):
+        self.bCommunityDic = False
+
+    def deactivatePersonalDictionary (self):
+        self.bPersonalDic = False
+
 
     # parse text functions
 
     def parseParagraph (self, sText, bSpellSugg=False):
         if not self.oTokenizer:
@@ -103,67 +135,93 @@
 
     def isValidToken (self, sToken):
         "checks if sToken is valid (if there is hyphens in sToken, sToken is split, each part is checked)"
         if self.oMainDic.isValidToken(sToken):
             return True
-        if self.oExtendedDic and self.oExtendedDic.isValidToken(sToken):
+        if self.bExtendedDic and self.oExtendedDic.isValidToken(sToken):
+            return True
+        if self.bCommunityDic and self.oCommunityDic.isValidToken(sToken):
             return True
-        if self.oPersonalDic and self.oPersonalDic.isValidToken(sToken):
+        if self.bPersonalDic and self.oPersonalDic.isValidToken(sToken):
             return True
         return False
 
     def isValid (self, sWord):
         "checks if sWord is valid (different casing tested if the first letter is a capital)"
         if self.oMainDic.isValid(sWord):
             return True
-        if self.oExtendedDic and self.oExtendedDic.isValid(sWord):
+        if self.bExtendedDic and self.oExtendedDic.isValid(sWord):
+            return True
+        if self.bCommunityDic and self.oCommunityDic.isValid(sToken):
             return True
-        if self.oPersonalDic and self.oPersonalDic.isValid(sWord):
+        if self.bPersonalDic and self.oPersonalDic.isValid(sWord):
             return True
         return False
 
     def lookup (self, sWord):
         "checks if sWord is in dictionary as is (strict verification)"
         if self.oMainDic.lookup(sWord):
             return True
-        if self.oExtendedDic and self.oExtendedDic.lookup(sWord):
+        if self.bExtendedDic and self.oExtendedDic.lookup(sWord):
+            return True
+        if self.bCommunityDic and self.oCommunityDic.lookup(sToken):
             return True
-        if self.oPersonalDic and self.oPersonalDic.lookup(sWord):
+        if self.bPersonalDic and self.oPersonalDic.lookup(sWord):
             return True
         return False
 
     def getMorph (self, sWord):
         "retrieves morphologies list, different casing allowed"
         lResult = self.oMainDic.getMorph(sWord)
-        if self.oExtendedDic:
+        if self.bExtendedDic:
             lResult.extend(self.oExtendedDic.getMorph(sWord))
-        if self.oPersonalDic:
+        if self.bCommunityDic:
+            lResult.extend(self.oCommunityDic.getMorph(sWord))
+        if self.bPersonalDic:
             lResult.extend(self.oPersonalDic.getMorph(sWord))
         return lResult
 
     def getLemma (self, sWord):
         return set([ s[1:s.find(" ")]  for s in self.getMorph(sWord) ])
 
     def suggest (self, sWord, nSuggLimit=10):
         "generator: returns 1, 2 or 3 lists of suggestions"
         yield self.oMainDic.suggest(sWord, nSuggLimit)
-        if self.oExtendedDic:
+        if self.bExtendedDic:
             yield self.oExtendedDic.suggest(sWord, nSuggLimit)
-        if self.oPersonalDic:
+        if self.bCommunityDic:
+            yield self.oCommunityDic.suggest(sWord, nSuggLimit)
+        if self.bPersonalDic:
             yield self.oPersonalDic.suggest(sWord, nSuggLimit)
 
-    def select (self, sPattern=""):
-        "generator: returns all entries which morphology fits <sPattern>"
-        yield from self.oMainDic.select(sPattern)
-        if self.oExtendedDic:
-            yield from self.oExtendedDic.select(sPattern)
-        if self.oPersonalDic:
-            yield from self.oPersonalDic.select(sPattern)
+    def select (self, sFlexPattern="", sTagsPattern=""):
+        "generator: returns all entries which flexion fits <sFlexPattern> and morphology fits <sTagsPattern>"
+        yield from self.oMainDic.select(sFlexPattern, sTagsPattern)
+        if self.bExtendedDic:
+            yield from self.oExtendedDic.select(sFlexPattern, sTagsPattern)
+        if self.bCommunityDic:
+            yield from self.oCommunityDic.select(sFlexPattern, sTagsPattern)
+        if self.bPersonalDic:
+            yield from self.oPersonalDic.select(sFlexPattern, sTagsPattern)
 
     def drawPath (self, sWord):
         self.oMainDic.drawPath(sWord)
-        if self.oExtendedDic:
+        if self.bExtendedDic:
             print("-----")
             self.oExtendedDic.drawPath(sWord)
-        if self.oPersonalDic:
+        if self.bCommunityDic:
+            print("-----")
+            self.oCommunityDic.drawPath(sWord)
+        if self.bPersonalDic:
             print("-----")
             self.oPersonalDic.drawPath(sWord)
+
+    def getSimilarEntries (self, sWord, nSuggLimit=10):
+        "return a list of tuples (similar word, stem, morphology)"
+        lResult = self.oMainDic.getSimilarEntries(sWord, nSuggLimit)
+        if self.bExtendedDic:
+            lResult.extend(self.oExtendedDic.getSimilarEntries(sWord, nSuggLimit))
+        if self.bCommunityDic:
+            lResult.extend(self.oCommunityDic.getSimilarEntries(sWord, nSuggLimit))
+        if self.bPersonalDic:
+            lResult.extend(self.oPersonalDic.getSimilarEntries(sWord, nSuggLimit))
+        return lResult

Index: lex_build.py
==================================================================
--- lex_build.py
+++ lex_build.py
@@ -12,11 +12,11 @@
 def build (spfSrc, sLangCode, sLangName, sfDict, bJSON=False, sDicName="", cStemmingMethod="S", nCompressMethod=1):
     "transform a text lexicon as a binary indexable dictionary"
     oDAWG = fsa.DAWG(spfSrc, cStemmingMethod, sLangCode, sLangName, sDicName)
     dir_util.mkpath("graphspell/_dictionaries")
     oDAWG.writeInfo("graphspell/_dictionaries/" + sfDict + ".info.txt")
-    oDAWG.createBinary("graphspell/_dictionaries/" + sfDict + ".bdic", int(nCompressMethod))
+    oDAWG.writeBinary("graphspell/_dictionaries/" + sfDict + ".bdic", int(nCompressMethod))
     if bJSON:
         dir_util.mkpath("graphspell-js/_dictionaries")
         oDic = IBDAWG(sfDict + ".bdic")
         oDic.writeAsJSObject("graphspell-js/_dictionaries/" + sfDict + ".json", bBinaryDictAsHexString=True)
 

Index: make.py
==================================================================
--- make.py
+++ make.py
@@ -84,10 +84,11 @@
     # Extension files
     hZip.writestr("META-INF/manifest.xml", helpers.fileFile("gc_core/py/oxt/manifest.xml", dVars))
     hZip.writestr("description.xml", helpers.fileFile("gc_core/py/oxt/description.xml", dVars))
     hZip.writestr("Linguistic.xcu", helpers.fileFile("gc_core/py/oxt/Linguistic.xcu", dVars))
     hZip.writestr("Grammalecte.py", helpers.fileFile("gc_core/py/oxt/Grammalecte.py", dVars))
+    hZip.writestr("pythonpath/helpers.py", helpers.fileFile("gc_core/py/oxt/helpers.py", dVars))
 
     for sf in dVars["extras"].split(","):
         hZip.writestr(sf.strip(), helpers.fileFile(spLang + '/' + sf.strip(), dVars))
 
     if "logo" in dVars.keys() and dVars["logo"].strip():
@@ -304,20 +305,24 @@
             if not os.path.isdir("graphspell-js/"+sf):
                 file_util.copy_file("graphspell-js/"+sf, "grammalecte-js/graphspell")
                 helpers.copyAndFileTemplate("graphspell-js/"+sf, "grammalecte-js/graphspell/"+sf, dVars)
 
 
-def copyGraphspellDictionaries (dVars, bJavaScript=False, bExtendedDict=False, bPersonalDict=False):
+def copyGraphspellDictionaries (dVars, bJavaScript=False, bExtendedDict=False, bCommunityDict=False, bPersonalDict=False):
     dVars["dic_main_filename_py"] = ""
     dVars["dic_main_filename_js"] = ""
     dVars["dic_extended_filename_py"] = ""
     dVars["dic_extended_filename_js"] = ""
+    dVars["dic_community_filename_py"] = ""
+    dVars["dic_community_filename_js"] = ""
     dVars["dic_personal_filename_py"] = ""
     dVars["dic_personal_filename_js"] = ""
     lDict = [ ("main", dVars['dic_filename']) ]
     if bExtendedDict:
         lDict.append(("extended", dVars['dic_extended_filename']))
+    if bCommunityDict:
+        lDict.append(("community", dVars['dic_community_filename']))
     if bPersonalDict:
         lDict.append(("personal", dVars['dic_personal_filename']))
     for sType, sFileName in lDict:
         spfPyDic = "graphspell/_dictionaries/" + sFileName + ".bdic"
         spfJSDic = "graphspell-js/_dictionaries/" + sFileName + ".json"
@@ -338,10 +343,14 @@
         sDicName = dVars['dic_name']
     elif sType == "extended":
         spfLexSrc = dVars['lexicon_extended_src']
         sfDictDst = dVars['dic_extended_filename']
         sDicName = dVars['dic_extended_name']
+    elif sType == "community":
+        spfLexSrc = dVars['lexicon_community_src']
+        sfDictDst = dVars['dic_community_filename']
+        sDicName = dVars['dic_community_name']
     elif sType == "personal":
         spfLexSrc = dVars['lexicon_personal_src']
         sfDictDst = dVars['dic_personal_filename']
         sDicName = dVars['dic_personal_name']
     lex_build.build(spfLexSrc, dVars['lang'], dVars['lang_name'], sfDictDst, bJavaScript, sDicName, dVars['stemming_method'], int(dVars['fsa_method']))
@@ -359,10 +368,11 @@
     xParser.add_argument("-t", "--tests", help="run unit tests", action="store_true")
     xParser.add_argument("-p", "--perf", help="run performance tests", action="store_true")
     xParser.add_argument("-pm", "--perf_memo", help="run performance tests and store results in perf_memo.txt", action="store_true")
     xParser.add_argument("-js", "--javascript", help="JavaScript build for Firefox", action="store_true")
     xParser.add_argument("-aed", "--add_extended_dictionary", help="add extended dictionary to the build", action="store_true")
+    xParser.add_argument("-acd", "--add_community_dictionary", help="add community dictionary to the build", action="store_true")
     xParser.add_argument("-apd", "--add_personal_dictionary", help="add personal dictionary to the build", action="store_true")
     xParser.add_argument("-fx", "--firefox", help="Launch Firefox Developper for WebExtension testing", action="store_true")
     xParser.add_argument("-we", "--web_ext", help="Launch Firefox Nightly for WebExtension testing", action="store_true")
     xParser.add_argument("-tb", "--thunderbird", help="Launch Thunderbird", action="store_true")
     xParser.add_argument("-i", "--install", help="install the extension in Writer (path of unopkg must be set in config.ini)", action="store_true")
@@ -384,10 +394,12 @@
             xConfig = getConfig(sLang)
             dVars = xConfig._sections['args']
 
             if not dVars["lexicon_extended_src"]:
                 xArgs.add_extended_dictionary = False
+            if not dVars["lexicon_community_src"]:
+                xArgs.add_community_dictionary = False
             if not dVars["lexicon_personal_src"]:
                 xArgs.add_personal_dictionary = False
 
             # build data
             build_data_module = None
@@ -401,17 +413,19 @@
                 build_data_module.before('gc_lang/'+sLang, dVars, xArgs.javascript)
             if xArgs.dict:
                 buildDictionary(dVars, "main", xArgs.javascript)
                 if xArgs.add_extended_dictionary:
                     buildDictionary(dVars, "extended", xArgs.javascript)
+                if xArgs.add_community_dictionary:
+                    buildDictionary(dVars, "community", xArgs.javascript)
                 if xArgs.add_personal_dictionary:
                     buildDictionary(dVars, "personal", xArgs.javascript)
             if build_data_module and xArgs.build_data_after:
                 build_data_module.after('gc_lang/'+sLang, dVars, xArgs.javascript)
 
             # copy dictionaries from Graphspell
-            copyGraphspellDictionaries(dVars, xArgs.javascript, xArgs.add_extended_dictionary, xArgs.add_personal_dictionary)
+            copyGraphspellDictionaries(dVars, xArgs.javascript, xArgs.add_extended_dictionary, xArgs.add_community_dictionary, xArgs.add_personal_dictionary)
 
             # make
             sVersion = create(sLang, xConfig, xArgs.install, xArgs.javascript, )
 
             # tests