Grammalecte  Check-in [fb270e0f3b]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:merge trunk
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | tbme
Files: files | file ages | folders
SHA3-256:fb270e0f3bcdd2db82ad80bb00e799c8277a640fb307b582f679ff5040a72f5d
User & Date: olr 2019-09-30 07:26:25
Context
2019-09-30
07:26
merge trunk Leaf check-in: fb270e0f3b user: olr tags: tbme
07:15
[fr] faux positif check-in: 65265d55cd user: olr tags: fr, trunk, v1.5.0
2019-09-06
16:32
merge trunk check-in: 3bec30b855 user: olr tags: tbme
Changes

Changes to compile_rules_graph.py.

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
                lTokenLine.append([i, sLine])
        else:
            print("Unknown line:")
            print(sLine)

    # processing rules
    print("  preparing rules...")

    for sGraphName, lRuleLine in dAllGraph.items():
        print("{:>8,} rules in {:<24} ".format(len(lRuleLine), "<"+sGraphName+">"), end="")
        lPreparedRule = []
        for i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority in lRuleLine:
            for aRule in createRule(i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef, dDecl):
                lPreparedRule.append(aRule)

        # Graph creation
        oDARG = darg.DARG(lPreparedRule, sLang)
        dAllGraph[sGraphName] = oDARG.createGraph()
        # Debugging
        if False:
            print("\nRULES:")
            for e in lPreparedRule:
                if e[-2] == "##2211":
                    print(e)
        if False:
            print("\nGRAPH:", sGraphName)
            for k, v in dAllGraph[sGraphName].items():
                print(k, "\t", v)


    # creating file with all functions callable by rules
    print("  creating callables for graph rules...")
    sPyCallables = ""
    sJSCallables = ""
    for sFuncName, sReturn in dFUNCTIONS.items():
        if sFuncName.startswith("_g_cond_"): # condition







>






>













>







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
                lTokenLine.append([i, sLine])
        else:
            print("Unknown line:")
            print(sLine)

    # processing rules
    print("  preparing rules...")
    nRule = 0
    for sGraphName, lRuleLine in dAllGraph.items():
        print("{:>8,} rules in {:<24} ".format(len(lRuleLine), "<"+sGraphName+">"), end="")
        lPreparedRule = []
        for i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority in lRuleLine:
            for aRule in createRule(i, sRuleGroup, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef, dDecl):
                lPreparedRule.append(aRule)
        nRule += len(lRuleLine)
        # Graph creation
        oDARG = darg.DARG(lPreparedRule, sLang)
        dAllGraph[sGraphName] = oDARG.createGraph()
        # Debugging
        if False:
            print("\nRULES:")
            for e in lPreparedRule:
                if e[-2] == "##2211":
                    print(e)
        if False:
            print("\nGRAPH:", sGraphName)
            for k, v in dAllGraph[sGraphName].items():
                print(k, "\t", v)
    print("  Total: ", nRule, "rules")

    # creating file with all functions callable by rules
    print("  creating callables for graph rules...")
    sPyCallables = ""
    sJSCallables = ""
    for sFuncName, sReturn in dFUNCTIONS.items():
        if sFuncName.startswith("_g_cond_"): # condition

Changes to gc_core/py/oxt/OptionsDialog.xcs.

30
31
32
33
34
35
36

37
38
39
40
41
42
43
            <prop oor:name="community_dic" oor:type="xs:string"><value></value></prop>
            <prop oor:name="personal_dic" oor:type="xs:string"><value></value></prop>
            <!-- graphic options -->
            <prop oor:name="line_multicolor" oor:type="xs:int"><value>1</value></prop>
            <prop oor:name="line_type" oor:type="xs:string"><value>BOLDWAVE</value></prop>
            <!-- misc options -->
            <prop oor:name="start_console" oor:type="xs:int"><value>0</value></prop>

        </group>
    </templates>

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







>







30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
            <prop oor:name="community_dic" oor:type="xs:string"><value></value></prop>
            <prop oor:name="personal_dic" oor:type="xs:string"><value></value></prop>
            <!-- graphic options -->
            <prop oor:name="line_multicolor" oor:type="xs:int"><value>1</value></prop>
            <prop oor:name="line_type" oor:type="xs:string"><value>BOLDWAVE</value></prop>
            <!-- misc options -->
            <prop oor:name="start_console" oor:type="xs:int"><value>0</value></prop>
            <prop oor:name="tf_options" oor:type="xs:string"><value></value></prop>
        </group>
    </templates>

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

Changes to gc_lang/fr/config.ini.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
lang = fr
lang_name = French
locales = fr_FR fr_BE fr_CA fr_CH fr_LU fr_BF fr_BJ fr_CD fr_CI fr_CM fr_MA fr_ML fr_MU fr_NE fr_RE fr_SN fr_TG
country_default = FR
name = Grammalecte
implname = grammalecte
# always use 3 numbers for version: x.y.z
version = 1.4.0
author = Olivier R.
provider = Grammalecte.net
link = https://grammalecte.net
description = Correcteur grammatical, orthographique et typographique pour le français.
extras = README_fr.txt
logo = logo.png








|







2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
lang = fr
lang_name = French
locales = fr_FR fr_BE fr_CA fr_CH fr_LU fr_BF fr_BJ fr_CD fr_CI fr_CM fr_MA fr_ML fr_MU fr_NE fr_RE fr_SN fr_TG
country_default = FR
name = Grammalecte
implname = grammalecte
# always use 3 numbers for version: x.y.z
version = 1.5.0
author = Olivier R.
provider = Grammalecte.net
link = https://grammalecte.net
description = Correcteur grammatical, orthographique et typographique pour le français.
extras = README_fr.txt
logo = logo.png

Changes to gc_lang/fr/modules-js/gce_suggestions.js.

222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
...
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
        return Array.from(aSugg).join("|");
    }
    return "";
}

//// Nouns and adjectives

function suggPlur (sFlex, sWordToAgree=null) {
    // returns plural forms assuming sFlex is singular
    if (sWordToAgree) {
        let lMorph = _oSpellChecker.getMorph(sWordToAgree);
        if (lMorph.length === 0) {
            return "";
        }
        let sGender = cregex.getGender(lMorph);
................................................................................
    if (sFlex.endsWith("l")) {
        if (sFlex.endsWith("al") && sFlex.length > 2 && _oSpellChecker.isValid(sFlex.slice(0,-1)+"ux")) {
            aSugg.add(sFlex.slice(0,-1)+"ux");
        }
        if (sFlex.endsWith("ail") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"ux")) {
            aSugg.add(sFlex.slice(0,-2)+"ux");
        }








    }
    if (_oSpellChecker.isValid(sFlex+"s")) {
        aSugg.add(sFlex+"s");
    }
    if (_oSpellChecker.isValid(sFlex+"x")) {
        aSugg.add(sFlex+"x");
    }
    if (mfsp.hasMiscPlural(sFlex)) {
        mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
    }



    if (aSugg.size > 0) {
        return Array.from(aSugg).join("|");
    }
    return "";
}

function suggSing (sFlex) {
    // returns singular forms assuming sFlex is plural
    let aSugg = new Set();
    if (sFlex.endsWith("ux")) {
        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"l")) {
            aSugg.add(sFlex.slice(0,-2)+"l");
        }
        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"il")) {
            aSugg.add(sFlex.slice(0,-2)+"il");
        }
    }

    if (_oSpellChecker.isValid(sFlex.slice(0,-1))) {







        aSugg.add(sFlex.slice(0,-1));



    }
    if (aSugg.size > 0) {
        return Array.from(aSugg).join("|");
    }
    return "";
}








|







 







>
>
>
>
>
>
>
>










>
>
>






|










>
|
>
>
>
>
>
>
>

>
>
>







222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
...
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
        return Array.from(aSugg).join("|");
    }
    return "";
}

//// Nouns and adjectives

function suggPlur (sFlex, sWordToAgree=null, bSelfSugg=false) {
    // returns plural forms assuming sFlex is singular
    if (sWordToAgree) {
        let lMorph = _oSpellChecker.getMorph(sWordToAgree);
        if (lMorph.length === 0) {
            return "";
        }
        let sGender = cregex.getGender(lMorph);
................................................................................
    if (sFlex.endsWith("l")) {
        if (sFlex.endsWith("al") && sFlex.length > 2 && _oSpellChecker.isValid(sFlex.slice(0,-1)+"ux")) {
            aSugg.add(sFlex.slice(0,-1)+"ux");
        }
        if (sFlex.endsWith("ail") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"ux")) {
            aSugg.add(sFlex.slice(0,-2)+"ux");
        }
    }
    if (sFlex.endsWith("L")) {
        if (sFlex.endsWith("AL") && sFlex.length > 2 && _oSpellChecker.isValid(sFlex.slice(0,-1)+"UX")) {
            aSugg.add(sFlex.slice(0,-1)+"UX");
        }
        if (sFlex.endsWith("AIL") && sFlex.length > 3 && _oSpellChecker.isValid(sFlex.slice(0,-2)+"UX")) {
            aSugg.add(sFlex.slice(0,-2)+"UX");
        }
    }
    if (_oSpellChecker.isValid(sFlex+"s")) {
        aSugg.add(sFlex+"s");
    }
    if (_oSpellChecker.isValid(sFlex+"x")) {
        aSugg.add(sFlex+"x");
    }
    if (mfsp.hasMiscPlural(sFlex)) {
        mfsp.getMiscPlural(sFlex).forEach(function(x) { aSugg.add(x); });
    }
    if (aSugg.size == 0 && bSelfSugg && (sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X"))) {
        aSugg.add(sFlex);
    }
    if (aSugg.size > 0) {
        return Array.from(aSugg).join("|");
    }
    return "";
}

function suggSing (sFlex, bSelfSugg=false) {
    // returns singular forms assuming sFlex is plural
    let aSugg = new Set();
    if (sFlex.endsWith("ux")) {
        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"l")) {
            aSugg.add(sFlex.slice(0,-2)+"l");
        }
        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"il")) {
            aSugg.add(sFlex.slice(0,-2)+"il");
        }
    }
    if (sFlex.endsWith("UX")) {
        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"L")) {
            aSugg.add(sFlex.slice(0,-2)+"L");
        }
        if (_oSpellChecker.isValid(sFlex.slice(0,-2)+"IL")) {
            aSugg.add(sFlex.slice(0,-2)+"IL");
        }
    }
    if ((sFlex.endsWith("s") || sFlex.endsWith("x") || sFlex.endsWith("S") || sFlex.endsWith("X")) && _oSpellChecker.isValid(sFlex.slice(0,-1))) {
        aSugg.add(sFlex.slice(0,-1));
    }
    if (bSelfSugg && aSugg.size == 0) {
        aSugg.add(sFlex);
    }
    if (aSugg.size > 0) {
        return Array.from(aSugg).join("|");
    }
    return "";
}

Changes to gc_lang/fr/modules/gce_suggestions.py.

168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
...
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
    if aSugg:
        return "|".join(aSugg)
    return ""


## Nouns and adjectives

def suggPlur (sFlex, sWordToAgree=None):
    "returns plural forms assuming sFlex is singular"
    if sWordToAgree:
        lMorph = _oSpellChecker.getMorph(sFlex)
        if not lMorph:
            return ""
        sGender = cr.getGender(lMorph)
        if sGender == ":m":
................................................................................
            return suggFemPlur(sFlex)
    aSugg = set()
    if sFlex.endswith("l"):
        if sFlex.endswith("al") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"ux"):
            aSugg.add(sFlex[:-1]+"ux")
        if sFlex.endswith("ail") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"ux"):
            aSugg.add(sFlex[:-2]+"ux")





    if _oSpellChecker.isValid(sFlex+"s"):
        aSugg.add(sFlex+"s")
    if _oSpellChecker.isValid(sFlex+"x"):
        aSugg.add(sFlex+"x")
    if mfsp.hasMiscPlural(sFlex):
        aSugg.update(mfsp.getMiscPlural(sFlex))


    if aSugg:
        return "|".join(aSugg)
    return ""


def suggSing (sFlex):
    "returns singular forms assuming sFlex is plural"
    aSugg = set()
    if sFlex.endswith("ux"):
        if _oSpellChecker.isValid(sFlex[:-2]+"l"):
            aSugg.add(sFlex[:-2]+"l")
        if _oSpellChecker.isValid(sFlex[:-2]+"il"):
            aSugg.add(sFlex[:-2]+"il")

    if _oSpellChecker.isValid(sFlex[:-1]):




        aSugg.add(sFlex[:-1])


    if aSugg:
        return "|".join(aSugg)
    return ""


def suggMasSing (sFlex, bSuggSimil=False):
    "returns masculine singular forms"







|







 







>
>
>
>
>






>
>





|







>
|
>
>
>
>

>
>







168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
...
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
    if aSugg:
        return "|".join(aSugg)
    return ""


## Nouns and adjectives

def suggPlur (sFlex, sWordToAgree=None, bSelfSugg=False):
    "returns plural forms assuming sFlex is singular"
    if sWordToAgree:
        lMorph = _oSpellChecker.getMorph(sFlex)
        if not lMorph:
            return ""
        sGender = cr.getGender(lMorph)
        if sGender == ":m":
................................................................................
            return suggFemPlur(sFlex)
    aSugg = set()
    if sFlex.endswith("l"):
        if sFlex.endswith("al") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"ux"):
            aSugg.add(sFlex[:-1]+"ux")
        if sFlex.endswith("ail") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"ux"):
            aSugg.add(sFlex[:-2]+"ux")
    if sFlex.endswith("L"):
        if sFlex.endswith("AL") and len(sFlex) > 2 and _oSpellChecker.isValid(sFlex[:-1]+"UX"):
            aSugg.add(sFlex[:-1]+"UX")
        if sFlex.endswith("AIL") and len(sFlex) > 3 and _oSpellChecker.isValid(sFlex[:-2]+"UX"):
            aSugg.add(sFlex[:-2]+"UX")
    if _oSpellChecker.isValid(sFlex+"s"):
        aSugg.add(sFlex+"s")
    if _oSpellChecker.isValid(sFlex+"x"):
        aSugg.add(sFlex+"x")
    if mfsp.hasMiscPlural(sFlex):
        aSugg.update(mfsp.getMiscPlural(sFlex))
    if not aSugg and bSelfSugg and sFlex.endswith(("s", "x", "S", "X")):
        aSugg.add(sFlex)
    if aSugg:
        return "|".join(aSugg)
    return ""


def suggSing (sFlex, bSelfSugg=True):
    "returns singular forms assuming sFlex is plural"
    aSugg = set()
    if sFlex.endswith("ux"):
        if _oSpellChecker.isValid(sFlex[:-2]+"l"):
            aSugg.add(sFlex[:-2]+"l")
        if _oSpellChecker.isValid(sFlex[:-2]+"il"):
            aSugg.add(sFlex[:-2]+"il")
    if sFlex.endswith("UX"):
        if _oSpellChecker.isValid(sFlex[:-2]+"L"):
            aSugg.add(sFlex[:-2]+"L")
        if _oSpellChecker.isValid(sFlex[:-2]+"IL"):
            aSugg.add(sFlex[:-2]+"IL")
    if sFlex.endswith(("s", "x", "S", "X")) and _oSpellChecker.isValid(sFlex[:-1]):
        aSugg.add(sFlex[:-1])
    if bSelfSugg and not aSugg:
        aSugg.add(sFlex)
    if aSugg:
        return "|".join(aSugg)
    return ""


def suggMasSing (sFlex, bSuggSimil=False):
    "returns masculine singular forms"

Changes to gc_lang/fr/oxt/About/About.py.

1
2
3
4
5
6
7
8
# -*- coding: utf8 -*-
# About dialog
# by Olivier R.
# License: MPL 2

import unohelper
import uno
import traceback
<








1
2
3
4
5
6
7

# About dialog
# by Olivier R.
# License: MPL 2

import unohelper
import uno
import traceback

Changes to gc_lang/fr/oxt/About/ab_strings.py.

1
2
3
4
5
6
7
8
# -*- encoding: UTF-8 -*-

def getUI (sLang):
    if sLang in dStrings:
        return dStrings[sLang]
    return dStrings["fr"]

