Grammalecte  Changes On Branch db6da7d9a4078425

Changes In Branch multid Through [db6da7d9a4] Excluding Merge-Ins

This is equivalent to a diff from f9c4613c61 to db6da7d9a4

2018-02-27
17:23
[lo] update: lexicon editor check-in: 1d5fe44fe8 user: olr tags: lo, multid
2018-02-26
18:46
[lo] update: lexicon editor check-in: db6da7d9a4 user: olr tags: lo, multid
2018-02-25
22:16
[doc] update changelog check-in: 4f4360c720 user: olr tags: doc, trunk
21:55
[lo] update: lexicon editor check-in: 89b74dbf1b user: olr tags: lo, multid
15:39
merge trunk check-in: 1ab530ddfa user: olr tags: multid
08:54
[fr][bug] ocr: problème de casse pour la suggestion <Il/il> check-in: f9c4613c61 user: olr tags: fr, trunk
2018-02-24
12:45
[lo] Enumerator: change title comment check-in: 015284c8bd user: olr tags: lo, trunk

Modified gc_core/py/oxt/OptionsDialog.xcs from [bfbbfee5a6] to [412b78821f].

12
13
14
15
16
17
18










19
20
21
22
23
24




25
26
27
    <templates>
        <group oor:name="${lang}">
            <info>
                <desc>The data for one leaf.</desc>
            </info>
            ${xcs_options}
        </group>










    </templates>

    <component>
        <group oor:name="Leaves">
            <node-ref oor:name="${lang}" oor:node-type="${lang}" />
        </group>




    </component>

</oor:component-schema>







>
>
>
>
>
>
>
>
>
>






>
>
>
>



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    <templates>
        <group oor:name="${lang}">
            <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="graphspell" oor:type="xs:int"><value>1</value></prop>
            <prop oor:name="graphspellsugg" oor:type="xs:int"><value>1</value></prop>
            <prop oor:name="extended_dic" oor:type="xs:int"><value>0</value></prop>
            <prop oor:name="personal_dic" oor:type="xs:int"><value>1</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 version [f3ef6493bc].





















































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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)

Modified gc_lang/fr/config.ini from [93df40f5c3] to [2f07c469a9].

71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86






87
88
89
90
91
92
93
oxt/_img/logo120_text.png = img/logo120_text.png
oxt/_img/LaMouette_small.png = img/LaMouette_small.png
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






# ContextMenu
oxt/ContextMenu/ContextMenu.py = ContextMenu.py
oxt/ContextMenu/jobs.xcu = config/jobs.xcu
# TextFormatter
oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py
oxt/TextFormatter/tf_strings.py = pythonpath/tf_strings.py
oxt/TextFormatter/tf_options.py = pythonpath/tf_options.py







<








>
>
>
>
>
>







71
72
73
74
75
76
77

78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
oxt/_img/logo120_text.png = img/logo120_text.png
oxt/_img/LaMouette_small.png = img/LaMouette_small.png
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

# 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_conj_data.py = pythonpath/lxe_conj_data.py
oxt/DictOptions/lxe_strings.py = pythonpath/lxe_strings.py
# ContextMenu
oxt/ContextMenu/ContextMenu.py = ContextMenu.py
oxt/ContextMenu/jobs.xcu = config/jobs.xcu
# TextFormatter
oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py
oxt/TextFormatter/tf_strings.py = pythonpath/tf_strings.py
oxt/TextFormatter/tf_options.py = pythonpath/tf_options.py

Modified gc_lang/fr/oxt/AppLauncher.py from [f6fd0dec5a] to [ed57ba0db8].

38
39
40
41
42
43
44








45
46
47
48
49
50
51
                    xDialog.run(sCmd[3:])
                else:
                    xDialog.run()
            elif sCmd == "TF":
                import TextFormatter
                xDialog = TextFormatter.TextFormatter(self.ctx)
                xDialog.run(self.sLang)








            elif sCmd == "DS":
                import DictionarySwitcher
                xDialog = DictionarySwitcher.FrenchDictionarySwitcher(self.ctx)
                xDialog.run(self.sLang)
            elif sCmd == "MA":
                import Author
                xDialog = Author.Author(self.ctx)