dStrings = {
|







1
2
3
4
5
6
7
8
# About strings

def getUI (sLang):
    if sLang in dStrings:
        return dStrings[sLang]
    return dStrings["fr"]

dStrings = {

Changes to gc_lang/fr/oxt/DictOptions/LexiconEditor.py.

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
...
422
423
424
425
426
427
428











429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
        else:
            self.xNumLex.Label = 0
            self.xNumDic.Label = 0
            self.xDateDic.Label = self.dUI.get("void", "#err")

    @_waitPointer
    def importDictionary (self):
        # FilePicker doesn’t work at all…

        #xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx)  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
        #xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE")]) # seems useless
        #xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
        #xFilePicker.setDefaultName("fr.personal.json") # useless, doesn’t work
        #xFilePicker.setDisplayDirectory("")
        #xFilePicker.setMultiSelectionMode(False)
        #nResult = xFilePicker.execute()
        #if nResult == 1:
        #    lFile = xFilePicker.getSelectedFiles()
        #    lFile = xFilePicker.getFiles()
        #    print(lFile)
        #    MessageBox(self.xDocument, "File(s): " + str(lFile), "DEBUG", INFOBOX)
        # workaround


        spfImported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
        if os.path.isfile(spfImported):
            with open(spfImported, "r", encoding="utf-8") as hDst:
                sJSON = hDst.read()
                try:
                    sTest = json.loads(sJSON)
                except:
                    sMessage = self.dUI.get('wrong_json', "#err_msg: %s") % spfImported
                    MessageBox(self.xDocument, sMessage, self.dUI.get('import_title', "#err"), ERRORBOX)
................................................................................
            self.xSettingNode.commitChanges()
            self.xNumDic.Label = "0"
            self.xDateDic.Label = self.dUI.get("void", "#err")
        MessageBox(self.xDocument, self.dUI.get('save_message', "#err"), self.dUI.get('save_title', "#err"))

    def exportDictionary (self):
        try:











            spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
            sJSON = self.xOptionNode.getPropertyValue("personal_dic")
            if sJSON:
                with open(spfExported, "w", encoding="utf-8") as hDst:
                    hDst.write(sJSON)
                sMessage = self.dUI.get('export_message', "#err_msg: %s") % spfExported
            else:
                sMessage = self.dUI.get('empty_dictionary', "#err")
            MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"))
        except:
            sMessage = traceback.format_exc()
            MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"), ERRORBOX)

    def _getRadioValue (self, *args):
        for x in args:
            if x.State:







|
>
|
|
|
|
|
|
|
|
|
|
|
|
<
>
>
|
|







 







>
>
>
>
>
>
>
>
>
>
>
|
|
|
|
|
|
|
|
|







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
...
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
        else:
            self.xNumLex.Label = 0
            self.xNumDic.Label = 0
            self.xDateDic.Label = self.dUI.get("void", "#err")

    @_waitPointer
    def importDictionary (self):
        spfImported = ""
        try:
            xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx)  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
            xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE")]) # seems useless
            xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
            xFilePicker.setDefaultName("fr.__personal__.json") # useless, doesn’t work
            xFilePicker.setDisplayDirectory("")
            xFilePicker.setMultiSelectionMode(False)
            nResult = xFilePicker.execute()
            if nResult == 1:
                # lFile = xFilePicker.getSelectedFiles()
                lFile = xFilePicker.getFiles()
                #print(lFile)
                #MessageBox(self.xDocument, "File(s): " + str(lFile), "DEBUG", INFOBOX)

                spfImported = lFile[0][8:] # remove file:///
        except:
            spfImported = os.path.join(os.path.expanduser("~"), "fr.personal.json") # workaround
        if spfImported and os.path.isfile(spfImported):
            with open(spfImported, "r", encoding="utf-8") as hDst:
                sJSON = hDst.read()
                try:
                    sTest = json.loads(sJSON)
                except:
                    sMessage = self.dUI.get('wrong_json', "#err_msg: %s") % spfImported
                    MessageBox(self.xDocument, sMessage, self.dUI.get('import_title', "#err"), ERRORBOX)
................................................................................
            self.xSettingNode.commitChanges()
            self.xNumDic.Label = "0"
            self.xDateDic.Label = self.dUI.get("void", "#err")
        MessageBox(self.xDocument, self.dUI.get('save_message', "#err"), self.dUI.get('save_title', "#err"))

    def exportDictionary (self):
        try:
            xFilePicker = self.xSvMgr.createInstanceWithContext('com.sun.star.ui.dialogs.FilePicker', self.ctx)  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
            xFilePicker.initialize([uno.getConstantByName("com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE")]) # seems useless
            xFilePicker.appendFilter("Supported files", "*.json; *.bdic")
            xFilePicker.setDefaultName("fr.__personal__.json") # useless, doesn’t work
            xFilePicker.setDisplayDirectory("")
            xFilePicker.setMultiSelectionMode(False)
            nResult = xFilePicker.execute()
            if nResult == 1:
                # lFile = xFilePicker.getSelectedFiles()
                lFile = xFilePicker.getFiles()
                spfExported = lFile[0][8:] # remove file:///
                #spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
                sJSON = self.xOptionNode.getPropertyValue("personal_dic")
                if sJSON:
                    with open(spfExported, "w", encoding="utf-8") as hDst:
                        hDst.write(sJSON)
                    sMessage = self.dUI.get('export_message', "#err_msg: %s") % spfExported
                else:
                    sMessage = self.dUI.get('empty_dictionary', "#err")
                MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"))
        except:
            sMessage = traceback.format_exc()
            MessageBox(self.xDocument, sMessage, self.dUI.get('export_title', "#err"), ERRORBOX)

    def _getRadioValue (self, *args):
        for x in args:
            if x.State:

Changes to gc_lang/fr/oxt/Lexicographer/Enumerator.py.

100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
...
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
...
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
...
280
281
282
283
284
285
286
287
288
289
290
291
292


293
294
295
296
297














































298






299
300
        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
................................................................................
        self._addWidget('count2_button', 'Button', nX+75, nY1+12, 70, 11, Label = self.dUI.get('count2_button', "#err"))
        self._addWidget('unknown_button', 'Button', nX+150, nY1+12, 70, 11, Label = self.dUI.get('unknown_button', "#err"))
        self.xGridModel = self._addGrid("list_grid", nX, nY1+25, nWidth, 181, \
            [ {"Title": self.dUI.get("words", "#err"), "ColumnWidth": 175}, {"Title": "Occurrences", "ColumnWidth": 45} ], \
            SelectionModel = uno.Enum("com.sun.star.view.SelectionType", "MULTI") \
        )
        self._addWidget('num_of_entries', 'FixedText', nX, nY1+210, 60, nHeight, Label = self.dUI.get('num_of_entries', "#err"), Align = 2)
        self.xNumWord = self._addWidget('num_of_entries_res', 'FixedText', nX+65, nY1+210, 30, nHeight, Label = "—")
        self._addWidget('tot_of_entries', 'FixedText', nX+100, nY1+210, 60, nHeight, Label = self.dUI.get('tot_of_entries', "#err"), Align = 2)
        self.xTotWord = self._addWidget('tot_of_entries_res', 'FixedText', nX+165, nY1+210, 30, nHeight, Label = "—")

        
        # Tag
        # Note: the only way to group RadioButtons is to create them successively
        self._addWidget("dformat_section", 'FixedLine', nX, nY2, 90, nHeight, Label = self.dUI.get("dformat_section", "#err"), FontDescriptor = xFDTitle)
        self._addWidget("charstyle_section", 'FixedLine', nX+100, nY2, 90, nHeight, Label = self.dUI.get("charstyle_section", "#err"), FontDescriptor = xFDTitle)
        self.xUnderline = self._addWidget('underline', 'RadioButton', nX, nY2+12, 40, nHeight, Label = self.dUI.get('underline', "#err"))
        self.xNoUnderline = self._addWidget('nounderline', 'RadioButton', nX+50, nY2+12, 40, nHeight, Label = self.dUI.get('nounderline', "#err"))
        self.xAccent = self._addWidget('accentuation', 'RadioButton', nX+100, nY2+12, 50, nHeight, Label = self.dUI.get('accentuation', "#err"))
        self.xNoAccent = self._addWidget('noaccentuation', 'RadioButton', nX+155, nY2+12, 40, nHeight, Label = self.dUI.get('noaccentuation', "#err"))

        self.xTag = self._addWidget('tag_button', 'Button', self.xDialog.Width-40, nY2+10, 30, 11, Label = self.dUI.get('tag_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500)
        
        # Progress bar
        self.xProgressBar = self._addWidget('progress_bar', 'ProgressBar', nX, self.xDialog.Height-25, 160, 14)
        self.xProgressBar.ProgressValueMin = 0
        self.xProgressBar.ProgressValueMax = 1 # to calculate later

        # Close
        self._addWidget('close_button', 'Button', self.xDialog.Width-60, self.xDialog.Height-25, 50, 14, Label = self.dUI.get('close_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)
................................................................................
        self.xGridControl = self.xContainer.getControl('list_grid')
        self.xContainer.getControl('count_button').addActionListener(self)
        self.xContainer.getControl('count_button').setActionCommand('Count')
        self.xContainer.getControl('count2_button').addActionListener(self)
        self.xContainer.getControl('count2_button').setActionCommand('CountByLemma')
        self.xContainer.getControl('unknown_button').addActionListener(self)
        self.xContainer.getControl('unknown_button').setActionCommand('UnknownWords')


        self.xContainer.getControl('tag_button').addActionListener(self)
        self.xContainer.getControl('tag_button').setActionCommand('Tag')
        self.xContainer.getControl('close_button').addActionListener(self)
        self.xContainer.getControl('close_button').setActionCommand('Close')
        self.xContainer.setVisible(False)
        xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
        self.xContainer.createPeer(xToolkit, None)
        self.xContainer.execute()

    # XActionListener
    def actionPerformed (self, xActionEvent):
        try:
            if xActionEvent.ActionCommand == "Count":
                self.count(self.dUI.get("words", "#err"))
                self.xTag.Enabled = True

            elif xActionEvent.ActionCommand == "CountByLemma":
                self.count(self.dUI.get("lemmas", "#err"), bByLemma=True)
                self.xTag.Enabled = False

            elif xActionEvent.ActionCommand == "UnknownWords":
                self.count(self.dUI.get("unknown_words", "#err"), bOnlyUnknownWords=True)
                self.xTag.Enabled = True







            elif xActionEvent.ActionCommand == "Tag":
                if not self.xGridControl.hasSelectedRows():
                    return
                lRow = self.xGridControl.getSelectedRows()
                aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n)  for n in lRow ])
                sAction = ""
                if self.xUnderline.State:
                    sAction = "underline"
                elif self.xNoUnderline.State:
                    sAction = "nounderline"
                elif self.xAccent.State:
                    sAction = "accentuation"
                elif self.xNoAccent.State:
                    sAction = "noaccentuation"
                self.tagText(aWord, sAction)
            elif xActionEvent.ActionCommand == "Close":

                self.xContainer.endExecute()
        except:
            traceback.print_exc()
    
    # XJobExecutor
    def trigger (self, args):
        try:
            xDialog = Enumerator(self.ctx)
            xDialog.run()
        except:
            traceback.print_exc()
................................................................................
        xCursor.gotoStartOfParagraph(False)
        nPos = 0
        for dToken in self.oTokenizer.genTokens(sParagraph):
            if dToken["sValue"] in aWord:
                xCursor.goRight(dToken["nStart"]-nPos, False) # start of token
                nPos = dToken["nEnd"]
                xCursor.goRight(nPos-dToken["nStart"], True) # end of token
                if sAction == "underline":
                    xCursor.CharBackColor = hexToRBG("AA0000")
                elif sAction == "nounderline":
                    xCursor.CharBackColor = hexToRBG("FFFFFF")
                elif sAction == "accentuation":
                    xCursor.CharStyleName = "Emphasis"


                elif sAction == "noaccentuation":
                    #xCursor.CharStyleName = "Default Style"     # doesn’t work
                    xCursor.setPropertyToDefault("CharStyleName")
        self.xProgressBar.ProgressValue += 1






















































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







|







 







|
|
|
>
|


<
|
|
|
|
<

|
|







 







>
>




|


|







>



>



>
>
>
>
>
>
>






|
|
<
<
|
|

|


>
|


|







 







|
|
|
|
|

>
>
|




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

>
>
>
>
>
>


100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
...
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
...
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
...
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
        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
................................................................................
        self._addWidget('count2_button', 'Button', nX+75, nY1+12, 70, 11, Label = self.dUI.get('count2_button', "#err"))
        self._addWidget('unknown_button', 'Button', nX+150, nY1+12, 70, 11, Label = self.dUI.get('unknown_button', "#err"))
        self.xGridModel = self._addGrid("list_grid", nX, nY1+25, nWidth, 181, \
            [ {"Title": self.dUI.get("words", "#err"), "ColumnWidth": 175}, {"Title": "Occurrences", "ColumnWidth": 45} ], \
            SelectionModel = uno.Enum("com.sun.star.view.SelectionType", "MULTI") \
        )
        self._addWidget('num_of_entries', 'FixedText', nX, nY1+210, 60, nHeight, Label = self.dUI.get('num_of_entries', "#err"), Align = 2)
        self.xNumWord = self._addWidget('num_of_entries_res', 'FixedText', nX+65, nY1+210, 25, nHeight, Label = "—")
        self._addWidget('tot_of_entries', 'FixedText', nX+90, nY1+210, 60, nHeight, Label = self.dUI.get('tot_of_entries', "#err"), Align = 2)
        self.xTotWord = self._addWidget('tot_of_entries_res', 'FixedText', nX+155, nY1+210, 30, nHeight, Label = "—")
        self.xSearch = self._addWidget('search_button', 'Button', nX+190, nY1+210, 30, nHeight, Label = ">>>", Enabled = False)

        # Tag
        # Note: the only way to group RadioButtons is to create them successively

        self._addWidget("charstyle_section", 'FixedLine', nX, nY2, 200, nHeight, Label = self.dUI.get("charstyle_section", "#err"), FontDescriptor = xFDTitle)
        self.xAccent = self._addWidget('emphasis', 'RadioButton', nX, nY2+12, 55, nHeight, Label = self.dUI.get('emphasis', "#err"))
        self.xStrongAccent = self._addWidget('strong_emphasis', 'RadioButton', nX+60, nY2+12, 70, nHeight, Label = self.dUI.get('strong_emphasis', "#err"))
        self.xNoAccent = self._addWidget('nostyle', 'RadioButton', nX+140, nY2+12, 45, nHeight, Label = self.dUI.get('nostyle', "#err"))


        self.xTag = self._addWidget('tag_button', 'Button', self.xDialog.Width-40, nY2+10, 30, 11, Label = self.dUI.get('tag_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500, Enabled=False)

        # Progress bar
        self.xProgressBar = self._addWidget('progress_bar', 'ProgressBar', nX, self.xDialog.Height-25, 160, 14)
        self.xProgressBar.ProgressValueMin = 0
        self.xProgressBar.ProgressValueMax = 1 # to calculate later

        # Close
        self._addWidget('close_button', 'Button', self.xDialog.Width-60, self.xDialog.Height-25, 50, 14, Label = self.dUI.get('close_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)
................................................................................
        self.xGridControl = self.xContainer.getControl('list_grid')
        self.xContainer.getControl('count_button').addActionListener(self)
        self.xContainer.getControl('count_button').setActionCommand('Count')
        self.xContainer.getControl('count2_button').addActionListener(self)
        self.xContainer.getControl('count2_button').setActionCommand('CountByLemma')
        self.xContainer.getControl('unknown_button').addActionListener(self)
        self.xContainer.getControl('unknown_button').setActionCommand('UnknownWords')
        self.xContainer.getControl('search_button').addActionListener(self)
        self.xContainer.getControl('search_button').setActionCommand('Search')
        self.xContainer.getControl('tag_button').addActionListener(self)
        self.xContainer.getControl('tag_button').setActionCommand('Tag')
        self.xContainer.getControl('close_button').addActionListener(self)
        self.xContainer.getControl('close_button').setActionCommand('Close')
        self.xContainer.setVisible(True)    # True for non modal dialog
        xToolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
        self.xContainer.createPeer(xToolkit, None)
        #self.xContainer.execute()          # Don’t excute for non modal dialog

    # XActionListener
    def actionPerformed (self, xActionEvent):
        try:
            if xActionEvent.ActionCommand == "Count":
                self.count(self.dUI.get("words", "#err"))
                self.xTag.Enabled = True
                self.xSearch.Enabled = True
            elif xActionEvent.ActionCommand == "CountByLemma":
                self.count(self.dUI.get("lemmas", "#err"), bByLemma=True)
                self.xTag.Enabled = False
                self.xSearch.Enabled = False
            elif xActionEvent.ActionCommand == "UnknownWords":
                self.count(self.dUI.get("unknown_words", "#err"), bOnlyUnknownWords=True)
                self.xTag.Enabled = True
                self.xSearch.Enabled = True
            elif xActionEvent.ActionCommand == "Search":
                if not self.xGridControl.hasSelectedRows():
                    return
                lRow = self.xGridControl.getSelectedRows()
                aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n)  for n in lRow ])
                self.gotoWord(aWord)
            elif xActionEvent.ActionCommand == "Tag":
                if not self.xGridControl.hasSelectedRows():
                    return
                lRow = self.xGridControl.getSelectedRows()
                aWord = set([ self.xGridModel.GridDataModel.getCellData(0, n)  for n in lRow ])
                sAction = ""
                if self.xAccent.State:
                    sAction = "emphasis"


                elif self.xStrongAccent.State:
                    sAction = "strong_emphasis"
                elif self.xNoAccent.State:
                    sAction = "nostyle"
                self.tagText(aWord, sAction)
            elif xActionEvent.ActionCommand == "Close":
                self.xContainer.dispose()           # Non modal dialog
                #self.xContainer.endExecute()       # Modal dialog
        except:
            traceback.print_exc()

    # XJobExecutor
    def trigger (self, args):
        try:
            xDialog = Enumerator(self.ctx)
            xDialog.run()
        except:
            traceback.print_exc()
................................................................................
        xCursor.gotoStartOfParagraph(False)
        nPos = 0
        for dToken in self.oTokenizer.genTokens(sParagraph):
            if dToken["sValue"] in aWord:
                xCursor.goRight(dToken["nStart"]-nPos, False) # start of token
                nPos = dToken["nEnd"]
                xCursor.goRight(nPos-dToken["nStart"], True) # end of token
                # if sAction == "underline":
                #     xCursor.CharBackColor = hexToRBG("AA0000")
                # elif sAction == "nounderline":
                #     xCursor.CharBackColor = hexToRBG("FFFFFF")
                if sAction == "emphasis":
                    xCursor.CharStyleName = "Emphasis"
                elif sAction == "strong_emphasis":
                    xCursor.CharStyleName = "Strong Emphasis"
                elif sAction == "nostyle":
                    #xCursor.CharStyleName = "Default Style"     # doesn’t work
                    xCursor.setPropertyToDefault("CharStyleName")
        self.xProgressBar.ProgressValue += 1

    @_waitPointer
    def gotoWord (self, aWord):
        try:
            if not aWord:
                return
            if not self.oTokenizer:
                self.oTokenizer = self.oSpellChecker.getTokenizer()
            xViewCursor = self.xDocument.CurrentController.ViewCursor
            if not xViewCursor.isCollapsed():
                xViewCursor.collapseToEnd()
            xRange = xViewCursor.getStart()
            xCursor = self.xDocument.Text.createTextCursor()
            xCursor.gotoRange(xRange, False)
            #xCursor.gotoEndOfWord(False)
            xCursor.gotoEndOfParagraph(True)
            sParagraph = xCursor.getString()
            xCursor.gotoRange(xRange, False)
            tPos = self._searchWordsInText(aWord, sParagraph)
            if not tPos:
                while xCursor.gotoNextParagraph(False):
                    xCursor.gotoEndOfParagraph(True)
                    sParagraph = xCursor.getString()
                    xCursor.gotoStartOfParagraph(False)
                    tPos = self._searchWordsInText(aWord, sParagraph)
                    if tPos:
                        break
            if not tPos:
                xCursor.gotoStart(False)
                xCursor.gotoEndOfParagraph(True)
                sParagraph = xCursor.getString()
                xCursor.gotoStartOfParagraph(True)
                tPos = self._searchWordsInText(aWord, sParagraph)
                while xCursor.gotoNextParagraph(False):
                    xCursor.gotoEndOfParagraph(True)
                    sParagraph = xCursor.getString()
                    xCursor.gotoStartOfParagraph(False)
                    tPos = self._searchWordsInText(aWord, sParagraph)
                    if tPos:
                        break
            if tPos:
                xCursor.goRight(tPos[0], False)
                xRange = xCursor.getStart()
                xViewCursor.gotoRange(xRange, False)
                xViewCursor.goRight(tPos[1], True)
        except:
            traceback.print_exc()

    def _searchWordsInText (self, aWord, sText):
        for dToken in self.oTokenizer.genTokens(sText):
            if dToken["sValue"] in aWord:
                return (dToken["nStart"], dToken["nEnd"]-dToken["nStart"])
        return None

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

Changes to gc_lang/fr/oxt/Lexicographer/enum_strings.py.

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
..
18
19
20
21
22
23
24
25

26
27
28
29
30
31
32
33
..
42
43
44
45
46
47
48
49

50
51
52
53
54
55
    if sLang in dStrings:
        return dStrings[sLang]
    return dStrings["fr"]

dStrings = {
    "fr": {
        "title": "Grammalecte · Recenseur de mots",
        
        "list_section": "Énumération des occurrences",
        "count_button": "Compter tout",
        "count2_button": "Compter par lemme",
        "unknown_button": "Mots inconnus",
        "num_of_entries": "Nombre d’entrées :",
        "tot_of_entries": "Total des entrées :",

................................................................................
        "lemmas": "Lemmes",
        "unknown_words": "Mots inconnus",

        "dformat_section": "Formatage direct",
        "charstyle_section": "Style de caractères",
        "underline": "Surligner",
        "nounderline": "Effacer",
        "accentuation": "Accentuation",

        "noaccentuation": "Aucun",
        "tag_button": "Taguer",

        "close_button": "Fermer",
    },
    "en": {
        "title": "Grammalecte · Enumerator of words",

................................................................................
        "lemmas": "Lemmas",
        "unknown_words": "Unknown words",

        "dformat_section": "Direct format",
        "charstyle_section": "Character style",
        "underline": "Underline",
        "nounderline": "Erase",
        "accentuation": "Accentuation",

        "noaccentuation": "None",
        "tag_button": "Tag",

        "close_button": "Close",
    },
}







|







 







|
>
|







 







|
>
|





2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
..
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
..
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
    if sLang in dStrings:
        return dStrings[sLang]
    return dStrings["fr"]

dStrings = {
    "fr": {
        "title": "Grammalecte · Recenseur de mots",

        "list_section": "Énumération des occurrences",
        "count_button": "Compter tout",
        "count2_button": "Compter par lemme",
        "unknown_button": "Mots inconnus",
        "num_of_entries": "Nombre d’entrées :",
        "tot_of_entries": "Total des entrées :",

................................................................................
        "lemmas": "Lemmes",
        "unknown_words": "Mots inconnus",

        "dformat_section": "Formatage direct",
        "charstyle_section": "Style de caractères",
        "underline": "Surligner",
        "nounderline": "Effacer",
        "emphasis": "Accentuation",
        "strong_emphasis": "Accentuation forte",
        "nostyle": "Aucun",
        "tag_button": "Taguer",

        "close_button": "Fermer",
    },
    "en": {
        "title": "Grammalecte · Enumerator of words",

................................................................................
        "lemmas": "Lemmas",
        "unknown_words": "Unknown words",

        "dformat_section": "Direct format",
        "charstyle_section": "Character style",
        "underline": "Underline",
        "nounderline": "Erase",
        "emphasis": "Emphasis",
        "strong_emphasis": "Strong emphasis",
        "nostyle": "None",
        "tag_button": "Tag",

        "close_button": "Close",
    },
}

Changes to gc_lang/fr/oxt/TextFormatter/TextFormatter.py.

1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
18
19
20
21
...
264
265
266
267
268
269
270

271
272
273
274
275
276
277
278
...
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
...
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
...
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
# -*- coding: utf8 -*-
# Text Formatter
# by Olivier R.
# License: MPL 2

import unohelper
import uno
import sys
import os

import traceback
import time

if sys.version_info.major == 3:
    import imp

import tf_strings
import tf_options
import tf_tabrep
import helpers


................................................................................
        #self.bsel = self._addWidget('bsel', 'CheckBox', x2, self.xDialog.Height-40, nWidth-55, nHeight, Label = self.dUI.get('bsel', "#err"))
        self.bapply = self._addWidget('apply', 'Button', self.xDialog.Width-55, self.xDialog.Height-19, 50, 15, Label = self.dUI.get('apply', "#err"), \
                                      FontDescriptor = xFD2, TextColor = 0x004400)
        self.binfo = self._addWidget('info', 'Button', self.xDialog.Width-15, 0, 10, 9, Label = self.dUI.get('info', "#err"), \
                                     HelpText = self.dUI.get('infotitle', "#err"), FontDescriptor = xFDsmall, TextColor = 0x444444)

        # load configuration

        self._loadConfig()

        ## container
        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
        self.xContainer.setModel(self.xDialog)
        self.xContainer.setVisible(False)
        self.xContainer.getControl('info').addActionListener(self)
        self.xContainer.getControl('info').setActionCommand('Info')
................................................................................
                else:
                    xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
                    xElem = xDesktop.getCurrentComponent()

                    # Writer
                    if True:
                        # no selection
                        self._saveConfig()
                        self._replaceAll(xElem)
                    else:
                        # modify selected text only
                        pass
                        #xSelecList = xDoc.getCurrentSelection()
                        #xSel = xSelecList.getByIndex(0)

................................................................................
                xWindow = xDoc.CurrentController.Frame.ContainerWindow
                MessageBox (xWindow, self.dUI.get('infomsg', "#err"), self.dUI.get('infotitle', "#err"))
            else:
                print("Wrong command: " + xActionEvent.ActionCommand)
        except:
            traceback.print_exc()

    def _loadConfig (self):
        try:
            if sys.version_info.major == 3:
                imp.reload(tf_options)
            else:
                reload(tf_options)

            self._setConfig(tf_options.dOpt)
        except:
            traceback.print_exc()


    def _setConfig (self, d):

        try:
            for key, val in d.items():
                w = getattr(self, key)

                w.State = val
                if key in self.dCheckboxWidgets:
                    self._switchCheckBox(w)
        except:
            raise



    def _saveConfig (self):

        try:
            # 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()

    def _switchCheckBox (self, wGroupCheckbox):
        for w in self.dCheckboxWidgets.get(wGroupCheckbox.Name, []):
            w.Enabled = wGroupCheckbox.State

................................................................................
        try:
            for sPattern, sRepl, bRegex, bCaseSensitive in tf_tabrep.dTableRepl[sList]:
                n += self._replaceText(xElem, sPattern, sRepl, bRegex, bCaseSensitive)
        except:
            print("# Error with "+sList)
            traceback.print_exc()
        return n


    def _replaceText (self, xElem, sPattern, sRepl, bRegex, bCaseSensitive=False):
        try:
            xRD = xElem.createReplaceDescriptor()
            xRD.SearchString = sPattern
            xRD.ReplaceString = sRepl
            xRD.SearchRegularExpression = bRegex
<






<
<
>


<
<
|







 







>
|







 







|







 







|

|
|
|
|
>
|


>

|
>
|
<
|
>
|
|
|
|
<
>
>

|
>



|
|



|
|
|
|
<
<
<







 







<








1
2
3
4
5
6


7
8
9


10
11
12
13
14
15
16
17
...
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
...
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
...
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
...
683
684
685
686
687
688
689

690
691
692
693
694
695
696

# Text Formatter
# by Olivier R.
# License: MPL 2

import unohelper
import uno



import traceback
import time


import json

import tf_strings
import tf_options
import tf_tabrep
import helpers


................................................................................
        #self.bsel = self._addWidget('bsel', 'CheckBox', x2, self.xDialog.Height-40, nWidth-55, nHeight, Label = self.dUI.get('bsel', "#err"))
        self.bapply = self._addWidget('apply', 'Button', self.xDialog.Width-55, self.xDialog.Height-19, 50, 15, Label = self.dUI.get('apply', "#err"), \
                                      FontDescriptor = xFD2, TextColor = 0x004400)
        self.binfo = self._addWidget('info', 'Button', self.xDialog.Width-15, 0, 10, 9, Label = self.dUI.get('info', "#err"), \
                                     HelpText = self.dUI.get('infotitle', "#err"), FontDescriptor = xFDsmall, TextColor = 0x444444)

        # load configuration
        self.xGLOptionNode = helpers.getConfigSetting("/org.openoffice.Lightproof_${implname}/Other/", True)
        self._loadConfig("${lang}")

        ## container
        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
        self.xContainer.setModel(self.xDialog)
        self.xContainer.setVisible(False)
        self.xContainer.getControl('info').addActionListener(self)
        self.xContainer.getControl('info').setActionCommand('Info')
................................................................................
                else:
                    xDesktop = self.ctx.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
                    xElem = xDesktop.getCurrentComponent()

                    # Writer
                    if True:
                        # no selection
                        self._saveConfig("${lang}")
                        self._replaceAll(xElem)
                    else:
                        # modify selected text only
                        pass
                        #xSelecList = xDoc.getCurrentSelection()
                        #xSel = xSelecList.getByIndex(0)

................................................................................
                xWindow = xDoc.CurrentController.Frame.ContainerWindow
                MessageBox (xWindow, self.dUI.get('infomsg', "#err"), self.dUI.get('infotitle', "#err"))
            else:
                print("Wrong command: " + xActionEvent.ActionCommand)
        except:
            traceback.print_exc()

    def _loadConfig (self, sLang):
        try:
            dOpt = tf_options.dDefaultOpt.copy()
            xChild = self.xGLOptionNode.getByName("o_"+sLang)
            sTFOptionsJSON = xChild.getPropertyValue("tf_options")
            if sTFOptionsJSON:
                dOpt.update(json.loads(sTFOptionsJSON))
            self._setConfig(dOpt)
        except:
            traceback.print_exc()
            self._setConfig(tf_options.dDefaultOpt)

    def _setConfig (self, dOpt):
        for sKey, val in dOpt.items():
            try:

                w = getattr(self, sKey)
                if w:
                    w.State = val
                    if sKey in self.dCheckboxWidgets:
                        self._switchCheckBox(w)
            except:

                traceback.print_exc()
                print("option", sKey, "not set.")

    def _saveConfig (self, sLang):
        "save options in LibreOffice profile"
        try:
            # create options dictionary
            dOpt = {}
            for sKey, lWidget in self.dCheckboxWidgets.items():
                w = getattr(self, sKey)
                dOpt[w.Name] = w.State
                for w in lWidget:
                    dOpt[w.Name] = w.State
            # save option to LO profile as JSON string
            xChild = self.xGLOptionNode.getByName("o_"+sLang)
            xChild.setPropertyValue("tf_options", json.dumps(dOpt))
            self.xGLOptionNode.commitChanges()



        except:
            traceback.print_exc()

    def _switchCheckBox (self, wGroupCheckbox):
        for w in self.dCheckboxWidgets.get(wGroupCheckbox.Name, []):
            w.Enabled = wGroupCheckbox.State

................................................................................
        try:
            for sPattern, sRepl, bRegex, bCaseSensitive in tf_tabrep.dTableRepl[sList]:
                n += self._replaceText(xElem, sPattern, sRepl, bRegex, bCaseSensitive)
        except:
            print("# Error with "+sList)
            traceback.print_exc()
        return n


    def _replaceText (self, xElem, sPattern, sRepl, bRegex, bCaseSensitive=False):
        try:
            xRD = xElem.createReplaceDescriptor()
            xRD.SearchString = sPattern
            xRD.ReplaceString = sRepl
            xRD.SearchRegularExpression = bRegex

Changes to gc_lang/fr/oxt/TextFormatter/tf_options.py.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dDefaultOpt = {
    'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, 
    'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
    'space': 1, 'space1': 1, 'space2': 1,
    'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
    'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
    'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
    'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
}
dOpt = {
    'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1, 
    'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
    'space': 1, 'space1': 1, 'space2': 1,
    'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
    'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
    'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
    'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
}
|
<
<
<
<
<
<
<
|
|
|







1







2
3
4
5
6
7
8
9
10
11
# text formatter options








dDefaultOpt = {
    'ssp': 1, 'ssp1': 1, 'ssp2': 1, 'ssp3': 1, 'ssp4': 1, 'ssp5': 1, 'ssp6': 1, 'ssp7': 1,
    'nbsp': 1, 'nbsp1': 1, 'nbsp2': 1, 'nbsp3': 1, 'nbsp4': 1, 'nbsp5': 1, 'nbsp6': 1, 'nnbsp1': 0, 'nnbsp2': 0, 'nnbsp4': 0,
    'space': 1, 'space1': 1, 'space2': 1,
    'delete': 0, 'delete1': 1, 'delete2': 1, 'delete2a': 0, 'delete2b': 1, 'delete2c': 0,
    'typo': 1, 'typo1': 1, 'typo2': 1, 'typo3': 1, 'typo4': 1, 'typo5': 1, 'typo6': 1, 'typo7': 1, 'typo8': 0, 'typo3a': 0, 'typo3b': 1, 'typo4a': 1, 'typo4b': 0, 'typo8a': 0, 'typo8b': 1, 'typo_ff': 1, 'typo_fi':1, 'typo_ffi':1, 'typo_fl':1, 'typo_ffl':1, 'typo_ft':1, 'typo_st': 1,
    'misc': 1, 'misc1': 1, 'misc2': 1, 'misc3': 1, 'misc5': 1, 'misc1a': 0, 'misc5b': 0, 'misc5c': 0,
    'struct': 0, 'struct1': 1, 'struct2': 1, 'struct3': 0,
}

Changes to gc_lang/fr/rules.grx.

1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
....
2003
2004
2005
2006
2007
2008
2009

2010
2011
2012
2013
2014
2015
2016
....
4458
4459
4460
4461
4462
4463
4464





































4465
4466
4467
4468
4469
4470
4471
....
4753
4754
4755
4756
4757
4758
4759









4760
4761
4762
4763
4764
4765
4766
....
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
....
5835
5836
5837
5838
5839
5840
5841
5842
5843
5844
5845
5846
5847
5848
5849
....
6303
6304
6305
6306
6307
6308
6309
6310
6311
6312
6313
6314
6315
6316
6317
....
6340
6341
6342
6343
6344
6345
6346








6347
6348
6349
6350
6351
6352
6353
....
6540
6541
6542
6543
6544
6545
6546
6547

6548
6549
6550
6551
6552
6553
6554
....
6763
6764
6765
6766
6767
6768
6769

6770
6771
6772
6773
6774
6775
6776

6777
6778
6779
6780
6781
6782
6783
6784
6785

6786
6787
6788
6789
6790
6791
6792
....
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
....
6933
6934
6935
6936
6937
6938
6939









6940
6941
6942
6943
6944
6945
6946
....
7301
7302
7303
7304
7305
7306
7307




7308
7309
7310
7311
7312
7313
7314

7315
7316
7317
7318
7319
7320
7321
....
7869
7870
7871
7872
7873
7874
7875
















7876
7877
7878
7879
7880
7881
7882
....
8162
8163
8164
8165
8166
8167
8168

8169
8170
8171
8172
8173
8174
8175
....
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
....
8711
8712
8713
8714
8715
8716
8717



















8718
8719
8720
8721
8722
8723
8724
....
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
....
9280
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
....
9538
9539
9540
9541
9542
9543
9544
9545

9546
9547
9548
9549
9550
9551
9552
....
9628
9629
9630
9631
9632
9633
9634



9635
9636
9637
9638
9639
9640
9641
....
9649
9650
9651
9652
9653
9654
9655

9656
9657
9658
9659
9660
9661
9662
....
9665
9666
9667
9668
9669
9670
9671







9672
9673
9674
9675
9676
9677
9678
.....
10781
10782
10783
10784
10785
10786
10787

10788
10789
10790
10791
10792
10793
10794
.....
10885
10886
10887
10888
10889
10890
10891

10892
10893
10894
10895
10896
10897
10898
.....
10931
10932
10933
10934
10935
10936
10937
10938

10939
10940
10941
10942
10943
10944
10945
.....
10974
10975
10976
10977
10978
10979
10980

10981
10982
10983
10984
10985
10986
10987
.....
11111
11112
11113
11114
11115
11116
11117
11118
11119
11120
11121
11122
11123
11124
11125
.....
11140
11141
11142
11143
11144
11145
11146

11147
11148
11149
11150
11151
11152

11153
11154
11155
11156
11157
11158
11159
11160
11161
11162
11163
11164
11165
11166
11167
11168
.....
11185
11186
11187
11188
11189
11190
11191

11192
11193
11194
11195
11196
11197
11198
.....
11380
11381
11382
11383
11384
11385
11386

11387
11388
11389
11390
11391
11392
11393
.....
11400
11401
11402
11403
11404
11405
11406

11407
11408
11409
11410
11411
11412
11413
.....
11490
11491
11492
11493
11494
11495
11496

11497
11498
11499
11500
11501
11502
11503
.....
11523
11524
11525
11526
11527
11528
11529
11530
11531
11532
11533
11534
11535
11536
11537

11538
11539
11540
11541
11542
11543
11544
.....
11572
11573
11574
11575
11576
11577
11578

11579
11580
11581
11582
11583
11584
11585
.....
11677
11678
11679
11680
11681
11682
11683

11684
11685
11686
11687
11688
11689
11690
.....
11792
11793
11794
11795
11796
11797
11798

11799
11800
11801
11802
11803
11804
11805
.....
11806
11807
11808
11809
11810
11811
11812

11813
11814
11815
11816
11817
11818
11819
11820
11821

11822
11823
11824
11825
11826
11827
11828
11829
11830
11831
11832

11833
11834
11835
11836
11837
11838
11839
.....
11911
11912
11913
11914
11915
11916
11917
11918
11919

11920
11921
11922
11923
11924
11925
11926
.....
11986
11987
11988
11989
11990
11991
11992
11993
11994
11995
11996
11997
11998
11999
12000
.....
12082
12083
12084
12085
12086
12087
12088
12089
12090
12091
12092
12093
12094
12095
12096
12097
12098
12099
12100
.....
12110
12111
12112
12113
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
.....
12132
12133
12134
12135
12136
12137
12138
12139
12140
12141




12142
12143
12144
12145
12146
12147
12148
.....
12209
12210
12211
12212
12213
12214
12215
12216
12217
12218
12219
12220
12221
12222
12223
12224
12225
12226
.....
12287
12288
12289
12290
12291
12292
12293
12294
12295
12296
12297
12298
12299
12300
12301
.....
12305
12306
12307
12308
12309
12310
12311
12312
12313
12314
12315
12316
12317
12318
12319
.....
12320
12321
12322
12323
12324
12325
12326
12327
12328
12329
12330
12331
12332
12333
12334
.....
12389
12390
12391
12392
12393
12394
12395

12396
12397
12398
12399
12400
12401
12402
12403
12404
12405

12406
12407
12408
12409
12410
12411
12412
12413
12414
12415
12416

12417
12418
12419
12420
12421
12422
12423
.....
12440
12441
12442
12443
12444
12445
12446

12447
12448
12449
12450
12451
12452
12453
.....
12462
12463
12464
12465
12466
12467
12468

12469
12470
12471
12472
12473
12474

12475
12476
12477
12478
12479
12480
12481
.....
12488
12489
12490
12491
12492
12493
12494

12495
12496
12497
12498
12499
12500
12501
.....
12534
12535
12536
12537
12538
12539
12540

12541
12542
12543
12544
12545
12546
12547
12548
12549

12550
12551
12552
12553
12554
12555
12556
.....
12568
12569
12570
12571
12572
12573
12574

12575
12576
12577


12578
12579
12580
12581
12582
12583
12584
.....
12592
12593
12594
12595
12596
12597
12598
12599
12600
12601
12602
12603
12604
12605
12606
.....
12631
12632
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642
12643
12644
12645
.....
12685
12686
12687
12688
12689
12690
12691

12692
12693
12694
12695
12696

12697
12698
12699
12700
12701
12702
12703
.....
12732
12733
12734
12735
12736
12737
12738
12739














12740

12741
12742
12743
12744
12745
12746
12747
.....
12749
12750
12751
12752
12753
12754
12755
12756
12757
12758
12759
12760
12761
12762
12763
.....
12770
12771
12772
12773
12774
12775
12776
12777
12778
12779
12780
12781
12782
12783
12784
.....
12836
12837
12838
12839
12840
12841
12842























12843
12844
12845
12846
12847
12848
12849
.....
12876
12877
12878
12879
12880
12881
12882
12883
12884
12885
12886
12887
12888
12889
12890
.....
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
12930
12931
12932
12933
12934
.....
12957
12958
12959
12960
12961
12962
12963
12964
12965
12966
12967
12968
12969
12970
12971
.....
12974
12975
12976
12977
12978
12979
12980
12981
12982
12983
12984
12985
12986
12987
12988
12989
12990
12991
12992
12993
12994
12995
12996
12997
12998
12999
13000
13001
13002
13003
13004
13005
13006
13007
13008
13009
.....
13010
13011
13012
13013
13014
13015
13016
13017
13018
13019
13020
13021
13022
13023
13024
.....
13027
13028
13029
13030
13031
13032
13033
13034
13035
13036
13037
13038
13039
13040
13041
13042
13043
13044
13045
13046
13047
13048
13049
13050
13051
13052
13053
13054
13055
13056
13057
13058
13059
13060
13061
13062
.....
13373
13374
13375
13376
13377
13378
13379
13380
13381
13382
13383
13384
13385
13386
13387
.....
13431
13432
13433
13434
13435
13436
13437
13438
13439
13440
13441
13442
13443
13444
13445
13446
13447
13448
13449
13450
13451





13452
13453
13454
13455
13456
13457
13458
13459
13460

13461
13462
13463
13464
13465
13466
13467
13468
13469
13470
13471
13472
13473
13474
13475
13476
13477
.....
13532
13533
13534
13535
13536
13537
13538

13539
13540
13541
13542
13543
13544
13545
.....
13546
13547
13548
13549
13550
13551
13552

13553
13554
13555
13556
13557
13558
13559
.....
13561
13562
13563
13564
13565
13566
13567

13568
13569
13570
13571
13572
13573
13574
13575
13576
13577
13578
13579
13580

13581
13582
13583
13584
13585





13586
13587
13588
13589
13590
13591
13592
13593
13594
13595
13596
13597
13598
13599
13600
.....
13618
13619
13620
13621
13622
13623
13624

13625
13626
13627
13628
13629
13630
13631
.....
13780
13781
13782
13783
13784
13785
13786



13787
13788
13789
13790
13791
13792
13793
.....
13794
13795
13796
13797
13798
13799
13800
13801
13802
13803
13804
13805
13806
13807
13808
13809
13810
13811
.....
13880
13881
13882
13883
13884
13885
13886
13887
13888
13889
13890
13891
13892
13893
13894
13895
13896
13897
13898
13899
13900
13901
13902
13903
13904
13905
13906
13907
13908
13909
13910
13911
13912

13913
13914
13915
13916
13917
13918
13919
.....
14572
14573
14574
14575
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
.....
15358
15359
15360
15361
15362
15363
15364
15365
15366
15367
15368
15369





15370
15371
15372
15373
15374
15375
15376
15377
15378
15379
15380
15381
15382
15383
15384
15385
15386
15387
15388
15389
.....
15390
15391
15392
15393
15394
15395
15396
15397
15398
15399
15400

15401




15402
15403
15404
15405
15406


15407
15408
15409
15410
15411
15412
15413
.....
15796
15797
15798
15799
15800
15801
15802
15803
15804
15805
15806
15807
15808
15809
15810
15811
15812
15813
15814

15815
15816
15817
15818
15819
15820
15821
.....
15964
15965
15966
15967
15968
15969
15970







































15971
15972
15973
15974
15975
15976
15977
.....
16677
16678
16679
16680
16681
16682
16683
16684
16685
16686
16687
16688
16689
16690
16691
.....
16731
16732
16733
16734
16735
16736
16737
16738
16739
16740
16741
16742
16743
16744
16745
16746
16747
16748
16749
16750
16751

16752
16753
16754
16755
16756
16757
16758
.....
17845
17846
17847
17848
17849
17850
17851
17852
17853
17854
17855
17856
17857
17858
17859
17860
17861
17862
17863
17864
17865
17866
17867
17868
17869
17870
17871
17872
17873
17874
.....
17918
17919
17920
17921
17922
17923
17924
17925
17926
17927
17928
17929
17930
17931
17932
17933
17934
17935
.....
17993
17994
17995
17996
17997
17998
17999
18000
18001
18002

18003
18004
18005
18006
18007
18008
18009
18010
18011
18012

18013
18014
18015
18016


18017
18018
18019
18020
18021
18022
18023
18024
18025
18026
18027
18028
18029
18030


18031


18032
18033
18034





















18035
18036
18037
18038

18039
18040
18041
18042



18043
18044
18045
18046
18047
18048



18049
18050

18051
18052






18053
18054

18055
18056
18057



18058
18059
18060
18061
18062
18063
18064
.....
18068
18069
18070
18071
18072
18073
18074
18075
18076
18077
18078
18079
18080
18081
18082
18083
18084
18085
18086
18087
18088
18089
18090
18091
18092
18093
18094
18095
18096
18097
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
18108
18109
18110
.....
18221
18222
18223
18224
18225
18226
18227
18228
18229
18230
18231
18232
18233
18234
18235
.....
18274
18275
18276
18277
18278
18279
18280

18281
18282
18283
18284
18285
18286
18287
.....
18361
18362
18363
18364
18365
18366
18367

18368
18369
18370
18371
18372
18373
18374
18375
18376
18377
18378
18379
18380
18381
18382
18383
18384
18385



18386
18387
18388
18389
18390
18391
18392
.....
18842
18843
18844
18845
18846
18847
18848
18849
18850
18851
18852
18853
18854
18855
18856
18857
18858
18859
18860
18861
18862
18863
18864
18865
18866
18867
18868
18869
18870
18871
18872
18873
18874
18875
18876
18877
18878
18879
18880
18881
18882
18883
18884
18885
18886
18887
18888
18889
.....
20118
20119
20120
20121
20122
20123
20124
































20125
20126
20127
20128
20129
20130
20131
.....
20342
20343
20344
20345
20346
20347
20348
20349
20350
20351
20352
20353
20354
20355
20356
.....
20358
20359
20360
20361
20362
20363
20364
20365
20366
20367
20368
20369
20370
20371
20372
.....
20375
20376
20377
20378
20379
20380
20381

20382
20383
20384
20385
20386
20387
20388
.....
20442
20443
20444
20445
20446
20447
20448
20449
20450
20451
20452
20453
20454
20455
20456
.....
20459
20460
20461
20462
20463
20464
20465
20466
20467
20468
20469
20470
20471
20472
20473
.....
20480
20481
20482
20483
20484
20485
20486
20487
20488
20489
20490
20491
20492
20493
20494
20495
20496
20497
20498

20499
20500
20501
20502
20503
20504
20505
.....
20585
20586
20587
20588
20589
20590
20591
20592
20593
20594
20595
20596
20597
20598
20599
20600
20601
20602
20603
20604
20605
20606
20607
20608
.....
20617
20618
20619
20620
20621
20622
20623

20624
20625
20626
20627
20628
20629
20630
.....
22074
22075
22076
22077
22078
22079
22080
22081
22082
22083
22084
22085
22086
22087
22088
.....
22091
22092
22093
22094
22095
22096
22097
22098
22099
22100
22101
22102

22103
22104
22105
22106
22107
22108
22109
22110
22111
22112
22113
22114
22115
.....
22116
22117
22118
22119
22120
22121
22122
22123


22124
22125
22126
22127
22128
22129
22130
.....
23037
23038
23039
23040
23041
23042
23043
23044
23045
23046
23047
23048
23049
23050
23051
23052
23053











































23054
23055
23056
23057
23058
23059
23060
.....
23083
23084
23085
23086
23087
23088
23089
23090
23091
23092
23093
23094
23095
23096
23097
.....
26826
26827
26828
26829
26830
26831
26832
26833
26834
26835
26836
26837
26838
26839
26840
    l’ [un|une]  *WORD
        <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]")

    [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune]  *WORD
        <<- =>> exclude(\2, ":V")

    [un|une]  *WORD
        <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|") and not morph(\2, ":P") =>> exclude(\2, ":V")

    [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne
        <<- =>> select(\-1, ":N")

    de  [la|l’]  $:¬:Y
        <<- not value(<1, "|semblant|") =>> exclude(\3, ":V")

................................................................................
TEST: en tant que président du conseil
TEST: les bac +2 sont trop nombreux.
TEST: c’est à n’y plus rien comprendre.
TEST: Elle était tout feu, tout flamme.
TEST: Ses rencards finissent par devenir lassants
TEST: trois espèces de chauve-souris dont une est éteinte
TEST: Ils sont source de conflits




!!!
!!!
!!! Étiquettes                                                                                    !!
!!!
................................................................................
    grand’ville
        <<- /tu/ ->> =\1.replace("’", "-")                                      # Graphie désuète. Au lieu d’une apostrophe, employez plutôt un trait d’union.
        <<- ~>> =\1.replace("’", "-")

TEST: je suis allé dans la {{grand’rue}}.                           ->> grand-rue








































!!!! Virgules                                                                                     !!

__virg_dialogue_après_nom_propre__
    [<start>|,]  $:M¬:G  [/-je|/-tu|/-on|/-nous|/-vous|/-ils|/-elles|/VCimp]
        <<- /virg/ -2>> \2,                                                                         # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique.

................................................................................
__bs_pour_ne_pas_que__
    pour ne pas [que|qu’]
        <<- /bs/ ->> _
        # Tournure familière. Par exemple, écrivez “pour qu’il ne vienne pas” plutôt que “pour ne pas qu’il vienne.”|http://www.academie-francaise.fr/pour-pas-que-au-lieu-de-pour-que-ne-pas

TEST: Nous y sommes allés {{pour ne pas qu’}}elle se sente seule.











# très / trop
__bs_très_trop_superflu__
    [très|trop] [beaucoup|assez|mieux|pire|meilleur|délicieux|plus|moins]
        <<- /bs/ ->> \2                                                                             # Avec “\2”, “\1” est superflu.

TEST: Je l’aime {{très beaucoup}}.
................................................................................
    [>ajourner|>différer|>reporter] à date ultérieure
    [>ajourner|>différer|>reporter] à une date ultérieure
        <<- /pleo/ ->> \1                                                                           # Pléonasme.

TEST: {{Ajourner à une date ultérieure}}        ->> Ajourner
TEST: {{différer à une date ultérieure}}        ->> différer
TEST: {{reporter à plus tard}}                  ->> reporter




!!
!!
!!!! Tournures de langage                                                                         !!
!!
................................................................................
        <<- /conf/ \2.islower()
        -2>> =suggSimil(\2, ":[NA]:.:[si]", True)                                                   # Incohérence avec “\1” : “\2” est un verbe.

    [<start>|,]  [ton|son|audit]  @:(?:Y|[123][sp])¬:[NAQ]
        <<- /conf/ \3.islower()
        -3>> =suggSimil(\3, ":[NA]:[me]:[si]", True)                                                # Incohérence avec “\2” : “\3” est un verbe.

    [un|une]  @:(?:Y|[123][sp])¬:[GNA]  ?@:W¿  @:A¬:[GM]
        <<- /conf/ not value(<1, "|dont|l’|d’|sauf|excepté|") and not before("(?i)\\bun à +$")
        -2>> =suggSimil(\2, ":[NAQ]:[me]:[si]", True)                                               # Incohérence avec “\1” : “\2” est une forme verbale conjuguée.

TEST: un {{maintient}} difficile.
TEST: quelqu’un arrive.
TEST: cet {{plaît}} est infectée.
TEST: {{ce}} {{rappelle}} n’en finit pas.
................................................................................
        <<- /conf/ -1:2>> a les|aux
        # Confusion. Ou vous confondez “à” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.

TEST: Celui qui y croit {{à les}} moyens d’y parvenir.


    à  *WORD
        <<- /conf/ \2.islower() and not value(\2, "|coté|") >>>
        <<- /conf/ morph(\2, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a             # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __also__ and morph(\2, "V1.*:(?:Ip:2p|Q)", "*") and not value(<1, "|il|elle|on|n’|les|l’|m’|t’|s’|d’|en|y|lui|nous|vous|leur|")
        -2>> =suggVerbInfi(\2)                                                                      # Le verbe devrait être à l’infinitif.
        <<- /conf/ __else__ and morph(\2, ":[123][sp]", "*") and not value(\2, "|tord|tords|") >>>
        <<- /conf/ morph(\2, ":V2.*:I[ps]:3s", "*") -2>> =suggVerbPpas(\2, ":m:s")                  # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
        <<- /conf/ __also__ -1>> a                                                                  # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __else__ -2>> _                                                                  # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
................................................................................
        -1>> à                                                      # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: scrupuleux {{a}} n’en toucher qu’une part infime.
TEST: Ne pas hésiter {{a}} {{demander}} des conseils.
TEST: Sébastien {{a}} {{demander}} des conseils.
TEST: {{A}} vous lire, on ne sait plus que penser de toutes ces histoires










__conf_à_a__
    [<start>|,] a moins [que|qu’]
        <<- /conf/ -2>> à                                           # Confusion probable : « à moins que » pour dire « sauf si ».

    a part @:(?:M[12]|D|Oo)
        <<- /conf/ -1>> à                                           # Confusion probable : “a” est une forme conjugée de “avoir”. Pour la préposition, écrivez “à”.
................................................................................
TEST: tout part {{à veau l’eau}}
TEST: On décida de tout laisser partir {{à vau l’o}}
TEST: une dérive à vau-l’eau.


__conf_à_a_locutions__
    a ?seulement¿ [*NUM|$:B|quelques|plusieurs] [millimètres|centimètres|décamètres|mètres|kilomètres|verstes|lieues|UA|parsecs|années-lumière] de distance
    a [califourchon|contrecœur|contre-cœur|contrejour|contre-jour|contretemps|contre-temps|demi-mot|gogo|distance|nouveau|peine|présent|rebrousse-poil|regret|travers|tout-va|confesse|midi|minuit|rallonge|reculons|risque|sec|tâtons|vélo|vif]

    a air comprimé
    a armes égales
    a aucun prix
    a autrui
    a autre chose
    a bas [>coût|>cout]
    a bâbord
................................................................................
TEST: Il l’a fait {{a}} cause de toi.
TEST: Je tenais à le lui faire savoir.
TEST: il va falloir songer à les leur donner
TEST: le coût est estimé à au moins 1000 milliards de dollars
TEST: elle à qui nous avons donné notre cœur et pour laquelle nous avons tout tenté pour la faire aimer de nos concitoyens.
TEST: jusqu’à parfois se mettre en danger
TEST: les méthodes de l’à-peu-près ne suffisent pas.



## substantifs

__conf_substantif_à_substantif!3__
    *WORD  a  @:N¬*
        <<- /conf/ \2.islower() and not value(\3, "|beau|besoin|confiance|connaissance|conscience|crainte|envie|été|faim|hâte|honte|lieu|peur|raison|rapport|recours|soif|tendance|tort|vent|") and morph(\1, ":N", "*")

        -2>> à              # Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: les bobos {{a}} trottinette
TEST: la lettre A est la première lettre de l’alphabet
TEST: la lettre a est la première lettre de l’alphabet
TEST: cette femme a raison
TEST: l’homme a beau se démener, rien n’y fait.
TEST: elle a tendance à n’en faire qu’à sa tête.
TEST: Ce travail a lieu dans le désert.



__conf_a_à_substantifs__
    >arc a >poulie
    >arme a >feu
    >armoire a [>glace|>pharmacie]
    >attaque a main armée
................................................................................

TEST: Mener {{a}} bien cette guerre sera plus difficile qu’on le pense.
TEST: Je peux mener {{a}} bien cette opération.
TEST: Cette coalition que tu penses mener a bien l’intention de te trahir.


__conf_à_a_après_verbes__
    @:V¬:[YGNAWM]  ?@:W¿  a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "que") and not tag_before(\1, "dont") and not tag_before(\1, "qui") and not morph(>1, ":Q")
        --1>> à                                                 # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    [/VCint|/VCimp]  ?@:W¿  a
        <<- /conf/ not value(\1, "|rendez-vous|") --1>> à       # Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: Vient-on {{a}} la maison demain ?
TEST: Arrivait-elle {{a}} le manger ?
TEST: Dis-moi {{a}} quelle heure on mange.
TEST: Offrez-vous {{a}} Dieu et taisez-vous.
TEST: dans tous les cas de figure il pense souvent {{a}} sa fille.
................................................................................
TEST: Qu’y a-t-il {{a}} cette place qui mérite que je prenne tant de risques.
TEST: cet homme mange bien {{a}} la maison ?
TEST: Ce que je mange a un goût de surgelé.
TEST: celui qui conduisait a décidé de faire un tour du quartier avec la voiture.
TEST: Un rendez-vous a bousculé ses plans
TEST: Maria Butina a également rencontré des républicains tels que Donald Trump











__conf_celui_celle_à_qui__
    [celui|celle|ceux|celles]  a  qui
        <<- /conf/ -2>> à                   # Confusion. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: Ceux {{a}} qui nous avons notifié le problème sont partis.
TEST: Il y a qui au dîner ce soir ?
................................................................................

    c’ est  @:N.*:p¬:(?:G|W|M|A.*:[si])
        <<- /conf/ -1:2>> ces|ses                                           # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)…

    ses  /-là
        <<- /conf/ -1>> ces                 # Confusion : “ses” est un déterminant possessif ; si vous voulez désigner des éléments en particulier, vous devriez utiliser le déterminant démonstratif “ces”.





TEST: {{ses}} au-dessus de ses forces.
TEST: {{ces}} comme la peste
TEST: car {{ses}} d’autre part
TEST: {{ces}} qu’il y a tant de pertes
TEST: {{ces}} jamais une bonne idée.
TEST: {{c’est}} {{délires}} nous ennuient
TEST: {{ses}} gens-là sont des salopards

TEST: En 2015, c’est Paris et son agglomération qui…
TEST: Ses pas de danse.
TEST: Avec ces quelques mots, que veux-tu dire ?
TEST: Avec ces quelque 70 millions d’euros de cash disponible
TEST: négocier séparément avec ces divers sous-groupes
TEST: L’ensemble de ces divers points de vue émergeant de plusieurs horizons permettaient de construire un projet, riche et acceptable par toutes les parties prenantes.

................................................................................
# en général
__conf_en_général__
    en générale
        <<- /conf/ ->> en général                               # Dans cette locution, “général” est toujours au masculin singulier.|https://fr.wiktionary.org/wiki/en_g%C3%A9n%C3%A9ral

TEST: On n’en sait {{en générale}} pas assez.


















# évidement / évidemment
__conf_évidemment_évidement__
    [/VCint|/VCimp]  ?[pas|plus|jamais|guère]¿  évidement
    [pas|plus] évidement
        <<- /conf/ --1>> évidemment                         # Confusion probable : l’évidement est l’action de vider quelque chose. L’adverbe s’écrit “évidemment”.|https://fr.wiktionary.org/wiki/évidemment

................................................................................

    hors [je|j’|tu|il|ils|on|parce|quel|quels|quelle|quelles|pourquoi|qui|que]
        <<- /conf/ -1>> or,
        # Confusion probable. Écrivez “or” pour dire “néanmoins”. La préposition “hors” sert à dire “en dehors de” ou “excepté”.|https://fr.wiktionary.org/wiki/hors

    >or du commun
    >or de ?[ma|ta|sa|notre|votre|leur]¿ [compréhension|perception|portée|vue]

        <<- not morph(<1, ":D.*:[me]") -1>> hors
        # Confusion probable. Si vous voulez dire “en dehors de”, écrivez “hors”.|https://fr.wiktionary.org/wiki/hors

TEST: {{hors}}, nous y coryons malgré tout ce qu’on peut en dire.
TEST: {{Hors}} il y a tant à faire depuis que nous sommes arrivés en ces lieux.
TEST: Des femmes {{or}} du commun
TEST: Hors nous, personne ne sait ce qui s’est passé là-bas.
................................................................................
TEST: qui on blâme, ce soir ?


__conf_on_ont__
    [<start>|,|$:Cs] ?l’¿ (ont) [ne|n’|me|m’|te|se|s’]
    [<start>|,|$:Cs] ?l’¿ (ont) [lui|nous|vous] @:[123][sp]¬:G
    [<start>|,|$:Cs] ?l’¿ (ont) [leur|le|la|l’] @:[123][sp]¬:(?:G|[NA].*:[si])
    [<start>|,|$:Cs] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|peine|affaire|hâte|force|recours|somme)/
        <<- /conf/ -1>> on                                          # Confusion probable : “ont” est une conjugaison du verbe avoir.

    [<start>|,|$:Cs] ?l’¿ ont t’
        <<- /conf/ not value(>1, "|il|ils|elle|elles|") --2>> on    # Confusion probable : “ont” est une conjugaison du verbe avoir.

    ~-ont$
        <<- /conf/ ->> =\1[:-1]                                     # Incohérence : “ont” est une forme conjuguée du verbe “avoir” (par exemple: “ils ont”). Pour le pronom personnel, écrivez “on”.
................................................................................

TEST: je ne sais {{pa}}                                                     ->> pas
TEST: Il ne le deviendra {{par}}.                                           ->> pas
TEST: ne viens {{par}}, c’est dangereux.
TEST: il ne tient par contre que grâce à nous
TEST: elle ne savait par qui passer pour arriver à ses fins.





















# pause /pose
__conf_pause_pose__
    >pose [gourmande|café|carrière|crédit|déjeuner|détente|dîner|pipi|repas|thé]
    >pose du [matin|soir]
    >pose de midi
    >pose de l’ après-midi
................................................................................
    quelque fois
        <<- /conf/ ->> quelquefois|quelques fois
        # Confusion. Utilisez “quelquefois” si vous voulez dire “parfois”. Utilisez “quelques fois” pour évoquer ce qui est advenu ou adviendra plusieurs fois.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334

    les quelquefois [ou|où|que|qu’]
        <<- /conf/ -2>> quelques fois                                       # Confusion : “quelquefois” signifie “parfois”.|https://fr.wiktionary.org/wiki/quelquefois

    >être  quelques fois  ?@:W¿  @:A  [de|d’]
        <<- /conf/ -2:3>> quelquefois                                       # Confusion possible. Si vous voulez dire “parfois”, écrivez “quelquefois”.

TEST: {{Quelles que fois}}, on y comprend plus rien.
TEST: {{Qu’elle que fois}}, on y comprend plus rien.
TEST: Il y va {{quelque fois}} par an.
TEST: les {{quelquefois}} où nous y sommes allés, nous avons été très mal reçus.
TEST: c’est {{quelques fois}} vraiment difficile de savoir quoi faire.
................................................................................
TEST: Quelles ont été, pour vous, les plus gros mensonges ?
TEST: Quelle peut encore être l’influence de cet artiste de nos jours ?
TEST: Quelle peut bien être l’influence de cet artiste de nos jours ?


# quoi que / quoique
__conf_quoique_quoi_que__
    quoiqu’ il se soit ?@:W¿ passé
    [quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] en >penser
    [quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] >avoir pu faire
        <<- /conf/ -1>> quoi que|quoi qu’                       # Confusion probable.|https://fr.wiktionary.org/wiki/quoi_que

TEST: mais {{quoique}} tu en penses, c’est comme ça que ça fonctionne.
TEST: {{Quoiqu’}}il se soit passé réellement passé, je vais lui faire la peau.
TEST: {{quoique}} vous ayez pu faire, ça a donné les résultats escomptés.
................................................................................
TEST: Ces chiens me {{son}} odieux.
TEST: ces gens qui {{son}}, dans le meilleur des cas, des imbéciles ne peuvent nous aider.
TEST: {{sont}} {{pain}}
TEST: en {{sont}} {{absence}}
TEST: qui {{son}} ces gens ?
TEST: chez {{sont}} amis
TEST: il a perdu {{sont}} {{ami}}
TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde

TEST: elles s’en sont mal portées
TEST: ils en sont reconnaissants
TEST: sont loin, ces gens…
TEST: Il ne sait pas vraiment ce que sont la peur et la souffrance.
TEST: avec le mur du son ceux qui l’entendent.
TEST: Que sont nos valeurs profondes ?
TEST: comment sont la petite et son frère ?
................................................................................
__conf_tant_temps_tan_1__
    en [tant|>tan] [de|d’] [guerre|paix|crise|doute|pluie]
        <<- /conf/ -2>> temps                               # Confusion. Écrivez « en temps de » si vous évoquez une période de temps.

    de [tant|>tan] en [tant|>tan]
        <<- /conf/ ->> de temps en temps                    # Confusion. Écrivez « de temps en temps ».




    [après|avec] [temps|>tan] [de|d’]
        <<- /conf/ -2>> tant                                # Confusion. Écrivez “tant” pour évoquer une quantité de quelque chose.|http://fr.wiktionary.org/wiki/tant

    [à|a] [>tan|tant] [partiel|partiels|plein|pleins]
        <<- /conf/ -2>> temps                               # Confusion. Pour ce qui est temporel, écrivez “temps”.

    en [même|mêmes] [tant|>tan]
................................................................................

TEST: en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité.
TEST: ils vont {{de tan en tan}} au restaurant
TEST: après {{temps}} de souffrance, il faut savoir lâcher prise.
TEST: il travaille à {{tant}} partiel
TEST: {{en même tant}}, on s’en moque, de toutes ces histoires ennuyeuses.
TEST: en {{tan}} que telle, cette méthode n’est pas parfaite, mais avec de l’intuition

TEST: ce sera fait en {{tant}} et en heure
TEST: ce qui a commencé en 2011 en tant d’endroits du pourtour méditerranéen
TEST: elle est allée en tant de lieux qu’il est difficile de suivre son trajet.


# teint / tain / thym
__conf_tain_teint_thym__
................................................................................

    >fond de [>tain|teints|>thym]
        <<- /conf/ -3>> teint                                       # Confusion.|https://fr.wiktionary.org/wiki/fond_de_teint

TEST: Elle l’a observé par un miroir sans {{teint}}.
TEST: Elle a acheté un nouveau fond de {{tain}}.









# tête / tète
__conf_tête_tète!6__
    [tète|tètes] [baissée|baissées|baissé|baissés]
    [tète|tètes] [haute|hautes|basse|basses]
    [tète|tètes] de [mule|linotte]
        <<- /conf/ -1>> =\1.replace("è", "ê").replace("È", "Ê")     # Confusion : “tète” est une forme conjuguée de “téter”. Pour la partie supérieure d’un corps, écrivez “tête”.
................................................................................

__purge_locutions__
    , [oui|non] ,
    , entre autres ?choses¿ ,
    à *NUM  %
    à ?seulement¿ [*NUM|$:B|quelques|plusieurs] [millimètres|centimètres|décamètres|mètres|kilomètres|verstes|lieues|UA|parsecs|années-lumière] de distance
    à [autrui|bâbord|califourchon|chacun|confesse|contrecœur|contre-cœur|contretemps|>demi-mot|foison|grand-peine|jamais|gogo|loisir|merveille|moitié|nouveau|outrance|peine|perpétuité|présent|raison|rallonge|rebrousse-poil|reculons|regret|renverse|risque|sec|tâtons|tire-d’aile|tire-larigot|tort|tribord|tout-va|vif]

    à air comprimé
    à angle droit
    à armes égales
    à aucun prix
    à autre chose
    à bas [cout|coût|prix]
    à bâtons rompus
................................................................................
    à l’ ordre du jour
    à l’ un d’ entre eux
    à l’ unanimité
    à l’ unisson
    à l’ une d’ entre elles
    à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle]
    à l’ étouffée

    à l’ évidence
    à l’ œil nu
    à l’ [un|une] des leurs
    à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée]
    à la bonne franquette
    à la limite du supportable
    à la lumière de tout [ceci|cela|ça]
................................................................................
    à [ma|ta|sa|notre|votre|leur] juste mesure
    à [mon|ton|son|notre|votre|leur] [avis|détriment|encontre|égard|insu|sujet|tour]
    à [mon|ton|son|notre|votre|leur] [cœur|corps] défendant
    à [mon|ton|son|notre|votre|leur] grand [désarroi|soulagement]
    à n’ en [pas|point] douter
    à n’ en plus finir
    à n’ importe quel prix
    à parler franc

    à part [entière|ça|cela|ceci]
    à parts égales
    à partir [de|d’]  {pronom_obj}
    à partir [de|d’]  [aujourd’hui|ici|là|maintenant|rien]
    à partir [de|d’]  [demain|hier]  ?[matin|midi|soir]¿
    à pas de [géant|loup|tortue|velours]
    à personne en danger
................................................................................
    à ras de terre
    à ras [bord|bords]
    à ras [le|du] sol
    à rude épreuve
    à s’ y méprendre
    à somme nulle
    à spectre ?[très|si]¿ large

    à tarif réduit
    à tarifs réduits
    à tel point
    à temps  [plein|partiel|complet]
    à tête reposée
    à tire d’ [aile|ailes]
    à [tire-d’aile|tire-d’ailes]
................................................................................
    avant toute chose
    avant toutes choses
    avant d’ aller plus loin
    avant J.-C.
    avant Jésus-Christ
    avant d’ en arriver là
    avant de faire quoi que ce soit
    avant de faire quoi que ce soit [de|d’] ?@:W¿ [absurde|stupide|crétin|con|idiot|inconsidéré]
    avant qu’ il ne soit trop tard
    avant un bon bout de temps
    avec [brio|constance|joie|légèreté|insistance|peine]
    avec autre chose
    avec le plus grand soin
    avec pertes et fracas
    avec un peu de chance
................................................................................
    bon gré ?,¿ mal gré
    bras dessus ?,¿ bras dessous
    çà et là
    ce faisant
    cependant
    [cela|ça|ceci] mis à part
    [cela|ça|ceci] va sans dire

    certes
    ces derniers temps
    cette [fois|fois-là|fois-ci]
    chaque fois
    ci-dessous
    ci-dessus

    comme avant
    comme autrefois
    comme d’ habitude
    comme toujours
    comme de juste
    comme bon [me|te|lui|leur|nous|vous] semble
    comme au bon vieux temps
    comme cul et chemise
    comme [frappé|frappée|frappés|frappées] par la foudre
    comme n’ importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau de chagrin
    comme promis
    comme qui dirait
................................................................................
    dans la mesure du possible
    dans leur globalité
    dans leur grande majorité
    dans les années ~^\d{2,5}$
    dans les [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires] à venir
    dans peu de temps
    dans tout [cela|ça|ceci]

    dans très peu de temps
    dans un cas comme dans l’autre
    dans une [certaine|large|moindre] mesure
    début {mois} ~^\d{2,5}$
    au début {mois} ~^\d{2,5}$
    en ce début {mois} ~^\d{2,5}$
    d’ abord
................................................................................
    désormais
    depuis $:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis *NUM [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis belle lurette
    depuis bien longtemps
    depuis [de|d’] ?[assez|très]¿ longues années
    depuis des lustres

    depuis la [première|dernière|~ième$] fois
    depuis les années ~^\d{2,5}$
    depuis ?[assez|très]¿ longtemps
    depuis lors
    depuis ?[assez|très]¿ peu de temps
    depuis quelque temps
    depuis quelques [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires]
................................................................................
    des [années|mois|siècles|millénaires|décennies|semaines] plus [tôt|tard]
    dès [longtemps|maintenant|lors|aujourd’hui]
    dès à présent
    dès que possible
    dès [demain|hier] ?[soir|matin|après-midi]¿
    Dieu [m’|t’|l’|nous|vous|les] en [garde|préserve]
    Dieu [m’|t’|lui|nous|vous|leur] en soit témoin

    du ~^[xXvViI]+[eᵉ]$ siècle
    du [Ier|Iᵉʳ|1er|1ᵉʳ] siècle
    du bout des lèvres
    du début à la fin
    du fond du cœur
    du jour au lendemain
    du haut en bas
................................................................................
    en ?[assez|très]¿ peu [de|d’] temps
    en ?[assez|très]¿ [piteux|piètre] état
    en point [de|d’] [mire|orgue]
    en porte-à-faux
    en position [de|d’] [force|faiblesse]
    en premier lieu
    en première [instance|ligne]

    en pure perte
    en quantité suffisante
    en quantité plus que suffisante
    en quelque sorte
    en queue [de|d’] peloton
    en rangs [dispersés|serrés]
    en rase campagne
................................................................................
    en tout bien tout honneur
    en tout [cas|genre|lieu|sens|temps]
    en tout et pour tout
    en tout état [de|d’] cause
    en tout premier lieu
    en toute bonne foi
    en toute connaissance [de|d’] cause
    en toute [circonstance|confiance|discrétion|franchise|hâte|impartialité|impunité|innocence|légalité|liberté|logique|sécurité|simplicité]
    en toutes circonstances
    en travers de la gorge
    en un claquement de doigts
    en un clin d’ œil
    en un rien [de|d’] temps
    en une autre occasion
    en vase clos

    en vitesse ?[subsonique|supersonique|subluminique|superluminique]¿
    en voie [de|d’] développement
    en y réfléchissant bien
    en [janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre] dernier
    en [mon|ton|son|leur|notre|votre] âme et conscience
    en [mon|ton|son|leur|notre|votre] for intérieur
    en [mon|ton|son|leur|notre|votre] nom propre
................................................................................
    hors d’ état [de|d’] [fonctionner|nuire]
    hors du commun
    ?d’¿ ici
    ?d’¿ ici [comme|ou] ailleurs
    ?d’¿ ici et [là|maintenant]
    ?d’¿ ici même
    ?d’¿ ici-bas

    ?d’¿ il y a ?très¿ longtemps
    ?d’¿ il y a ?très¿ peu [de|d’] temps
    ?d’¿ il y a quelques [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    ?d’¿ il y a moins [de|d’] [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    ?d’¿ il y a [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    ?d’¿ il y a quelque temps
    ?d’¿ il n’y a pas ?si¿ longtemps
................................................................................
    par [à-coups|ailleurs|avance|chance|conséquent|curiosité|contre|défaut|définition|endroits|essence|excellence|exemple|hasard|ici|inadvertance|là|moments|nature|principe|terre]
    par acquit [de|d’] conscience
    par [beau|mauvais] temps
    par bien des [aspects|côtés]
    par bonté [de|d’] [âme|cœur]
    par ce biais
    par certains [aspects|côtés]

    par gros temps
    par la même occasion
    par la suite
    par le passé
    par les temps qui courent
    par monts et par vaux
    par temps [de|d’] pluie
................................................................................
    sans autre forme [de|d’] procès
    sans commune mesure
    sans coup férir
    sans crier gare
    sans difficulté ?[apparente|aucune|financière|majeure|particulière]¿
    sans dire mot
    sans en avoir conscience

    sans [m’|t’|s’|nous|vous] en apercevoir
    sans [m’|t’|s’|nous|vous] en rendre compte
    sans [m’|t’|s’|nous|vous] faire [avoir|comprendre|désirer|prier|remarquer]
    sans faire [de|d’] vagues
    sans foi ?,¿ ni loi
    sans le faire exprès
    sans le vouloir
................................................................................
    sans l’ aide [de|d’] personne
    sans l’ ombre d’ un doute
    sans mot dire
    sans nul doute
    sans pour autant y [parvenir|réussir|réfléchir|songer|penser]
    sans pour autant y faire attention
    sans pour autant y prendre [garde|goût|gout]

    sans [que|qu’] je le [sache|susse]
    sans [que|qu’] tu le [saches|susses]
    sans [que|qu’] [il|elle|on|$:M] le [sache|sût]
    sans [que|qu’] nous le [sachions|sussions]
    sans [que|qu’] vous le [sachiez|sussiez]
    sans [que|qu’] [ils|elles] le [sachent|sussent]
    sans queue ni tête
    sans raison apparente
    sans répit

    sans vouloir [me|m’|te|t’|lui|nous|vous|leur] manquer de respect
    sans y [parvenir|réussir|réfléchir|songer|penser]
    sans y [réfléchir|songer|penser] à [deux|2] fois
    sans y faire attention
    sans y prendre [garde|goût|gout|ombrage]
    sans états d’ âme
    sauf >erreur [de|d’] [ma|ta|sa|notre|votre|leur] part
    secondo
    selon toute vraisemblance
    sens dessus dessous
    >seule à >seule

    si [bas|haut|longtemps|nécessaire|possible|soudain]
    si [cela|ça|ceci] ne tenait qu’ à [moi|toi|lui|eux|elle|elles|nous|vous]
    si besoin est
    si le besoin s’en [fait|faisait] sentir
    si le besoin [doit|devait] s’en faire sentir
    si tel est le cas
    sine die
................................................................................
    une fois [de|d’] plus
    une fois n’ est pas coutume
    une fois pour toutes
    urbi et orbi
    vaille que vaille
    ventre à terre
    vers nulle part
    vite
    vite fait ?,¿ bien fait

    volontiers
        <<- ~>> *


__purge_x_par_après_x__
    un par un
    une par une
................................................................................
    à la [hauteur|portée|suite]                                                                                                                 [de|du|d’|des]
    à la grande surprise                                                                                                                        [de|du|d’|des]
    à [quelques|plusieurs] [mètres|kilomètres|lieues|pas|minutes|heures]                                                                        [de|du|d’|des]
    à [quelques|plusieurs] [dizaines|centaines|milliers] de [mètres|kilomètres]                                                                 [de|du|d’|des]
    à [base|force|raison]                                                                                                                       [de|d’]
    à grand renfort                                                                                                                             [de|d’]
    à grands coups                                                                                                                              [de|d’]
    à seule fin                                                                                                                                 [de|d’]
    au [bout|courant|cours|détriment|fond|gré|lieu|long|large|milieu|nord|profit|ras|sein|sommet|sortir|sud|sujet|vu]                           [de|du|d’|des]
    au beau milieu                                                                                                                              [de|du|d’|des]
    au fin fond                                                                                                                                 [de|du|d’|des]
    au grand dam                                                                                                                                [de|du|d’|des]
    au plus profond                                                                                                                             [de|du|d’|des]
    au fur et à mesure                                                                                                                          [de|du|d’|des]
    au vu et au su                                                                                                                              [de|du|d’|des]
................................................................................

    jamais
        <<- not morph(<1, ">ne") ~>> *

    la une [de|des|du]
        <<- ~2>> _

    l’ impression que
        <<- ~1>> _

    l’ étrange impression que
    la [nette|bizarre] impression que
        <<- ~2:3>> _

    le pour et le contre
        <<- ~>> ␣
        <<- =>> define(\1, [":LN:m:p"])

    le [pressentiment|sentiment] [que|qu’]
................................................................................
        <<- ~2:0>> *

    pour ou contre
        <<- ~2:0>> *

    qui ce      [jour-là|matin-là|après-midi-là|soir-là|mois-là|siècle-là|millénaire-là]
    qui cette   [nanoseconde-là|milliseconde-là|seconde-là|minute-là|heure-là|nuit-là|matinée-là|soirée-là|journée-là|semaine-là|année-là|décennie-là]
    qui à part [moi|toi|lui|elle|nous|vous|eux|elles
    qui d’ autre à part [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- ~2:0>> *

    plus avant ~¬^(?:de|d’|que|qu’)$
        <<- ~1:2>> *

    rien comparé à
................................................................................

    une fois
        <<- ~>> _

    vent debout contre
        <<- ~1:2>> *

    je      [t’|vous]   en  [prie|supplie]
    nous    [t’|vous]   en  [prions|supplions]
        <<- ~>> *






# Déterminant + nombre
__p_dét_plur_nombre_nom__
    [les|des|mes|tes|ses|nos|vos|leurs]  ~^\d+$  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
        <<- ~2>> *

................................................................................

    au  moins  @¬:[AQ].*:[me]:[si]
        <<- ~1:2>> *

    au hasard  @:¬:[AQ].*:[me]:[si]
        <<- ~1:2>> *

    aussi @:W que [nécessaire|possible]
        <<- ~>> *

    aussi @:W que ce soit [<end>|,]
        <<- ~1:5>> *

    au sens le [plus|moins] @:A.*:[me]:[si] du terme
    au sens @:A.*:[me]:[si] du terme
        <<- ~>> *

    ailleurs que chez [moi|toi|soi|lui|elle|nous|vous|eux|elles]
................................................................................

    hélas
        <<- not morph(<1, ":(?:X|Oo)") and not tag_before(\1, "2s") ~>> *

    la lettre [a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]  @:(?:3s|Ov)
        <<- ~3>> *

    le [plus|moins] @:W possible
        <<- ~>> *

    les [moins|plus] @:A.*:[pi] possible
        <<- ~-1>> *

    mais
        <<- not morph(<1, ":(?:D.*:p|N|V)") ~>> *
................................................................................

    nombre [de|des]
        <<- morph(<1, ":(?:R|C[sc])") ~1>> *

    non @:A
        <<- not morph(<1, ":D.*:m:[si]") ~1>> *

    par trop @:A
        <<- ~1:2>> *

    pas mal
        <<- not morph(<1, ":D") ~>> *

    pas assez *WORD
        <<- morph(\3, ":[AW]") and not morph(<1, ":D") ~>> *
................................................................................

    pêle-mêle
        <<- not morph(<1, ":D.*:[me]") ~>> *

    plein est
        <<- not morph(<1, ":D.*:m:[si]") ~>> *

    [plus|moins|aussi] @:W que prévu
        <<- ~>> *

    plus que tout autre @¬:[AQ].*:m:[si]
        <<- ~1:4>> *

    [plus|moins|aussi]  @:[AW]¬:G   que [les|nous|vous] autres
    [plus|moins|aussi]  @:[AW]¬:G   que l’ autre
................................................................................
#<end>
#@:[VR]¬[NAP]
#, @¬:[NA]
#[ne|n’|me|m’|te|t’|se|s’|le|la|l’|les|leur|leur|mon|ma|ta|sa|notre|votre|mes|tes|ses|ce|cet|cette|ces|je|j’|tu|il|on|nous|vous|ils|ça|ceci|cela|c’|ç’|chaque]


__simplication_substantifs__

    >acte [de|d’] [baptême|caution|cautionnement|cession|contrition|licitation|mariage|naissance|notoriété|propriété|quittance|reconnaissance|répudiation|vente]
    >acte d’ [achat|engagement]
    >acte de gestion ?courante¿
    >acte de procédure ?pénale¿
    >acte d’ état ?civil¿
    >administratrice >système
    >agence de >voyage
    >aire d’ atterrissage
    >animal [de|d’] compagnie
    >appel au secours

    >arc à poulies
    >arme à feu
    >armée [de|d’] l’ air
    >armée [de|d’] terre
    >armer jusqu’ aux dents
    >arme [de|d’] [poing|guerre]
    >arme [de|d’] destruction massive
    >armoire à [>glace|>pharmacie]
    >argent [de|d’] poche
    >arnaque à l’ assurance
    >article [de|d’] presse

    >attaque à main armée
    >attestation sur l’ honneur
    >atteinte aux bonnes mœurs
    >attendre [de|d’] pied ferme
    >avion à [>hélice|réaction]
    ayants droit
    >bandit [de|d’] grand chemin
................................................................................
    >boucle d’ >oreille
    bras d’ honneur
    >brave ?d’¿ entre les braves
    >brosse à [>dent|reluire]
    >cabinet [de|d’] [toilette|travail]
    >camp [de|d’] [concentration|internement|rééducation|vacances]
    >canne à [pêche|sucre]

    >caisse à >outil
    >carton d’ emballage
    >centre d’ éducation [populaire|surveillée]
    >chair à [pâté|>canon]
    >chair [de|d’] poule
    >chambre à coucher
    >chambre [de|d’] [agriculture|hôte|hôtel|hôtes|commerce|compensation|décompression|dégrisement]
................................................................................
    >chili con carne
    >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿
    >claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source]
    >claire comme du cristal
    >claire comme jus [de|d’] [boudin|>chaussette|chique]
    [>clé|>clef] à molette
    >clin d’ œil

    >code [de|d’] bonne conduite
    >commise d’ office
    >compagne [de|d’] route
    >compagnon [de|d’] route
    >complémentaire santé
    >compte à rebours

    >condamnée à mort
    >conférence [de|d’] presse
    >convention [récepteur|générateur]
    >conne comme la lune
    >conne comme un balai
    >conne comme une valise sans >poignée
    >contrôle [de|d’] routine
................................................................................
    [cousu+ses] [main]
    [cousu+ses] [de|d’] fil blanc
    >crayon à [lèvres|sourcils]
    >cour d’ assises
    [>coût|>cout] [de|d’] revient
    >couteau à cran d’ arrêt
    >cuillère à [café|soupe]

    >déclaration sur l’ honneur
    >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur]
    >demande d’ asile
    >descente aux [enfers|flambeaux]
    [>dîner|>diner] aux chandelles
    >digne [de|d’] [confiance|foi]
    >digne [de|d’] ce nom
................................................................................
    >file d’ attente
    >fille à [papa|maman|>soldat]
    >fille au pair
    fils à [papa|maman]
    fils [de|d’] pute
    >flocon [de|d’] neige ?électronique¿
    >folle à lier

    >fosse à >ordure
    >fosse aux lions
    [>fourgon|>fourgonette] de location
    >frayeur [de|d’] tous les diables
    >frousse [de|d’] tous les diables
    >fusil à pompe
    >gilet de sauvetage
    >hall d’ entrée
    >haute comme [trois|3] pommes

    >histoire avec un [grand|petit] h
    >homme [de|d’] [affaires|armes|confiance|exception|État|Église|honneur|lettres|loi|main|paille]
    >homme d’ âge mûr
    >homme à tout faire
    >hôtel [de|d’] ville
    >hôtesse d’ accueil
    >garde à vue
................................................................................
    >lettre [de|d’] recommandation
    >lampe à [huile|pétrole]
    >lampe [de|d’] chevet
    >lavage de cerveau
    >liaison sans lendemain
    >lime à >ongle
    >liste d’ attente

    >lit [de|d’] camp
    >livraison à domicile
    >livre [de|d’] poche


    >lune [de|d’] miel
    >machine à [café|coudre|écrire|laver|sous|voter]
    >machine à remonter le temps
    >machine [de|d’] guerre
    >maillot [de|d’] bain
    >main d’ œuvre
    >maison [de|d’] [passe|retraite]
................................................................................
    >matière à réflexion
    >médecin [de|d’] garde
    >mère au foyer
    >metteuse en scène
    >mineure [de|d’] moins [de|d’] *NUM ans
    >mineure [de|d’] moins [de|d’] $:B ans
    >miroir aux alouettes
    >mode [de|d’] [paiement|scrutin|vie]
    >monnaie [de|d’] [échange|réserve|singe]
    >montre à gousset
    >mot [de|d’] passe
    >motrice [>essence|>diésel|>diesel]
    >motion [de|d’] [blâme|censure|défiance]
    >moule à [>gaufre|>gâteau|brioche|manqué|savarin|charlotte|tarte]
    >moulin à [café|eau|paroles|poivre|prières|vent]
................................................................................
    >planche [de|d’] salut
    >planche à repasser
    >pleine aux as
    >police [de|d’] [caractères|écriture]
    >politique spectacle
    >pomme [de|d’] [discorde|terre|reinette|pin|Adam|api|amour|ambre|eau|or]
    >pompe à [chaleur|essence|fric]
    >porte [de|d’] [service|garage|sortie]
    >porte d’ entrée
    >pot [de|d’] [chambre|colle]
    >poudre aux yeux
    >presse à >scandale
    preuve ?suffisante¿ du contraire
    preuves ?suffisantes¿ du contraire
    prix [de|d’] revient
................................................................................
    >table de chevet
    >taille *NUM
    tas [de|d’] >ferraille ?rouillée¿
    >talon >aiguille
    taux [de|d’] [abstention|absorption|alcool|alphabétisation|endettement|inflation|intérêt|imposition|occupation|ouverture|œstrogène|urée|usure|change|cholestérol|cholesterol|glycémie|fécondité|participation|testostérone|TVA]
    >témoin à charge
    >ténor du barreau

    >tête [de|d’] [linotte|déterré|déterrée|déterrés|déterrées|mule]
    >têtue comme une [bourrique|mule]
    >têtue comme un [âne|bourriquot|mulet]
    >terrain à découvert
    >tigre à dents [de|d’] sabre

    >titre [de|d’] [noblesse|propriété|séjour]
    >tondeuse à gazon
    >tour [de|d’] passe-passe
    >train à grande vitesse
    >traitement [de|d’] faveur
    >transport en commun
    >trou à >rat
................................................................................
    >calibre . *NUM ?[acp|auto|brenneke|browning|british|colt|court|H&K|magnum|mauser|otan|remington|parabellum|russian|S&W|sig|soviet|special|wcf|wsm|winchester]¿
    >calibre . *NUM long rifle
    >calibre *NUM ?[mm|in]¿
    >calibre *NUM [*|×] *NUM ?[mm|in]¿
        <<- ~2:0>> *
        <<- =>> =select(\1, ":N")
















__purge_locutions_adjectivales__

    bas de gamme
    basse consommation
    bon [enfant|marché|teint]
    bon chic ?,¿ bon genre
    [>clé|>clef] en >main
    dernier cri
    fleur bleue
................................................................................
    grande taille
    grandeur nature
    haut de gamme
    haute [résolution|fidélité|tension]
    hors service
    longue [conservation|distance|portée|durée]
    meilleur marché
    nouvelle génération
    numéro un
    numéro $:B
    plein cadre
    top secret
    vieux jeu
    open source
    Créative Commons
................................................................................
        <<- morph(<1, ":(?:N|A|Q|W|V0e)", ":D") ~>> *


__purge_couleurs__
    [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent] [brillant|clair|criard|fluo|foncé|irisé|mat|pâle|pastel|sale|sombre|tendre|terne|vif]
    [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent] et [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent]
    blanc   [argenté|cassé|lunaire]
    bleu    [acier|argenté|azur|céleste|ciel|électrique|givré|indigo|marine|nuit|outremer|outre-mer|persan|pétrole|roi|saphir|turquin|turquoise]
    blond   [argenté|platine]
    gris    [acier|anthracite|argenté|fer|perle|souris]
    jaune   [canari|citron|doré|maïs|paille|sable]
    noir    [de|d’] [encre|jais]
    noir    et blanc
    noir    sur blanc
    rose    [bonbon|chair|corail]
................................................................................
        <<- morph(\2, ":M") and not before("\\b(?:plus|moins|aussi) .* que +$")
        ~2:4>> =rewriteSubject(\2,\4) + "||"

    <start>  ~^[A-ZÉÈÊ]  et  [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- morph(\2, ":M")
        ~2:0>> =rewriteSubject(\2,\4) + "||"

























__purge_après_être__
    [>être|>devenir|>rester] [bon|meilleur] marché
    [>être|>devenir|>rester] cousin et cousine
    [>être|>devenir|>rester] de passage
    [>être|>devenir|>rester] frère et sœur
    [>être|>devenir|>rester] mari et femme
................................................................................
        <<- =>> define(\3, [":LV"])

    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ avant tout
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ du moins
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ en partie
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ somme toute
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ sous peu
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ un jour
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ à jamais
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point]
        <<- ~2:0>> *

    /VCint [bon|meilleur] marché
    /VCint cousin et cousine
................................................................................
        <<- __also__ =>> define(\3, [":LV"])

    /VCint ?[pas|jamais|plus|guère|point]¿ avant tout
    /VCint ?[pas|jamais|plus|guère|point]¿ du moins
    /VCint ?[pas|jamais|plus|guère|point]¿ en partie
    /VCint ?[pas|jamais|plus|guère|point]¿ somme toute
    /VCint ?[pas|jamais|plus|guère|point]¿ sous peu
    /VCint ?[pas|jamais|plus|guère|point]¿ tous [deux|trois]
    /VCint ?[pas|jamais|plus|guère|point]¿ un jour
    /VCint ?[pas|jamais|plus|guère|point]¿ à jamais
    /VCint [pas|jamais|plus|guère|point]
        <<- morphVC(\1, ">(?:être|devenir|rester)") ~2:0>> *

    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ beaucoup
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ bien [entendu|sûr]
................................................................................
    plus que
        <<- morph(<1, ":(?:V0e|N)") and morph(>1, ":[AQ]") ~>> *


__purge_après_avoir__
    >avoir  [pas|jamais|plus|guère|point]
    >avoir  ?[pas|jamais|plus|guère|point]¿  en partie
    >avoir  ?[pas|jamais|plus|guère|point]¿  tous [deux|trois]
    >avoir  ?[pas|jamais|plus|guère|point]¿  somme toute
        <<- ~2:0>> *

    >avoir  ?[pas|jamais|plus|guère|point]¿  beaucoup
    >avoir  ?[pas|jamais|plus|guère|point]¿  bien [entendu|sûr]
    >avoir  ?[pas|jamais|plus|guère|point]¿  dans [leur|l’|son] ensemble
    >avoir  ?[pas|jamais|plus|guère|point]¿  à cet [instant|endroit] ?précis¿
................................................................................
    >avoir  ?[pas|jamais|plus|guère|point]¿  un [moment|instant]
    >avoir  ?[pas|jamais|plus|guère|point]¿  un minimum
    >avoir  ?[pas|jamais|plus|guère|point]¿  un peu
    >avoir  ?[pas|jamais|plus|guère|point]¿  un petit peu
    >avoir  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
        <<- morph(>1, ":[QY]") ~2:0>> *

    >avoir  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
    >avoir  bon dos
    >avoir  bon pied ?,¿ bon œil
    >avoir  carte blanche
    >avoir  forme [humaine|animale]
    >avoir  partie [gagnée|liée]
    >avoir  voix au chapitre
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":LV"])

    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
    >avoir  [pas|jamais|plus|guère|point]  bon dos
    >avoir  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    >avoir  [pas|jamais|plus|guère|point]  carte blanche
    >avoir  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    >avoir  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    >avoir  [pas|jamais|plus|guère|point]  quartier libre
    >avoir  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- ~3:0>> ␣
        <<- =>> define(\3, [":LV"])

    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  @:(?:Q|V1.*:Y)
        <<- ~2:-2>> *

    n’  >avoir  que  $:Q
        <<- ~3>> *

    n’  >avoir  que  $:W  $:Q
................................................................................
        <<- ~3:4>> *

    n’  >avoir  que  [peu|très|trop]  $:W  $:Q
        <<- ~3:5>> *

    /VCint  [pas|jamais|plus|guère|point]
    /VCint  ?[pas|jamais|plus|guère|point]¿  en partie
    /VCint  ?[pas|jamais|plus|guère|point]¿  tous [deux|trois]
    /VCint  ?[pas|jamais|plus|guère|point]¿  somme toute
        <<- morphVC(\1, ":V0a") ~2:0>> *

    /VCint  ?[pas|jamais|plus|guère|point]¿  beaucoup
    /VCint  ?[pas|jamais|plus|guère|point]¿  bien [entendu|sûr]
    /VCint  ?[pas|jamais|plus|guère|point]¿  dans [leur|l’|son] ensemble
    /VCint  ?[pas|jamais|plus|guère|point]¿  à cet [instant|endroit] ?précis¿
................................................................................
    /VCint  ?[pas|jamais|plus|guère|point]¿  un [moment|instant]
    /VCint  ?[pas|jamais|plus|guère|point]¿  un minimum
    /VCint  ?[pas|jamais|plus|guère|point]¿  un peu
    /VCint  ?[pas|jamais|plus|guère|point]¿  un petit peu
    /VCint  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
        <<- morphVC(\1, ":V0a") and morph(>1, ":[QY]") ~2:0>> *

    /VCint  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
    /VCint  bon dos
    /VCint  bon pied ?,¿ bon œil
    /VCint  carte blanche
    /VCint  forme [humaine|animale]
    /VCint  partie [gagnée|liée]
    /VCint  voix au chapitre
        <<- morphVC(\1, ":V0a") ~2:0>> ␣
        <<- __also__ =>> define(\2, [":LV"])

    /VCint  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
    /VCint  [pas|jamais|plus|guère|point]  bon dos
    /VCint  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    /VCint  [pas|jamais|plus|guère|point]  carte blanche
    /VCint  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    /VCint  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    /VCint  [pas|jamais|plus|guère|point]  quartier libre
    /VCint  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- morphVC(\1, ":V0a") ~3:0>> ␣
        <<- __also__ =>> define(\3, [":LV"])

    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|soif|vent]
    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  @:(?:Q|V1.*:Y)
        <<- morphVC(\1, ":V0a") ~2:-2>> *


__purge_après_verbe__
    $:V  ?pas¿  jour et nuit
    $:V  ?pas¿  nuit et jour
................................................................................
        <<- not morph(<1, ":R|>d’/") ~1:2>> *

    vu les circonstances  @¬:A:[fe]:[pi]
        <<- ~1:3>> *


__purge_tous_deux_trois__
    >faire tous [deux|trois]
        <<- ~2:0>> *

    >faire tous
        <<- morph(\1, ":[123]p") or (\1 == "fait" and value(<1, "|on|")) ~2>> *


# tous / tout / toute / toutes
................................................................................
    [<start>|,]  $:D  *WORD  *WORD  [ne|n’|me|m’|te|t’|se|s’]
    [<start>|,]  $:D  *WORD  *WORD  [en|nous|vous|lui|y]                    @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les|leur]                     @:(?:[123][sp]|P)¬:[NA]
    [<start>|,]  $:D  *WORD  *WORD  [nous|vous]     [le|la|l’|les|en|y]     @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les]  [lui|leur|en|y]         @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  [lui|leur|y]    en                      @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  @:(?:3[sp]|P)¬:[GW]
        <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":(?:[PG]|V0)") =>> exclude(\4, ":V")

    [des|ces|mes|tes|ses|nos|vos|quelques|lesdits]  @:A.*:[pi]  @:N.*:[pi]¬(?:3[sp]|G)
        <<- =>> exclude(\3, ":V")

    les  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
        <<- not before(":O[vs]") =>> exclude(\3, ":V")

    leurs  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
        <<- not before(":O[vs]") =>> exclude(\3, ":V")

    [plusieurs|certains|certaines]  @:A.*:[pi]¬:3[sp]  @:N.*:p¬:(?:3[sp]|G)
        <<- =>> exclude(\2, ":V") and exclude(\3, ":V")