>
>
>
>
>
>
>
>







38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
                    xDialog.run(sCmd[3:])
                else:
                    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":
                import Author
                xDialog = Author.Author(self.ctx)

Added gc_lang/fr/oxt/DictOptions/DictOptions.py version [0df543aa25].



























































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# 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 = 255
        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)
        self._addWidget('import_personal', 'FixedText', nX, nY3+55, nWidth-60, nHeight, Label = dUI.get('import_personal', "#err"), FontDescriptor = xFDSubTitle)
        self.xMsg = self._addWidget('msg', 'FixedText', nX, nY3+65, nWidth-50, nHeight, Label = "[néant]")
        self._addWidget('import_button', 'Button', self.xDialog.Width-50, nY3+65, 40, 10, Label = dUI.get('import_button', "#err"), TextColor = 0x005500)
        self._addWidget('create_dictionary', 'FixedText', nX, nY3+75, nWidth, nHeight*2, Label = dUI.get('create_dictionary', "#err"), MultiLine = True)

        # Button
        self._addWidget('apply_button', 'Button', self.xDialog.Width-120, 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('import_button').addActionListener(self)
        self.xContainer.getControl('import_button').setActionCommand('Import')
        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:
            xChild = self.xSettingNode.getByName("o_fr")
            if xActionEvent.ActionCommand == 'Apply':
                xChild.setPropertyValue("graphspell", self.xGraphspell.State)
                xChild.setPropertyValue("graphspellsugg", self.xGraphspellSugg.State)
                #xChild.setPropertyValue("extended_dic", self.xExtendedDic.State)
                xChild.setPropertyValue("personal_dic", self.xPersonalDic.State)
                self.xSettingNode.commitChanges()
            elif xActionEvent.ActionCommand == "Import":
                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()
            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("graphspell")
            self.xGraphspellSugg.State = xChild.getPropertyValue("graphspellsugg")
            #self.xExtendedDic.State = xChild.getPropertyValue("extended_dic")
            self.xPersonalDic.State = xChild.getPropertyValue("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 version [659bee1976].



















































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
# Lexicon Editor
# by Olivier R.
# License: GPL 3

import unohelper
import uno
import re
import traceback

import helpers
import lxe_strings
import lxe_conj_data
import grammalecte.graphspell as sc
import grammalecte.fr.conj as conj

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 LexiconEditor (unohelper.Base, XActionListener, 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.lGeneratedFlex = []

    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):
        self.dUI = lxe_strings.getUI(sLang)

        # dialog
        self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
        self.xDialog.Width = 620
        self.xDialog.Height = 292
        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

        nY1 = 5
        nY2 = nY1 + 25 # nom commun
        nY3 = nY2 + 95 # nom propre
        nY4 = nY3 + 45 # verbe
        nY5 = nY4 + 68 # adverbe
        nY6 = nY5 + 13 # autre

        nXB = nX1 + 195
        nXC = nXB + 205

        nHeight = 10

        #### Add word
        self._addWidget("add_section", 'FixedLine', nX1, nY1, 190, nHeight, Label = self.dUI.get("add_section", "#err"), FontDescriptor = xFDTitle)
        #self._addWidget('main_lemma_label', 'FixedText', nX1, nY1+10, 30, nHeight, Label = self.dUI.get('lemma', "#err"))
        self.xLemma = self._addWidget('main_lemma', 'Edit', nX1, nY1+10, 120, 14, FontDescriptor = xFDTitle)
        self._addWidget('generate_button', 'Button', nX1+130, nY1+10, 60, 14, Label = self.dUI.get('generate_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)

        # 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, 10, nHeight, HelpText = ":V")
        self.xW = self._addWidget('adv', 'RadioButton', nX1, nY5+2, 10, nHeight, HelpText = ":W")
        self.xX = self._addWidget('other', 'RadioButton', nX1, nY6+2, 10, nHeight, HelpText = ":X")
        
        # Nom, adjectif
        self._addWidget("fl_nom_adj", 'FixedLine', nX1, nY2, 190, 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('S-s', 'RadioButton', nX1+120, nY2+12, 50, nHeight, Label = self.dUI.get("-s", "#err"), HelpText = "·s")
        self.xSx = self._addWidget('S-x', '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, 180, nHeight, Label = self.dUI.get("alt_lemma", "#err"))
        self.xAltLemma = self._addWidget('alt_lemma', 'Edit', nX1+10, nY2+52, 120, 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('S-s2', 'RadioButton', nX1+130, nY2+65, 50, nHeight, Label = self.dUI.get("-s", "#err"), HelpText = "·s")
        self.xSx2 = self._addWidget('S-x2', '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, 190, 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, nY4, 180, nHeight, Label = self.dUI.get("verb", "#err"), 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, nY5, 180, nHeight, Label = self.dUI.get("adverb", "#err"), FontDescriptor = xFDSubTitle)

        # Autre
        self._addWidget("fl_other", 'FixedLine', nX2, nY6, 180, nHeight, Label = self.dUI.get("other", "#err"), FontDescriptor = xFDSubTitle)
        self._addWidget('flexion_label', 'FixedText', nX2, nY6+10, 85, nHeight, Label = self.dUI.get('flexion', "#err"))
        self.xFlexion = self._addWidget('flexion', 'Edit', nX2, nY6+20, 85, nHeight)
        self._addWidget('tags_label', 'FixedText', nX2+90, nY6+10, 85, nHeight, Label = self.dUI.get('tags', "#err"))
        self.xTags = self._addWidget('tags', 'Edit', nX2+90, nY6+20, 85, nHeight)

        #### Generated words
        self._addWidget("gwords_section", 'FixedLine', nXB, nY1, 200, nHeight, Label = self.dUI.get("new_section", "#err"), FontDescriptor = xFDTitle)
        self.xGridModelNew = self._addGrid("list_grid_gwords", nXB, nY1+10, 200, 175, [
            {"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}
        ])
        self.xAdd = self._addWidget('add_button', 'Button', nXB, nY1+190, 95, 12, Label = self.dUI.get('add_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500, Enabled = False)
        self.xDelete = self._addWidget('delete_button', 'Button', nXB+100, nY1+190, 100, 12, Label = self.dUI.get('delete_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)

        nY2b = nY1 + 205
        # lexicon info section
        self._addWidget("lexicon_info_section", 'FixedLine', nXB, nY2b, 200, nHeight, Label = self.dUI.get("lexicon_info_section", "#err"), FontDescriptor = xFDTitle)
        self._addWidget("added_entries_label", 'FixedText', nXB, nY2b+10, 90, nHeight, Label = self.dUI.get("added_entries_label", "#err"))
        self._addWidget("deleted_entries_label", 'FixedText', nXB, nY2b+20, 90, nHeight, Label = self.dUI.get("deleted_entries_label", "#err"))
        self._addWidget("num_of_entries_label1", 'FixedText', nXB, nY2b+30, 90, nHeight, Label = self.dUI.get("num_of_entries_label", "#err"))
        self.xSave = self._addWidget('save_button', 'Button', nXB+150, nY2b+10, 50, 12, Label = self.dUI.get('save_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x005500)
        # dictionary section
        self._addWidget("dictionary_section", 'FixedLine', nXB, nY2b+45, 200, nHeight, Label = self.dUI.get("dictionary_section", "#err"), FontDescriptor = xFDTitle)
        self._addWidget("save_date_label", 'FixedText', nXB, nY2b+55, 90, nHeight, Label = self.dUI.get("save_date_label", "#err"))
        self._addWidget("num_of_entries_label2", 'FixedText', nXB, nY2b+65, 90, nHeight, Label = self.dUI.get("num_of_entries_label", "#err"))
        self.xExport = self._addWidget('export_button', 'Button', nXB+150, nY2b+55, 50, 12, Label = self.dUI.get('export_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x005500)

        #### 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, 270, [
            {"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}
        ])

        # 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')
        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('generate_button').addActionListener(self)
        self.xContainer.getControl('generate_button').setActionCommand('Update')
        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 == "Add":
                pass
            elif xActionEvent.ActionCommand == "Delete":
                pass
            elif xActionEvent.ActionCommand == "Save":
                pass
            elif xActionEvent.ActionCommand == "Update":
                self.updateGenWords()
            elif xActionEvent.ActionCommand == "Close":
                self.xContainer.endExecute()
        except:
            traceback.print_exc()
    
    # XJobExecutor
    def trigger (self, args):
        try:
            xDialog = LexiconEditor(self.ctx)
            xDialog.run()
        except:
            traceback.print_exc()

    # Code
    def getRadioValue (self, *args):
        for x in args:
            if x.State:
                return x.HelpText
        return None

    def updateGenWords (self):
        self.lGeneratedFlex = []
        sLemma = self.xLemma.Text.strip()
        if 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((sLemma, sLemma, sPOS+sGenderTag+":s/*"))
                        self.lGeneratedFlex.append((sLemma+"s", sLemma, sPOS+sGenderTag+":p/*"))
                    elif self.xSx.State:
                        self.lGeneratedFlex.append((sLemma, sLemma, sPOS+sGenderTag+":s/*"))
                        self.lGeneratedFlex.append((sLemma+"x", sLemma, sPOS+sGenderTag+":p/*"))
                    elif self.xSinv.State:
                        self.lGeneratedFlex.append((sLemma, 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, sLemma, sTag2+":s/*"))
                            self.lGeneratedFlex.append((sLemma2+"s", sLemma, sTag2+":p/*"))
                        elif self.xSx2.State:
                            self.lGeneratedFlex.append((sLemma2, sLemma, sTag2+":s/*"))
                            self.lGeneratedFlex.append((sLemma2+"x", sLemma, sTag2+":p/*"))
                        elif self.xSinv2.State:
                            self.lGeneratedFlex.append((sLemma2, sLemma, sTag2+":i/*"))
            elif self.getRadioValue(self.xM1, self.xM2, self.xMP):
                # Nom propre
                sPOS = self.getRadioValue(self.xM1, self.xM2, self.xMP)
                sLemma = sLemma[0:1].upper() + sLemma[1:];
                sGenderTag = self.getRadioValue(self.xMepi, self.xMmas, self.xMfem)
                if sGenderTag:
                    self.lGeneratedFlex.append((sLemma, sLemma, sPOS+sGenderTag+":i/*"))
            elif self.xV.State:
                # Verbe
                if sLemma.endswith(("er", "ir", "re")):
                    sLemma = 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:
                            if sLemma.endswith("er") or sLemma.endswith("ir"):
                                # tables de conjugaison du 1er et du 2e groupe
                                cGroup = "1"  if sLemma.endswith("er")  else "2"
                                for nCut, sAdd, sFlexTags, sPattern in self._getConjRules(sLemma):
                                    if not sPattern or re.search(sPattern, sLemma):
                                        self.lGeneratedFlex.append((sLemma[0:-nCut]+sAdd, sLemma, ":V" + cGroup + "_" + sVerbTag + sFlexTags))
                                # participes passés
                                bPpasVar = "var"  if self.xV_pp.State  else "invar"
                                lPpasRules = lxe_conj_data.oConj["V1_ppas"][bPpasVar]  if sLemma.endswith("er")  else lxe_conj_data.oConj["V2_ppas"][bPpasVar]
                                for nCut, sAdd, sFlexTags, sPattern in lPpasRules:
                                    if not sPattern or re.search(sPattern, sLemma):
                                        self.lGeneratedFlex.append((sLemma[0:-nCut]+sAdd, sLemma, ":V" + cGroup + "_" + sVerbTag + sFlexTags))
                        else:
                            # copie du motif d’un autre verbe : utilisation du conjugueur
                            if conj.isVerb(sVerbPattern):
                                oVerb = conj.Verb(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, sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + sTag1 + sTag2))
                                    else:
                                        # participes passés
                                        if dFlex[":Q3"]:
                                            if dFlex[":Q2"]:
                                                self.lGeneratedFlex.append((dFlex[":Q1"], sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:s/*"))
                                                self.lGeneratedFlex.append((dFlex[":Q2"], sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:p/*"))
                                            else:
                                                self.lGeneratedFlex.append((dFlex[":Q1"], sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:m:i/*"))
                                            self.lGeneratedFlex.append((dFlex[":Q3"], sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:s/*"))
                                            self.lGeneratedFlex.append((dFlex[":Q4"], sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:A:f:p/*"))
                                        else:
                                            self.lGeneratedFlex.append((dFlex[":Q1"], sLemma, ":V" + oVerb.cGroup + "_" + sVerbTag + ":Q:e:i/*"))
            elif self.xW.State:
                # Adverbe
                sLemma = sLemma.lower();
                self.lGeneratedFlex.append((sLemma, 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, sLemma, sTags))
        self.showGenWords()

    def _getConjRules (self, sVerb):
        if sVerb.endswith("ir"):
            # deuxième groupe
            return lxe_conj_data.oConj["V2"]
        elif sVerb.endswith("er"):
            # premier groupe, conjugaison en fonction de la terminaison du lemme
            # 5 lettres
            if sVerb[-5:] in lxe_conj_data.oConj["V1"]:
                return lxe_conj_data.oConj["V1"][sVerb[-5:]]
            # 4 lettres
            if sVerb[-4:] in lxe_conj_data.oConj["V1"]:
                if sVerb.endswith(("eler", "eter")):
                    return lxe_conj_data.oConj["V1"][sVerb[-4:]]["1"]
                return lxe_conj_data.oConj["V1"][sVerb[-4:]]
            # 3 lettres
            if sVerb[-3:] in lxe_conj_data.oConj["V1"]:
                return lxe_conj_data.oConj["V1"][sVerb[-3:]]
            return lxe_conj_data.oConj["V1"]["er"]
        else:
            # troisième groupe
            return [ [0, "", ":Y/*", false] ]

    def showGenWords (self):
        xGridDataModel = self.xGridModelNew.GridDataModel
        xGridDataModel.removeAllRows()
        if not self.lGeneratedFlex:
            self.xAdd.Enabled = False
            return
        for i, (sFlexion, sLemma, sTag) in enumerate(self.lGeneratedFlex):
            xGridDataModel.addRow(i, (sFlexion, sLemma, sTag))
        self.xAdd.Enabled = True

    @_waitPointer
    def add (self):
        pass

    @_waitPointer
    def delete (self):
        pass

    @_waitPointer
    def loadLexicon (self):
        pass

    @_waitPointer
    def saveLexicon (self):
        pass    


#g_ImplementationHelper = unohelper.ImplementationHelper()
#g_ImplementationHelper.addImplementation(LexiconEditor, 'net.grammalecte.LexiconEditor', ('com.sun.star.task.Job',))


# const oFlexGen = {

#     cMainTag: "",

#     lFlexion: [],

#     clear: function () {
#         this.lFlexion = [];
#         oWidgets.hideElement("actions");
#     },

#     addToLexicon: function () {
#         try {
#             oLexicon.addFlexions(this.lFlexion);
#             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.clear();
#             this.cMainTag = "";
#         }
#         catch (e) {
#             showError(e);
#         }
#     }
# }

Added gc_lang/fr/oxt/DictOptions/do_strings.py version [a801f3d0f2].



































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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).",

        "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.",
        "import_personal": "Importer un dictionnaire personnel",
        "import_button": "Importer",
        "create_dictionary": "Vous pouvez créer un dictionnaire personnel avec l’extension Grammalecte pour Firefox ou Chrome.",

        "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.",

        "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)",

        "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.",
        "import_personal": "Import a personal dictionary",
        "import_button": "Import",
        "create_dictionary": "You can create a personal dictionary with the Grammalecte addon for Firefox or Chrome.",

        "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.",

        "apply_button": "Apply",
        "cancel_button": "Cancel",
    },
}

Added gc_lang/fr/oxt/DictOptions/lxe_conj_data.py version [2b6010474b].

























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
# Conjugation data

# beta stage, unfinished, may be useless or the root for a new way to generate flexions…

# Règles de conjugaison

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]
        ]
    }
}

Added gc_lang/fr/oxt/DictOptions/lxe_strings.py version [d169176bce].











































































































































































>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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",
        "generate_button": "Créer",

        # 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",

        # Informations
        "lexicon_info_section": "Lexique",
        "added_entries_label": "Nombre d’entrées ajoutées",
        "deleted_entries_label": "Nombre d’entrées effacées",
        "num_of_entries_label": "Nombre d’entrées",
        "save_button": "Enregistrer",

        "dictionary_section": "Dictionnaire enregistré",
        "save_date_label": "Date d’enregistrement",
        "export_button": "Exporter",

        #
        "close_button": "Fermer",
    },
    # Traduction délibérément limitée
    "en": {
        "title": "Grammalecte · Lexical editor",
        
        "close_button": "Close",
    },
}

Modified gc_lang/fr/oxt/TextFormatter/TextFormatter.py from [6fb58f6672] to [744fe2827e].

381
382
383
384
385
386
387
388
389
390
391
392
393
394

395
396
397
398
399
400
401
            # create options dictionary
            dOpt = {}
            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

            if os.path.isfile(sExtPath):
                hOpt = open(sExtPath, "w")
                hOpt.write("dDefaultOpt = " + str(tf_options.dDefaultOpt) + "\n")
                hOpt.write("dOpt = " + str(dOpt))
                hOpt.close()
        except:
            traceback.print_exc()







<
<
<
<
<
<

>







381
382
383
384
385
386
387






388
389
390
391
392
393
394
395
396
            # create options dictionary
            dOpt = {}
            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






            # 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()
        except:
            traceback.print_exc()

Modified gc_lang/fr/oxt/addons.xcu from [2546b2bd54] to [71d0cd13a5].

73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
...
132
133
134
135
136
137
138






































139
140
141
142
143
144
145
...
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
                <node oor:name="m3" oor:op="replace">
                    <prop oor:name="URL" oor:type="xs:string">
                        <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>
                    </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>
................................................................................
                        <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
                    </prop>
                    <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?DS</value>
                    </prop>
                    <prop oor:name="Title" oor:type="xs:string">
                        <value/>
                        <value xml:lang="fr">~Options orthographiques…</value>
                        <value xml:lang="en-US">Spelling ~options…</value>
................................................................................
                    <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>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">
                    <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/>
                        <value xml:lang="fr">À ~propos de Grammalecte…</value>
                        <value xml:lang="en-US">~About Grammalecte…</value>







|







 







>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>







 







|







|







73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
...
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
...
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
                <node oor:name="m3" oor:op="replace">
                    <prop oor:name="URL" oor:type="xs:string">
                        <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">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">
                        <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument,com.sun.star.presentation.PresentationDocument</value>
                    </prop>
................................................................................
                        <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
                    </prop>
                    <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/>
                        <value xml:lang="fr">~Options orthographiques…</value>
                        <value xml:lang="en-US">Spelling ~options…</value>
................................................................................
                    <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="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="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/>
                        <value xml:lang="fr">À ~propos de Grammalecte…</value>
                        <value xml:lang="en-US">~About Grammalecte…</value>

Deleted gc_lang/fr/oxt/helpers.py version [3ebcc78813].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# -*- 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
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<




























































































































Modified make.py from [6a76dc767a] to [7d5ef1d4bd].

82
83
84
85
86
87
88

89
90
91
92
93
94
95
    hZip.write("grammalecte-cli.py", "pythonpath/grammalecte-cli.py")

    # 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))


    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():
        hZip.write(spLang + '/' + dVars["logo"].strip(), dVars["logo"].strip())








>







82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
    hZip.write("grammalecte-cli.py", "pythonpath/grammalecte-cli.py")

    # 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():
        hZip.write(spLang + '/' + dVars["logo"].strip(), dVars["logo"].strip())