__purge_locutions_verbales__
    >aller bon train
    >arriver à [destination|échéance]
    >arriver à point nommé
    >arriver à bon port
    >battre à plate couture
    >battre en [brèche|retraite]
    [>brûler|>bruler] à vif

    >chauffer à blanc
    >compter à rebours
    >condamner à mort
    >couler à ?grands¿ flots
    >demander [assistance|audience|conseil|pardon]
    [>donner|>redonner] [naissance|sens|suite|vie]
    [>donner|>redonner] quartier libre
    >élire domicile
    >étouffer dans l’ œuf
    >faire [allusion|assaut|attention|chaud|confiance|connaissance|compliqué|copain-copain|date|débat|défaut|demi-tour|écran|envie|erreur|état|exception|figure|foi|fortune|froid|front|grève|halte|honte|illusion|mention|mouche|office|part|peur|polémique|plaisir|preuve|rage|rempart|scandale|sens|signe|usage|volte-face]
    >faire amende honorable
    >faire bande à part
    >faire bon accueil
    >faire bonne figure
    >faire chou blanc
    >faire copain copain
    >faire de [mon|ton|son|notre|votre|leur] mieux
................................................................................
    >prendre par surprise
    >prêter à confusion
    >prêter main forte
    >prêter main-forte
    >réduire en miettes
    >remettre en cause
    >rendre [hommage|service|visite]

    >rester lettre morte
    >rester lettres mortes
    >revenir à la case départ
    >saigner à blanc
    >suivre ?[ça|cela|ceci]¿ de près
    >tenir à [carreau|cœur]
    >tenir ?[ça|cela|ceci]¿ à distance ?respectable¿
................................................................................
    >tenir [compte|compagnie]
    >tenir au courant
    >tenir en haute estime
    >tirer à blanc
    >tomber à [pic|point]
    >trier sur le volet
    >trouver refuge

    >tirer [avantage|profit]
    >tourner à l’ aigre
    >tourner court
    >venir à bout
    [>venir|>revenir] je [ne|n’] sais ?pas¿ ?trop¿ d’ où
    [>venir|>revenir] on [ne|n’] sait ?pas¿ ?trop¿ d’ où
        <<- ~2:0>> *
................................................................................

__conf_locutions_verbales__
    >arriver a [destination|échéance]
    >arriver a point nommé
    >arriver a bon port
    >battre a plate couture
    [>brûler|>bruler] a vif

    >chauffer a blanc
    >fermer a [>clé|>clef]
    [>gonfler|>regonfler] a bloc
    >jeter a terre
    [>mettre|>remettre] a [bas|>flot|>jour|>niveau|>nu|>nue|>plat|>terre]
    [>mettre|>remettre] a l’ [écart|épreuve]
    >percer a jour
    >prendre a la légère
    >prêter a >confusion
    >saigner a blanc
    >tenir a [carreau|cœur|distance]
    >tirer a blanc
    >tomber a [pic|point]

    >tourner a l’ aigre
    >venir a bout
    [>venir|>revenir] a point
        <<- /conf/ -2>> à               # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.






    >faire plaisirs
        <<- /sgpl/ --1>> plaisir        # Faire plaisir : dans cette locution, “plaisir” doit être au singulier.
        <<- ~-1>> *

    >laisser pour [comte+s|>conte]
        <<- /conf/ --1>> compte         # Confusion. Locution “laisser pour compte”.|https://fr.wiktionary.org/wiki/laisser_pour_compte

    [>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne
        <<- /conf/ -2>> jeune           # Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune

    >partir en >couille
        <<- /conf/ -3>> quenouille|vrille   # Confusion. La locution “partir en couille” est un barbarisme. Locution authentique : “partir/tomber en quenouille”. Peut-être voulez-vous dire “partir en vrille” ?|https://fr.wiktionary.org/wiki/partir_en_quenouille

    >rendre ?bon¿ [comte|comtes|>conte|comptes]
        <<- /conf/ --1>> compte         # Confusion. Locution “rendre compte”.|https://fr.wiktionary.org/wiki/rendre_compte
................................................................................
        <<- /conf/ -1>> =\1.replace("omp", "on").replace("OMP", "ON")   # Confusion. Locution “conter fleurette”.|https://fr.wiktionary.org/wiki/conter_fleurette

TEST: ce contrat arrive {{a}} échéance.
TEST: il faut tenir {{contes}} des faits au lieu de nos impressions.
TEST: prendre {{a}} la légère ce test serait une erreur.
TEST: on va suivre ça de {{prêt}}.
TEST: il faut se tenir {{a}} distance de ces gens-là.

TEST: cette expérience ne va pas tarder à tourner {{cours}}.
TEST: il faut rendre {{comte}} de la sitation désastreuse dans laquelle nous sommes tombés.
TEST: il faut tenir {{comtes}} des aléas de la météo.
TEST: faudra rendre bon {{conte}} de vos actes
TEST: Elle est restée {{jeûne}}.
TEST: Mourir {{jeûne}} ne lui faisait pas peur.
TEST: elle suit ça de {{prêt}}
................................................................................
TEST: La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être
TEST: un moteur nouvelle génération
TEST: La première est la critique dite artiste
TEST: la critique conduit nombre de protestataires à se replier sur des modalités de défense efficaces dans le passé mais désormais largement inadaptées
TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ?
TEST: « L’école produit la norme en matière de langage »
TEST: Parler affaires.






@@@@
@@@@
@@@@
@@@@
................................................................................
@@@@END_GRAPH                                                                                      _
@@@@
@@@@
@@@@
@@@@


#
# //////////////////////////////////////// RÈGLES DE CONTRÔLE ////////////////////////////////////////
#


!!!! Redondances dans la phrase                                                                   !!

__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
        <<- not morph(\1, ":(?:G|V0)|>même/") -2>> _                                                # Dans cette phrase, répétition de “\1” (à gauche).
        <<- __also__ -1>> _                                                                         # Dans cette phrase, répétition de “\1” (à droite).
................................................................................
TEST: l’amour {{immortels}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’étonnant {{colliers}} qu’il avait autour du cou.


__gn_le_1m__
    ,  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2)           # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    *WORD  le  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
            or ( morph(\3, ":[NA].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> =suggLesLa(\2)                                                                         # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", "*")
            or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggMasSing(\3)                                                                       # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    <start>  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2)                     # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

TEST: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
TEST: j’en ai marre, {{le}} {{passée}} est trop dans les esprits
TEST: {{Le}} démoralisation.                                  ->> La
TEST: {{Le}} Guyane française.                                ->> La

TEST: avec {{le}} {{pile}}
TEST: contre {{le}} {{rois}}
TEST: {{le}} {{publique}}
TEST: {{Le}} {{pendue}}
TEST: {{Le}} personne répond.
TEST: {{le}} {{quotients}}
TEST: Comme avec l’Hyperloop, le bus chinois conçu pour passer au-dessus des voitures
................................................................................
    des  *WORD  *WORD
        <<- /gn/ (morph(<1, ":(?:[VRBX]|Cs)|>comme/|<start>|>,", "*") or morph(\3, ":N", ":[AQ]")) and not \3.startswith("seul") >>>
        <<- /gn/ ( (morph(\2, ":[NA].*:m", ":[fe]") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":[me]") and morph(\3, ":[NA].*:m", "*")) ) and not apposition(\2, \3)
        -3>> =switchGender(\3, True)                                                                # Accord de genre erroné avec « \2 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 # Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
        <<- checkAgreement(\2, \3) =>> =exclude(\3, ":V")

TEST: faire table rase des passions {{inutile}}               ->> inutiles
TEST: à bonne distance des {{chiens}} {{méchante}}
TEST: des hommes {{attaquée}}
TEST: des femmes {{agressé}}
TEST: des hommes très mal {{renseigné}}                       ->> renseignés
TEST: des dépenses non {{nécessaire}}                         ->> nécessaires
................................................................................

TEST: Des yeux {{vert}}.
TEST: Des yeux {{marrons}}.
TEST: Des créatures marines.
TEST: Un cageot des premières cerises.


__sgpl_couleurs_composées__
    [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>vermeille] [>brillante|>claire|>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>vive]
    [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>vermeille] [foncé+ses|irisé+ses]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
        ->> =suggSing(\1) + " " + suggSing(\2)





        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    >jaune [>paille|>sable]
    >rose  [>bonbon|>chair|>corail]
    >rouge [>brique|>carmine|>cerise|>écarlate|rubis|>sang|>tomate|>vermillon]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
        ->> =suggSing(\1) + " " + suggSing(\2)
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [>brillante|>claire|>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>vive]
    [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [foncé+ses|irisé+ses]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
        ->> =suggMasSing(\1) + " " + suggSing(\2)
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    >bleue [>ciel|>indigo|>marine|>roi|>saphir|>turquoise|>verte]
    >blonde >platine
    >grise [>acier|>anthracite|>perle|souris]
    >verte [>émeraude|>olive|>pistache|>pomme]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
................................................................................
        ->> =suggMasSing(\1) + " " + suggSing(\2)
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    >noire [de|d’] [encre|jais]
        <<- /sgpl/ not morph(<1, ":D") -1>> noir
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

TEST: les chapeaux {{rouges clairs}}
TEST: des chaussures {{jaunes sables}}
TEST: des pantalons {{verts clairs}}
TEST: des robes {{bleues indigo}}

TEST: Une jupe {{bleue foncée}}.




TEST: Des cheveux {{noirs}} de jais.
TEST: Une jupe bleu foncé.
TEST: Des yeux vert clair.
TEST: Des yeux vert olive.
TEST: Ses cheveux étaient noir de jais.





!!
!!
!!!! Singuliers & Pluriels                                                                        !!
!!
................................................................................
TEST: On va procéder par {{intervalle}}


# juste
__sgpl_juste__
    justes
        <<- /sgpl/ \1.islower() and morph(<1, ":V", ":[DA]") and not morph(>1, ":[NA].*:[pi]")
            and not (morph(<1, ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre)/.*:[123]p") and morph(>1, ":G|<end>|>,/"))
        ->> juste                                                   # Si “juste” est un adverbe, il est invariable.

TEST: Viser {{justes}}
TEST: Voir {{justes}}.
TEST: Penser juste.
TEST: Dures mais justes.
TEST: J’ai retrouvé tout mon ressenti, tous les mots sont justes.
TEST: Nos chiffres sont justes, et nous vous le prouverons.
TEST: Ces observations sont tellement justes que, dans les années à venir, elles serviront de référence.
TEST: Les motivations sont justes et évidentes
TEST: ces théories incomplètes sont suffisamment justes pour prédire la réalité



# pied
__sgpl_pied__
    [>avoir|>perdre]  pieds
        <<- /sgpl/ -2>> pied                                        # Locution “\1 pied” : écrivez “pied” au singulier.

................................................................................
    [>pouvoir|>vouloir|>falloir] [rires|mangers|êtres|avoirs]
        <<- /sgpl/ morph(\1, ":V") -2>> =\2[:-1]                    # Si “\2” est censé être un verbe, ne mettez pas la marque du pluriel.


TEST: On peut {{rires}}, non ?
TEST: Faire {{rires}}, c’est compliqué.










































!!
!!
!!!! Confusions                                                                                   !!
!!
!!
................................................................................
TEST: Un film {{dénudé}} de tout intérêt.
TEST: Une personne {{dénudée}} de toute compassion.
TEST: Une histoire {{dénudée}} d’intérêt.
TEST: Des hommes {{dénudés}} de compassion.


# desceller / déceler / desseller
__erreur_déceler_desseller_desceller__
    [>erreur|>faute|>incohérence|>problème|>bug|>bogue|>faille|>maladie|>défaut|>défaillance|>perturbation|>irrégularité] <> [>desseller|>desceller]
        <<- /conf/ --1>> =\-1.replace("escell", "écel").replace("essell", "écel")
        # Confusion probable si ce verbe se rapporte à “\1”. Desceller signifie briser un sceau, un cachet… Desseller signifie ôter une selle. Si vous voulez dire “remarquer”, “dévoiler”, “découvrir”, écrivez “déceler”.|http://fr.wiktionary.org/wiki/déceler

    [>desseller|>desceller] [l’|@:[BD]] [>petite|>grande|>énorme|>dangeureuse|>formidable|>forte|>légère|>merveilleuse|>nouvelle|>vrai|>réelle|>sévère|>véritable] [>acidité|>activité|>allergie|>anévrisme|>anomalie|>arnaque|>appendicite|>atrophie|>baisse|>bébé|>blessure|>bug|>bogue|>carie|>cancer|>cause|>changement|>complot|>comète|>concentration|>corrélation|>croissance|>défaut|>défaillance|>demande|>dépression|>diabète|>différence|>diminution|>effluve|>épilepsie|>erreur|>essai|>existence|>grossesse|>grosseur|>faille|>faute|>fuite|>fraude|>grippe|>handicap|>hausse|>hémorragie|>hostilité|>hypertrophie|>incompatibilité|>incohérence|>infection|>infraction|>indice|>infidélité|>insuffisance|>intrigue|>irrégularité|>leucémie|>lésion|>lueur|>lumière|>maladie|>malformation|>manœuvre|>manipulation|>molécule|>mensonge|>mutation|>once|>perturbation|>personnalité|>piste|>perte|>planète|>exoplanète|>présence|>qualité|>odeur|>opportunité|>otite|>problème|>surdité|>talent|>tendance|>tentative|>tumeur|>utilisation|hoax|>variation|>vie|virus]
        <<- /conf/ -1>> =\1.replace("escell", "écel").replace("essell", "écel")
        # Confusion probable si ce mot se rapporte à “\3 \4”. Desceller signifie briser un sceau, un cachet… Desseller signifie ôter une selle.|http://fr.wiktionary.org/wiki/déceler
................................................................................
# éminent / imminent
__conf_éminent_imminent__
    >imminente [>actrice|>confrère|>collègue|>dirigeante|>dissidente|>entrepreneuse|>experte|>défenseuse|>intellectuelle|>mathématicienne|>musicienne|>pédiatre|>personalité|>personnage|>professeur|>physicienne|>rabbin|>représantante|>savante|>chirurgienne|>neurochirurgienne|>scientifique|>service|>spécialiste|~logues?$|~istes?$]
        <<- /conf/ -1>> =\1.replace("imm", "ém").replace("Imm", "Ém")
        # Confusion probable. Si “\1” se rapporte à “\2”, alors vous voulez probablement dire “éminent” ; “imminent” signifie “qui va survenir prochainement”.|https://fr.wiktionary.org/wiki/%C3%A9minent

    [>actrice|>confrère|>collègue|>dirigeante|>dissidente|>entrepreneuse|>experte|>défenseuse|>intellectuelle|>mathématicienne|>musicienne|>pédiatre|>personalité|>personnage|>professeur|>physicienne|>rabbin|>représantante|>savante|>chirurgienne|>neurochirurgienne|>scientifique|>service|>spécialiste|~logues?$|~istes?$] >imminente
        <<- /conf/ -2>> =\2.replace("imm", "ém").replace("Imm", "Ém")
        # Confusion probable. Si “\2” se rapporte à “\1”, alors vous voulez probablement dire “éminent” ; “imminent” signifie “qui va survenir prochainement”.|https://fr.wiktionary.org/wiki/%C3%A9minent

    [>accouchement|>accord|>arrivée|>assaut|>attaque|>atterrissage|>cataclysme|>catastrophe|>changement|>conflit|>crash|>danger|>décollage|>départ|>désarmement|>déclenchement|>effondrement|>éruption|>fin|>guerre|>lancement|>orage|>ouragan|>péril|>remaniement|>réponse|>résultat|>retour|>séisme|>tempête|>tsunami|>verdict] ?>être¿ >éminente
        <<- /conf/ --1>> =\-1.replace("émi", "immi").replace("Émi", "Immi")
        # Confusion probable. Si “\-1” se rapporte à “\1”, alors vous voulez probablement dire “imminent” ; “éminent” signifie “notable”.|https://fr.wiktionary.org/wiki/%C3%A9minent

TEST: mon {{imminent}} collègue.
TEST: Les scientifiques les plus {{imminents}}.
TEST: l’accouchement est {{éminent}}.
TEST: Mon {{imminent}} collègue.
TEST: Un paléontologue {{imminent}}.
TEST: L’arrivée est imminente.
TEST: Des paléontologues éminents.



# enduire / induire
__conf_enduire_induire__
    >enduire en [>erreur|>tentation]
        <<- /conf/ -1>> =\1.replace("end", "ind").replace("End", "Ind").replace("END", "IND")       # Confusion probable. “Enduire” signifie “appliquer un enduit”.|https://fr.wiktionary.org/wiki/induire

................................................................................
TEST: {{Tachez}} d’arriver à l’heure.
TEST: {{Tache}} de ne pas faire trop de bruit.
TEST: une tâche dévalorisante.
TEST: peiner à la tâche.


# taule / tôle
__conf_taule_tôle__
    >aller en [>tôle|>tole]
    >quitter cette [tôle|tole]
    >faire de la [tôle|tole]
        <<- /conf/ --1>> taule                                      # Confusion. La tôle est une plaque de métal laminé. Pour la prison, écrivez “taule”.

    [>taule] [>boulonner|>cintrer|>émailler|>emboutir|>galvaniser|>gaufrer|>nervurer|>onduler|>perforer|>souder|>translucide]
        <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.

    [>taule] [de|d’|en] [>acier|>alu|>aluminium|>bardage|>cuivre|>étanchéité|>fer|>festonnage|inox|>laiton|>métal|>trapèze|>zinc|>éverite|>fibrociment|>fibro-ciment|>plastique|>polycarbonate|PVC]
        <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.

TEST: Demain, il va aller en {{tôle}}.
TEST: Tu as fait de la {{tôle}} ?
TEST: C’est la {{taule}} galvanisée.
TEST: une {{taule}} en acier


# tant / temps (2e partie)
__conf_tant_temps_tan__
    en [temps|>tan] [que|qu’]
        <<- /conf/ -2>> tant                                        # Confusion. Écrivez « en tant que ».|http://fr.wiktionary.org/wiki/en_tant_que

................................................................................
TEST: être en {{tore}}
TEST: Faire {{torr}}


# venimeux / vénéneux
__conf_venimeux_vénéreux__
    [>serpent|>araignée|>scorpion|>vipère|>cobra|>crapaud|>grenouille|>dendrobate|>poulpe|>guêpe|>abeille|>frelon|>méduse|>morsure|>piqûre|>dard|>dent|>croc|>crochet]  >vénéneuse
        <<- /conf/ -2>> =\1.replace("énén", "enim")                                    # Confusion : “vénéneux” se dit des plantes, employez “venimeux”.

    [>plante|>champignon|>lépiote|>baie|>fruit|>herbe|>fleur|>chair|>moule|humus|>substance|>végétal]  >venimeuse
        <<- /conf/ -2>> =\1.replace("enim", "énén")                                    # Confusion : pas de venin ici.

TEST: ces araignées {{vénéneuses}}.
TEST: ce champignon {{venimeux}}.



!!
................................................................................
TEST: la pression entre les membres à un moment devient trop importante
TEST: Macron saisit la discorde avec le Brésil pour s’opposer à l’embarrassant accord
TEST: Je vous renvoie pour cela à l’excellent documentaire
TEST: cuisiner à l’étouffée


__infi_loc_à_verbe__
    de manière à            ~..(?:ée?s?|ez)$
    du mal à                ~..(?:ée?s?|ez)$
    intérêt à               ~..(?:ée?s?|ez)$

        <<- /infi/ morph(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|"))
        --1>> =suggVerbInfi(\-1)                                                                    # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.

TEST: de manière à {{obligé}} ces gens
TEST: ils ont intérêt à {{obligés}} ces gens
TEST: Tous ceux qui ont du mal à {{obligé}} ces gens


__infi_verbe_de_verbe__
    [>cesser|>décider|>défendre|>suggérer|>commander|>essayer|>tenter|>choisir|>permettre|>interdire]  [de|d’]  *WORD

        <<- /infi/ not morph(\1, ":N") and analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNG]")
        --1>> =suggVerbInfi(\-1)                                                                    # Après “\1 de”, le verbe devrait être à l’infinitif.

TEST: cessez d’{{anesthésié}} ces gens !


TEST: Le menu Format contient de nombreuses commandes de mise en forme.
TEST: Le commandant de zone…
TEST: À quoi rime de décider de mesures écologiques d’en haut
TEST: L’accès au cannabis thérapeutique où à ses dérivés permettrait de plus aux autorités de santé d’apporter aux malades les garanties nécessaires quant à la qualité, aux concentrations, ainsi qu’aux modalités d’obtention et d’utilisation optimale.
TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot »


__infi_qqch_de__
    [afin|avant]                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    avant ?même¿                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    marre                                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif.

    à même                                      [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$


    en train                                    [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$


    en vue                                      [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 \2 de”, le verbe devrait être à l’infinitif.






















    [>façon|>manière]                           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    [>intention|>volonté]                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action.


    il >être [temps|impossible|indispensable|nécessaire|utile]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “il est \3 de”, le verbe devrait être à l’infinitif.

    [<start>|,] impossible  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$



        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “impossible de”, le verbe devrait être à l’infinitif.

    force [est|était]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M")
        --1>> =suggVerbInfi(\-1)                                                                    # Après “force est de”, le verbe devrait être à l’infinitif.




TEST: afin de leur {{percée}} une ouverture
TEST: en train de {{percées}}

TEST: ils sont à même de {{trouvé}} la bonne réponse
TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.






TEST: elle est en train de {{mangée}}
TEST: je déteste sa manière de la {{rabaissée}} en permanence.

TEST: il serait temps de {{poussée}} la logique jusqu’au bout
TEST: impossible d’{{échappée}} à cette horreur.
TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions.





__infi_de_verbe__
    [de|d’]  [le|l’|leur|les]             @:V¬:[YNAM]|>(?:lui|plus)/
    [<start>|,]  [de|d’] [nous|vous|lui]  @:V¬:[YE]|>(?:lui|plus)/
        <<- /infi/ \-1.islower() --1>> =suggVerbInfi(\-1)                               # Erreur probable. Après “de”, le verbe devrait être à l’infinitif.

................................................................................
    [de|d’] [ne|n’]    [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  @:V¬:Y|>(?:lui|plus|point)/
    [de|d’] [ne|n’|en|me|m’|te|t’|se|s’|y]                                       @:V¬:Y|>(?:lui|plus|point)/
    [de|d’] ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:V¬:Y
    [de|d’] ?[ne|n’]¿  [le|la|l’|les]                 [lui|leur|en|y]            @:V¬:Y
    [de|d’] ?[ne|n’]¿  [lui|leur]                     en                         @:V¬:Y
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “de”, le verbe devrait être à l’infinitif.

    en  [droit|état|mesure|train]  [de|d’]  ?[nous|vous|le|la|l’|les|leur]¿  @:V1.*:Q
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “\1 \2 \3”, le verbe devrait être à l’infinitif.

    >faire  ?[pas|jamais|guère]¿  semblant  [de|d’]  ?[nous|vous|le|la|l’|les|leur]¿  @:V1.*:Q
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “faire semblant de”, le verbe devrait être à l’infinitif.

    [de|d’]  @:V1.*:Q¬:N
        <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/")
            and not before("(?i)\\b(?:quelqu(?:e chose|’une?)|qu’y a-t-il |(?:l(es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)")
            and not tag_before(\1, "ce_que")
        -2>> =suggVerbInfi(\2)                                                          # Le verbe devrait être à l’infinitif.

TEST: d’en {{parlé}} sans cesse
TEST: cela suffit de les {{aimait}}
TEST: de ne leur en {{avancé}} que le nécessaire.
TEST: de l’y {{poussé}}
TEST: arrête d’y {{consacré}} autant de temps.
TEST: je suis certain d’en {{choque}} plusieurs.
TEST: elle était capable de la {{trouvait}} où qu’elle soit.
TEST: de me le {{facturez}}
TEST: suffit de {{la}} {{finit}}
TEST: Il s’agit de me {{donnait}} tout ça.
TEST: j’étais incapable de m’{{orientait}} dans la bonne direction.
TEST: ils étaient susceptibles de m’y {{trouvaient}}
TEST: Il tentait de {{raisonné}} en homme libre
TEST: sa façon de {{nettoyez}} était inefficace.
TEST: elle a délibérément omis de les {{inclurent}}.
TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ?
TEST: Ne fais pas semblant de l’{{oubliée}}.
TEST: d’{{mangé}} je ne suis pas capable
TEST: elle s’engage de ne les lui donner qu’en dernier recours.
TEST: l’idée consiste de la lui donner sans contrepartie et voir ce qu’il en fera.
TEST: de leur plus grand fils, ils attendent beaucoup.
TEST: de n’importe quelle manière
TEST: un libéralisme trop « individualiste » s’est transformé en de supposées demandes de droits spécifiques
TEST: soit 40 % de plus comparé au quinquennat précédent
................................................................................
    >avoir beau ?[ne|n’]¿   [lui|leur|y]                    en                       ~..(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V1") --1>> =suggVerbInfi(\-1)                                       # Après “avoir beau”, le verbe devrait être à l’infinitif.|http://fr.wiktionary.org/wiki/avoir_beau

TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.


__infi_est_ce_que__
    est-ce  que  @:(?:V1.*:Q|[13]s|2[sp])¬:[GYWMN]
        <<- /infi/ not value(<1, "|que|qu’|") -3>> =suggVerbInfi(\3)                                # Après “est-ce que”, le verbe devrait être à l’infinitif.

TEST: est-ce que {{rapporté}} ces données nous aidera ?
TEST: est-ce que {{priait}} est la solution ?
TEST: Est-ce que Pierre Xazzz va bien ?
TEST: Qu’est-ce que rapporte réellement Dassault & Co au budget

................................................................................
TEST: Il faudrait l’{{essayé}}.
TEST: Il faudra ne {{touché}} qu’aux extrémités.
TEST: faut-il {{pensé}} à ces choses-là encore et encore ?
TEST: il faut n’{{estimait}} que la valeur de nos actes
TEST: il fallait bien cela pour nous épargner
TEST: une faille s’est ouverte sous nos pieds
TEST: il faut en moyenne 1000 litres d’eau pour produire un kilo de céréales



__infi_faire__
    >faire  ~(?:ée?s?|ez)$
        <<- /infi/ not morph(<1, ">(?:en|de|être)/") and morph(\2, ":V", ":[MG]") and not (morph(\1, ":N") and morph(\2, ":Q.*:m:[sp]"))
        -2>> =suggVerbInfi(\2)                                                                      # Après le verbe “faire”, ce verbe devrait être à l’infinitif.

................................................................................

TEST: Mieux vaut {{consacré}} son temps à des occupations utiles.
TEST: Mieux ne vaut pas {{arrivé}} en retard.
TEST: il eût mieux valu {{oublié}} cette affaire plutôt que réveiller ce dragon endormi.


__infi_verbes__

    [>aimer|>désirer|>espérer|>oser|>préférer|>souhaiter]  ?[pas|plus|point|guère|jamais]¿  ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\1, ":", ":[GN]") and morph(\2, ":V", ":M")
        -2>> =suggVerbInfi(\2)                                                                      # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.

    [>aller|>venir|>partir]  ?[pas|plus|point|guère|jamais|rien]¿  ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\1, ":", ":[GN]") and morph(\-1, ":V", ":M|>(?:accompagner|armer|armurer|casquer|déguiser)/")
        --1>> =suggVerbInfi(\2)                                                                     # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.

TEST: elle préférait {{mangée}} seule.
TEST: Il venait, comme d’habitude, {{discuté}} avec son ami.
TEST: Ces types-là venaient {{mangé}} chez moi tous les dimanches.
TEST: ils viennent bien entendu {{attaqué}} le parlement
TEST: ils vont par voie de conséquence vraiment {{attaqué}} la banque
TEST: elles ont pu {{mangé}}
TEST: Cette affaire ne va rien {{arrangé}}.
TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.
TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances
TEST: croyez-vous qu’ils oseront {{proposé}} des amendements aussi audacieux ?



TEST: Elles étaient venues armées.
TEST: Il vint déguisé en mousquetaire.
TEST: D’ailleurs j’irai armé.
TEST: J’irai armé de mon épée.
TEST: Si possible, venez accompagné.
TEST: Elle vint accompagnée de son père.

................................................................................
__ppas_sont_adj__
    sont  *WORD
        <<- /ppas/ morph(\2, ":V", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "ce_que")
        -2>> =suggVerbPpas(\2, ":m:p")                      # Incohérence : “\2” n’est pas un participe passé.

TEST: après avoir mis à jour sont {{profile}}.



!!!! Adverbes après verbe                                                                         !!

# fort
__sgpl_verbe_fort__
    forts
        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)|>(?:affirmer|trouver|croire|désirer|estimer|préférer|penser|imaginer|voir|vouloir|aimer|adorer|rendre|souhaiter)/")
            and not morph(>1, ":A.*:[me]:[pi]")
        ->> fort                                                # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.

TEST: ces emmerdeurs crient bien trop {{forts}}
TEST: ces animaux paraissent forts, mais ils sont faibles.
TEST: ils sont forts, ces gars-là.
TEST: ils se croient forts.
TEST: je les imagine forts et intelligents.
TEST: elles les veulent forts et astucieux.
TEST: les écarts ont été plus forts en une génération
TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.
TEST: Pour leur permettre d’être plus forts face aux maîtres de tous bords, patrons, maris ou bureaucrates.
TEST: Il nous rend forts.


# bien
__sgpl_verbe_bien__
    biens
        <<- /sgpl/ morph(<1, ":V", ":[DA].*:p") ->> bien        # Confusion probable. Ici, “bien” est un adverbe, donc invariable.

TEST: Ils vont {{biens}}.
TEST: Elles travaillaient vraiment {{biens}}.
TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.



!!
!!
!!!! Conjugaisons nous / vous (2ᵉ partie)                                                         !!
!!
!!
................................................................................

TEST: Étaient-elles {{arriver}} ?
TEST: Sont-elles tout à fait {{arriver}} ?
TEST: Ne sont-elles pas {{aveugle}}
TEST: demeurent-elles {{présente}}



































!!
!!
!!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj !!
!!
!!

................................................................................
TEST: il en a toujours {{était}} ainsi                                              ->> été
TEST: Ils avaient barre sur lui.


__ppas_nous_vous_avoir__
    [nous|vous]  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
    <<- /ppas/ morph(\1, ":Os")
        and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        and value(<1, "|<start>|,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
        and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
    --1>> =suggVerbPpas(\-1, ":m:s")
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Nous avons {{donne}} tout notre potentiel.
TEST: mais nous avons {{était}} surpris par cette annonce.
................................................................................
TEST: Vous lui avez {{donnés}} un cadeau.
TEST: nous avions quelque peu {{tempérés}} leurs ardeurs
TEST: D’un côté, le modèle occidental, […], nous a libérés de […]


__ppas_det_nom_avoir__
    [un|une|des|le|la|l’|les|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leur|leurs|certains|certaines|quelques|plusieurs]  *WORD  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
    <<- /ppas/ not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        and value(<1, "|<start>|,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
        and morph(\2, ":[NA]", ":G") and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Y|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
        and not (\-2 == "avions" and morph(\-1, ":3[sp]"))
    --1>> =suggVerbPpas(\-1, ":m:s")
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Les femmes lui avait {{conseillées}} de se taire.
................................................................................
TEST: Les élèves lui ont {{données}}.
TEST: Les élèves lui ont {{donnés}} une réponse.
TEST: Les élèves leur ont {{donnée}} ça.
TEST: Le maire a {{créée}} un risque.
TEST: le général n’a pas encore {{finit}} sa sieste.
TEST: Certains les ont d’abord jugés trop lents.
TEST: les timides ou les personnes n’ayant pas confiance en elles vont avoir tendance à éviter de regarder dans les yeux.



__ppas_les_avoir__
    les  >avoir  @:V[0-3]..t.*:Q.*:s¬:[GWpi]
        <<- /ppas/ morph(\2, ":V0a") -3>> =suggPlur(\3)
        # Accord avec le COD “les” : Le participe passé “\2” devrait être au pluriel (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

................................................................................

TEST: des hommes, des femmes, des enfants qui ne leur avaient {{faits}} que du bien.


__ppas_avoir_ppas_mas_sing__
    [<start>|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui]  ?[ne|n’]¿  ?[lui|leur]¿   avoir  @:Q.*:[pf]¬:m:[si]
    [<start>|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui]  ?[ne|n’]¿  [m’|t’]        avoir  @:Q.*:p¬:[si]
        <<- /ppas/ not value(\-1, "|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        --1>> =suggVerbPpas(\-1, ":m:s")                      # Le participe passé devrait être au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Avoir {{instruite}} notre mère
TEST: Après avoir {{baissés}} nos tarifs
TEST: Je viendrai, après avoir vraiment {{écoutée}} le prof.
TEST: Merci de m’avoir {{lus}}                                      ->> lu
TEST: Pourquoi m’avoir {{ignorés}} ainsi ?
................................................................................

## avoir avec participe passé
__ppas_m_t_l_avoir__
    [l’|m’]  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
        <<- /ppas/ --1>> =suggVerbPpas(\-1, ":m:s")         # Confusion : employez un participe passé.

    t’  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
        <<- /ppas/ not value(\-1, "|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        --1>> =suggVerbPpas(\-1, ":m:s")                    # Confusion : employez un participe passé.

TEST: m’avoir {{terminer}}.
TEST: il m’a {{souffler}} la bonne réponse.
TEST: elle t’en a {{parle}}.
TEST: c’est vous qui m’avez {{convertit}}.
TEST: parce que t’as envie que je le fasse
................................................................................
    >avoir  ~..e[rz]$
        <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":(?:Y|2p)")
        -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
        <<- /ppas/ __also__ and \1 == "a" and \2.endswith("r") and not value(<1, "|n’|m’|t’|l’|il|on|elle|")
        -1>> à                                                                      # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez “à”.

    >avoir  ~..it$
        <<- /ppas/ not value(\1, "|A|avoirs|") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
        -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.

    >avoir  ~.ut$
        <<- /ppas/ not value(\1, "|A|avoirs|") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
        -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.

TEST: Avoir {{marcher}} toute la journée m’a épuisée.
TEST: L’homme, voyez-vous, {{a}} réellement {{marcher}} sur la Lune.
TEST: Je ne lui ai rien {{demander}}, mais il est venu à notre secours au nom de la justice.
TEST: Avoir {{finit}} son œuvre dans les temps, ce n’est pas toujours suffisant.
TEST: ces hommes, n’en doutez pas, auraient {{put}} trouver la solution.

TEST: nous avons vu des avions voler haut dans le ciel.



!!
!!
!!!! COD précédant que                                                                            !!
................................................................................



!!!! Participes passés avec “avoir” (formes interrogatives)                                       !!

__ppas_avoir_interrogatif__
    *WORD  /VCint  *WORD
        <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
        <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QM]")
        -3>> =suggVerbPpas(\3, ":m:s")                      # Incohérence probable avec “\2”. Après “avoir”, ce verbe devrait être un participe passé.
        <<- /ppas/ __else__ and not value(\1, "|les|l’|m’|t’|nous|vous|en|") and morph(\3, ":Q.*:[fp]", ":m:[si]")
            and not morph(\1, ":[NA].*:[fp]") and not before("(?i)\\b(?:quel(?:le|)s?|combien) ")
        -3>> =suggVerbPpas(\3, ":m:s")                      # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).

    [<start>|,]  ?n’¿  /VCint  *WORD
        <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QM]")
        --1>> =suggVerbPpas(\-1, ":m:s")                    # Incohérence probable avec “\-2”. Après “avoir”, ce verbe devrait être un participe passé.
        <<- /ppas/ __else__ and morph(\-1, ":Q.*:[fp]", ":m:[si]")
        --1>> =suggVerbPpas(\-1, ":m:s")                    # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).

TEST: cet été ont-ils {{mentionnés}} la sécheresse                              ->> mentionné
TEST: quand ont-ils {{donner}} satisfaction                                     ->> donné
TEST: qui a-t-elle {{connut}}                                                   ->> connu
................................................................................
TEST: Avez-vous {{signez}} le contrat ?
TEST: Ont-ils {{finit}} le travail ?
TEST: Ai-je déjà {{reconnut}} mes torts ?
TEST: N’avais-tu pas crainte de tout perdre ?
TEST: Combien de bêtes n’as-tu pas déjà massacrées
TEST: Combien de bêtes as-tu déjà massacrées
TEST: A-t-il Pierre pour ami ?



__ppas_l_m_t_avoir_interrogatif__
    [l’|m’|t’]  /VCint  *WORD
        <<- /ppas/ morphVC(\2, ":V0a") and morph(\3, ":(?:Y|2p|Q.*:p|3[sp])", ":[GWsi]")
        -3>> =suggVerbPpas(\3, ":m:s")                      # Accord avec le COD “\1” : le participe passé “\3” devrait être au singulier (et accordé en genre).

................................................................................
TEST: comment {{sait elle}}
TEST: qui {{était elle}} ?
TEST: quel travail {{avait elle}} accompli ?
TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
TEST: C’était elle qui avait pris le contrôle.


__inte_union_nous!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  @:¬:1p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]")
        -2:3>> \2-nous                                                                              # Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [sommes|étions|fûmes|fussions|serons|serions|avons|avions|eûmes|eussions|aurons|aurions]  nous
        <<- /inte/ space_after(\2, 1, 1)
................................................................................
    *WORD  ~ons$  nous  [<end>|,]
    *WORD  ~ons$  nous  @:¬:(?:Y|1p)
        <<- /inte/ space_after(\2, 1, 1) and
            ( (value(\2, "|avions|") and not morph(\1, ":A.*:[me]:[sp]") and not morph(\-1, ":(:?3[sp]|Ov)"))
            or (morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os")) )
        -2:3>> \2-nous                                                                              # Forme interrogative ? Mettez un trait d’union.

TEST: {{retrouverons nous}} enfin la tranquilité ?
TEST: Ne {{sommes nous}} pas des dieux ?
TEST: À quelle autorité {{prétendons nous}} si…
TEST: quel exercice {{avions nous}} revu ?
TEST: pourquoi n’en entendons nous jamais parler ?

TEST: les avions nous font rêver.


__inte_union_vous!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..e[zs]$  vous  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..e[zs]$  vous  @:¬:2p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]")
        -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [êtes|étiez|fûtes|fussiez|serez|seriez|avez|aviez|eûtes|eussiez|aurez|auriez]  vous
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.

................................................................................
    *WORD  ~..e[zs]$  vous  [<end>|,]
    *WORD  ~..e[zs]$  vous  @:¬:(?:Y|2p)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
        -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.

TEST: Mais {{soutiendrez vous}} cette proposition ?
TEST: comment {{êtes vous}} arrivées là ?
TEST: quelle tarte {{voulez vous}} ?


TEST: Veuillez vous instruire avant de contester ces mesures.


__inte_union_ils!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  @:¬:3p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
................................................................................
TEST: j’{{aurai}} aimé que vous m’en parliez.
TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__vmode_si_sujet__
    [<start>|,]  si     [j’|J’|t’|T’]  @:[SK]¬:(?:G|V0|I)
    [<start>|,]  si     @:(?:Os|M)     @:[SK]¬:(?:G|V0|I)
    [<start>|,]  s’     [il|ils]       @:[SK]¬:(?:G|V0|I)
        <<- /vmode/ -4>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
TEST: Si j’{{irais}} le faire













































# Dès que + indicatif
__vmode_dès_que__
    dès  [que|qu’]  @:(?:Os|M)  @:S¬:[IG]
        <<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3)                                                # Après “dès que”, le verbe ne devrait pas être au subjonctif.
#        <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    # Ce verbe ne devrait pas être au conditionnel.

................................................................................
    à               [condition|moins|supposer]      [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    de              [crainte|peur]                  [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    de              [façon|manière]                 [que|qu’]   @:(?:Os|M)  @:I¬:(?:[GYS]|Iq)
    en              sorte                           [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    pour            peu                             [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    pour            autant                          [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Après “\1 \2 que”, ce verbe devrait être au subjonctif.


    [<start>|,]     non                             [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Après “non que”, ce verbe devrait probablement être au subjonctif.

    [<start>|,]     en          admettant           [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -6>> =suggVerbMode(\6, ":S", \5)                                                # Si “en admettant que” indique que la suite est une hypothèse, le verbe doit être au subjonctif.

................................................................................
TEST: » Jules Mignaud, banquier, de la maison Mignaud et fils, rue Deloraine. Il est l’aîné des Mignaud. Madame l’Espanaye avait quelque fortune.
TEST: Il lui avait ouvert un compte dans sa maison, huit ans auparavant, au printemps.
TEST: Elle a souvent déposé chez lui de petites sommes d’argent. Il ne lui a rien délivré jusqu’au troisième jour avant sa mort, où elle est venue lui demander en personne une somme de quatre mille francs. Cette somme lui a été payée en or, et un commis a été chargé de la lui porter chez elle.
TEST: » Adolphe Lebon, commis chez Mignaud et fils, dépose que, le jour en question, vers midi, il a accompagné madame l’Espanaye à son logis, avec les quatre mille francs, en deux sacs.
TEST: Quand la porte s’ouvrit, mademoiselle l’Espanaye parut, et lui prit des mains l’un des deux sacs, pendant que la vieille dame le déchargeait de l’autre.
TEST: Il les salua et partit. Il n’a vu personne dans la rue en ce moment. C’est une rue borgne, très-solitaire.
TEST: » William Bird, tailleur, dépose qu’il est un de ceux qui se sont introduits dans la maison. Il est Anglais. Il a vécu deux ans à Paris. Il est un des premiers qui ont monté l’escalier.
TEST: Il a entendu les voix qui se disputaient. La voix rude était celle d’un Français. Il a pu distinguer quelques mots, mais il ne se les rappelle pas. Il a entendu distinctement sacré et mon Dieu.
TEST: C’était en ce moment un bruit comme de plusieurs personnes qui se battent, – le tapage d’une lutte et d’objets qu’on brise. La voix aiguë était très-forte, plus forte que la voix rude.
TEST: Il est sûr que ce n’était pas une voix d’Anglais. Elle lui sembla une voix d’Allemand ; peut-être bien une voix de femme. Le témoin ne sait pas l’allemand.
TEST: » Quatre des témoins ci-dessus mentionnés ont été assignés de nouveau, et ont déposé que la porte de la chambre où fut trouvé le corps de mademoiselle l’Espanaye était fermée en dedans quand ils y arrivèrent.
TEST: Tout était parfaitement silencieux ; ni gémissements, ni bruits d’aucune espèce. Après avoir forcé la porte, ils ne virent personne.
TEST: » Les fenêtres, dans la chambre de derrière et dans celle de face, étaient fermées et solidement assujetties en dedans. Une porte de communication était fermée, mais pas à clef.
TEST: La porte qui conduit de la chambre du devant au corridor était fermée à clef, et la clef en dedans ; une petite pièce sur le devant de la maison, au quatrième étage, à l’entrée du corridor, ouverte, et la porte entre-bâillée ; cette pièce, encombrée de vieux bois de lit, de malles, etc.
TEST: On a soigneusement dérangé et visité tous ces objets.







|







 







>







 







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







 







>
>
>
>
>
>
>
>
>







 







<







 







|







 







|







 







>
>
>
>
>
>
>
>







 







|
>







 







>






|
>









>







 







|



|







 







>
>
>
>
>
>
>
>
>







 







>
>
>
>







>







 







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







 







>







 







|







 







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







 







|







 







|







 







|
>







 







>
>
>







 







>







 







>
>
>
>
>
>
>







 







>







 







>







 







|
>







 







>







 







|







 







>






>








|







 







>







 







>







 







>







 







>







 







|







>







 







>







 







>







 







>







 







>









>





<





>







 







<

>







 







<







 







|


|
|







 







|







 







|
|

>
>
>
>







 







|


|







 







|







 







|







 







|







 







>










>











>







 







>







 







>






>







 







>







 







>









>







 







>



>
>







 







|







 







|







 







>





>







 








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

>







 







|







 







|







 







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







 







|







 







|







 







|







 







|









|










|







 







|







 







|









|










|







 







|







 







|













>
>
>
>
>









>









|







 







>







 







>







 







>













>





>
>
>
>
>







|







 







>







 







>
>
>







 







<
<
<
<







 







|








|







|








>







 







|







 







|
<
|

|
>
>
>
>
>







<
<
<
<
<
<







 







|
|
|
|
>
|
>
>
>
>
|




>
>







 







|











>







 







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







 







|







 







|













>







 







|








<
<
<



<







 







|


|







 







|
|
|
>









|
>
|



>
>








|




|
>
>
|
>
>
|


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




>
|


|
>
>
>
|

|



>
>
>


>


>
>
>
>
>
>


>



>
>
>







 







<
<
<
<
<
<


|







<







<


<
<







 







|







 







>







 







>
|







|
|
|
|
|
|
|
|
|
|
>
>
>







 







<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<







 







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







 







|







 







|







 







>







 







|







 







|







 







|



|







>







 







|
|






|
|







 







>







 







|







 







|
|
|

|
>



|
|
|







 







|
>
>







 







|









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







 







<







 







|







1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
....
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
....
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
....
4791
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
....
5140
5141
5142
5143
5144
5145
5146

5147
5148
5149
5150
5151
5152
5153
....
5881
5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
....
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359
6360
6361
6362
6363
....
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405
6406
6407
....
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
....
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
....
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
....
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
....
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
....
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
....
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
....
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
....
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
....
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
....
9388
9389
9390
9391
9392
9393
9394
9395
9396
9397
9398
9399
9400
9401
9402
....
9646
9647
9648
9649
9650
9651
9652
9653
9654
9655
9656
9657
9658
9659
9660
9661
....
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
....
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
....
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
.....
10901
10902
10903
10904
10905
10906
10907
10908
10909
10910
10911
10912
10913
10914
10915
.....
11006
11007
11008
11009
11010
11011
11012
11013
11014
11015
11016
11017
11018
11019
11020
.....
11053
11054
11055
11056
11057
11058
11059
11060
11061
11062
11063
11064
11065
11066
11067
11068
.....
11097
11098
11099
11100
11101
11102
11103
11104
11105
11106
11107
11108
11109
11110
11111
.....
11235
11236
11237
11238
11239
11240
11241
11242
11243
11244
11245
11246
11247
11248
11249
.....
11264
11265
11266
11267
11268
11269
11270
11271
11272
11273
11274
11275
11276
11277
11278
11279
11280
11281
11282
11283
11284
11285
11286
11287
11288
11289
11290
11291
11292
11293
11294
.....
11311
11312
11313
11314
11315
11316
11317
11318
11319
11320
11321
11322
11323
11324
11325
.....
11507
11508
11509
11510
11511
11512
11513
11514
11515
11516
11517
11518
11519
11520
11521
.....
11528
11529
11530
11531
11532
11533
11534
11535
11536
11537
11538
11539
11540
11541
11542
.....
11619
11620
11621
11622
11623
11624
11625
11626
11627
11628
11629
11630
11631
11632
11633
.....
11653
11654
11655
11656
11657
11658
11659
11660
11661
11662
11663
11664
11665
11666
11667
11668
11669
11670
11671
11672
11673
11674
11675
.....
11703
11704
11705
11706
11707
11708
11709
11710
11711
11712
11713
11714
11715
11716
11717
.....
11809
11810
11811
11812
11813
11814
11815
11816
11817
11818
11819
11820
11821
11822
11823
.....
11925
11926
11927
11928
11929
11930
11931
11932
11933
11934
11935
11936
11937
11938
11939
.....
11940
11941
11942
11943
11944
11945
11946
11947
11948
11949
11950
11951
11952
11953
11954
11955
11956
11957
11958
11959
11960
11961
11962

11963
11964
11965
11966
11967
11968
11969
11970
11971
11972
11973
11974
11975
.....
12047
12048
12049
12050
12051
12052
12053

12054
12055
12056
12057
12058
12059
12060
12061
12062
.....
12122
12123
12124
12125
12126
12127
12128

12129
12130
12131
12132
12133
12134
12135
.....
12217
12218
12219
12220
12221
12222
12223
12224
12225
12226
12227
12228
12229
12230
12231
12232
12233
12234
12235
.....
12245
12246
12247
12248
12249
12250
12251
12252
12253
12254
12255
12256
12257
12258
12259
.....
12267
12268
12269
12270
12271
12272
12273
12274
12275
12276
12277
12278
12279
12280
12281
12282
12283
12284
12285
12286
12287
.....
12348
12349
12350
12351
12352
12353
12354
12355
12356
12357
12358
12359
12360
12361
12362
12363
12364
12365
.....
12426
12427
12428
12429
12430
12431
12432
12433
12434
12435
12436
12437
12438
12439
12440
.....
12444
12445
12446
12447
12448
12449
12450
12451
12452
12453
12454
12455
12456
12457
12458
.....
12459
12460
12461
12462
12463
12464
12465
12466
12467
12468
12469
12470
12471
12472
12473
.....
12528
12529
12530
12531
12532
12533
12534
12535
12536
12537
12538
12539
12540
12541
12542
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552
12553
12554
12555
12556
12557
12558
12559
12560
12561
12562
12563
12564
12565
.....
12582
12583
12584
12585
12586
12587
12588
12589
12590
12591
12592
12593
12594
12595
12596
.....
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625
12626
.....
12633
12634
12635
12636
12637
12638
12639
12640
12641
12642
12643
12644
12645
12646
12647
.....
12680
12681
12682
12683
12684
12685
12686
12687
12688
12689
12690
12691
12692
12693
12694
12695
12696
12697
12698
12699
12700
12701
12702
12703
12704
.....
12716
12717
12718
12719
12720
12721
12722
12723
12724
12725
12726
12727
12728
12729
12730
12731
12732
12733
12734
12735
.....
12743
12744
12745
12746
12747
12748
12749
12750
12751
12752
12753
12754
12755
12756
12757
.....
12782
12783
12784
12785
12786
12787
12788
12789
12790
12791
12792
12793
12794
12795
12796
.....
12836
12837
12838
12839
12840
12841
12842
12843
12844
12845
12846
12847
12848
12849
12850
12851
12852
12853
12854
12855
12856
.....
12885
12886
12887
12888
12889
12890
12891
12892
12893
12894
12895
12896
12897
12898
12899
12900
12901
12902
12903
12904
12905
12906
12907
12908
12909
12910
12911
12912
12913
12914
12915
.....
12917
12918
12919
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
12930
12931
.....
12938
12939
12940
12941
12942
12943
12944
12945
12946
12947
12948
12949
12950
12951
12952
.....
13004
13005
13006
13007
13008
13009
13010
13011
13012
13013
13014
13015
13016
13017
13018
13019
13020
13021
13022
13023
13024
13025
13026
13027
13028
13029
13030
13031
13032
13033
13034
13035
13036
13037
13038
13039
13040
.....
13067
13068
13069
13070
13071
13072
13073
13074
13075
13076
13077
13078
13079
13080
13081
.....
13111
13112
13113
13114
13115
13116
13117
13118
13119
13120
13121
13122
13123
13124
13125
.....
13148
13149
13150
13151
13152
13153
13154
13155
13156
13157
13158
13159
13160
13161
13162
.....
13165
13166
13167
13168
13169
13170
13171
13172
13173
13174
13175
13176
13177
13178
13179
13180
13181
13182
13183
13184
13185
13186
13187
13188
13189
13190
13191
13192
13193
13194
13195
13196
13197
13198
13199
13200
.....
13201
13202
13203
13204
13205
13206
13207
13208
13209
13210
13211
13212
13213
13214
13215
.....
13218
13219
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
13230
13231
13232
13233
13234
13235
13236
13237
13238
13239
13240
13241
13242
13243
13244
13245
13246
13247
13248
13249
13250
13251
13252
13253
.....
13564
13565
13566
13567
13568
13569
13570
13571
13572
13573
13574
13575
13576
13577
13578
.....
13622
13623
13624
13625
13626
13627
13628
13629
13630
13631
13632
13633
13634
13635
13636
13637
13638
13639
13640
13641
13642
13643
13644
13645
13646
13647
13648
13649
13650
13651
13652
13653
13654
13655
13656
13657
13658
13659
13660
13661
13662
13663
13664
13665
13666
13667
13668
13669
13670
13671
13672
13673
13674
.....
13729
13730
13731
13732
13733
13734
13735
13736
13737
13738
13739
13740
13741
13742
13743
.....
13744
13745
13746
13747
13748
13749
13750
13751
13752
13753
13754
13755
13756
13757
13758
.....
13760
13761
13762
13763
13764
13765
13766
13767
13768
13769
13770
13771
13772
13773
13774
13775
13776
13777
13778
13779
13780
13781
13782
13783
13784
13785
13786
13787
13788
13789
13790
13791
13792
13793
13794
13795
13796
13797
13798
13799
13800
13801
13802
13803
13804
13805
13806
.....
13824
13825
13826
13827
13828
13829
13830
13831
13832
13833
13834
13835
13836
13837
13838
.....
13987
13988
13989
13990
13991
13992
13993
13994
13995
13996
13997
13998
13999
14000
14001
14002
14003
.....
14004
14005
14006
14007
14008
14009
14010




14011
14012
14013
14014
14015
14016
14017
.....
14086
14087
14088
14089
14090
14091
14092
14093
14094
14095
14096
14097
14098
14099
14100
14101
14102
14103
14104
14105
14106
14107
14108
14109
14110
14111
14112
14113
14114
14115
14116
14117
14118
14119
14120
14121
14122
14123
14124
14125
14126
.....
14779
14780
14781
14782
14783
14784
14785
14786
14787
14788
14789
14790
14791
14792
14793
.....
15565
15566
15567
15568
15569
15570
15571
15572

15573
15574
15575
15576
15577
15578
15579
15580
15581
15582
15583
15584
15585
15586
15587






15588
15589
15590
15591
15592
15593
15594
.....
15595
15596
15597
15598
15599
15600
15601
15602
15603
15604
15605
15606
15607
15608
15609
15610
15611
15612
15613
15614
15615
15616
15617
15618
15619
15620
15621
15622
15623
15624
15625
.....
16008
16009
16010
16011
16012
16013
16014
16015
16016
16017
16018
16019
16020
16021
16022
16023
16024
16025
16026
16027
16028
16029
16030
16031
16032
16033
16034
.....
16177
16178
16179
16180
16181
16182
16183
16184
16185
16186
16187
16188
16189
16190
16191
16192
16193
16194
16195
16196
16197
16198
16199
16200
16201
16202
16203
16204
16205
16206
16207
16208
16209
16210
16211
16212
16213
16214
16215
16216
16217
16218
16219
16220
16221
16222
16223
16224
16225
16226
16227
16228
16229
.....
16929
16930
16931
16932
16933
16934
16935
16936
16937
16938
16939
16940
16941
16942
16943
.....
16983
16984
16985
16986
16987
16988
16989
16990
16991
16992
16993
16994
16995
16996
16997
16998
16999
17000
17001
17002
17003
17004
17005
17006
17007
17008
17009
17010
17011
.....
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
18108
18109
18110
18111
18112
18113



18114
18115
18116

18117
18118
18119
18120
18121
18122
18123
.....
18167
18168
18169
18170
18171
18172
18173
18174
18175
18176
18177
18178
18179
18180
18181
18182
18183
18184
.....
18242
18243
18244
18245
18246
18247
18248
18249
18250
18251
18252
18253
18254
18255
18256
18257
18258
18259
18260
18261
18262
18263
18264
18265
18266
18267
18268
18269
18270
18271
18272
18273
18274
18275
18276
18277
18278
18279
18280
18281
18282
18283
18284
18285
18286
18287
18288
18289
18290
18291
18292
18293
18294
18295
18296
18297
18298
18299
18300
18301
18302
18303
18304
18305
18306
18307
18308
18309
18310
18311
18312
18313
18314
18315
18316
18317
18318
18319
18320
18321
18322
18323
18324
18325
18326
18327
18328
18329
18330
18331
18332
18333
18334
18335
18336
18337
18338
18339
18340
18341
18342
18343
18344
18345
18346
18347
18348
18349
18350
18351
18352
18353
18354
18355
18356
18357
18358
18359
18360
.....
18364
18365
18366
18367
18368
18369
18370






18371
18372
18373
18374
18375
18376
18377
18378
18379
18380

18381
18382
18383
18384
18385
18386
18387

18388
18389


18390
18391
18392
18393
18394
18395
18396
.....
18507
18508
18509
18510
18511
18512
18513
18514
18515
18516
18517
18518
18519
18520
18521
.....
18560
18561
18562
18563
18564
18565
18566
18567
18568
18569
18570
18571
18572
18573
18574
.....
18648
18649
18650
18651
18652
18653
18654
18655
18656
18657
18658
18659
18660
18661
18662
18663
18664
18665
18666
18667
18668
18669
18670
18671
18672
18673
18674
18675
18676
18677
18678
18679
18680
18681
18682
18683
.....
19133
19134
19135
19136
19137
19138
19139


































19140
19141
19142
19143
19144
19145
19146
.....
20375
20376
20377
20378
20379
20380
20381
20382
20383
20384
20385
20386
20387
20388
20389
20390
20391
20392
20393
20394
20395
20396
20397
20398
20399
20400
20401
20402
20403
20404
20405
20406
20407
20408
20409
20410
20411
20412
20413
20414
20415
20416
20417
20418
20419
20420
.....
20631
20632
20633
20634
20635
20636
20637
20638
20639
20640
20641
20642
20643
20644
20645
.....
20647
20648
20649
20650
20651
20652
20653
20654
20655
20656
20657
20658
20659
20660
20661
.....
20664
20665
20666
20667
20668
20669
20670
20671
20672
20673
20674
20675
20676
20677
20678
.....
20732
20733
20734
20735
20736
20737
20738
20739
20740
20741
20742
20743
20744
20745
20746
.....
20749
20750
20751
20752
20753
20754
20755
20756
20757
20758
20759
20760
20761
20762
20763
.....
20770
20771
20772
20773
20774
20775
20776
20777
20778
20779
20780
20781
20782
20783
20784
20785
20786
20787
20788
20789
20790
20791
20792
20793
20794
20795
20796
.....
20876
20877
20878
20879
20880
20881
20882
20883
20884
20885
20886
20887
20888
20889
20890
20891
20892
20893
20894
20895
20896
20897
20898
20899
.....
20908
20909
20910
20911
20912
20913
20914
20915
20916
20917
20918
20919
20920
20921
20922
.....
22366
22367
22368
22369
22370
22371
22372
22373
22374
22375
22376
22377
22378
22379
22380
.....
22383
22384
22385
22386
22387
22388
22389
22390
22391
22392
22393
22394
22395
22396
22397
22398
22399
22400
22401
22402
22403
22404
22405
22406
22407
22408
.....
22409
22410
22411
22412
22413
22414
22415
22416
22417
22418
22419
22420
22421
22422
22423
22424
22425
.....
23332
23333
23334
23335
23336
23337
23338
23339
23340
23341
23342
23343
23344
23345
23346
23347
23348
23349
23350
23351
23352
23353
23354
23355
23356
23357
23358
23359
23360
23361
23362
23363
23364
23365
23366
23367
23368
23369
23370
23371
23372
23373
23374
23375
23376
23377
23378
23379
23380
23381
23382
23383
23384
23385
23386
23387
23388
23389
23390
23391
23392
23393
23394
23395
23396
23397
23398
.....
23421
23422
23423
23424
23425
23426
23427

23428
23429
23430
23431
23432
23433
23434
.....
27163
27164
27165
27166
27167
27168
27169
27170
27171
27172
27173
27174
27175
27176
27177
    l’ [un|une]  *WORD
        <<- not value(\3, "|plus|") =>> select(\3, ":[123][sp]")

    [des|chaque|quelque|quelques|cet|cette|ces|mon|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs|aucun|aucune]  *WORD
        <<- =>> exclude(\2, ":V")

    [un|une]  *WORD
        <<- not value(<1, "|l’|quelqu’|quelqu|") and not value(\2, "|a|fut|fût|est|fait|") and not morph(\2, ":P") =>> exclude(\2, ":V")

    [une|le|la|les|des|chaque|quelque|quelques|cet|cette|ces|ma|ta|sa|mes|tes|ses|au|aux|notre|votre|nos|vos|leurs] personne
        <<- =>> select(\-1, ":N")

    de  [la|l’]  $:¬:Y
        <<- not value(<1, "|semblant|") =>> exclude(\3, ":V")

................................................................................
TEST: en tant que président du conseil
TEST: les bac +2 sont trop nombreux.
TEST: c’est à n’y plus rien comprendre.
TEST: Elle était tout feu, tout flamme.
TEST: Ses rencards finissent par devenir lassants
TEST: trois espèces de chauve-souris dont une est éteinte
TEST: Ils sont source de conflits
TEST: Votre question fait référence à un fait divers déroutant



!!!
!!!
!!! Étiquettes                                                                                    !!
!!!
................................................................................
    grand’ville
        <<- /tu/ ->> =\1.replace("’", "-")                                      # Graphie désuète. Au lieu d’une apostrophe, employez plutôt un trait d’union.
        <<- ~>> =\1.replace("’", "-")

TEST: je suis allé dans la {{grand’rue}}.                           ->> grand-rue


!!!! Trait d’union : formes interrogative (nous/vous)                                             !!
__inte_union_nous1!7__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ons$  nous
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ons$  nous
    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ons$  nous
    [ne|n’]  [lui|leur|y]                    en                          ~ons$  nous
        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") --2:-1>> \-2-\-1       # Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  @:¬:(?:1p|Y)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]") and not value(\2, "|veuillons|sachons|")
        -2:3>> \2-\3                                                                                # Forme interrogative ? Mettez un trait d’union.

TEST: n’y {{retrouverons nous}} jamais la tranquilité ?
TEST: pourquoi n’en {{entendons nous}} jamais parler ?
TEST: que {{pouvons nous}} dans cette vie
TEST: Sachons nous conformer à ces restrictions et faisons notre travail.


__inte_union_vous1!7__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~ez$  vous
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~ez$  vous
    [ne|n’]  [le|la|l’|les]                  [lui|leur|en|y]             ~ez$  vous
    [ne|n’]  [lui|leur|y]                    en                          ~ez$  vous
        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") --2:-1>> \-2-\-1       # Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ez$  vous  @:¬:(?:2p|Y)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]") and not value(\2, "|veuillez|sachez|")
        -2:3>> \2-\3                                                                                # Forme interrogative ? Mettez un trait d’union.

TEST: ne {{soutiendrez vous}} pas cette proposition ?
TEST: n’en {{voulez vous}} jamais à ces gens ?
TEST: comment {{pensez vous}} y parvenir
TEST: veuillez vous adresser à notre secretaire pour prendre rendez-vous.



!!!! Virgules                                                                                     !!

__virg_dialogue_après_nom_propre__
    [<start>|,]  $:M¬:G  [/-je|/-tu|/-on|/-nous|/-vous|/-ils|/-elles|/VCimp]
        <<- /virg/ -2>> \2,                                                                         # Dialogue ? Ajoutez une virgule pour mettre en incise la personne à qui s’adresse la réplique.

................................................................................
__bs_pour_ne_pas_que__
    pour ne pas [que|qu’]
        <<- /bs/ ->> _
        # Tournure familière. Par exemple, écrivez “pour qu’il ne vienne pas” plutôt que “pour ne pas qu’il vienne.”|http://www.academie-francaise.fr/pour-pas-que-au-lieu-de-pour-que-ne-pas

TEST: Nous y sommes allés {{pour ne pas qu’}}elle se sente seule.


# silence assourdissant
__bs_silence_assourdissant__
    silence assourdissant
    silences assourdissants
        <<- /bs/ ->> _                                                                              # Cliché. Locution oxymorique employée à tort et à travers.

TEST: dans un {{silence assourdissant}}


# très / trop
__bs_très_trop_superflu__
    [très|trop] [beaucoup|assez|mieux|pire|meilleur|délicieux|plus|moins]
        <<- /bs/ ->> \2                                                                             # Avec “\2”, “\1” est superflu.

TEST: Je l’aime {{très beaucoup}}.
................................................................................
    [>ajourner|>différer|>reporter] à date ultérieure
    [>ajourner|>différer|>reporter] à une date ultérieure
        <<- /pleo/ ->> \1                                                                           # Pléonasme.

TEST: {{Ajourner à une date ultérieure}}        ->> Ajourner
TEST: {{différer à une date ultérieure}}        ->> différer
TEST: {{reporter à plus tard}}                  ->> reporter




!!
!!
!!!! Tournures de langage                                                                         !!
!!
................................................................................
        <<- /conf/ \2.islower()
        -2>> =suggSimil(\2, ":[NA]:.:[si]", True)                                                   # Incohérence avec “\1” : “\2” est un verbe.

    [<start>|,]  [ton|son|audit]  @:(?:Y|[123][sp])¬:[NAQ]
        <<- /conf/ \3.islower()
        -3>> =suggSimil(\3, ":[NA]:[me]:[si]", True)                                                # Incohérence avec “\2” : “\3” est un verbe.

    [un|une]  @:(?:Y|[123][sp])¬:[GNA]  ?$:W¿  @:A¬:[GM]
        <<- /conf/ not value(<1, "|dont|l’|d’|sauf|excepté|") and not before("(?i)\\bun à +$")
        -2>> =suggSimil(\2, ":[NAQ]:[me]:[si]", True)                                               # Incohérence avec “\1” : “\2” est une forme verbale conjuguée.

TEST: un {{maintient}} difficile.
TEST: quelqu’un arrive.
TEST: cet {{plaît}} est infectée.
TEST: {{ce}} {{rappelle}} n’en finit pas.
................................................................................
        <<- /conf/ -1:2>> a les|aux
        # Confusion. Ou vous confondez “à” (préposition) avec “a” (avoir), ou vous devez employer “aux”. Exemple : Elle _a_ donné du travail _aux_ employés _à_ profusion.

TEST: Celui qui y croit {{à les}} moyens d’y parvenir.


    à  *WORD
        <<- /conf/ \2.islower() and not value(\2, "|coté|sont|") >>>
        <<- /conf/ morph(\2, ":(?:V.......[_z][az].*:Q|V1.*:Ip:2p)", ":[MGWNY]") -1>> a             # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __also__ and morph(\2, "V1.*:(?:Ip:2p|Q)", "*") and not value(<1, "|il|elle|on|n’|les|l’|m’|t’|s’|d’|en|y|lui|nous|vous|leur|")
        -2>> =suggVerbInfi(\2)                                                                      # Le verbe devrait être à l’infinitif.
        <<- /conf/ __else__ and morph(\2, ":[123][sp]", "*") and not value(\2, "|tord|tords|") >>>
        <<- /conf/ morph(\2, ":V2.*:I[ps]:3s", "*") -2>> =suggVerbPpas(\2, ":m:s")                  # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
        <<- /conf/ __also__ -1>> a                                                                  # Confusion probable : “à” est une préposition. Pour le verbe “avoir”, écrivez “a”.
        <<- /conf/ __else__ -2>> _                                                                  # Incohérence : “\1” est une préposition. “\2” est un verbe conjugué.
................................................................................
        -1>> à                                                      # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: scrupuleux {{a}} n’en toucher qu’une part infime.
TEST: Ne pas hésiter {{a}} {{demander}} des conseils.
TEST: Sébastien {{a}} {{demander}} des conseils.
TEST: {{A}} vous lire, on ne sait plus que penser de toutes ces histoires


__conf_à_qui_infinitif__
    *WORD  a  qui  @:(?:Y|Os)
        <<- /conf/ morph(\1, ":N", ":Ov") -2>> à                    # Confusion probable : “a” est la conjugaison du verbe “avoir”. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: il n’y avait personne {{a}} qui parler de nos problèmes       ->> à
TEST: des gens {{a}} qui offrir ça                                  ->> à


__conf_à_a__
    [<start>|,] a moins [que|qu’]
        <<- /conf/ -2>> à                                           # Confusion probable : « à moins que » pour dire « sauf si ».

    a part @:(?:M[12]|D|Oo)
        <<- /conf/ -1>> à                                           # Confusion probable : “a” est une forme conjugée de “avoir”. Pour la préposition, écrivez “à”.
................................................................................
TEST: tout part {{à veau l’eau}}
TEST: On décida de tout laisser partir {{à vau l’o}}
TEST: une dérive à vau-l’eau.


__conf_à_a_locutions__
    a ?seulement¿ [*NUM|$:B|quelques|plusieurs] [millimètres|centimètres|décamètres|mètres|kilomètres|verstes|lieues|UA|parsecs|années-lumière] de distance
    a [califourchon|contrecœur|contre-cœur|contrejour|contre-jour|contretemps|contre-temps|demi-mot|gogo|distance|nouveau|présent|rebrousse-poil|regret|travers|tout-va|confesse|midi|minuit|rallonge|reculons|risque|sec|tâtons|vélo|vif]
    a [mi-chemin|mi-mandat|mi-mot+s|mi-parcours|mi-temps|mi-voix]
    a air comprimé
    a armes égales
    a aucun prix
    a autrui
    a autre chose
    a bas [>coût|>cout]
    a bâbord
................................................................................
TEST: Il l’a fait {{a}} cause de toi.
TEST: Je tenais à le lui faire savoir.
TEST: il va falloir songer à les leur donner
TEST: le coût est estimé à au moins 1000 milliards de dollars
TEST: elle à qui nous avons donné notre cœur et pour laquelle nous avons tout tenté pour la faire aimer de nos concitoyens.
TEST: jusqu’à parfois se mettre en danger
TEST: les méthodes de l’à-peu-près ne suffisent pas.
TEST: Celui qui a peine à paraître ne doit pas être mis subitement en lumière


## substantifs

__conf_substantif_à_substantif!3__
    *WORD  a  @:N¬*
        <<- /conf/ \2.islower() and not value(\3, "|beau|besoin|charge|confiance|connaissance|conscience|crainte|envie|été|faim|hâte|honte|lieu|peine|peur|raison|rapport|recours|soif|tendance|tort|vent|")
            and morph(\1, ":N", "*")
        -2>> à              # Confusion probable : “a” est une forme conjuguée du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: les bobos {{a}} trottinette
TEST: la lettre A est la première lettre de l’alphabet
TEST: la lettre a est la première lettre de l’alphabet
TEST: cette femme a raison
TEST: l’homme a beau se démener, rien n’y fait.
TEST: elle a tendance à n’en faire qu’à sa tête.
TEST: Ce travail a lieu dans le désert.
TEST: cette injonction a force de loi


__conf_a_à_substantifs__
    >arc a >poulie
    >arme a >feu
    >armoire a [>glace|>pharmacie]
    >attaque a main armée
................................................................................

TEST: Mener {{a}} bien cette guerre sera plus difficile qu’on le pense.
TEST: Je peux mener {{a}} bien cette opération.
TEST: Cette coalition que tu penses mener a bien l’intention de te trahir.


__conf_à_a_après_verbes__
    @:V¬:[YGNAWM]  ?$:W¿  a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "que") and not tag_before(\1, "dont") and not tag_before(\1, "qui") and not morph(>1, ":Q")
        --1>> à                                                 # Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

    [/VCint|/VCimp]  ?$:W¿  a
        <<- /conf/ not value(\1, "|rendez-vous|") --1>> à       # Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: Vient-on {{a}} la maison demain ?
TEST: Arrivait-elle {{a}} le manger ?
TEST: Dis-moi {{a}} quelle heure on mange.
TEST: Offrez-vous {{a}} Dieu et taisez-vous.
TEST: dans tous les cas de figure il pense souvent {{a}} sa fille.
................................................................................
TEST: Qu’y a-t-il {{a}} cette place qui mérite que je prenne tant de risques.
TEST: cet homme mange bien {{a}} la maison ?
TEST: Ce que je mange a un goût de surgelé.
TEST: celui qui conduisait a décidé de faire un tour du quartier avec la voiture.
TEST: Un rendez-vous a bousculé ses plans
TEST: Maria Butina a également rencontré des républicains tels que Donald Trump


__conf_à_en_juger_par__
    !! à en juger par ¡¡
    [à|a] [en|>an] [juger|jugé+ses|jugeait|jugeais] [par|pare+s|>part]
        <<- /conf/ ->> à en juger par       # Confusion : “à en juger par” c’est-à-dire “selon le jugement qu’on se faire avec”.

TEST: {{a en jugé part}} cet article, c’est bientôt la fin.
TEST: ils sont à en juger par leurs résultats les prochains champions.


__conf_celui_celle_à_qui__
    [celui|celle|ceux|celles]  a  qui
        <<- /conf/ -2>> à                   # Confusion. Utilisez la préposition “à”.|http://fr.wiktionary.org/wiki/%C3%A0

TEST: Ceux {{a}} qui nous avons notifié le problème sont partis.
TEST: Il y a qui au dîner ce soir ?
................................................................................

    c’ est  @:N.*:p¬:(?:G|W|M|A.*:[si])
        <<- /conf/ -1:2>> ces|ses                                           # Confusion. Exemples : c’est facile ; ces chats (désignation) ; ses chats (possession)…

    ses  /-là
        <<- /conf/ -1>> ces                 # Confusion : “ses” est un déterminant possessif ; si vous voulez désigner des éléments en particulier, vous devriez utiliser le déterminant démonstratif “ces”.

    c’ est n’ [est|était]
    c’ est ne [serait|sera]
        <<- /conf/ not value(<1, "|que|qu’|") -1:2>> ce                     # Confusion probable.

TEST: {{ses}} au-dessus de ses forces.
TEST: {{ces}} comme la peste
TEST: car {{ses}} d’autre part
TEST: {{ces}} qu’il y a tant de pertes
TEST: {{ces}} jamais une bonne idée.
TEST: {{c’est}} {{délires}} nous ennuient
TEST: {{ses}} gens-là sont des salopards
TEST: {{c’est}} n’est pas ça.                                               ->> ce
TEST: En 2015, c’est Paris et son agglomération qui…
TEST: Ses pas de danse.
TEST: Avec ces quelques mots, que veux-tu dire ?
TEST: Avec ces quelque 70 millions d’euros de cash disponible
TEST: négocier séparément avec ces divers sous-groupes
TEST: L’ensemble de ces divers points de vue émergeant de plusieurs horizons permettaient de construire un projet, riche et acceptable par toutes les parties prenantes.

................................................................................
# en général
__conf_en_général__
    en générale
        <<- /conf/ ->> en général                               # Dans cette locution, “général” est toujours au masculin singulier.|https://fr.wiktionary.org/wiki/en_g%C3%A9n%C3%A9ral

TEST: On n’en sait {{en générale}} pas assez.


# emballé, c’est pesé
__conf_emballé_c_est_pesé__
    >emballer [c|sais|sait] >peser
        <<- /conf/ ->> emballé, c’est pesé      # Confusion. Locution “emballé, c’est pesé”.|https://fr.wiktionary.org/wiki/emball%C3%A9,_c%E2%80%99est_pes%C3%A9

    >emballer ?,¿ c’ est >peser
        <<- /conf/ not (value(\1, "|emballé|") and value(\-1, "|pesé|")) and morph(<1, ":C|<start>|>,")
        ->> emballé, c’est pesé                 # Confusion. Locution “emballé, c’est pesé”.|https://fr.wiktionary.org/wiki/emball%C3%A9,_c%E2%80%99est_pes%C3%A9

TEST: {{emballait c pesé}}
TEST: {{emballer c’est peser}}
TEST: Tu peux emballer, c’est pesé.
TEST: il faut emballer, c’est pesé
TEST: c’est emballé, c’est pesé.


# évidement / évidemment
__conf_évidemment_évidement__
    [/VCint|/VCimp]  ?[pas|plus|jamais|guère]¿  évidement
    [pas|plus] évidement
        <<- /conf/ --1>> évidemment                         # Confusion probable : l’évidement est l’action de vider quelque chose. L’adverbe s’écrit “évidemment”.|https://fr.wiktionary.org/wiki/évidemment

................................................................................

    hors [je|j’|tu|il|ils|on|parce|quel|quels|quelle|quelles|pourquoi|qui|que]
        <<- /conf/ -1>> or,
        # Confusion probable. Écrivez “or” pour dire “néanmoins”. La préposition “hors” sert à dire “en dehors de” ou “excepté”.|https://fr.wiktionary.org/wiki/hors

    >or du commun
    >or de ?[ma|ta|sa|notre|votre|leur]¿ [compréhension|perception|portée|vue]
    >or de question [que|qu’]
        <<- not morph(<1, ":D.*:[me]") -1>> hors
        # Confusion probable. Si vous voulez dire “en dehors de”, écrivez “hors”.|https://fr.wiktionary.org/wiki/hors

TEST: {{hors}}, nous y coryons malgré tout ce qu’on peut en dire.
TEST: {{Hors}} il y a tant à faire depuis que nous sommes arrivés en ces lieux.
TEST: Des femmes {{or}} du commun
TEST: Hors nous, personne ne sait ce qui s’est passé là-bas.
................................................................................
TEST: qui on blâme, ce soir ?


__conf_on_ont__
    [<start>|,|$:Cs] ?l’¿ (ont) [ne|n’|me|m’|te|se|s’]
    [<start>|,|$:Cs] ?l’¿ (ont) [lui|nous|vous] @:[123][sp]¬:G
    [<start>|,|$:Cs] ?l’¿ (ont) [leur|le|la|l’] @:[123][sp]¬:(?:G|[NA].*:[si])
    [<start>|,|$:Cs] ?l’¿ (ont) @:[123][sp]¬:[GQ]|>(?:envie|charge|peine|affaire|hâte|force|recours|somme)/
        <<- /conf/ -1>> on                                          # Confusion probable : “ont” est une conjugaison du verbe avoir.

    [<start>|,|$:Cs] ?l’¿ ont t’
        <<- /conf/ not value(>1, "|il|ils|elle|elles|") --2>> on    # Confusion probable : “ont” est une conjugaison du verbe avoir.

    ~-ont$
        <<- /conf/ ->> =\1[:-1]                                     # Incohérence : “ont” est une forme conjuguée du verbe “avoir” (par exemple: “ils ont”). Pour le pronom personnel, écrivez “on”.
................................................................................

TEST: je ne sais {{pa}}                                                     ->> pas
TEST: Il ne le deviendra {{par}}.                                           ->> pas
TEST: ne viens {{par}}, c’est dangereux.
TEST: il ne tient par contre que grâce à nous
TEST: elle ne savait par qui passer pour arriver à ses fins.


# par le bout du nez
__conf_par_le_bout_du_nez__
    !! par le bout du nez ¡¡
    [par|>part|pare+s] [le|l’] [bout|bous] du [né|nez]
        <<- /conf/ ->> par le bout du nez                                   # Confusion. Locution “par le bout du nez”.

TEST: se faire mener {{par le bout du né}}.


# par les temps qui courent
__conf_par_les_temps_qui_courent__
    !! par les temps qui courent ¡¡
    [par|>part|pare+s] les [>tan|tant|temps] qui [courent|court+s|>cour|coure+s|courre]
        <<- /conf/ ->> par les temps qui courent                            # Confusion: Locution “par les temps qui courent”.

TEST: {{part les tan qui court}}
TEST: par les temps qui courent, impossible de passer inaperçu.


# pause /pose
__conf_pause_pose__
    >pose [gourmande|café|carrière|crédit|déjeuner|détente|dîner|pipi|repas|thé]
    >pose du [matin|soir]
    >pose de midi
    >pose de l’ après-midi
................................................................................
    quelque fois
        <<- /conf/ ->> quelquefois|quelques fois
        # Confusion. Utilisez “quelquefois” si vous voulez dire “parfois”. Utilisez “quelques fois” pour évoquer ce qui est advenu ou adviendra plusieurs fois.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4334

    les quelquefois [ou|où|que|qu’]
        <<- /conf/ -2>> quelques fois                                       # Confusion : “quelquefois” signifie “parfois”.|https://fr.wiktionary.org/wiki/quelquefois

    >être  quelques fois  ?$:W¿  @:A  [de|d’]
        <<- /conf/ -2:3>> quelquefois                                       # Confusion possible. Si vous voulez dire “parfois”, écrivez “quelquefois”.

TEST: {{Quelles que fois}}, on y comprend plus rien.
TEST: {{Qu’elle que fois}}, on y comprend plus rien.
TEST: Il y va {{quelque fois}} par an.
TEST: les {{quelquefois}} où nous y sommes allés, nous avons été très mal reçus.
TEST: c’est {{quelques fois}} vraiment difficile de savoir quoi faire.
................................................................................
TEST: Quelles ont été, pour vous, les plus gros mensonges ?
TEST: Quelle peut encore être l’influence de cet artiste de nos jours ?
TEST: Quelle peut bien être l’influence de cet artiste de nos jours ?


# quoi que / quoique
__conf_quoique_quoi_que__
    quoiqu’ il se soit ?$:W¿ passé
    [quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] en >penser
    [quoique|quoiqu’] [je|j’|tu|il|elle|on|nous|vous|ils|elles] >avoir pu faire
        <<- /conf/ -1>> quoi que|quoi qu’                       # Confusion probable.|https://fr.wiktionary.org/wiki/quoi_que

TEST: mais {{quoique}} tu en penses, c’est comme ça que ça fonctionne.
TEST: {{Quoiqu’}}il se soit passé réellement passé, je vais lui faire la peau.
TEST: {{quoique}} vous ayez pu faire, ça a donné les résultats escomptés.
................................................................................
TEST: Ces chiens me {{son}} odieux.
TEST: ces gens qui {{son}}, dans le meilleur des cas, des imbéciles ne peuvent nous aider.
TEST: {{sont}} {{pain}}
TEST: en {{sont}} {{absence}}
TEST: qui {{son}} ces gens ?
TEST: chez {{sont}} amis
TEST: il a perdu {{sont}} {{ami}}
TEST: ces gens {{son}} ceux qui nous mettent constamment dans la merde          ->> sont
TEST: à {{sont}} précis de mathématiques                                        ->> son
TEST: elles s’en sont mal portées
TEST: ils en sont reconnaissants
TEST: sont loin, ces gens…
TEST: Il ne sait pas vraiment ce que sont la peur et la souffrance.
TEST: avec le mur du son ceux qui l’entendent.
TEST: Que sont nos valeurs profondes ?
TEST: comment sont la petite et son frère ?
................................................................................
__conf_tant_temps_tan_1__
    en [tant|>tan] [de|d’] [guerre|paix|crise|doute|pluie]
        <<- /conf/ -2>> temps                               # Confusion. Écrivez « en temps de » si vous évoquez une période de temps.

    de [tant|>tan] en [tant|>tan]
        <<- /conf/ ->> de temps en temps                    # Confusion. Écrivez « de temps en temps ».

    depuis la [nui|nuit] des [>tan|tant]
        <<- /conf/ --1>> temps                              # Confusion. Locution “depuis la nuit des temps”.|

    [après|avec] [temps|>tan] [de|d’]
        <<- /conf/ -2>> tant                                # Confusion. Écrivez “tant” pour évoquer une quantité de quelque chose.|http://fr.wiktionary.org/wiki/tant

    [à|a] [>tan|tant] [partiel|partiels|plein|pleins]
        <<- /conf/ -2>> temps                               # Confusion. Pour ce qui est temporel, écrivez “temps”.

    en [même|mêmes] [tant|>tan]
................................................................................

TEST: en {{tant}} de guerre, il faut savoir faire face et ne pas faiblir face à l’adversité.
TEST: ils vont {{de tan en tan}} au restaurant
TEST: après {{temps}} de souffrance, il faut savoir lâcher prise.
TEST: il travaille à {{tant}} partiel
TEST: {{en même tant}}, on s’en moque, de toutes ces histoires ennuyeuses.
TEST: en {{tan}} que telle, cette méthode n’est pas parfaite, mais avec de l’intuition
TEST: depuis la nuit des {{tans}}
TEST: ce sera fait en {{tant}} et en heure
TEST: ce qui a commencé en 2011 en tant d’endroits du pourtour méditerranéen
TEST: elle est allée en tant de lieux qu’il est difficile de suivre son trajet.


# teint / tain / thym
__conf_tain_teint_thym__
................................................................................

    >fond de [>tain|teints|>thym]
        <<- /conf/ -3>> teint                                       # Confusion.|https://fr.wiktionary.org/wiki/fond_de_teint

TEST: Elle l’a observé par un miroir sans {{teint}}.
TEST: Elle a acheté un nouveau fond de {{tain}}.


__conf_taule_tôle1__
    [>taule] [de|d’|en] [>acier|>alu|>aluminium|>bardage|>cuivre|>étanchéité|>fer|>festonnage|inox|>laiton|>métal|>trapèze|>zinc|>éverite|>fibrociment|>fibro-ciment|>plastique|>polycarbonate|PVC]
        <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.

TEST: une {{taule}} en acier


# tête / tète
__conf_tête_tète!6__
    [tète|tètes] [baissée|baissées|baissé|baissés]
    [tète|tètes] [haute|hautes|basse|basses]
    [tète|tètes] de [mule|linotte]
        <<- /conf/ -1>> =\1.replace("è", "ê").replace("È", "Ê")     # Confusion : “tète” est une forme conjuguée de “téter”. Pour la partie supérieure d’un corps, écrivez “tête”.
................................................................................

__purge_locutions__
    , [oui|non] ,
    , entre autres ?choses¿ ,
    à *NUM  %
    à ?seulement¿ [*NUM|$:B|quelques|plusieurs] [millimètres|centimètres|décamètres|mètres|kilomètres|verstes|lieues|UA|parsecs|années-lumière] de distance
    à [autrui|bâbord|califourchon|chacun|confesse|contrecœur|contre-cœur|contretemps|>demi-mot|foison|grand-peine|jamais|gogo|loisir|merveille|moitié|nouveau|outrance|peine|perpétuité|présent|raison|rallonge|rebrousse-poil|reculons|regret|renverse|risque|sec|tâtons|tire-d’aile|tire-larigot|tort|tribord|tout-va|vif]
    à [mi-chemin|mi-mandat|mi-mot+s|mi-parcours|mi-temps|mi-voix]
    à air comprimé
    à angle droit
    à armes égales
    à aucun prix
    à autre chose
    à bas [cout|coût|prix]
    à bâtons rompus
................................................................................
    à l’ ordre du jour
    à l’ un d’ entre eux
    à l’ unanimité
    à l’ unisson
    à l’ une d’ entre elles
    à l’ échelle [nationale|mondiale|régionale|départementale|cantonale|locale|galactique|universelle]
    à l’ étouffée
    à l’ exclusion de toute autre chose
    à l’ évidence
    à l’ œil nu
    à l’ [un|une] des leurs
    à la [bourre|con|coule|dérobée|diable|fois|leur|manque|mords-moi-le-nœud|papa|ramasse|renverse|redresse|rescousse|sauvette|volée]
    à la bonne franquette
    à la limite du supportable
    à la lumière de tout [ceci|cela|ça]
................................................................................
    à [ma|ta|sa|notre|votre|leur] juste mesure
    à [mon|ton|son|notre|votre|leur] [avis|détriment|encontre|égard|insu|sujet|tour]
    à [mon|ton|son|notre|votre|leur] [cœur|corps] défendant
    à [mon|ton|son|notre|votre|leur] grand [désarroi|soulagement]
    à n’ en [pas|point] douter
    à n’ en plus finir
    à n’ importe quel prix
    à n’ importe quelle heure du jour et de la nuit
    à parler [franc|franchement|strictement]
    à part [entière|ça|cela|ceci]
    à parts égales
    à partir [de|d’]  {pronom_obj}
    à partir [de|d’]  [aujourd’hui|ici|là|maintenant|rien]
    à partir [de|d’]  [demain|hier]  ?[matin|midi|soir]¿
    à pas de [géant|loup|tortue|velours]
    à personne en danger
................................................................................
    à ras de terre
    à ras [bord|bords]
    à ras [le|du] sol
    à rude épreuve
    à s’ y méprendre
    à somme nulle
    à spectre ?[très|si]¿ large
    à strictement parler
    à tarif réduit
    à tarifs réduits
    à tel point
    à temps  [plein|partiel|complet]
    à tête reposée
    à tire d’ [aile|ailes]
    à [tire-d’aile|tire-d’ailes]
................................................................................
    avant toute chose
    avant toutes choses
    avant d’ aller plus loin
    avant J.-C.
    avant Jésus-Christ
    avant d’ en arriver là
    avant de faire quoi que ce soit
    avant de faire quoi que ce soit [de|d’] ?$:W¿ [absurde|stupide|crétin|con|idiot|inconsidéré]
    avant qu’ il ne soit trop tard
    avant un bon bout de temps
    avec [brio|constance|joie|légèreté|insistance|peine]
    avec autre chose
    avec le plus grand soin
    avec pertes et fracas
    avec un peu de chance
................................................................................
    bon gré ?,¿ mal gré
    bras dessus ?,¿ bras dessous
    çà et là
    ce faisant
    cependant
    [cela|ça|ceci] mis à part
    [cela|ça|ceci] va sans dire
    [cela|ceci] étant dit
    certes
    ces derniers temps
    cette [fois|fois-là|fois-ci]
    chaque fois
    ci-dessous
    ci-dessus
    chose promise ?,¿ chose due
    comme avant
    comme autrefois
    comme d’ habitude
    comme toujours
    comme de juste
    comme bon [me|te|lui|leur|nous|vous] semble
    comme au bon vieux temps
    comme cul et chemise
    comme [frappé+ses] par la foudre
    comme n’ importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau de chagrin
    comme promis
    comme qui dirait
................................................................................
    dans la mesure du possible
    dans leur globalité
    dans leur grande majorité
    dans les années ~^\d{2,5}$
    dans les [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires] à venir
    dans peu de temps
    dans tout [cela|ça|ceci]
    dans [ma|ta|sa|notre|votre|leur] prime jeunesse
    dans très peu de temps
    dans un cas comme dans l’autre
    dans une [certaine|large|moindre] mesure
    début {mois} ~^\d{2,5}$
    au début {mois} ~^\d{2,5}$
    en ce début {mois} ~^\d{2,5}$
    d’ abord
................................................................................
    désormais
    depuis $:B [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis *NUM [ans|années|mois|semaines|jours|heures|minutes|secondes]
    depuis belle lurette
    depuis bien longtemps
    depuis [de|d’] ?[assez|très]¿ longues années
    depuis des lustres
    depuis la nuit des temps
    depuis la [première|dernière|~ième$] fois
    depuis les années ~^\d{2,5}$
    depuis ?[assez|très]¿ longtemps
    depuis lors
    depuis ?[assez|très]¿ peu de temps
    depuis quelque temps
    depuis quelques [secondes|minutes|heures|jours|semaines|mois|trimestres|semestres|années|décennies|siècles|millénaires]
................................................................................
    des [années|mois|siècles|millénaires|décennies|semaines] plus [tôt|tard]
    dès [longtemps|maintenant|lors|aujourd’hui]
    dès à présent
    dès que possible
    dès [demain|hier] ?[soir|matin|après-midi]¿
    Dieu [m’|t’|l’|nous|vous|les] en [garde|préserve]
    Dieu [m’|t’|lui|nous|vous|leur] en soit témoin
    Dieu seul le sait
    du ~^[xXvViI]+[eᵉ]$ siècle
    du [Ier|Iᵉʳ|1er|1ᵉʳ] siècle
    du bout des lèvres
    du début à la fin
    du fond du cœur
    du jour au lendemain
    du haut en bas
................................................................................
    en ?[assez|très]¿ peu [de|d’] temps
    en ?[assez|très]¿ [piteux|piètre] état
    en point [de|d’] [mire|orgue]
    en porte-à-faux
    en position [de|d’] [force|faiblesse]
    en premier lieu
    en première [instance|ligne]
    en [première|seconde|~ième$] position
    en pure perte
    en quantité suffisante
    en quantité plus que suffisante
    en quelque sorte
    en queue [de|d’] peloton
    en rangs [dispersés|serrés]
    en rase campagne
................................................................................
    en tout bien tout honneur
    en tout [cas|genre|lieu|sens|temps]
    en tout et pour tout
    en tout état [de|d’] cause
    en tout premier lieu
    en toute bonne foi
    en toute connaissance [de|d’] cause
    en toute [circonstance|confiance|discrétion|franchise|hâte|impartialité|impunité|innocence|légalité|liberté|logique|modestie|sécurité|simplicité]
    en toutes circonstances
    en travers de la gorge
    en un claquement de doigts
    en un clin d’ œil
    en un rien [de|d’] temps
    en une autre occasion
    en vase clos
    en vigueur
    en vitesse ?[subsonique|supersonique|subluminique|superluminique]¿
    en voie [de|d’] développement
    en y réfléchissant bien
    en [janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre] dernier
    en [mon|ton|son|leur|notre|votre] âme et conscience
    en [mon|ton|son|leur|notre|votre] for intérieur
    en [mon|ton|son|leur|notre|votre] nom propre
................................................................................
    hors d’ état [de|d’] [fonctionner|nuire]
    hors du commun
    ?d’¿ ici
    ?d’¿ ici [comme|ou] ailleurs
    ?d’¿ ici et [là|maintenant]
    ?d’¿ ici même
    ?d’¿ ici-bas
    ?d’¿ il y a belle lurette
    ?d’¿ il y a ?très¿ longtemps
    ?d’¿ il y a ?très¿ peu [de|d’] temps
    ?d’¿ il y a quelques [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    ?d’¿ il y a moins [de|d’] [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    ?d’¿ il y a [*NUM|$:B] [secondes|minutes|heures|jours|semaines|mois|année|ans|siècles|millénaires]
    ?d’¿ il y a quelque temps
    ?d’¿ il n’y a pas ?si¿ longtemps
................................................................................
    par [à-coups|ailleurs|avance|chance|conséquent|curiosité|contre|défaut|définition|endroits|essence|excellence|exemple|hasard|ici|inadvertance|là|moments|nature|principe|terre]
    par acquit [de|d’] conscience
    par [beau|mauvais] temps
    par bien des [aspects|côtés]
    par bonté [de|d’] [âme|cœur]
    par ce biais
    par certains [aspects|côtés]
    par grand froid
    par gros temps
    par la même occasion
    par la suite
    par le passé
    par les temps qui courent
    par monts et par vaux
    par temps [de|d’] pluie
................................................................................
    sans autre forme [de|d’] procès
    sans commune mesure
    sans coup férir
    sans crier gare
    sans difficulté ?[apparente|aucune|financière|majeure|particulière]¿
    sans dire mot
    sans en avoir conscience
    sans états d’ âme
    sans [m’|t’|s’|nous|vous] en apercevoir
    sans [m’|t’|s’|nous|vous] en rendre compte
    sans [m’|t’|s’|nous|vous] faire [avoir|comprendre|désirer|prier|remarquer]
    sans faire [de|d’] vagues
    sans foi ?,¿ ni loi
    sans le faire exprès
    sans le vouloir
................................................................................
    sans l’ aide [de|d’] personne
    sans l’ ombre d’ un doute
    sans mot dire
    sans nul doute
    sans pour autant y [parvenir|réussir|réfléchir|songer|penser]
    sans pour autant y faire attention
    sans pour autant y prendre [garde|goût|gout]
    sans [me|te|lui|nous|vous|leur|y] prêter attention
    sans [que|qu’] je le [sache|susse]
    sans [que|qu’] tu le [saches|susses]
    sans [que|qu’] [il|elle|on|$:M] le [sache|sût]
    sans [que|qu’] nous le [sachions|sussions]
    sans [que|qu’] vous le [sachiez|sussiez]
    sans [que|qu’] [ils|elles] le [sachent|sussent]
    sans queue ni tête
    sans raison apparente
    sans répit
    sans tarder
    sans vouloir [me|m’|te|t’|lui|nous|vous|leur] manquer de respect
    sans y [parvenir|réussir|réfléchir|songer|penser]
    sans y [réfléchir|songer|penser] à [deux|2] fois
    sans y faire attention
    sans y prendre [garde|goût|gout|ombrage]

    sauf >erreur [de|d’] [ma|ta|sa|notre|votre|leur] part
    secondo
    selon toute vraisemblance
    sens dessus dessous
    >seule à >seule
    s’ il le [faut|fallait|faudra|faudrait]
    si [bas|haut|longtemps|nécessaire|possible|soudain]
    si [cela|ça|ceci] ne tenait qu’ à [moi|toi|lui|eux|elle|elles|nous|vous]
    si besoin est
    si le besoin s’en [fait|faisait] sentir
    si le besoin [doit|devait] s’en faire sentir
    si tel est le cas
    sine die
................................................................................
    une fois [de|d’] plus
    une fois n’ est pas coutume
    une fois pour toutes
    urbi et orbi
    vaille que vaille
    ventre à terre
    vers nulle part

    vite fait ?,¿ bien fait
    [voici|voilà] belle lurette
    volontiers
        <<- ~>> *


__purge_x_par_après_x__
    un par un
    une par une
................................................................................
    à la [hauteur|portée|suite]                                                                                                                 [de|du|d’|des]
    à la grande surprise                                                                                                                        [de|du|d’|des]
    à [quelques|plusieurs] [mètres|kilomètres|lieues|pas|minutes|heures]                                                                        [de|du|d’|des]
    à [quelques|plusieurs] [dizaines|centaines|milliers] de [mètres|kilomètres]                                                                 [de|du|d’|des]
    à [base|force|raison]                                                                                                                       [de|d’]
    à grand renfort                                                                                                                             [de|d’]
    à grands coups                                                                                                                              [de|d’]

    au [bout|courant|cours|détriment|fond|gré|lieu|long|large|milieu|nord|profit|ras|sein|sommet|sortir|sud|sujet|vu]                           [de|du|d’|des]
    au beau milieu                                                                                                                              [de|du|d’|des]
    au fin fond                                                                                                                                 [de|du|d’|des]
    au grand dam                                                                                                                                [de|du|d’|des]
    au plus profond                                                                                                                             [de|du|d’|des]
    au fur et à mesure                                                                                                                          [de|du|d’|des]
    au vu et au su                                                                                                                              [de|du|d’|des]
................................................................................

    jamais
        <<- not morph(<1, ">ne") ~>> *

    la une [de|des|du]
        <<- ~2>> _

    l’ impression [que|qu’]
        <<- ~1>> _

    l’ étrange impression [que|qu’]
    la [nette|bizarre] impression [que|qu’]
        <<- ~2:3>> _

    le pour et le contre
        <<- ~>> ␣
        <<- =>> define(\1, [":LN:m:p"])

    le [pressentiment|sentiment] [que|qu’]
................................................................................
        <<- ~2:0>> *

    pour ou contre
        <<- ~2:0>> *

    qui ce      [jour-là|matin-là|après-midi-là|soir-là|mois-là|siècle-là|millénaire-là]
    qui cette   [nanoseconde-là|milliseconde-là|seconde-là|minute-là|heure-là|nuit-là|matinée-là|soirée-là|journée-là|semaine-là|année-là|décennie-là]
    qui à part  [moi|toi|lui|elle|nous|vous|eux|elles]
    qui d’ autre à part [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- ~2:0>> *

    plus avant ~¬^(?:de|d’|que|qu’)$
        <<- ~1:2>> *

    rien comparé à
................................................................................

    une fois
        <<- ~>> _

    vent debout contre
        <<- ~1:2>> *

    je      [t’|vous]   en  [prie|supplie]  <end>
    nous    [t’|vous]   en  [prions|supplions]  <end>
        <<- ~>> *

    ,  je      [t’|vous]   en  [prie|supplie]  ,
    ,  nous    [t’|vous]   en  [prions|supplions]  ,
        <<- not morph(>1, ":E") ~>> *


# Déterminant + nombre
__p_dét_plur_nombre_nom__
    [les|des|mes|tes|ses|nos|vos|leurs]  ~^\d+$  @:[NA].*:[pi]¬:(?:V0|3p|Oo|X)|>(?:janvier|février|mars|avril|mai|juin|juillet|ao[ûu]t|septembre|octobre|novembre|décembre|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor)
        <<- ~2>> *

................................................................................

    au  moins  @¬:[AQ].*:[me]:[si]
        <<- ~1:2>> *

    au hasard  @:¬:[AQ].*:[me]:[si]
        <<- ~1:2>> *

    aussi $:W que [nécessaire|possible]
        <<- ~>> *

    aussi $:W que ce soit [<end>|,]
        <<- ~1:5>> *

    au sens le [plus|moins] @:A.*:[me]:[si] du terme
    au sens @:A.*:[me]:[si] du terme
        <<- ~>> *

    ailleurs que chez [moi|toi|soi|lui|elle|nous|vous|eux|elles]
................................................................................

    hélas
        <<- not morph(<1, ":(?:X|Oo)") and not tag_before(\1, "2s") ~>> *

    la lettre [a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z]  @:(?:3s|Ov)
        <<- ~3>> *

    le [plus|moins] $:W possible
        <<- ~>> *

    les [moins|plus] @:A.*:[pi] possible
        <<- ~-1>> *

    mais
        <<- not morph(<1, ":(?:D.*:p|N|V)") ~>> *
................................................................................

    nombre [de|des]
        <<- morph(<1, ":(?:R|C[sc])") ~1>> *

    non @:A
        <<- not morph(<1, ":D.*:m:[si]") ~1>> *

    par trop $:A
        <<- ~1:2>> *

    pas mal
        <<- not morph(<1, ":D") ~>> *

    pas assez *WORD
        <<- morph(\3, ":[AW]") and not morph(<1, ":D") ~>> *
................................................................................

    pêle-mêle
        <<- not morph(<1, ":D.*:[me]") ~>> *

    plein est
        <<- not morph(<1, ":D.*:m:[si]") ~>> *

    [plus|moins|aussi] $:W que prévu
        <<- ~>> *

    plus que tout autre @¬:[AQ].*:m:[si]
        <<- ~1:4>> *

    [plus|moins|aussi]  @:[AW]¬:G   que [les|nous|vous] autres
    [plus|moins|aussi]  @:[AW]¬:G   que l’ autre
................................................................................
#<end>
#@:[VR]¬[NAP]
#, @¬:[NA]
#[ne|n’|me|m’|te|t’|se|s’|le|la|l’|les|leur|leur|mon|ma|ta|sa|notre|votre|mes|tes|ses|ce|cet|cette|ces|je|j’|tu|il|on|nous|vous|ils|ça|ceci|cela|c’|ç’|chaque]


__simplication_substantifs__
    >accusé de reception
    >acte [de|d’] [baptême|caution|cautionnement|cession|contrition|licitation|mariage|naissance|notoriété|propriété|quittance|reconnaissance|répudiation|vente]
    >acte d’ [achat|engagement]
    >acte de gestion ?courante¿
    >acte de procédure ?pénale¿
    >acte d’ état ?civil¿
    >administratrice >système
    >agence de >voyage
    >aire d’ atterrissage
    >animal [de|d’] compagnie
    >appel au secours
    >appel à l’ aide
    >arc à poulies
    >arme à feu
    >armée [de|d’] l’ air
    >armée [de|d’] terre
    >armer jusqu’ aux dents
    >arme [de|d’] [poing|guerre]
    >arme [de|d’] destruction massive
    >armoire à [>glace|>pharmacie]
    >argent [de|d’] poche
    >arnaque à l’ assurance
    >article [de|d’] presse
    >assignation à résidence
    >attaque à main armée
    >attestation sur l’ honneur
    >atteinte aux bonnes mœurs
    >attendre [de|d’] pied ferme
    >avion à [>hélice|réaction]
    ayants droit
    >bandit [de|d’] grand chemin
................................................................................
    >boucle d’ >oreille
    bras d’ honneur
    >brave ?d’¿ entre les braves
    >brosse à [>dent|reluire]
    >cabinet [de|d’] [toilette|travail]
    >camp [de|d’] [concentration|internement|rééducation|vacances]
    >canne à [pêche|sucre]
    >canon à eau
    >caisse à >outil
    >carton d’ emballage
    >centre d’ éducation [populaire|surveillée]
    >chair à [pâté|>canon]
    >chair [de|d’] poule
    >chambre à coucher
    >chambre [de|d’] [agriculture|hôte|hôtel|hôtes|commerce|compensation|décompression|dégrisement]
................................................................................
    >chili con carne
    >chou à la crème ?[fouettée|diplomate|mousseline|patissière|pralinée]¿
    >claire comme [de|d’] l’ eau [de|d’] [boudin|roche|source]
    >claire comme du cristal
    >claire comme jus [de|d’] [boudin|>chaussette|chique]
    [>clé|>clef] à molette
    >clin d’ œil
    >clause de confidentialité
    >code [de|d’] bonne conduite
    >commise d’ office
    >compagne [de|d’] route
    >compagnon [de|d’] route
    >complémentaire santé
    >compte à rebours
    concours de beauté
    >condamnée à mort
    >conférence [de|d’] presse
    >convention [récepteur|générateur]
    >conne comme la lune
    >conne comme un balai
    >conne comme une valise sans >poignée
    >contrôle [de|d’] routine
................................................................................
    [cousu+ses] [main]
    [cousu+ses] [de|d’] fil blanc
    >crayon à [lèvres|sourcils]
    >cour d’ assises
    [>coût|>cout] [de|d’] revient
    >couteau à cran d’ arrêt
    >cuillère à [café|soupe]
    >cure de [désintoxication|désintox]
    >déclaration sur l’ honneur
    >délai [de|d’] [attente|carence|connexion|prescription|préavis|rétraction|rigueur]
    >demande d’ asile
    >descente aux [enfers|flambeaux]
    [>dîner|>diner] aux chandelles
    >digne [de|d’] [confiance|foi]
    >digne [de|d’] ce nom
................................................................................
    >file d’ attente
    >fille à [papa|maman|>soldat]
    >fille au pair
    fils à [papa|maman]
    fils [de|d’] pute
    >flocon [de|d’] neige ?électronique¿
    >folle à lier
    >fontaine à eau
    >fosse à >ordure
    >fosse aux lions
    [>fourgon|>fourgonette] de location
    >frayeur [de|d’] tous les diables
    >frousse [de|d’] tous les diables
    >fusil à pompe
    >gilet de sauvetage
    >hall d’ entrée
    >haute comme [trois|3] pommes
    >heure sup
    >histoire avec un [grand|petit] h
    >homme [de|d’] [affaires|armes|confiance|exception|État|Église|honneur|lettres|loi|main|paille]
    >homme d’ âge mûr
    >homme à tout faire
    >hôtel [de|d’] ville
    >hôtesse d’ accueil
    >garde à vue
................................................................................
    >lettre [de|d’] recommandation
    >lampe à [huile|pétrole]
    >lampe [de|d’] chevet
    >lavage de cerveau
    >liaison sans lendemain
    >lime à >ongle
    >liste d’ attente
    >lit à baldaquin
    >lit [de|d’] camp
    >livraison à domicile
    >livre [de|d’] poche
    >livret d’ épargne ?[bancaire|populaire|salariale]¿
    >longueur d’ avance
    >lune [de|d’] miel
    >machine à [café|coudre|écrire|laver|sous|voter]
    >machine à remonter le temps
    >machine [de|d’] guerre
    >maillot [de|d’] bain
    >main d’ œuvre
    >maison [de|d’] [passe|retraite]
................................................................................
    >matière à réflexion
    >médecin [de|d’] garde
    >mère au foyer
    >metteuse en scène
    >mineure [de|d’] moins [de|d’] *NUM ans
    >mineure [de|d’] moins [de|d’] $:B ans
    >miroir aux alouettes
    >mode [de|d’] [emploi|paiement|scrutin|vie]
    >monnaie [de|d’] [échange|réserve|singe]
    >montre à gousset
    >mot [de|d’] passe
    >motrice [>essence|>diésel|>diesel]
    >motion [de|d’] [blâme|censure|défiance]
    >moule à [>gaufre|>gâteau|brioche|manqué|savarin|charlotte|tarte]
    >moulin à [café|eau|paroles|poivre|prières|vent]
................................................................................
    >planche [de|d’] salut
    >planche à repasser
    >pleine aux as
    >police [de|d’] [caractères|écriture]
    >politique spectacle
    >pomme [de|d’] [discorde|terre|reinette|pin|Adam|api|amour|ambre|eau|or]
    >pompe à [chaleur|essence|fric]
    >porte [de|d’] [entrée|service|garage|sortie]
    >porte d’ entrée
    >pot [de|d’] [chambre|colle]
    >poudre aux yeux
    >presse à >scandale
    preuve ?suffisante¿ du contraire
    preuves ?suffisantes¿ du contraire
    prix [de|d’] revient
................................................................................
    >table de chevet
    >taille *NUM
    tas [de|d’] >ferraille ?rouillée¿
    >talon >aiguille
    taux [de|d’] [abstention|absorption|alcool|alphabétisation|endettement|inflation|intérêt|imposition|occupation|ouverture|œstrogène|urée|usure|change|cholestérol|cholesterol|glycémie|fécondité|participation|testostérone|TVA]
    >témoin à charge
    >ténor du barreau
    >tête à claques
    >tête [de|d’] [linotte|déterré|déterrée|déterrés|déterrées|mule]
    >têtue comme une [bourrique|mule]
    >têtue comme un [âne|bourriquot|mulet]
    >terrain à découvert
    >tigre à dents [de|d’] sabre
    >tiret d’ incise
    >titre [de|d’] [noblesse|propriété|séjour]
    >tondeuse à gazon
    >tour [de|d’] passe-passe
    >train à grande vitesse
    >traitement [de|d’] faveur
    >transport en commun
    >trou à >rat
................................................................................
    >calibre . *NUM ?[acp|auto|brenneke|browning|british|colt|court|H&K|magnum|mauser|otan|remington|parabellum|russian|S&W|sig|soviet|special|wcf|wsm|winchester]¿
    >calibre . *NUM long rifle
    >calibre *NUM ?[mm|in]¿
    >calibre *NUM [*|×] *NUM ?[mm|in]¿
        <<- ~2:0>> *
        <<- =>> =select(\1, ":N")


__purge_syntagmes_nominaux_matière__
    *WORD  en  acier  ?[galvanisé|inoxydable|trempé]¿
    *WORD  en  [alu|aluminium|bois|contreplaqué|coton|cuir|cuivre|émail|étain|fer|fibrociment|fibro-ciment|inox|laiton|lin|coton|métal|nacre|plastique|plâtre|plomb|polycarbonate|polymère|verre|zinc]
        <<- morph(\1, ":N") and not morph(>1, ":A.*:[me]:[si]") ~2:0>> *

    *WORD  en  pierre
    *WORD  en  pierre de taille
    *WORD  en  soie
    *WORD  en  terre  ?cuite¿
        <<- morph(\1, ":N") and not morph(>1, ":A.*:[fe]:[si]") ~2:0>> *

TEST: deux câbles en acier situés de part et d’autre du chariot


__purge_locutions_adjectivales__
    ancienne formule
    bas de gamme
    basse consommation
    bon [enfant|marché|teint]
    bon chic ?,¿ bon genre
    [>clé|>clef] en >main
    dernier cri
    fleur bleue
................................................................................
    grande taille
    grandeur nature
    haut de gamme
    haute [résolution|fidélité|tension]
    hors service
    longue [conservation|distance|portée|durée]
    meilleur marché
    nouvelle [formule|génération]
    numéro un
    numéro $:B
    plein cadre
    top secret
    vieux jeu
    open source
    Créative Commons
................................................................................
        <<- morph(<1, ":(?:N|A|Q|W|V0e)", ":D") ~>> *


__purge_couleurs__
    [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent] [brillant|clair|criard|fluo|foncé|irisé|mat|pâle|pastel|sale|sombre|tendre|terne|vif]
    [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent] et [beige|blanc|bleu|brun|châtain|cyan|gris|incarnat|jaune|magenta|marron|orange|pourpre|rose|rouge|vert|violet|or|argent]
    blanc   [argenté|cassé|lunaire]
    bleu    [acier|argenté|azur|céleste|ciel|électrique|givré|indigo|marine|nuit|outremer|outre-mer|persan|pétrole|roi|saphir|turquin|turquoise|vert]
    blond   [argenté|platine]
    gris    [acier|anthracite|argenté|fer|perle|souris]
    jaune   [canari|citron|doré|maïs|paille|sable]
    noir    [de|d’] [encre|jais]
    noir    et blanc
    noir    sur blanc
    rose    [bonbon|chair|corail]
................................................................................
        <<- morph(\2, ":M") and not before("\\b(?:plus|moins|aussi) .* que +$")
        ~2:4>> =rewriteSubject(\2,\4) + "||"

    <start>  ~^[A-ZÉÈÊ]  et  [moi|toi|lui|elle|nous|vous|eux|elles]
        <<- morph(\2, ":M")
        ~2:0>> =rewriteSubject(\2,\4) + "||"


__purge_pronom_aussi__
    [j’|je] *WORD  moi aussi
        <<- morph(\2, ":1s") ~3:0>> *

    tu      *WORD  toi aussi
        <<- morph(\2, ":2s") ~3:0>> *

    il      *WORD  lui aussi
    elle    *WORD  elle aussi
    on      *WORD  nous aussi
        <<- morph(\2, ":3s") ~3:0>> *

    nous    *WORD  nous aussi
        <<- morph(\2, ":1p") ~3:0>> *

    vous    *WORD  vous aussi
        <<- morph(\2, ":2p") ~3:0>> *

    ils     *WORD  eux aussi
    elles   *WORD  elles aussi
        <<- morph(\2, ":3p") ~3:0>> *


__purge_après_être__
    [>être|>devenir|>rester] [bon|meilleur] marché
    [>être|>devenir|>rester] cousin et cousine
    [>être|>devenir|>rester] de passage
    [>être|>devenir|>rester] frère et sœur
    [>être|>devenir|>rester] mari et femme
................................................................................
        <<- =>> define(\3, [":LV"])

    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ avant tout
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ du moins
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ en partie
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ somme toute
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ sous peu
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ un jour
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ à jamais
    [>être|>devenir|>rester] [pas|jamais|plus|guère|point]
        <<- ~2:0>> *

    /VCint [bon|meilleur] marché
    /VCint cousin et cousine
................................................................................
        <<- __also__ =>> define(\3, [":LV"])

    /VCint ?[pas|jamais|plus|guère|point]¿ avant tout
    /VCint ?[pas|jamais|plus|guère|point]¿ du moins
    /VCint ?[pas|jamais|plus|guère|point]¿ en partie
    /VCint ?[pas|jamais|plus|guère|point]¿ somme toute
    /VCint ?[pas|jamais|plus|guère|point]¿ sous peu
    /VCint ?[pas|jamais|plus|guère|point]¿ [tous|toutes] [deux|trois]
    /VCint ?[pas|jamais|plus|guère|point]¿ un jour
    /VCint ?[pas|jamais|plus|guère|point]¿ à jamais
    /VCint [pas|jamais|plus|guère|point]
        <<- morphVC(\1, ">(?:être|devenir|rester)") ~2:0>> *

    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ beaucoup
    [>être|>devenir|>rester] ?[pas|jamais|plus|guère|point]¿ bien [entendu|sûr]
................................................................................
    plus que
        <<- morph(<1, ":(?:V0e|N)") and morph(>1, ":[AQ]") ~>> *


__purge_après_avoir__
    >avoir  [pas|jamais|plus|guère|point]
    >avoir  ?[pas|jamais|plus|guère|point]¿  en partie
    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] [deux|trois]
    >avoir  ?[pas|jamais|plus|guère|point]¿  somme toute
        <<- ~2:0>> *

    >avoir  ?[pas|jamais|plus|guère|point]¿  beaucoup
    >avoir  ?[pas|jamais|plus|guère|point]¿  bien [entendu|sûr]
    >avoir  ?[pas|jamais|plus|guère|point]¿  dans [leur|l’|son] ensemble
    >avoir  ?[pas|jamais|plus|guère|point]¿  à cet [instant|endroit] ?précis¿
................................................................................
    >avoir  ?[pas|jamais|plus|guère|point]¿  un [moment|instant]
    >avoir  ?[pas|jamais|plus|guère|point]¿  un minimum
    >avoir  ?[pas|jamais|plus|guère|point]¿  un peu
    >avoir  ?[pas|jamais|plus|guère|point]¿  un petit peu
    >avoir  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
        <<- morph(>1, ":[QY]") ~2:0>> *

    >avoir  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
    >avoir  bon dos
    >avoir  bon pied ?,¿ bon œil
    >avoir  carte blanche
    >avoir  forme [humaine|animale]
    >avoir  partie [gagnée|liée]
    >avoir  voix au chapitre
        <<- ~2:0>> ␣
        <<- =>> define(\2, [":LV"])

    >avoir  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
    >avoir  [pas|jamais|plus|guère|point]  bon dos
    >avoir  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    >avoir  [pas|jamais|plus|guère|point]  carte blanche
    >avoir  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    >avoir  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    >avoir  [pas|jamais|plus|guère|point]  quartier libre
    >avoir  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- ~3:0>> ␣
        <<- =>> define(\3, [":LV"])

    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
    >avoir  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  @:(?:Q|V1.*:Y)
        <<- ~2:-2>> *

    n’  >avoir  que  $:Q
        <<- ~3>> *

    n’  >avoir  que  $:W  $:Q
................................................................................
        <<- ~3:4>> *

    n’  >avoir  que  [peu|très|trop]  $:W  $:Q
        <<- ~3:5>> *

    /VCint  [pas|jamais|plus|guère|point]
    /VCint  ?[pas|jamais|plus|guère|point]¿  en partie
    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] [deux|trois]
    /VCint  ?[pas|jamais|plus|guère|point]¿  somme toute
        <<- morphVC(\1, ":V0a") ~2:0>> *

    /VCint  ?[pas|jamais|plus|guère|point]¿  beaucoup
    /VCint  ?[pas|jamais|plus|guère|point]¿  bien [entendu|sûr]
    /VCint  ?[pas|jamais|plus|guère|point]¿  dans [leur|l’|son] ensemble
    /VCint  ?[pas|jamais|plus|guère|point]¿  à cet [instant|endroit] ?précis¿
................................................................................
    /VCint  ?[pas|jamais|plus|guère|point]¿  un [moment|instant]
    /VCint  ?[pas|jamais|plus|guère|point]¿  un minimum
    /VCint  ?[pas|jamais|plus|guère|point]¿  un peu
    /VCint  ?[pas|jamais|plus|guère|point]¿  un petit peu
    /VCint  ?[pas|jamais|plus|guère|point]¿  un tout petit peu
        <<- morphVC(\1, ":V0a") and morph(>1, ":[QY]") ~2:0>> *

    /VCint  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
    /VCint  bon dos
    /VCint  bon pied ?,¿ bon œil
    /VCint  carte blanche
    /VCint  forme [humaine|animale]
    /VCint  partie [gagnée|liée]
    /VCint  voix au chapitre
        <<- morphVC(\1, ":V0a") ~2:0>> ␣
        <<- __also__ =>> define(\2, [":LV"])

    /VCint  [pas|jamais|plus|guère|point]  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
    /VCint  [pas|jamais|plus|guère|point]  bon dos
    /VCint  [pas|jamais|plus|guère|point]  bon pied ?,¿ bon œil
    /VCint  [pas|jamais|plus|guère|point]  carte blanche
    /VCint  [pas|jamais|plus|guère|point]  forme [humaine|animale]
    /VCint  [pas|jamais|plus|guère|point]  partie [gagnée|liée]
    /VCint  [pas|jamais|plus|guère|point]  quartier libre
    /VCint  [pas|jamais|plus|guère|point]  voix au chapitre
        <<- morphVC(\1, ":V0a") ~3:0>> ␣
        <<- __also__ =>> define(\3, [":LV"])

    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  [besoin|confiance|connaissance|conscience|crainte|envie|faim|honte|peur|peine|soif|vent]
    /VCint  ?[pas|jamais|plus|guère|point]¿  [tous|toutes] les $:B  @:(?:Q|V1.*:Y)
        <<- morphVC(\1, ":V0a") ~2:-2>> *


__purge_après_verbe__
    $:V  ?pas¿  jour et nuit
    $:V  ?pas¿  nuit et jour
................................................................................
        <<- not morph(<1, ":R|>d’/") ~1:2>> *

    vu les circonstances  @¬:A:[fe]:[pi]
        <<- ~1:3>> *


__purge_tous_deux_trois__
    >faire [tous|toutes] [deux|trois]
        <<- ~2:0>> *

    >faire tous
        <<- morph(\1, ":[123]p") or (\1 == "fait" and value(<1, "|on|")) ~2>> *


# tous / tout / toute / toutes
................................................................................
    [<start>|,]  $:D  *WORD  *WORD  [ne|n’|me|m’|te|t’|se|s’]
    [<start>|,]  $:D  *WORD  *WORD  [en|nous|vous|lui|y]                    @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les|leur]                     @:(?:[123][sp]|P)¬:[NA]
    [<start>|,]  $:D  *WORD  *WORD  [nous|vous]     [le|la|l’|les|en|y]     @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  [le|la|l’|les]  [lui|leur|en|y]         @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  [lui|leur|y]    en                      @:(?:[123][sp]|P)
    [<start>|,]  $:D  *WORD  *WORD  @:(?:3[sp]|P)¬:[GW]
        <<- morph(\3, ":[NA]", ":(?:G|V0)") and morph(\4, ":[NA]", ":(?:[PG]|V[023])") =>> exclude(\4, ":V")

    [des|ces|mes|tes|ses|nos|vos|quelques|lesdits]  @:A.*:[pi]  @:N.*:[pi]¬(?:3[sp]|G)
        <<- =>> exclude(\3, ":V")

    les  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
        <<- not before(":O[vs]") =>> exclude(\3, ":V")

    leurs  @:A.*:[pi]¬:V  @:N.*:[pi]¬(?:3[sp]|G)
        <<- not before(":O[vs]") =>> exclude(\3, ":V")

    [plusieurs|certains|certaines]  @:A.*:[pi]¬:3[sp]  @:N.*:p¬:(?:3[sp]|G)
        <<- =>> exclude(\2, ":V") and exclude(\3, ":V")


__purge_vite__
    vite
        <<- not (morph(<1, ":V0a") and value(>1, "|fait|")) ~>> *


__purge_locutions_verbales__
    >aller bon train
    >arriver à [destination|échéance]
    >arriver à point nommé
    >arriver à bon port
    >battre à plate couture
    >battre en [brèche|retraite]
    [>brûler|>bruler] à vif
    >charger à blanc
    >chauffer à blanc
    >compter à rebours
    >condamner à mort
    >couler à ?grands¿ flots
    >demander [assistance|audience|conseil|pardon]
    [>donner|>redonner] [naissance|sens|suite|vie]
    [>donner|>redonner] quartier libre
    >élire domicile
    >étouffer dans l’ œuf
    >faire [allusion|assaut|attention|chaud|confiance|connaissance|compliqué|copain-copain|date|débat|défaut|demi-tour|écran|envie|erreur|état|exception|figure|foi|fortune|froid|front|grève|halte|honte|illusion|mention|mouche|office|part|peur|polémique|plaisir|preuve|rage|rempart|scandale|sens|signe|surface|usage|volte-face]
    >faire amende honorable
    >faire bande à part
    >faire bon accueil
    >faire bonne figure
    >faire chou blanc
    >faire copain copain
    >faire de [mon|ton|son|notre|votre|leur] mieux
................................................................................
    >prendre par surprise
    >prêter à confusion
    >prêter main forte
    >prêter main-forte
    >réduire en miettes
    >remettre en cause
    >rendre [hommage|service|visite]
    >reprendre haleine
    >rester lettre morte
    >rester lettres mortes
    >revenir à la case départ
    >saigner à blanc
    >suivre ?[ça|cela|ceci]¿ de près
    >tenir à [carreau|cœur]
    >tenir ?[ça|cela|ceci]¿ à distance ?respectable¿
................................................................................
    >tenir [compte|compagnie]
    >tenir au courant
    >tenir en haute estime
    >tirer à blanc
    >tomber à [pic|point]
    >trier sur le volet
    >trouver refuge
    >tirer à blanc
    >tirer [avantage|profit]
    >tourner à l’ aigre
    >tourner court
    >venir à bout
    [>venir|>revenir] je [ne|n’] sais ?pas¿ ?trop¿ d’ où
    [>venir|>revenir] on [ne|n’] sait ?pas¿ ?trop¿ d’ où
        <<- ~2:0>> *
................................................................................

__conf_locutions_verbales__
    >arriver a [destination|échéance]
    >arriver a point nommé
    >arriver a bon port
    >battre a plate couture
    [>brûler|>bruler] a vif
    >charger a blanc
    >chauffer a blanc
    >fermer a [>clé|>clef]
    [>gonfler|>regonfler] a bloc
    >jeter a terre
    [>mettre|>remettre] a [bas|>flot|>jour|>niveau|>nu|>nue|>plat|>terre]
    [>mettre|>remettre] a l’ [écart|épreuve]
    >percer a jour
    >prendre a la légère
    >prêter a >confusion
    >saigner a blanc
    >tenir a [carreau|cœur|distance]
    >tirer a blanc
    >tomber a [pic|point]
    >tirer a blanc
    >tourner a l’ aigre
    >venir a bout
    [>venir|>revenir] a point
        <<- /conf/ -2>> à               # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.

    >avoir du mal a
    >avoir vocation a
    >laisser libre cours a
        <<- /conf/ --1>> à              # Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.

    >faire plaisirs
        <<- /sgpl/ --1>> plaisir        # Faire plaisir : dans cette locution, “plaisir” doit être au singulier.
        <<- ~-1>> *

    >laisser pour [comte+s|>conte]
        <<- /conf/ --1>> compte         # Confusion. Locution “laisser pour compte”.|https://fr.wiktionary.org/wiki/laisser_pour_compte

    [>être|>mourir|>paraître|>paraitre|>rester|>sembler] >jeûne
        <<- /conf/ -2>> jeune           # Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune

    >partir en >couille
        <<- /conf/ -3>> quenouille|vrille   # Confusion. La locution “partir en couille” est un barbarisme. Locution authentique : “partir/tomber en quenouille”. Peut-être voulez-vous dire “partir en vrille” ?|https://fr.wiktionary.org/wiki/partir_en_quenouille

    >rendre ?bon¿ [comte|comtes|>conte|comptes]
        <<- /conf/ --1>> compte         # Confusion. Locution “rendre compte”.|https://fr.wiktionary.org/wiki/rendre_compte
................................................................................
        <<- /conf/ -1>> =\1.replace("omp", "on").replace("OMP", "ON")   # Confusion. Locution “conter fleurette”.|https://fr.wiktionary.org/wiki/conter_fleurette

TEST: ce contrat arrive {{a}} échéance.
TEST: il faut tenir {{contes}} des faits au lieu de nos impressions.
TEST: prendre {{a}} la légère ce test serait une erreur.
TEST: on va suivre ça de {{prêt}}.
TEST: il faut se tenir {{a}} distance de ces gens-là.
TEST: J’avais du mal {{a}} l’écouté (double erreur utile pour tester le faux positif)
TEST: cette expérience ne va pas tarder à tourner {{cours}}.
TEST: il faut rendre {{comte}} de la sitation désastreuse dans laquelle nous sommes tombés.
TEST: il faut tenir {{comtes}} des aléas de la météo.
TEST: faudra rendre bon {{conte}} de vos actes
TEST: Elle est restée {{jeûne}}.
TEST: Mourir {{jeûne}} ne lui faisait pas peur.
TEST: elle suit ça de {{prêt}}
................................................................................
TEST: La poïesis, en grec, est ce qui permet de faire passer n’importe quoi du non-être à l’être
TEST: un moteur nouvelle génération
TEST: La première est la critique dite artiste
TEST: la critique conduit nombre de protestataires à se replier sur des modalités de défense efficaces dans le passé mais désormais largement inadaptées
TEST: Tu crois que Microsoft peut contraindre les projets libres à quoi que ce soit ?
TEST: « L’école produit la norme en matière de langage »
TEST: Parler affaires.
TEST: Mon Dieu, je vous en prie, faites qu’il ne m’arrive rien
TEST: Anne, je t’en prie, viens de bonne heure
TEST: elles ont toutes deux épluché le contenu de la boîte



@@@@
@@@@
@@@@
@@@@
................................................................................
@@@@END_GRAPH                                                                                      _
@@@@
@@@@
@@@@
@@@@







!!!! Redondances dans la phrase                                                                   !!

__[i]/redon2(redondances_phrase)__
    ({w_4})[ ,].* (\1)  @@0,$
        <<- not morph(\1, ":(?:G|V0)|>même/") -2>> _                                                # Dans cette phrase, répétition de “\1” (à gauche).
        <<- __also__ -1>> _                                                                         # Dans cette phrase, répétition de “\1” (à droite).
................................................................................
TEST: l’amour {{immortels}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’étonnant {{colliers}} qu’il avait autour du cou.


__gn_le_1m__
    ,  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\3)           # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    *WORD  le  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
            or ( morph(\3, ":[NA].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> =suggLesLa(\3)                                                                         # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", "*")
            or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggMasSing(\3)                                                                       # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    <start>  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\3)                     # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

TEST: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
TEST: j’en ai marre, {{le}} {{passée}} est trop dans les esprits
TEST: {{Le}} démoralisation.                                  ->> La
TEST: {{Le}} Guyane française.                                ->> La
TEST: sur {{le}} {{tables}}                                   ->> les|la|||
TEST: avec {{le}} {{pile}}
TEST: contre {{le}} {{rois}}
TEST: {{le}} {{publique}}
TEST: {{Le}} {{pendue}}
TEST: {{Le}} personne répond.
TEST: {{le}} {{quotients}}
TEST: Comme avec l’Hyperloop, le bus chinois conçu pour passer au-dessus des voitures
................................................................................
    des  *WORD  *WORD
        <<- /gn/ (morph(<1, ":(?:[VRBX]|Cs)|>comme/|<start>|>,", "*") or morph(\3, ":N", ":[AQ]")) and not \3.startswith("seul") >>>
        <<- /gn/ ( (morph(\2, ":[NA].*:m", ":[fe]") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":[me]") and morph(\3, ":[NA].*:m", "*")) ) and not apposition(\2, \3)
        -3>> =switchGender(\3, True)                                                                # Accord de genre erroné avec « \2 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 # Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          # Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.
        <<- not morph(\3, ":G|>a/") and checkAgreement(\2, \3) =>> =exclude(\3, ":V")

TEST: faire table rase des passions {{inutile}}               ->> inutiles
TEST: à bonne distance des {{chiens}} {{méchante}}
TEST: des hommes {{attaquée}}
TEST: des femmes {{agressé}}
TEST: des hommes très mal {{renseigné}}                       ->> renseignés
TEST: des dépenses non {{nécessaire}}                         ->> nécessaires
................................................................................

TEST: Des yeux {{vert}}.
TEST: Des yeux {{marrons}}.
TEST: Des créatures marines.
TEST: Un cageot des premières cerises.


__sgpl_couleurs_composées!5__

    [>beige|>châtain|>cyan|>écarlate|>jaune|>magenta|>marron|>mauve|>orange|>pourpre|>rouge|>rose|>vermeille] [>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>brillante|>claire|>vive|foncé+ses|irisé+ses]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
        ->> =suggSing(\1) + " " + suggMasSing(\2)
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    [>blanche|>bleue|>brune|>grise|>noire|>verte|>violette] [>fluo|>mat|>pâle|>pastel|>sombre|>tendre|>terne|>brillante|>claire|>vive|foncé+ses|irisé+ses]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":[pf]"))
        ->> =suggMasSing(\1) + " " + suggMasSing(\2)
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    >jaune [>paille|>sable]
    >rose  [>bonbon|>chair|>corail]
    >rouge [>brique|>carmine|>cerise|>écarlate|rubis|>sang|>tomate|>vermillon]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
        ->> =suggSing(\1) + " " + suggSing(\2)






        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    >bleue [>ciel|>indigo|>marine|>roi|>saphir|>turquoise|>verte]
    >blonde >platine
    >grise [>acier|>anthracite|>perle|souris]
    >verte [>émeraude|>olive|>pistache|>pomme]
        <<- /sgpl/ morph(<1, ":N", ":D") and (not morph(\1, ":[me]:[si]") or morph(\2, ":p"))
................................................................................
        ->> =suggMasSing(\1) + " " + suggSing(\2)
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

    >noire [de|d’] [encre|jais]
        <<- /sgpl/ not morph(<1, ":D") -1>> noir
        # Les couleurs composées de plusieurs termes sont invariables.|https://fr.wikipedia.org/wiki/Accord_des_adjectifs_et_des_noms_de_couleur_en_fran%C3%A7ais

TEST: les chapeaux {{rouges clairs}}                                        ->> rouge clair
TEST: des chaussures {{jaunes sables}}                                      ->> jaune sable|||sablent
TEST: des pantalons {{verts clairs}}                                        ->> vert clair
TEST: des robes {{bleues indigo}}                                           ->> bleu indigo
TEST: des voitures {{jaunes fluo}}                                          ->> jaune fluo
TEST: Une jupe {{bleue foncée}}.                                            ->> bleu foncé
TEST: boutons {{roses pâles}}                                               ->> rose pâle
TEST: Il a une queue {{bleue vert}}.                                        ->> bleu vert
TEST: Il a une queue {{marron claire}}.                                     ->> marron clair
TEST: Il a une queue {{verte clair}}                                        ->> vert clair
TEST: Des cheveux {{noirs}} de jais.                                        ->> noir
TEST: Une jupe bleu foncé.
TEST: Des yeux vert clair.
TEST: Des yeux vert olive.
TEST: Ses cheveux étaient noir de jais.
TEST: Il a une queue vert émeraude
TEST: Il a une queue bleu vert



!!
!!
!!!! Singuliers & Pluriels                                                                        !!
!!
................................................................................
TEST: On va procéder par {{intervalle}}


# juste
__sgpl_juste__
    justes
        <<- /sgpl/ \1.islower() and morph(<1, ":V", ":[DA]") and not morph(>1, ":[NA].*:[pi]")
            and not (morph(<1, ">(?:être|sembler|devenir|rester|demeurer|redevenir|para[îi]tre|trouver)/.*:[123]p") and morph(>1, ":G|<end>|>,/"))
        ->> juste                                                   # Si “juste” est un adverbe, il est invariable.

TEST: Viser {{justes}}
TEST: Voir {{justes}}.
TEST: Penser juste.
TEST: Dures mais justes.
TEST: J’ai retrouvé tout mon ressenti, tous les mots sont justes.
TEST: Nos chiffres sont justes, et nous vous le prouverons.
TEST: Ces observations sont tellement justes que, dans les années à venir, elles serviront de référence.
TEST: Les motivations sont justes et évidentes
TEST: ces théories incomplètes sont suffisamment justes pour prédire la réalité
TEST: À vous de trouver les compromis que vous trouvez justes.


# pied
__sgpl_pied__
    [>avoir|>perdre]  pieds
        <<- /sgpl/ -2>> pied                                        # Locution “\1 pied” : écrivez “pied” au singulier.

................................................................................
    [>pouvoir|>vouloir|>falloir] [rires|mangers|êtres|avoirs]
        <<- /sgpl/ morph(\1, ":V") -2>> =\2[:-1]                    # Si “\2” est censé être un verbe, ne mettez pas la marque du pluriel.


TEST: On peut {{rires}}, non ?
TEST: Faire {{rires}}, c’est compliqué.


!!!! Adverbes après verbe                                                                         !!

# fort
__sgpl_verbe_fort__
    forts
        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)|>(?:affirmer|trouver|croire|désirer|estimer|préférer|penser|imaginer|voir|vouloir|aimer|adorer|rendre|souhaiter)/")
            and not morph(>1, ":A.*:[me]:[pi]")
        ->> fort                                                # Confusion probable. S’il s’agit ici de l’adverbe “fort” (équivalent de “fortement”), écrivez-le au singulier.

    hauts [et|&] forts
        <<- /sgpl/ morph(<1, ":V", ":[AN].*:[me]:[pi]|>(?:être|sembler|devenir|re(?:ster|devenir)|para[îi]tre|appara[îi]tre)/.*:(?:[123]p|P|Q|Y)")
        ->> haut et fort                                        # Confusion probable. S’il s’agit ici de la locution adverbiale “haut et fort”, elle est invariable.

TEST: ces emmerdeurs crient bien trop {{forts}}
TEST: Ils déclamèrent {{hauts et forts}} leur amour de leur patrie.
TEST: parler {{hauts & forts}}
TEST: ces animaux paraissent forts, mais ils sont faibles.
TEST: ils sont forts, ces gars-là.
TEST: ils se croient forts.
TEST: je les imagine forts et intelligents.
TEST: elles les veulent forts et astucieux.
TEST: les écarts ont été plus forts en une génération
TEST: Avec le même nombre de bulletins, les xénophobes apparaîtront plus forts.
TEST: Pour leur permettre d’être plus forts face aux maîtres de tous bords, patrons, maris ou bureaucrates.
TEST: Il nous rend forts.


# bien
__sgpl_verbe_bien__
    biens
        <<- /sgpl/ morph(<1, ":V", ":[DA].*:p") ->> bien        # Confusion probable. Ici, “bien” est un adverbe, donc invariable.

TEST: Ils vont {{biens}}.
TEST: Elles travaillaient vraiment {{biens}}.
TEST: Il ne comprenait vraiment pas très {{biens}} ces principes de base.
TEST: Il a de grands biens.
TEST: Ce sont des biens de peu de valeur.



!!
!!
!!!! Confusions                                                                                   !!
!!
!!
................................................................................
TEST: Un film {{dénudé}} de tout intérêt.
TEST: Une personne {{dénudée}} de toute compassion.
TEST: Une histoire {{dénudée}} d’intérêt.
TEST: Des hommes {{dénudés}} de compassion.


# desceller / déceler / desseller
__conf_erreur_déceler_desseller_desceller__
    [>erreur|>faute|>incohérence|>problème|>bug|>bogue|>faille|>maladie|>défaut|>défaillance|>perturbation|>irrégularité] <> [>desseller|>desceller]
        <<- /conf/ --1>> =\-1.replace("escell", "écel").replace("essell", "écel")
        # Confusion probable si ce verbe se rapporte à “\1”. Desceller signifie briser un sceau, un cachet… Desseller signifie ôter une selle. Si vous voulez dire “remarquer”, “dévoiler”, “découvrir”, écrivez “déceler”.|http://fr.wiktionary.org/wiki/déceler

    [>desseller|>desceller] [l’|@:[BD]] [>petite|>grande|>énorme|>dangeureuse|>formidable|>forte|>légère|>merveilleuse|>nouvelle|>vrai|>réelle|>sévère|>véritable] [>acidité|>activité|>allergie|>anévrisme|>anomalie|>arnaque|>appendicite|>atrophie|>baisse|>bébé|>blessure|>bug|>bogue|>carie|>cancer|>cause|>changement|>complot|>comète|>concentration|>corrélation|>croissance|>défaut|>défaillance|>demande|>dépression|>diabète|>différence|>diminution|>effluve|>épilepsie|>erreur|>essai|>existence|>grossesse|>grosseur|>faille|>faute|>fuite|>fraude|>grippe|>handicap|>hausse|>hémorragie|>hostilité|>hypertrophie|>incompatibilité|>incohérence|>infection|>infraction|>indice|>infidélité|>insuffisance|>intrigue|>irrégularité|>leucémie|>lésion|>lueur|>lumière|>maladie|>malformation|>manœuvre|>manipulation|>molécule|>mensonge|>mutation|>once|>perturbation|>personnalité|>piste|>perte|>planète|>exoplanète|>présence|>qualité|>odeur|>opportunité|>otite|>problème|>surdité|>talent|>tendance|>tentative|>tumeur|>utilisation|hoax|>variation|>vie|virus]
        <<- /conf/ -1>> =\1.replace("escell", "écel").replace("essell", "écel")
        # Confusion probable si ce mot se rapporte à “\3 \4”. Desceller signifie briser un sceau, un cachet… Desseller signifie ôter une selle.|http://fr.wiktionary.org/wiki/déceler
................................................................................
# éminent / imminent
__conf_éminent_imminent__
    >imminente [>actrice|>confrère|>collègue|>dirigeante|>dissidente|>entrepreneuse|>experte|>défenseuse|>intellectuelle|>mathématicienne|>musicienne|>pédiatre|>personalité|>personnage|>professeur|>physicienne|>rabbin|>représantante|>savante|>chirurgienne|>neurochirurgienne|>scientifique|>service|>spécialiste|~logues?$|~istes?$]
        <<- /conf/ -1>> =\1.replace("imm", "ém").replace("Imm", "Ém")
        # Confusion probable. Si “\1” se rapporte à “\2”, alors vous voulez probablement dire “éminent” ; “imminent” signifie “qui va survenir prochainement”.|https://fr.wiktionary.org/wiki/%C3%A9minent

    [>actrice|>confrère|>collègue|>dirigeante|>dissidente|>entrepreneuse|>experte|>défenseuse|>intellectuelle|>mathématicienne|>musicienne|>pédiatre|>personalité|>personnage|>professeur|>physicienne|>rabbin|>représantante|>savante|>chirurgienne|>neurochirurgienne|>scientifique|>service|>spécialiste|~logues?$|~istes?$] >imminente
        <<- /conf/ morph(<1, ":D") -2>> =\2.replace("imm", "ém").replace("Imm", "Ém")
        # Confusion probable. Si “\2” se rapporte à “\1”, alors vous voulez probablement dire “éminent” ; “imminent” signifie “qui va survenir prochainement”.|https://fr.wiktionary.org/wiki/%C3%A9minent

    [>accouchement|>accord|>arrivée|>assaut|>attaque|>atterrissage|>cataclysme|>catastrophe|>changement|>conflit|>crash|>danger|>décollage|>départ|>désarmement|>déclenchement|>effondrement|>éruption|>fin|>guerre|>lancement|>orage|>ouragan|>péril|>remaniement|>réponse|>résultat|>retour|>séisme|>tempête|>tsunami|>verdict] ?>être¿ >éminente
        <<- /conf/ --1>> =\-1.replace("émi", "immi").replace("Émi", "Immi")
        # Confusion probable. Si “\-1” se rapporte à “\1”, alors vous voulez probablement dire “imminent” ; “éminent” signifie “notable”.|https://fr.wiktionary.org/wiki/%C3%A9minent

TEST: mon {{imminent}} collègue.
TEST: Les scientifiques les plus {{imminents}}.
TEST: l’accouchement est {{éminent}}.
TEST: Mon {{imminent}} collègue.
TEST: Un paléontologue {{imminent}}.
TEST: L’arrivée est imminente.
TEST: Des paléontologues éminents.
TEST: aucune menace terroriste imminente


# enduire / induire
__conf_enduire_induire__
    >enduire en [>erreur|>tentation]
        <<- /conf/ -1>> =\1.replace("end", "ind").replace("End", "Ind").replace("END", "IND")       # Confusion probable. “Enduire” signifie “appliquer un enduit”.|https://fr.wiktionary.org/wiki/induire

................................................................................
TEST: {{Tachez}} d’arriver à l’heure.
TEST: {{Tache}} de ne pas faire trop de bruit.
TEST: une tâche dévalorisante.
TEST: peiner à la tâche.


# taule / tôle
__conf_taule_tôle2__
    >aller en [>tôle|>tole]
    >quitter cette [tôle|tole]
    >faire de la [tôle|tole]
        <<- /conf/ --1>> taule                                      # Confusion. La tôle est une plaque de métal laminé. Pour la prison, écrivez “taule”.

    [>taule] [>boulonner|>cintrer|>émailler|>emboutir|>galvaniser|>gaufrer|>nervurer|>onduler|>perforer|>souder|>translucide]
        <<- /conf/ -1>> =\1.replace("au", "ô").replace("AU", "Ô")   # Confusion. La taule est la forme argotique pour évoquer la prison, le bordel ou toute forme d’habitation.




TEST: Demain, il va aller en {{tôle}}.
TEST: Tu as fait de la {{tôle}} ?
TEST: C’est la {{taule}} galvanisée.



# tant / temps (2e partie)
__conf_tant_temps_tan__
    en [temps|>tan] [que|qu’]
        <<- /conf/ -2>> tant                                        # Confusion. Écrivez « en tant que ».|http://fr.wiktionary.org/wiki/en_tant_que

................................................................................
TEST: être en {{tore}}
TEST: Faire {{torr}}


# venimeux / vénéneux
__conf_venimeux_vénéreux__
    [>serpent|>araignée|>scorpion|>vipère|>cobra|>crapaud|>grenouille|>dendrobate|>poulpe|>guêpe|>abeille|>frelon|>méduse|>morsure|>piqûre|>dard|>dent|>croc|>crochet]  >vénéneuse
        <<- /conf/ -2>> =\1.replace("énén", "enim").replace("ÉNÉN", "ENIM")                         # Confusion : “vénéneux” se dit des plantes, employez “venimeux”.

    [>plante|>champignon|>lépiote|>baie|>fruit|>herbe|>fleur|>chair|>moule|humus|>substance|>végétal]  >venimeuse
        <<- /conf/ -2>> =\1.replace("enim", "énén").replace("ENIM", "ÉNÉN")                         # Confusion : pas de venin ici.

TEST: ces araignées {{vénéneuses}}.
TEST: ce champignon {{venimeux}}.



!!
................................................................................
TEST: la pression entre les membres à un moment devient trop importante
TEST: Macron saisit la discorde avec le Brésil pour s’opposer à l’embarrassant accord
TEST: Je vous renvoie pour cela à l’excellent documentaire
TEST: cuisiner à l’étouffée


__infi_loc_à_verbe__
    de manière à    ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
    du mal à        ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
    intérêt à       ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
    enclin à        ?[le|l’|la|leur|les|nous|vous|lui]¿     ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\-1, ":V", ":M") and not (\-1.endswith("ez") and value(>1, "|vous|"))
        --1>> =suggVerbInfi(\-1)                                                                    # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.

TEST: de manière à {{obligé}} ces gens
TEST: ils ont intérêt à {{obligés}} ces gens
TEST: Tous ceux qui ont du mal à {{obligé}} ces gens


__infi_verbe_de_verbe__
    [>arrêter|>cesser|>choisir|>commander|>continuer|>décider|>défendre|>envisager|>essayer|>éviter|>interdire|>omettre|>permettre|>prévoir|>refuser|>suggérer|>tenter]
        || [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  *WORD
        <<- /infi/ not morph(\1, ":N") and (analyse(\-1, ":V1.*:Q", ":(?:M|Oo)") or analyse(\-1, ":[123][sp]", ":[MNG]"))
        --1>> =suggVerbInfi(\-1)                                                                    # Après “\1 de”, le verbe devrait être à l’infinitif.

TEST: cessez d’{{anesthésié}} ces gens !
TEST: arrête d’y {{consacré}} autant de temps.
TEST: Il tentait de {{raisonné}} en homme libre
TEST: Le menu Format contient de nombreuses commandes de mise en forme.
TEST: Le commandant de zone…
TEST: À quoi rime de décider de mesures écologiques d’en haut
TEST: L’accès au cannabis thérapeutique où à ses dérivés permettrait de plus aux autorités de santé d’apporter aux malades les garanties nécessaires quant à la qualité, aux concentrations, ainsi qu’aux modalités d’obtention et d’utilisation optimale.
TEST: l’industrie est également touchée, avec « des pertes de commandes de véhicules chez Renault et chez Peugeot »


__infi_qqch_de__
    afin                                        [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    avant ?même¿                                [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    marre                                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif.

    à [condition|défaut|même]                   [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “à \2 de”, le verbe devrait être à l’infinitif.

    à >seule >fin                               [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “à seule fin de”, le verbe devrait être à l’infinitif.

    en  [droit|état|mesure|train|vue]           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 \2 de”, le verbe devrait être à l’infinitif.

    >avoir l’ air                               [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir l’air de”, le verbe devrait être à l’infinitif.

    >avoir la chance                            [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir la chance de”, le verbe devrait être à l’infinitif.

    >avoir le droit                             [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir le droit de”, le verbe devrait être à l’infinitif.

    >avoir [besoin|raison]                      [de|d’]  ?[le|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir \2 de”, le verbe devrait être à l’infinitif.

    >avoir [besoin|raison]                      [de|d’]  [l’|la]                   ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":[MN]") --1>> =suggVerbInfi(\-1)                             # Après “avoir \2 de”, le verbe devrait être à l’infinitif.

    >avoir vite fait                            [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “avoir vite fait de”, le verbe devrait être à l’infinitif.

    >faire  semblant                            [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “faire semblant de”, le verbe devrait être à l’infinitif.

    [>façon|>manière]                           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
    [>intention|>volonté]                       [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\1 de”, le verbe devrait être à l’infinitif s’il s’agit bien de décrire une action.

    il >être [temps|admissible|inadmissible|absurde|contraignant|libérateur|difficile|facile|impossible|indispensable|nécessaire|possible|utile|inutile]
        || [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “il est \3 de”, le verbe devrait être à l’infinitif.

    il >être hors de question                   [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “il est hors de question de”, le verbe devrait être à l’infinitif.

    [<start>|,] [>capable|>incapable|impossible|inutile]  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “\2 de”, le verbe devrait être à l’infinitif.

    force [est|était]                           [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ not value(<1, "|une|la|cette|ma|ta|sa|notre|votre|leur|quelle|de|d’|") and analyse(\-1, ":Q", ":M")
        --1>> =suggVerbInfi(\-1)                                                                    # Après “force est de”, le verbe devrait être à l’infinitif.

    sous peine                                  [de|d’]  ?[le|l’|la|leur|les|nous|vous|lui]¿  ~..ée?s?$
        <<- /infi/ analyse(\-1, ":Q", ":M") --1>> =suggVerbInfi(\-1)                                # Après “sous peine de”, le verbe devrait être à l’infinitif.

TEST: afin de leur {{percée}} une ouverture
TEST: en train de {{percées}}
TEST: elle tricha à seule fin d’{{allée}} à l’université
TEST: ils sont à même de {{trouvé}} la bonne réponse
TEST: Nous étions en train de {{trouvé}} une solution à ces soucis récurrents.
TEST: il a l’air de {{pensée}} qu’on est des crétins
TEST: tu avais raison de {{pensée}} ça
TEST: nous eûmes la chance de la {{trouvée}} facilement
TEST: avoir raison de la {{considérée}} ainsi
TEST: vous avez le droit de lui {{craché}} à la gueule
TEST: ils ont vite fait de nous {{poussée}} à bout
TEST: elle est en train de {{mangée}}
TEST: je déteste sa manière de la {{rabaissée}} en permanence.
TEST: il est hors de question de {{menée}} cette attaque ainsi
TEST: il serait temps de {{poussée}} la logique jusqu’au bout
TEST: impossible d’{{échappée}} à cette horreur.
TEST: Force est d’{{pensée}} que nous allons y arriver avec seulement nos bonnes intentions.
TEST: sous peine de nous {{pesée}} lourd sun l’estomac
TEST: Sont-ils en mesure de nous {{fabriqué}} ces armes ?
TEST: Ne fais pas semblant de l’{{oubliée}}.


__infi_de_verbe__
    [de|d’]  [le|l’|leur|les]             @:V¬:[YNAM]|>(?:lui|plus)/
    [<start>|,]  [de|d’] [nous|vous|lui]  @:V¬:[YE]|>(?:lui|plus)/
        <<- /infi/ \-1.islower() --1>> =suggVerbInfi(\-1)                               # Erreur probable. Après “de”, le verbe devrait être à l’infinitif.

................................................................................
    [de|d’] [ne|n’]    [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  @:V¬:Y|>(?:lui|plus|point)/
    [de|d’] [ne|n’|en|me|m’|te|t’|se|s’|y]                                       @:V¬:Y|>(?:lui|plus|point)/
    [de|d’] ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:V¬:Y
    [de|d’] ?[ne|n’]¿  [le|la|l’|les]                 [lui|leur|en|y]            @:V¬:Y
    [de|d’] ?[ne|n’]¿  [lui|leur]                     en                         @:V¬:Y
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             # Après “de”, le verbe devrait être à l’infinitif.







    [de|d’]  @:V1.*:Q¬:N
        <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer)/")
            and not before("(?i)(?:quelqu(?:e chose|’une?)|qu’y a-t-il |\\b(?:l(?:es?|a)|nous|vous|me|te|se) trait|personne|points? +$|autant +$|ça +|rien d(?:e |’)|rien(?: +[a-zéèêâîûù]+|) +$)")
            and not tag_before(\1, "ce_que")
        -2>> =suggVerbInfi(\2)                                                          # Le verbe devrait être à l’infinitif.

TEST: d’en {{parlé}} sans cesse
TEST: cela suffit de les {{aimait}}
TEST: de ne leur en {{avancé}} que le nécessaire.
TEST: de l’y {{poussé}}

TEST: je suis certain d’en {{choque}} plusieurs.
TEST: elle était capable de la {{trouvait}} où qu’elle soit.
TEST: de me le {{facturez}}
TEST: suffit de {{la}} {{finit}}
TEST: Il s’agit de me {{donnait}} tout ça.
TEST: j’étais incapable de m’{{orientait}} dans la bonne direction.
TEST: ils étaient susceptibles de m’y {{trouvaient}}

TEST: sa façon de {{nettoyez}} était inefficace.
TEST: elle a délibérément omis de les {{inclurent}}.


TEST: d’{{mangé}} je ne suis pas capable
TEST: elle s’engage de ne les lui donner qu’en dernier recours.
TEST: l’idée consiste de la lui donner sans contrepartie et voir ce qu’il en fera.
TEST: de leur plus grand fils, ils attendent beaucoup.
TEST: de n’importe quelle manière
TEST: un libéralisme trop « individualiste » s’est transformé en de supposées demandes de droits spécifiques
TEST: soit 40 % de plus comparé au quinquennat précédent
................................................................................
    >avoir beau ?[ne|n’]¿   [lui|leur|y]                    en                       ~..(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V1") --1>> =suggVerbInfi(\-1)                                       # Après “avoir beau”, le verbe devrait être à l’infinitif.|http://fr.wiktionary.org/wiki/avoir_beau

TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.


__infi_est_ce_que__
    est-ce  [que|qu’]  @:(?:V1.*:Q|[13]s|2[sp])¬:[GYWMN]
        <<- /infi/ not value(<1, "|que|qu’|") -3>> =suggVerbInfi(\3)                                # Après “est-ce que”, le verbe devrait être à l’infinitif.

TEST: est-ce que {{rapporté}} ces données nous aidera ?
TEST: est-ce que {{priait}} est la solution ?
TEST: Est-ce que Pierre Xazzz va bien ?
TEST: Qu’est-ce que rapporte réellement Dassault & Co au budget

................................................................................
TEST: Il faudrait l’{{essayé}}.
TEST: Il faudra ne {{touché}} qu’aux extrémités.
TEST: faut-il {{pensé}} à ces choses-là encore et encore ?
TEST: il faut n’{{estimait}} que la valeur de nos actes
TEST: il fallait bien cela pour nous épargner
TEST: une faille s’est ouverte sous nos pieds
TEST: il faut en moyenne 1000 litres d’eau pour produire un kilo de céréales
TEST: Xi Jinping a réaffirmé en janvier dernier qu’il utiliserait s’il le faut la force militaire


__infi_faire__
    >faire  ~(?:ée?s?|ez)$
        <<- /infi/ not morph(<1, ">(?:en|de|être)/") and morph(\2, ":V", ":[MG]") and not (morph(\1, ":N") and morph(\2, ":Q.*:m:[sp]"))
        -2>> =suggVerbInfi(\2)                                                                      # Après le verbe “faire”, ce verbe devrait être à l’infinitif.

................................................................................

TEST: Mieux vaut {{consacré}} son temps à des occupations utiles.
TEST: Mieux ne vaut pas {{arrivé}} en retard.
TEST: il eût mieux valu {{oublié}} cette affaire plutôt que réveiller ce dragon endormi.


__infi_verbes__
# regarder, écouter, ouïr
    [>aimer|>désirer|>entendre|>espérer|>oser|>préférer|>souhaiter]  ?[pas|plus|point|guère|jamais]¿  ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\1, ":", ":[GN]") and morph(\2, ":V", ":M")
        -2>> =suggVerbInfi(\2)                                                                      # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.

    [>aller|>venir|>partir]  ?[pas|plus|point|guère|jamais|rien]¿  ~..(?:ée?s?|ez)$
        <<- /infi/ morph(\1, ":", ":[GN]") and morph(\-1, ":V", ":M|>(?:accompagner|armer|armurer|casquer|déguiser)/")
        --1>> =suggVerbInfi(\2)                                                                     # S’il s’agit d’une action à accomplir, le verbe devrait être à l’infinitif.

TEST: elle préférait {{mangée}} seule.                                                  ->> manger
TEST: Il venait, comme d’habitude, {{discuté}} avec son ami.                            ->> discuter
TEST: Ces types-là venaient {{mangé}} chez moi tous les dimanches.                      ->> manger
TEST: ils viennent bien entendu {{attaqué}} le parlement                                ->> attaquer
TEST: ils vont par voie de conséquence vraiment {{attaqué}} la banque                   ->> attaquer
TEST: elles ont pu {{mangé}}                                                            ->> manger
TEST: Cette affaire ne va rien {{arrangé}}.                                             ->> arranger
TEST: ils vont de manière non conventionnelle {{fêtée}} leur réussite.                  ->> fêter
TEST: ils vont de manière absurde {{arrivé}} au résultat inverse à leurs espérances     ->> arriver
TEST: croyez-vous qu’ils oseront {{proposé}} des amendements aussi audacieux ?          ->> proposer
TEST: Quelle est cette femme que j’ai entendue {{chanté}} ?                             ->> chanter
TEST: elles partaient {{prié}} chaque matin                                             ->> prier
TEST: jamais entendu {{parlé}} de ces choses                                            ->> parler
TEST: Elles étaient venues armées.
TEST: Il vint déguisé en mousquetaire.
TEST: D’ailleurs j’irai armé.
TEST: J’irai armé de mon épée.
TEST: Si possible, venez accompagné.
TEST: Elle vint accompagnée de son père.

................................................................................
__ppas_sont_adj__
    sont  *WORD
        <<- /ppas/ morph(\2, ":V", ":(?:N|A|Q|W|G|3p)") and not tag_before(\1, "ce_que")
        -2>> =suggVerbPpas(\2, ":m:p")                      # Incohérence : “\2” n’est pas un participe passé.

TEST: après avoir mis à jour sont {{profile}}.





































!!
!!
!!!! Conjugaisons nous / vous (2ᵉ partie)                                                         !!
!!
!!
................................................................................

TEST: Étaient-elles {{arriver}} ?
TEST: Sont-elles tout à fait {{arriver}} ?
TEST: Ne sont-elles pas {{aveugle}}
TEST: demeurent-elles {{présente}}


__ppas_ayant_été_pronom_ppas__
    ayant  été  lui-même  @:[QA].*:[fp]¬:[me][si]
        <<- /ppas/ --1>> =suggMasSing(\-1)                              # Accord avec “\3” : “\-1” devrait être au masculin singulier.

    ayant  été  elle-même  @:[QA].*:[mp]¬:[fe][si]
        <<- /ppas/ --1>> =suggFemSing(\-1)                              # Accord avec “\3” : “\-1” devrait être au féminin singulier.

    ayant  été  [nous-même|vous-même]  @:[QA].*:p¬:[si]
        <<- /ppas/ -3>> \3s                                             # Accord avec “\-1” : “\3” devrait être au pluriel.
        <<- /ppas/ __also__ --1>> =suggSing(\-1)                        # Accord avec “\3” : “\-1” devrait être au singulier.

    ayant  été  [nous-mêmes|vous-mêmes]  @:[QA].*:s¬:[pi]
        <<- /ppas/ -3>> =\3[:-1]                                        # Accord avec “\-1” : “\3” devrait être au singulier.
        <<- /ppas/ __also__ --1>> =suggPlur(\-1)                        # Accord avec “\3” : “\-1” devrait être au pluriel.

    ayant  été  eux-mêmes  @:[QA].*:[fs]¬:[me][pi]
        <<- /ppas/ --1>> =suggMasPlur(\-1)                              # Accord avec “\3” : “\-1” devrait être au masculin pluriel.

    ayant  été  elles-mêmes  @:[QA].*:[ms]¬:[fe][pi]
        <<- /ppas/ --1>> =suggFemPlur(\-1)                              # Accord avec “\3” : “\-1” devrait être au féminin pluriel.

    ayant été [lui-même|elle-même|nous-même|vous-même|nous-mêmes|vous-mêmes|eux-mêmes|elles-mêmes]
        <<- ~3>> *

TEST: ayant été lui-même {{attaquée}}                               ->> attaqué
TEST: ayant été elle-même {{pris}} dans la tourmente                ->> prise
TEST: ayant été {{vous-même}} {{blâmés}}                            ->> vous-mêmes|||blâmé
TEST: ayant été {{nous-mêmes}} {{blâmé}}                            ->> nous-même|||blâmés
TEST: ayant été eux-mêmes {{chapitré}}                              ->> chapitrés
TEST: ayant été elles-mêmes {{ignorés}} par leur hiérarchie         ->> ignorées



!!
!!
!!!! Se croire/considérer/montrer/penser/révéler/savoir/sentir/voir/vouloir + participe passé/adj !!
!!
!!

................................................................................
TEST: il en a toujours {{était}} ainsi                                              ->> été
TEST: Ils avaient barre sur lui.


__ppas_nous_vous_avoir__
    [nous|vous]  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
    <<- /ppas/ morph(\1, ":Os")
        and not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        and value(<1, "|<start>|,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
        and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
    --1>> =suggVerbPpas(\-1, ":m:s")
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Nous avons {{donne}} tout notre potentiel.
TEST: mais nous avons {{était}} surpris par cette annonce.
................................................................................
TEST: Vous lui avez {{donnés}} un cadeau.
TEST: nous avions quelque peu {{tempérés}} leurs ardeurs
TEST: D’un côté, le modèle occidental, […], nous a libérés de […]


__ppas_det_nom_avoir__
    [un|une|des|le|la|l’|les|ce|cet|cette|ces|mon|ton|son|ma|ta|sa|mes|tes|ses|notre|votre|nos|vos|leur|leurs|certains|certaines|quelques|plusieurs]  *WORD  ?[ne|n’]¿  ?[lui|leur]¿  >avoir  *WORD
    <<- /ppas/ not value(\-1, "|barre|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        and value(<1, "|<start>|,|comme|comment|et|lorsque|mais|où|ou|quand|qui|pourquoi|puisque|quoique|si|sinon|")
        and morph(\2, ":[NA]", ":G") and not \-1.isupper() and morph(\-1, ":(?:[123][sp]|Y|Q.*:[fp])", ":(?:G|W|Q.*:m:[si])")
        and not (\-2 == "avions" and morph(\-1, ":3[sp]"))
    --1>> =suggVerbPpas(\-1, ":m:s")
    # Ce verbe devrait être un participe passé au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Les femmes lui avait {{conseillées}} de se taire.
................................................................................
TEST: Les élèves lui ont {{données}}.
TEST: Les élèves lui ont {{donnés}} une réponse.
TEST: Les élèves leur ont {{donnée}} ça.
TEST: Le maire a {{créée}} un risque.
TEST: le général n’a pas encore {{finit}} sa sieste.
TEST: Certains les ont d’abord jugés trop lents.
TEST: les timides ou les personnes n’ayant pas confiance en elles vont avoir tendance à éviter de regarder dans les yeux.
TEST: Le théâtre, en l’occurrence, a charge de sensibiliser


__ppas_les_avoir__
    les  >avoir  @:V[0-3]..t.*:Q.*:s¬:[GWpi]
        <<- /ppas/ morph(\2, ":V0a") -3>> =suggPlur(\3)
        # Accord avec le COD “les” : Le participe passé “\2” devrait être au pluriel (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

................................................................................

TEST: des hommes, des femmes, des enfants qui ne leur avaient {{faits}} que du bien.


__ppas_avoir_ppas_mas_sing__
    [<start>|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui]  ?[ne|n’]¿  ?[lui|leur]¿   avoir  @:Q.*:[pf]¬:m:[si]
    [<start>|,|après|pour|pourquoi|quand|que|qu’|sans|d’|de|qui]  ?[ne|n’]¿  [m’|t’]        avoir  @:Q.*:p¬:[si]
        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        --1>> =suggVerbPpas(\-1, ":m:s")                      # Le participe passé devrait être au masculin singulier.|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: Avoir {{instruite}} notre mère
TEST: Après avoir {{baissés}} nos tarifs
TEST: Je viendrai, après avoir vraiment {{écoutée}} le prof.
TEST: Merci de m’avoir {{lus}}                                      ->> lu
TEST: Pourquoi m’avoir {{ignorés}} ainsi ?
................................................................................

## avoir avec participe passé
__ppas_m_t_l_avoir__
    [l’|m’]  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
        <<- /ppas/ --1>> =suggVerbPpas(\-1, ":m:s")         # Confusion : employez un participe passé.

    t’  ?[en|y]¿  >avoir  @:(?:Y|[123][sp])¬:[QGWMX]
        <<- /ppas/ not value(\-1, "|confiance|charge|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|")
        --1>> =suggVerbPpas(\-1, ":m:s")                    # Confusion : employez un participe passé.

TEST: m’avoir {{terminer}}.
TEST: il m’a {{souffler}} la bonne réponse.
TEST: elle t’en a {{parle}}.
TEST: c’est vous qui m’avez {{convertit}}.
TEST: parce que t’as envie que je le fasse
................................................................................
    >avoir  ~..e[rz]$
        <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":(?:Y|2p)")
        -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.
        <<- /ppas/ __also__ and \1 == "a" and \2.endswith("r") and not value(<1, "|n’|m’|t’|l’|il|on|elle|")
        -1>> à                                                                      # Confusion probable : “a” est une conjugaison du verbe avoir. Pour la préposition, écrivez “à”.

    >avoir  ~..it$
        <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
        -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.

    >avoir  ~.ut$
        <<- /ppas/ not value(\1, "|A|avions|avoirs|") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
        -2>> =suggVerbPpas(\2, ":m:s")                                              # Incohérence probable avec “\1” : “\2” n’est pas un participe passé.

TEST: Avoir {{marcher}} toute la journée m’a épuisée.
TEST: L’homme, voyez-vous, {{a}} réellement {{marcher}} sur la Lune.
TEST: Je ne lui ai rien {{demander}}, mais il est venu à notre secours au nom de la justice.
TEST: Avoir {{finit}} son œuvre dans les temps, ce n’est pas toujours suffisant.
TEST: ces hommes, n’en doutez pas, auraient {{put}} trouver la solution.
TEST: à celui qui aurait {{déclarer}} une telle horreur
TEST: nous avons vu des avions voler haut dans le ciel.



!!
!!
!!!! COD précédant que                                                                            !!
................................................................................



!!!! Participes passés avec “avoir” (formes interrogatives)                                       !!

__ppas_avoir_interrogatif__
    *WORD  /VCint  *WORD
        <<- /ppas/ morphVC(\2, ":V0a") and not value(\3, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
        <<- /ppas/ morph(\3, ":(?:Y|[123][sp])", ":[QMG]")
        -3>> =suggVerbPpas(\3, ":m:s")                      # Incohérence probable avec “\2”. Après “avoir”, ce verbe devrait être un participe passé.
        <<- /ppas/ __else__ and not value(\1, "|les|l’|m’|t’|nous|vous|en|") and morph(\3, ":Q.*:[fp]", ":m:[si]")
            and not morph(\1, ":[NA].*:[fp]") and not before("(?i)\\b(?:quel(?:le|)s?|combien) ")
        -3>> =suggVerbPpas(\3, ":m:s")                      # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).

    [<start>|,]  ?n’¿  /VCint  *WORD
        <<- /ppas/ morphVC(\-2, ":V0a") and not value(\-1, "|barre|charge|confiance|cours|envie|peine|prise|crainte|cure|affaire|hâte|force|recours|") >>>
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QMG]")
        --1>> =suggVerbPpas(\-1, ":m:s")                    # Incohérence probable avec “\-2”. Après “avoir”, ce verbe devrait être un participe passé.
        <<- /ppas/ __else__ and morph(\-1, ":Q.*:[fp]", ":m:[si]")
        --1>> =suggVerbPpas(\-1, ":m:s")                    # Avec “avoir”, il faut un participe passé (au masculin singulier, sauf éventuellement si un COD précède).

TEST: cet été ont-ils {{mentionnés}} la sécheresse                              ->> mentionné
TEST: quand ont-ils {{donner}} satisfaction                                     ->> donné
TEST: qui a-t-elle {{connut}}                                                   ->> connu
................................................................................
TEST: Avez-vous {{signez}} le contrat ?
TEST: Ont-ils {{finit}} le travail ?
TEST: Ai-je déjà {{reconnut}} mes torts ?
TEST: N’avais-tu pas crainte de tout perdre ?
TEST: Combien de bêtes n’as-tu pas déjà massacrées
TEST: Combien de bêtes as-tu déjà massacrées
TEST: A-t-il Pierre pour ami ?
TEST: Quel lien y a-t-il entre donner et recevoir ?


__ppas_l_m_t_avoir_interrogatif__
    [l’|m’|t’]  /VCint  *WORD
        <<- /ppas/ morphVC(\2, ":V0a") and morph(\3, ":(?:Y|2p|Q.*:p|3[sp])", ":[GWsi]")
        -3>> =suggVerbPpas(\3, ":m:s")                      # Accord avec le COD “\1” : le participe passé “\3” devrait être au singulier (et accordé en genre).

................................................................................
TEST: comment {{sait elle}}
TEST: qui {{était elle}} ?
TEST: quel travail {{avait elle}} accompli ?
TEST: je ne comprenais pas pourquoi c’était elle qui était punie et que personne ne parlait de celui qui avait fait ça.
TEST: C’était elle qui avait pris le contrôle.


__inte_union_nous2!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~ons$  nous  @:¬:1p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:1p", ":[GW]")
        -2:3>> \2-nous                                                                              # Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [sommes|étions|fûmes|fussions|serons|serions|avons|avions|eûmes|eussions|aurons|aurions]  nous
        <<- /inte/ space_after(\2, 1, 1)
................................................................................
    *WORD  ~ons$  nous  [<end>|,]
    *WORD  ~ons$  nous  @:¬:(?:Y|1p)
        <<- /inte/ space_after(\2, 1, 1) and
            ( (value(\2, "|avions|") and not morph(\1, ":A.*:[me]:[sp]") and not morph(\-1, ":(:?3[sp]|Ov)"))
            or (morph(\2, ":V.*:1p", ":[GNW]") and not morph(\1, ":Os")) )
        -2:3>> \2-nous                                                                              # Forme interrogative ? Mettez un trait d’union.

TEST: y {{retrouverons nous}} enfin la tranquilité ?
TEST: pourquoi {{sommes nous}} réellement des dieux ?
TEST: À quelle autorité {{prétendons nous}} sur ces gens…
TEST: quel exercice {{avions nous}} revu ?
TEST: À quelle autorité {{prétendons nous}} si…
TEST: pourquoi {{entendons nous}} souvent ces injonctions idiotes ?
TEST: les avions nous font rêver.


__inte_union_vous2!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..ez$  vous  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~..ez$  vous  @:¬:2p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GW]")
        -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.

    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  [êtes|étiez|fûtes|fussiez|serez|seriez|avez|aviez|eûtes|eussiez|aurez|auriez]  vous
        <<- /inte/ space_after(\2, 1, 1)
        -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.

................................................................................
    *WORD  ~..e[zs]$  vous  [<end>|,]
    *WORD  ~..e[zs]$  vous  @:¬:(?:Y|2p)
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:2p", ":[GNW]") and not value(\2, "|veuillez|") and not morph(\1, ":Os")
        -2:3>> \2-vous                                                                              # Forme interrogative ? Mettez un trait d’union.

TEST: Mais {{soutiendrez vous}} cette proposition ?
TEST: comment {{êtes vous}} arrivées là ?
TEST: quel genre de femme {{voulez vous}} réellement ?
TEST: quel exercice {{avions nous}} réellement ?
TEST: quel homme {{voulez vous}} qu’il devienne
TEST: Veuillez vous instruire avant de contester ces mesures.


__inte_union_ils!7__
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  [<end>|,]
    [<start>|,|comment|pourquoi|combien|que|qu’|quoique|quoiqu’|où|puis|quand|qui]  ~[eo]nt$  ils  @:¬:3p
        <<- /inte/ space_after(\2, 1, 1) and morph(\2, ":V.*:3p", ":[GW]")
................................................................................
TEST: j’{{aurai}} aimé que vous m’en parliez.
TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__vmode_si_sujet_conditionnel_subjonctif__
    [<start>|,]  si     [j’|J’|t’|T’]  @:[SK]¬:(?:G|V0|I)
    [<start>|,]  si     @:(?:Os|M)     @:[SK]¬:(?:G|V0|I)
    [<start>|,]  s’     [il|ils]       @:[SK]¬:(?:G|V0|I)
        <<- /vmode/ -4>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.
TEST: Si j’{{irais}} le faire


__vmode_si_sujet_conditionnel__
    <start>  si  [je|j’]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  si  [je|j’]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":1s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si j’avais perdu, j’aurais recommencé. »

    <start>  si  [tu|t’]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  si  [tu|t’]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":2s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si tu avais perdu, tu aurais recommencé. »

    <start>  [si|s’]  [il|on|elle]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  [si|s’]  [il|on|elle]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":3s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « S’il avait perdu, il aurait recommencé. »

    <start>  si  nous  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  si  nous  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":1p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si nous avions perdu, nous aurions recommencé. »

    <start>  si  vous  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  si  vous  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":2p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si vous aviez perdu, vous auriez recommencé. »

    <start>  [si|s’]  [ils|elles]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  [si|s’]  [ils|elles]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\4, ":K") -4>> =suggVerbTense(\4, ":Iq", ":3p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si elles avaient perdu, elles auraient recommencé. »

    <start>  si  [le|la|l’|un|une|ce|cet|cette|mon|ton|son|notre|votre|leur]  @:[NA].*:[si]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  si  [le|la|l’|un|une|ce|cet|cette|mon|ton|son|notre|votre|leur]  @:[NA].*:[si]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\5, ":K") -5>> =suggVerbTense(\5, ":Iq", ":3s")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « S’il avait perdu, il aurait recommencé. »

    <start>  si  [les|des|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  @:[NA].*:[pi]  >avoir  $:Q  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
    <start>  si  [les|des|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|certains|certaines]  @:[NA].*:[pi]  >avoir  $:Q  $:D  $:N  ?,¿  [je|j’|tu|il|on|elle|nous|ce|vous|ils|elles]  $:K
        <<- /vmode/ morph(\5, ":K") -5>> =suggVerbTense(\5, ":Iq", ":3p")                           # N’utilisez pas le conditionnel, mais l’imparfait. Exemple : « Si elles avaient perdu, elles auraient recommencé. »

TEST: si j’{{aurais}} perdu, j’aurais recommencé.                                   ->> avais
TEST: si t’{{aurais}} vu le match, tu aurais compris                                ->> avais
TEST: si elle {{aurait}} mangé ce truc, elle serait malade                          ->> avait
TEST: si nous {{aurions}} connu cet homme, on se serait pas trompé                  ->> avions
TEST: si vous {{auriez}} avancé, ce serait différent                                ->> aviez
TEST: s’ils {{auraient}} deviné la solution, ils auraient pas demandé               ->> avaient
TEST: si le patron {{aurait}} pensé la chose, on l’aurait su.                       ->> avait
TEST: si les femmes {{auraient}} parlé, je l’aurais su.                             ->> avaient


# Dès que + indicatif
__vmode_dès_que__
    dès  [que|qu’]  @:(?:Os|M)  @:S¬:[IG]
        <<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3)                                                # Après “dès que”, le verbe ne devrait pas être au subjonctif.
#        <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    # Ce verbe ne devrait pas être au conditionnel.

................................................................................
    à               [condition|moins|supposer]      [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    de              [crainte|peur]                  [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    de              [façon|manière]                 [que|qu’]   @:(?:Os|M)  @:I¬:(?:[GYS]|Iq)
    en              sorte                           [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    pour            peu                             [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    pour            autant                          [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Après “\1 \2 que”, ce verbe devrait être au subjonctif.


    [<start>|,]     non                             [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                # Après “non que”, ce verbe devrait probablement être au subjonctif.

    [<start>|,]     en          admettant           [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ -6>> =suggVerbMode(\6, ":S", \5)                                                # Si “en admettant que” indique que la suite est une hypothèse, le verbe doit être au subjonctif.

................................................................................
TEST: » Jules Mignaud, banquier, de la maison Mignaud et fils, rue Deloraine. Il est l’aîné des Mignaud. Madame l’Espanaye avait quelque fortune.
TEST: Il lui avait ouvert un compte dans sa maison, huit ans auparavant, au printemps.
TEST: Elle a souvent déposé chez lui de petites sommes d’argent. Il ne lui a rien délivré jusqu’au troisième jour avant sa mort, où elle est venue lui demander en personne une somme de quatre mille francs. Cette somme lui a été payée en or, et un commis a été chargé de la lui porter chez elle.
TEST: » Adolphe Lebon, commis chez Mignaud et fils, dépose que, le jour en question, vers midi, il a accompagné madame l’Espanaye à son logis, avec les quatre mille francs, en deux sacs.
TEST: Quand la porte s’ouvrit, mademoiselle l’Espanaye parut, et lui prit des mains l’un des deux sacs, pendant que la vieille dame le déchargeait de l’autre.
TEST: Il les salua et partit. Il n’a vu personne dans la rue en ce moment. C’est une rue borgne, très-solitaire.
TEST: » William Bird, tailleur, dépose qu’il est un de ceux qui se sont introduits dans la maison. Il est Anglais. Il a vécu deux ans à Paris. Il est un des premiers qui ont monté l’escalier.
TODO: Il a entendu les voix qui se disputaient. La voix rude était celle d’un Français. Il a pu distinguer quelques mots, mais il ne se les rappelle pas. Il a entendu distinctement sacré et mon Dieu.
TEST: C’était en ce moment un bruit comme de plusieurs personnes qui se battent, – le tapage d’une lutte et d’objets qu’on brise. La voix aiguë était très-forte, plus forte que la voix rude.
TEST: Il est sûr que ce n’était pas une voix d’Anglais. Elle lui sembla une voix d’Allemand ; peut-être bien une voix de femme. Le témoin ne sait pas l’allemand.
TEST: » Quatre des témoins ci-dessus mentionnés ont été assignés de nouveau, et ont déposé que la porte de la chambre où fut trouvé le corps de mademoiselle l’Espanaye était fermée en dedans quand ils y arrivèrent.
TEST: Tout était parfaitement silencieux ; ni gémissements, ni bruits d’aucune espèce. Après avoir forcé la porte, ils ne virent personne.
TEST: » Les fenêtres, dans la chambre de derrière et dans celle de face, étaient fermées et solidement assujetties en dedans. Une porte de communication était fermée, mais pas à clef.
TEST: La porte qui conduit de la chambre du devant au corridor était fermée à clef, et la clef en dedans ; une petite pièce sur le devant de la maison, au quatrième étage, à l’entrée du corridor, ouverte, et la porte entre-bâillée ; cette pièce, encombrée de vieux bois de lit, de malles, etc.
TEST: On a soigneusement dérangé et visité tous ces objets.

Changes to graphspell-js/ibdawg.js.

264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
...
379
380
381
382
383
384
385

386

387
388
389
390
391
392
393
        }
        if (sWord.charAt(0).gl_isUpperCase()) {
            if (sWord.length > 1) {
                if (sWord.gl_isTitle()) {
                    return !!this.lookup(sWord.toLowerCase());
                }
                if (sWord.gl_isUpperCase()) {
                    if (this.bAcronymValid) {
                        return true;
                    }
                    return !!(this.lookup(sWord.toLowerCase()) || this.lookup(sWord.gl_toCapitalize()));
                }
                return !!this.lookup(sWord.slice(0, 1).toLowerCase() + sWord.slice(1));
            }
            return !!this.lookup(sWord.toLowerCase());
        }
        if (sWord.slice(0,1).gl_isDigit()) {
            return true;
................................................................................
                return;
            }
            else if ( (sNewWord.length + sRemain.length == oSuggResult.sWord.length) && oSuggResult.sWord.toLowerCase().startsWith(sNewWord.toLowerCase()) && this.isValid(sRemain) ) {
                if (this.sLangCode == "fr"
                    && ["l", "d", "n", "m", "t", "s", "c", "j", "qu", "lorsqu", "puisqu", "quoiqu", "jusqu", "quelqu"].includes(sNewWord.toLowerCase()) && char_player.aVowel.has(sRemain.slice(0,1))) {
                    oSuggResult.addSugg(sNewWord+"’"+sRemain);
                }

                oSuggResult.addSugg(sNewWord+" "+sRemain);

            }
        }
        if (nDist > oSuggResult.nDistLimit) {
            return;
        }

        let cCurrent = sRemain.slice(0, 1);







<
<
<
|







 







>
|
>







264
265
266
267
268
269
270



271
272
273
274
275
276
277
278
...
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
        }
        if (sWord.charAt(0).gl_isUpperCase()) {
            if (sWord.length > 1) {
                if (sWord.gl_isTitle()) {
                    return !!this.lookup(sWord.toLowerCase());
                }
                if (sWord.gl_isUpperCase()) {



                    return !!(this.bAcronymValid || this.lookup(sWord.toLowerCase()) || this.lookup(sWord.gl_toCapitalize()));
                }
                return !!this.lookup(sWord.slice(0, 1).toLowerCase() + sWord.slice(1));
            }
            return !!this.lookup(sWord.toLowerCase());
        }
        if (sWord.slice(0,1).gl_isDigit()) {
            return true;
................................................................................
                return;
            }
            else if ( (sNewWord.length + sRemain.length == oSuggResult.sWord.length) && oSuggResult.sWord.toLowerCase().startsWith(sNewWord.toLowerCase()) && this.isValid(sRemain) ) {
                if (this.sLangCode == "fr"
                    && ["l", "d", "n", "m", "t", "s", "c", "j", "qu", "lorsqu", "puisqu", "quoiqu", "jusqu", "quelqu"].includes(sNewWord.toLowerCase()) && char_player.aVowel.has(sRemain.slice(0,1))) {
                    oSuggResult.addSugg(sNewWord+"’"+sRemain);
                }
                if ((sNewWord.length > 1 && sRemain.length > 1) || ["a", "à", "y"].includes(sNewWord) || ["a", "à", "y"].includes(sRemain)) {
                    oSuggResult.addSugg(sNewWord+" "+sRemain);
                }
            }
        }
        if (nDist > oSuggResult.nDistLimit) {
            return;
        }

        let cCurrent = sRemain.slice(0, 1);

Changes to graphspell/ibdawg.py.

1
2
3
4
5
6
7
8
9
10
11
12
13
...
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
...
338
339
340
341
342
343
344

345
346
347
348
349
350
351
352
#!python3

"""
INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH
Implementation of a spellchecker as a transducer (storing transformation code to get lemma and morphologies)
and a spell suggestion mechanim
"""

import traceback
import pkgutil
import re
from functools import wraps
import time
................................................................................
        if self.lookup(sWord):
            return True
        if sWord[0:1].isupper():
            if len(sWord) > 1:
                if sWord.istitle():
                    return self.lookup(sWord.lower())
                if sWord.isupper():
                    if self.bAcronymValid:
                        return True
                    return self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())
                return self.lookup(sWord[:1].lower() + sWord[1:])
            return self.lookup(sWord.lower())
        if sWord[0:1].isdigit():
            return True
        return False

    def lookup (self, sWord):
................................................................................
                oSuggResult.addSugg(sNewWord, nDeep)
                for sTail in self._getTails(iAddr):
                    oSuggResult.addSugg(sNewWord+sTail, nDeep)
                return
            if (len(sNewWord) + len(sRemain) == len(oSuggResult.sWord)) and oSuggResult.sWord.lower().startswith(sNewWord.lower()) and self.isValid(sRemain):
                if self.sLangCode == "fr" and sNewWord.lower() in ("l", "d", "n", "m", "t", "s", "c", "j", "qu", "lorsqu", "puisqu", "quoiqu", "jusqu", "quelqu") and sRemain[0:1] in cp.aVowel:
                    oSuggResult.addSugg(sNewWord+"’"+sRemain)

                oSuggResult.addSugg(sNewWord+" "+sRemain)
        if nDist > oSuggResult.nDistLimit:
            return
        cCurrent = sRemain[0:1]
        for cChar, jAddr in self._getCharArcs(iAddr):
            if cChar in cp.d1to1.get(cCurrent, cCurrent):
                self._suggest(oSuggResult, sRemain[1:], nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump, nDist, nDeep+1, jAddr, sNewWord+cChar)
            elif not bAvoidLoop:





|







 







<
<
|







 







>
|







1
2
3
4
5
6
7
8
9
10
11
12
13
...
262
263
264
265
266
267
268


269
270
271
272
273
274
275
276
...
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
#!python3

"""
INDEXABLE BINARY DIRECT ACYCLIC WORD GRAPH
Implementation of a spellchecker as a transducer (storing transformation code to get lemma and morphologies)
and a spell suggestion mechanism
"""

import traceback
import pkgutil
import re
from functools import wraps
import time
................................................................................
        if self.lookup(sWord):
            return True
        if sWord[0:1].isupper():
            if len(sWord) > 1:
                if sWord.istitle():
                    return self.lookup(sWord.lower())
                if sWord.isupper():


                    return self.bAcronymValid or self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())
                return self.lookup(sWord[:1].lower() + sWord[1:])
            return self.lookup(sWord.lower())
        if sWord[0:1].isdigit():
            return True
        return False

    def lookup (self, sWord):
................................................................................
                oSuggResult.addSugg(sNewWord, nDeep)
                for sTail in self._getTails(iAddr):
                    oSuggResult.addSugg(sNewWord+sTail, nDeep)
                return
            if (len(sNewWord) + len(sRemain) == len(oSuggResult.sWord)) and oSuggResult.sWord.lower().startswith(sNewWord.lower()) and self.isValid(sRemain):
                if self.sLangCode == "fr" and sNewWord.lower() in ("l", "d", "n", "m", "t", "s", "c", "j", "qu", "lorsqu", "puisqu", "quoiqu", "jusqu", "quelqu") and sRemain[0:1] in cp.aVowel:
                    oSuggResult.addSugg(sNewWord+"’"+sRemain)
                if (len(sNewWord) > 1 and len(sRemain) > 1) or sNewWord in ("a", "à", "y") or sRemain in ("a", "à", "y"):
                    oSuggResult.addSugg(sNewWord+" "+sRemain)
        if nDist > oSuggResult.nDistLimit:
            return
        cCurrent = sRemain[0:1]
        for cChar, jAddr in self._getCharArcs(iAddr):
            if cChar in cp.d1to1.get(cCurrent, cCurrent):
                self._suggest(oSuggResult, sRemain[1:], nMaxSwitch, nMaxDel, nMaxHardRepl, nMaxJump, nDist, nDeep+1, jAddr, sNewWord+cChar)
            elif not bAvoidLoop:

Changes to make.py.

1
2
3
4
5
6
7
8
...
122
123
124
125
126
127
128



129
130
131
132
133
134
135
136
 #!/usr/bin/env python3
# coding: UTF-8

"""
Grammalecte builder
"""

import sys
................................................................................

    ## ADDONS OXT
    print("+ OXT: ", end="")
    for spfSrc, spfDst in dOxt.items():
        print(spfSrc, end=", ")
        if os.path.isdir(spLang+'/'+spfSrc):
            for sf in os.listdir(spLang+'/'+spfSrc):



                hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
        else:
            if spfSrc.endswith(('.txt', '.py')):
                hZip.writestr(spfDst, helpers.fileFile(spLang+'/'+spfSrc, dVars))
            else:
                hZip.write(spLang+'/'+spfSrc, spfDst)
    print()
    hZip.close()
|







 







>
>
>
|







1
2
3
4
5
6
7
8
...
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/env python3
# coding: UTF-8

"""
Grammalecte builder
"""

import sys
................................................................................

    ## ADDONS OXT
    print("+ OXT: ", end="")
    for spfSrc, spfDst in dOxt.items():
        print(spfSrc, end=", ")
        if os.path.isdir(spLang+'/'+spfSrc):
            for sf in os.listdir(spLang+'/'+spfSrc):
                if sf.endswith(('.txt', '.py')):
                    hZip.writestr(spfDst+"/"+sf, helpers.fileFile(spLang+'/'+spfSrc+"/"+sf, dVars))
                else:
                    hZip.write(spLang+'/'+spfSrc+"/"+sf, spfDst+"/"+sf)
        else:
            if spfSrc.endswith(('.txt', '.py')):
                hZip.writestr(spfDst, helpers.fileFile(spLang+'/'+spfSrc, dVars))
            else:
                hZip.write(spLang+'/'+spfSrc, spfDst)
    print()
    hZip.close()