Grammalecte  Check-in [101d54de7e]

Overview
Comment:[build][core] new function: suggAgree() [fr] ajustements et nouvelles règles
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | core | build
Files: files | file ages | folders
SHA3-256: 101d54de7e204acb691acbf4484121d985f887049231d76c72128cd972848b20
User & Date: olr on 2021-01-07 18:22:03
Other Links: manifest | tags
Context
2021-01-07
18:36
[core][js] fix variable name check-in: fb8117df84 user: olr tags: core, trunk
18:22
[build][core] new function: suggAgree() [fr] ajustements et nouvelles règles check-in: 101d54de7e user: olr tags: build, core, fr, trunk
13:48
[cli] clear text beginning by TEST: check-in: b5ba52c145 user: olr tags: cli, trunk
Changes

Modified compile_rules_graph.py from [0195f7a15c] to [82cd1181fb].

38
39
40
41
42
43
44




45
46
47
48
49
50
51
..
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    sCode = sCode.replace("__also__", "bCondMemo")
    sCode = sCode.replace("__else__", "not bCondMemo")
    sCode = sCode.replace("sContext", "_sAppContext")
    sCode = re.sub(r"\b(morph0?|morphVC|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(morph0?|morphVC|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(select|define|definefrom|rewrite|addmorph|setmeta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(select|define|definefrom|rewrite|addmorph|setmeta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)




    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode)
    sCode = re.sub(r"\bspace[(][\\](\d+)", 'g_space(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bspace[(][\\]-(\d+)", 'g_space(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\bmorph2[(][\\](\d+)", 'g_morph2(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bmorph2[(][\\]-(\d+)", 'g_morph2(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\b(morph0?|tag|meta|value|info)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode)                      # next token
................................................................................
    sCode = re.sub(r"\bspace[(](>1)", 'g_space(lToken[nLastToken+1], g_token(lToken, nLastToken+2)', sCode)     # next token
    sCode = re.sub(r"\bspace[(](<1)", 'g_space(lToken[nTokenOffset], lToken[nTokenOffset+1]', sCode)            # previous token
    sCode = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', sCode)
    sCode = re.sub(r"\bbefore\(\s*", 'look(sSentence[:lToken[1+nTokenOffset]["nStart"]], ', sCode)          # before(sCode)
    sCode = re.sub(r"\bafter\(\s*", 'look(sSentence[lToken[nLastToken]["nEnd"]:], ', sCode)                 # after(sCode)
    sCode = re.sub(r"\bbefore0\(\s*", 'look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], ', sCode)        # before0(sCode)
    sCode = re.sub(r"\bafter0\(\s*", 'look(sSentence0[lToken[nLastToken]["nEnd"]:], ', sCode)               # after0(sCode)
    sCode = re.sub(r"\bagreement[(]\\(\d+), *\\(\d+)", 'g_agreement(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\bagreement[(]\\(\d+), *\\-(\d+)", 'g_agreement(lToken[nTokenOffset+\\1], lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"[\\](\d+)", 'lToken[nTokenOffset+\\1]["sValue"]', sCode)
    sCode = re.sub(r"[\\]-(\d+)", 'lToken[nLastToken-\\1+1]["sValue"]', sCode)
    sCode = re.sub(r">1", 'lToken[nLastToken+1]["sValue"]', sCode)
    sCode = re.sub(r"<1", 'lToken[nTokenOffset]["sValue"]', sCode)
    return sCode









>
>
>
>







 







<
<







38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
..
59
60
61
62
63
64
65


66
67
68
69
70
71
72
    sCode = sCode.replace("__also__", "bCondMemo")
    sCode = sCode.replace("__else__", "not bCondMemo")
    sCode = sCode.replace("sContext", "_sAppContext")
    sCode = re.sub(r"\b(morph0?|morphVC|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(morph0?|morphVC|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(select|define|definefrom|rewrite|addmorph|setmeta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(select|define|definefrom|rewrite|addmorph|setmeta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(agreement|suggAgree)[(][\\](\d+), *[\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], lToken[nTokenOffset+\\3]', sCode)
    sCode = re.sub(r"\b(agreement|suggAgree)[(][\\](\d+), *[\\]-(\d+)", 'g_\\1(lToken[nTokenOffset+\\2], lToken[nLastToken-\\3+1]', sCode)
    sCode = re.sub(r"\b(agreement|suggAgree)[(][\\]-(\d+), *[\\](\d+)", 'g_\\1(lToken[nLastToken-\\2+1], lToken[nTokenOffset+\\3]', sCode)
    sCode = re.sub(r"\b(agreement|suggAgree)[(][\\]-(\d+), *[\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], lToken[nLastToken-\\3+1]', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode)
    sCode = re.sub(r"\b(tagbefore|tagafter)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode)
    sCode = re.sub(r"\bspace[(][\\](\d+)", 'g_space(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bspace[(][\\]-(\d+)", 'g_space(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\bmorph2[(][\\](\d+)", 'g_morph2(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bmorph2[(][\\]-(\d+)", 'g_morph2(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\b(morph0?|tag|meta|value|info)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode)                      # next token
................................................................................
    sCode = re.sub(r"\bspace[(](>1)", 'g_space(lToken[nLastToken+1], g_token(lToken, nLastToken+2)', sCode)     # next token
    sCode = re.sub(r"\bspace[(](<1)", 'g_space(lToken[nTokenOffset], lToken[nTokenOffset+1]', sCode)            # previous token
    sCode = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', sCode)
    sCode = re.sub(r"\bbefore\(\s*", 'look(sSentence[:lToken[1+nTokenOffset]["nStart"]], ', sCode)          # before(sCode)
    sCode = re.sub(r"\bafter\(\s*", 'look(sSentence[lToken[nLastToken]["nEnd"]:], ', sCode)                 # after(sCode)
    sCode = re.sub(r"\bbefore0\(\s*", 'look(sSentence0[:lToken[1+nTokenOffset]["nStart"]], ', sCode)        # before0(sCode)
    sCode = re.sub(r"\bafter0\(\s*", 'look(sSentence0[lToken[nLastToken]["nEnd"]:], ', sCode)               # after0(sCode)


    sCode = re.sub(r"[\\](\d+)", 'lToken[nTokenOffset+\\1]["sValue"]', sCode)
    sCode = re.sub(r"[\\]-(\d+)", 'lToken[nLastToken-\\1+1]["sValue"]', sCode)
    sCode = re.sub(r">1", 'lToken[nLastToken+1]["sValue"]', sCode)
    sCode = re.sub(r"<1", 'lToken[nTokenOffset]["sValue"]', sCode)
    return sCode


Modified gc_lang/fr/modules-js/cregex.js from [63b1a41c99] to [f6f0552c5d].

7
8
9
10
11
12
13

14
15
16
17
18
19
20
...
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146



























147
148
149
150
151
152
153
var cregex = {
    ///// Lemme
    _zLemma: new RegExp(">([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)"),

    ///// Masculin / féminin / singulier / pluriel
    _zGender: new RegExp(":[mfe]"),
    _zNumber: new RegExp(":[spi]"),


    ///// Nom et adjectif
    _zNA: new RegExp(":[NA]"),

    //// nombre
    _zNAs: new RegExp(":[NA].*:s"),
    _zNAp: new RegExp(":[NA].*:p"),
................................................................................
        return sGender;
    },

    getNumber: function (lMorph) {
        // returns number of word (':s', ':p', ':i' or empty string).
        let sNumber = "";
        for (let sMorph of lMorph) {
            let m = this._zNumber.exec(sWord);
            if (m) {
                if (!sNumber) {
                    sNumber = m[0];
                } else if (sNumber != m[0]) {
                    return ":i";
                }
            }
        }
        return sNumber;
    },




























    // NOTE :  isWhat (lMorph)    returns true   if lMorph contains nothing else than What
    //         mbWhat (lMorph)    returns true   if lMorph contains What at least once

    //// isXXX = it’s certain

    isNom: function (lMorph) {







>







 







|










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







7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
...
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
var cregex = {
    ///// Lemme
    _zLemma: new RegExp(">([a-zà-öø-ÿ0-9Ā-ʯ][a-zà-öø-ÿ0-9Ā-ʯ-]+)"),

    ///// Masculin / féminin / singulier / pluriel
    _zGender: new RegExp(":[mfe]"),
    _zNumber: new RegExp(":[spi]"),
    _zGenderNumber: new RegExp(":[mfe]:[spi]"),

    ///// Nom et adjectif
    _zNA: new RegExp(":[NA]"),

    //// nombre
    _zNAs: new RegExp(":[NA].*:s"),
    _zNAp: new RegExp(":[NA].*:p"),
................................................................................
        return sGender;
    },

    getNumber: function (lMorph) {
        // returns number of word (':s', ':p', ':i' or empty string).
        let sNumber = "";
        for (let sMorph of lMorph) {
            let m = this._zNumber.exec(sMorph);
            if (m) {
                if (!sNumber) {
                    sNumber = m[0];
                } else if (sNumber != m[0]) {
                    return ":i";
                }
            }
        }
        return sNumber;
    },

    getGenderNumber: function (lMorph) {
        // returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)
        let sGender = "";
        let sNumber = "";
        for (let sMorph of lMorph) {
            let m = this._zGenderNumber.exec(sMorph);
            if (m) {
                let sGenderx = m[0].slice(0,2);
                let sNumberx = m[0].slice(2,4);
                if (!sGender) {
                    sGender = sGenderx;
                }
                else if (sGender != sGenderx) {
                    sGenderx = ":e";
                }
                if (!sNumber) {
                    sNumber = sNumberx;
                }
                else if (sNumber != sNumberx) {
                    sNumberx = ":i";
                }
            }
        }
        return [sGender, sNumber];
    },


    // NOTE :  isWhat (lMorph)    returns true   if lMorph contains nothing else than What
    //         mbWhat (lMorph)    returns true   if lMorph contains What at least once

    //// isXXX = it’s certain

    isNom: function (lMorph) {

Modified gc_lang/fr/modules-js/gce_suggestions.js from [e41e56dec1] to [8fe9942358].

450
451
452
453
454
455
456





































457
458
459
460
461
462
463
    }
    aSugg.delete("");
    if (aSugg.size > 0) {
        return Array.from(aSugg).join("|");
    }
    return "";
}






































function hasFemForm (sFlex) {
    for (let sStem of gc_engine.oSpellChecker.getLemma(sFlex)) {
        if (mfsp.isMasForm(sStem) || conj.hasConj(sStem, ":PQ", ":Q3")) {
            return true;
        }
    }







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







450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
    }
    aSugg.delete("");
    if (aSugg.size > 0) {
        return Array.from(aSugg).join("|");
    }
    return "";
}

function g_suggAgree (dTokenDst, dTokenSrc) {
    // returns suggestions for <dTokenDst> that matches agreement with <dTokenSrc>
    let lMorphSrc = oTokenSrc.hasOwnProperty("lMorph") ? oTokenSrc["lMorph"] : gc_engine.oSpellChecker.getMorph(oTokenSrc["sValue"]);
    if (lMorphSrc.length === 0) {
        return "";
    }
    let [sGender, sNumber] = cregex.getGenderNumber(lMorphSrc);
    if (sGender == ":m") {
        if (sNumber == ":s") {
            return suggMasSing(dTokenDst["sValue"]);
        }
        else if (sNumber == ":p") {
            return suggMasPlur(dTokenDst["sValue"]);
        }
        return suggMasSing(dTokenDst["sValue"]);
    }
    else if (sGender == ":f") {
        if (sNumber == ":s") {
            return suggFemSing(dTokenDst["sValue"]);
        }
        else if (sNumber == ":p") {
            return suggFemPlur(dTokenDst["sValue"]);
        }
        return suggFemSing(dTokenDst["sValue"]);
    }
    else if (sGender == ":e") {
        if (sNumber == ":s") {
            return suggSing(dTokenDst["sValue"]);
        }
        else if (sNumber == ":p") {
            return suggPlur(dTokenDst["sValue"]);
        }
        return dTokenDst["sValue"];
    }
    return "";
}

function hasFemForm (sFlex) {
    for (let sStem of gc_engine.oSpellChecker.getLemma(sFlex)) {
        if (mfsp.isMasForm(sStem) || conj.hasConj(sStem, ":PQ", ":Q3")) {
            return true;
        }
    }

Modified gc_lang/fr/modules/cregex.py from [552bd47629] to [cca55d14bc].

6
7
8
9
10
11
12

13
14
15
16
17
18
19
...
125
126
127
128
129
130
131




















132
133
134
135
136
137
138

#### Lemme
Lemma = re.compile(r"^>(\w[\w-]*)")

#### Analyses
Gender = re.compile(":[mfe]")
Number = re.compile(":[spi]")


#### Nom et adjectif
NA = re.compile(":[NA]")

## nombre
NAs = re.compile(":[NA].*:s")
NAp = re.compile(":[NA].*:p")
................................................................................
        m = Number.search(sMorph)
        if m:
            if not sNumber:
                sNumber = m.group(0)
            elif sNumber != m.group(0):
                return ":i"
    return sNumber





















# NOTE :  isWhat (lMorph)    returns True   if lMorph contains nothing else than What
#         mbWhat (lMorph)    returns True   if lMorph contains What at least once

## isXXX = it’s certain

def isNom (lMorph):







>







 







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







6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
...
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159

#### Lemme
Lemma = re.compile(r"^>(\w[\w-]*)")

#### Analyses
Gender = re.compile(":[mfe]")
Number = re.compile(":[spi]")
GenderNumber = re.compile(":[mfe]:[spi]")

#### Nom et adjectif
NA = re.compile(":[NA]")

## nombre
NAs = re.compile(":[NA].*:s")
NAp = re.compile(":[NA].*:p")
................................................................................
        m = Number.search(sMorph)
        if m:
            if not sNumber:
                sNumber = m.group(0)
            elif sNumber != m.group(0):
                return ":i"
    return sNumber

def getGenderNumber (lMorph):
    "returns tuple (gender, number) of word: (':m', ':f', ':e' or empty string) and (':s', ':p', ':i' or empty string)"
    sGender = ""
    sNumber = ""
    for sMorph in lMorph:
        m = GenderNumber.search(sMorph)
        if m:
            sGenderx = m.group(0)[0:2]
            sNumberx = m.group(0)[2:4]
            if not sGender:
                sGender = sGenderx
            elif sGender != sGenderx:
                sGender = ":e"
            if not sNumber:
                sNumber = sNumberx
            elif sNumber != sNumberx:
                sNumber = ":i"
    return sGender, sNumber


# NOTE :  isWhat (lMorph)    returns True   if lMorph contains nothing else than What
#         mbWhat (lMorph)    returns True   if lMorph contains What at least once

## isXXX = it’s certain

def isNom (lMorph):

Modified gc_lang/fr/modules/gce_suggestions.py from [5245c9f027] to [cfe989f25d].

339
340
341
342
343
344
345



























346
347
348
349
350
351
352
        for e in phonet.selectSimil(sFlex, ":f:[pi]"):
            aSugg.add(e)
    aSugg.discard("")
    if aSugg:
        return "|".join(aSugg)
    return ""





























def hasFemForm (sFlex):
    "return True if there is a feminine form of <sFlex>"
    for sStem in _oSpellChecker.getLemma(sFlex):
        if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q3"):
            return True
    if phonet.hasSimil(sFlex, ":f"):







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







339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
        for e in phonet.selectSimil(sFlex, ":f:[pi]"):
            aSugg.add(e)
    aSugg.discard("")
    if aSugg:
        return "|".join(aSugg)
    return ""


def g_suggAgree (dTokenDst, dTokenSrc):
    "returns suggestions for <dTokenDst> that matches agreement with <dTokenSrc>"
    lMorphSrc = dTokenSrc["lMorph"]  if "lMorph" in dTokenSrc  else  _oSpellChecker.getMorph(dTokenSrc["sValue"])
    if not lMorphSrc:
        return ""
    sGender, sNumber = cr.getGenderNumber(lMorphSrc)
    if sGender == ":m":
        if sNumber == ":s":
            return suggMasSing(dTokenDst["sValue"])
        elif sNumber == ":p":
            return suggMasPlur(dTokenDst["sValue"])
        return suggMasSing(dTokenDst["sValue"])
    elif sGender == ":f":
        if sNumber == ":s":
            return suggFemSing(dTokenDst["sValue"])
        elif sNumber == ":p":
            return suggFemPlur(dTokenDst["sValue"])
        return suggFemSing(dTokenDst["sValue"])
    elif sGender == ":e":
        if sNumber == ":s":
            return suggSing(dTokenDst["sValue"])
        elif sNumber == ":p":
            return suggPlur(dTokenDst["sValue"])
        return dTokenDst["sValue"]
    return ""


def hasFemForm (sFlex):
    "return True if there is a feminine form of <sFlex>"
    for sStem in _oSpellChecker.getLemma(sFlex):
        if mfsp.isMasForm(sStem) or conj.hasConj(sStem, ":PQ", ":Q3"):
            return True
    if phonet.hasSimil(sFlex, ":f"):

Modified gc_lang/fr/rules.grx from [74ea4b8074] to [a21f7c40a2].

7964
7965
7966
7967
7968
7969
7970
7971
7972
7973

7974
7975
7976
7977
7978
7979
7980
.....
10061
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
.....
16290
16291
16292
16293
16294
16295
16296

16297
16298
16299
16300
16301
16302
16303
16304
16305
16306
16307
16308
16309

16310
16311
16312
16313
16314
16315
16316
.....
16835
16836
16837
16838
16839
16840
16841

16842

16843
16844
16845
16846
16847
16848
16849








16850
16851
16852
16853
16854
16855
16856
.....
18242
18243
18244
18245
18246
18247
18248

18249
18250
18251
18252
18253
18254
18255
.....
18974
18975
18976
18977
18978
18979
18980


18981
18982
18983
18984
18985
18986
18987
.....
24851
24852
24853
24854
24855
24856
24857
24858
















24859
24860
24861
24862
24863
24864
24865
24866
24867
24868
24869
24870
24871
24872
24873
24874
24875
24876
24877
24878
.....
24925
24926
24927
24928
24929
24930
24931













24932
24933
24934
24935
24936
24937
24938
.....
26261
26262
26263
26264
26265
26266
26267
26268
26269
26270
26271
26272
26273
26274
26275
26276
.....
26294
26295
26296
26297
26298
26299
26300
26301
26302
26303
26304
26305
26306
26307
26308
.....
26311
26312
26313
26314
26315
26316
26317
26318
26319
26320
26321
26322
26323
26324
26325
.....
26619
26620
26621
26622
26623
26624
26625
26626
26627
26628
26629
26630
26631
26632
26633
.....
26634
26635
26636
26637
26638
26639
26640
26641
26642
26643
26644
26645
26646
26647
26648
26649
26650
26651
26652
26653
26654
26655
26656
26657
26658
26659
26660
26661
26662
26663
26664
26665
26666
26667
26668
26669
26670
26671
26672
26673
.....
27951
27952
27953
27954
27955
27956
27957
27958
27959
27960
27961
27962
27963
27964
27965
27966
27967
27968
27969
27970
27971
27972
27973
27974
27975
27976
27977
27978
27979
27980
27981
27982
27983
27984
27985
27986
27987
27988
27989
27990
27991
27992
27993
27994
27995
27996
27997
27998
27999
28000
28001
28002
28003
28004
28005
28006
28007
28008
28009
28010
28011
28012
28013
28014
28015
28016
28017
28018
28019
28020
28021
28022
28023
28024
28025
28026
28027
28028
28029
28030
28031
28032
28033
28034
28035
28036
28037
28038
28039
28040
28041
28042
28043
28044
.....
29709
29710
29711
29712
29713
29714
29715















29716
29717
29718
29719
29720
29721
29722
TEST: Le mari répète à l’envi qu’il a découvert la France à travers les mots de sa femme.
TEST: Il reste de nombreux militants sincères à la FI.


__conf_de_vconj__
    [de|d’]  @:[123][sp]¬:[GNA]
        <<- /conf/ not \2.istitle() and not \2.isupper() and not value(\2, "|jure|") and not tag(\2, "eg1mot")
        -2>> =suggSimil(\2, ":[NA]", True)                                                          && Incohérence avec « \1 » : “\2” est une forme verbale conjuguée.

TEST: il s’agit de {{mette}} en évidence.



    [de|d’]  [l’|leur]  @:[123][sp]¬:[GNAQ]
        <<- /conf/ not \3.istitle() and not \3.isupper() -3>> =suggSimil(\3, ":[NA]:.:[si]", True)  && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.

TEST: de l’{{arrivait}}
TEST: la production d’électricité par des énergies renouvelables aurait encore augmenté de 7 %, selon les calculs de l’AIE
................................................................................
    autour [de|d’] [ce|mon|ton|son|notre|votre|leur] [coup|coût|cout]
    la bride au [coup|coût|cout]
    la bride autour du [coup|coût|cout]
    la bride sur le [coup|coût|cout]
        <<- /conf/ --1>> cou            && Confusion probable. Le coût est le prix d’une chose. Le coup est ce qui frappe. Le cou est la partie joignant le tronc à la tête.|https://fr.wiktionary.org/wiki/cou

    [>cou|>coût|>cout] [au-dessous|en-dessous] [de|d’] la ceinture
    [>cou|>coût|>cout] [de|d’] [>baguette|>barre|>bâton|>bec|>bélier|blues|>botte|>boule|>boutoir|>bol|>bite|>cœur|>chaud|>coude|>couteau|>crayon|>dé|>dent|>déprime|>éponge|>feu|>froid|fil|>filet|>folie|>foudre|>genou|>grâce|>griffe|>grisou|>gueule|>hache|>hachette|>hanche|Jarnac|jus|>jeune|>klaxon|>main|maître|maitre|>massue|>marteau|>menton|>nostalgie|>pied|>poing|>poignard|>pouce|>pute|>queue|>rein|>rabot|>savate|>sang|>sabot|>sabre|>semonce|>sonnette|>sifflet|>soleil|>sonde|>sort|>surin|>tête|>théâtre|>tonnerre|>torchon|>trique|>vent|vieux]
    [>cou|>coût|>cout] d’ [>arrêt|>éclat|>épée|>état|>épaule|œil|oeil|>estoc]
    [>cou|>coût|>cout] du sort
    [>cou|>coût|>cout] [dur+s]
    >cou d’ envoi
        <<- /conf/ -1>> coup|coups      && Confusion probable. Le coût est le prix d’une chose. Le cou est la partie joignant le tronc à la tête. Pour ce qui frappe, écrivez “coup”.

    violence du [>cou|>coût|>cout]
................................................................................
    ci-dessus
    chaque chose en son temps
    chose promise ?,¿ chose due
    comme [de|d’] juste
    comme bon [me|te|lui|leur|nous|vous] semble
    comme ci ?,¿ comme ça
    comme cul et chemise

    comme [frappé+ses] par la foudre
    comme gage [de|d’] bonne foi
    comme n’importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau [de|d’] chagrin
    comme prévu
    comme promis
    comme qui dirait
    comme si [de|d’] rien n’ était
    comme sur des roulettes
    comme un lion en cage

    comme une lettre à la poste
    contrairement aux apparences
    contre mauvaise fortune ?,¿ bon cœur
    contre nature
    contre toute [attente|vraisemblance]
    contre vents et marées
    contre [mon|ton|son|notre|votre|leur] gré
................................................................................
    pour ça [vaut|valait]
    pourtant
    presque
    primo
    quand bien même
    quand bon [me|te|lui|nous|vous|leur] [semble|semblera|semblait]
    quant à [ça|cela|ceci]

    [que|qu’] [ça|ceci|cela] [me|te|lui|leur|nous|vous] plaise ou non

    [que|qu’] je [le|l’] veuille ou non
    [que|qu’] tu [le|l’] veuilles ou non
    qu’ [il|elle|on|iel] [le|l’] veuille ou non
    [que|qu’] vous [le|l’] vouliez ou non
    [que|qu’] nous [le|l’] voulions ou non
    qu’ [ils|elles|iels] [le|l’] veuillent ou non
    qu’ à cela ne tienne








    quel qu’ en soit [le|l’] [moyen|prix|danger]
    quel qu’ en soit [le|l’] risque ?[économique|financier|légal|juridique|militaire]¿
    quelle qu’ en soit la [cause|raison]
    quelque peu
    ?[de|d’]¿ quelque part
    qui plus est
    quoi qu’ il [arrive|arrivât|advienne|advînt]
................................................................................
    >résidence d’ [été|hiver]
    >responsable qualité
    [>resto|>restau] u
    >retour à la case départ
    >retour à la normale
    >retour [de|d’] [bâton|flamme]
    >retour en arrière

    >revue [de|d’] presse
    >rivière à sec
    >robe [de|d’] [chambre|soirée]
    >robe du soir
    >robe sans >manche
    >roi [de|d’] [carreau|cœur|pique|trèfle]
    >roman à [>sensation|suspense]
................................................................................

    complètement
        <<- not morph(<1, ":D.*:m") ~>> *

    ~.ment$  ?[parlant|pas]¿
        <<- morph(\1, ":W", ":(?:3p|N)") ~>> *





@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: intergraphe12a|ig12a                                                                    _
................................................................................

!!
!!
!!!! Groupe nominal (sans déterminant)                                                            !!
!!
!!

## Sans article
















__gn_start_2m__
    <start>  @:[NA]¬*  @:[NA]¬*
        <<- /gn/ ((morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*"))) and not apposition(\2, \3)
        -3>> =switchGender(\3)                                                                      && Accord de genre erroné avec « \2 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 && Accord de genre erroné avec « \3 ».
        <<- /gn/ ((morph(\2, ":s", "*") and morph(\3, ":p", "*")) or (morph(\2, ":p", "*") and morph(\3, ":s", "*"))) and not apposition(\2, \3)
        -3>> =switchPlural(\3)                                                                      && Accord de nombre erroné avec « \2 ».
        <<- /gn/ __also__ -2>> =switchPlural(\2)                                                    && Accord de nombre erroné avec « \3 ».

TEST: {{serrurière}} {{intelligent}}.
TEST: {{serrurier}} {{intelligente}}.
TEST: {{Femmes}} {{mariée}}
TEST: {{hommes}} {{marié}}


__gn_start_3m__
    <start>  @:[NA]¬*  @:[NA]¬*  @:[NA]¬*
        <<- /gn/ morph(\2, ":p") and morph(\3, ":[pi]") and morph(\4, ":s", ":[pi]") and \4.islower() -4>> =switchPlural(\4)  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
        <<- /gn/ morph(\2, ":i") and morph(\3, ":p")    and morph(\4, ":s", ":[pi]") and \4.islower() -4>> =switchPlural(\4)  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
        <<- /gn/ morph(\2, ":s") and morph(\3, ":[si]") and morph(\4, ":p", ":[si]") and \4.islower() -4>> =switchPlural(\4)  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
................................................................................
TEST: {{petite}} et {{grande}} homme                            ->> petit|||grand
TEST: {{bel}} et {{grand}} nation                               ->> belle|||grande
TEST: {{stupides}} et {{intellectuels}} psychologue             ->> stupide|||intellectuel
TEST: {{petite}} et {{grande}} hommes                           ->> petits|||grands
TEST: {{bel}} et {{grand}} nations                              ->> belles|||grandes
TEST: {{stupide}} et {{intellectuel}} psychologues              ->> stupides|||intellectuels















## Prépositions
__gn_pfx_en_2m__
    en  @:[NA]¬*  @:[NA]¬*
        <<- /gn/ ( (morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*")) ) and not apposition(\2, \3)
        -3>> =switchGender(\3)                                                                      && Accord de genre erroné avec « \2 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 && Accord de genre erroné avec « \3 ».
................................................................................


__infi_commencer_finir_par__
    [>commencer|>finir]  par  ?[le|l’|la|leur|les]¿  @:V¬:[NGMY]
    [>commencer|>finir]  par  [nous|vous|lui]        @:V¬:[GMY]
        <<- /infi/ not \-1[0:1].isupper() --1>> =suggVerbInfi(\3)                       && Après « commencer/finir par », le verbe devrait être à l’infinitif.

TEST: commence par {{mangé}} le poulet.
TEST: enfin la petite finit par {{pleuré}} à chaudes larmes.
TEST: sa tournée, elle la finit par Rodez.


#### Infinitif après “de”

__infi_de_verbe__
    [un|une] [de|d’] [perdu+ses] ?,¿ dix [de|d’] [retrouvé+ses]
................................................................................
    [de|d’] [me|m’|te|t’|se|s’]  [le|la|l’|les|en|y]                             @:V¬:Y
    [de|d’] [nous|vous]          [le|la|l’|les|en|y]                             @:V¬:[YP]
    [de|d’] [le|la|l’|les]       [lui|leur|en|y]                                 @:V¬:Y
    [de|d’] leur                 en                                              @:V¬:Y
    [de|d’] lui                  en                                              @:V¬:[YP]
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                             && Après “de”, le verbe devrait être à l’infinitif.

    [de|d’]  @:V1.*:(?:Q|Ip.*:2p)¬:N
        <<- /infi/ not \2[0:1].isupper() and not morph(<1, ">(?:en|passer|qualifier)/") and not morph(\2, ">(?:fieffer|sacrer)/") and not tag(<1, "_rien_")
            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 tagbefore(\1, "_ceque_")
        -2>> =suggVerbInfi(\2)                                                          && Le verbe devrait être à l’infinitif.

TEST: d’en {{parlé}} sans cesse                                                             ->> parler
TEST: cela suffit de les {{aimait}}                                                         ->> aimer
................................................................................
TEST: je suis certain d’en {{choque}} plusieurs.                                            ->> choquer
TEST: elle était capable de la {{trouvait}} où qu’elle soit.                                ->> trouver
TEST: de me le {{facturez}}                                                                 ->> facturer
TEST: suffit de {{la}} {{finit}}                                                            ->> là|||finir
TEST: Il s’agit de me {{donnait}} tout ça.                                                  ->> donner
TEST: j’étais incapable de m’{{orientait}} dans la bonne direction.                         ->> orienter
TEST: ils étaient susceptibles de m’y {{trouvaient}}                                        ->> trouver
TEST: sa façon de {{nettoyez}} était inefficace.                                            ->> nettoyer
TEST: elle a délibérément omis de les {{inclurent}}.                                        ->> inclure
TEST: d’{{mangé}} je ne suis pas capable                                                    ->> manger
TEST: elles n’ont rien touché de souillé
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
................................................................................


__infi_que_faire_sinon__
    que faire ?,¿ sinon  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$
    que faire ?,¿ sinon  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]        ~..(?:ée?s?|ez|ai[ts]?)$
    que faire ?,¿ sinon  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]            ~..(?:ée?s?|ez|ai[ts]?)$
    que faire ?,¿ sinon  ?[ne|n’]¿  [lui|leur|y]                    en                         ~..(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V", ":M") --1>> =suggVerbInfi(\-1)                      && Après “que faire”, mettez le verbe à l’infinitif.

TEST: que faire, sinon s’{{adonnait}} à sa passion                                          ->> adonner
TEST: que croire sinon la pensée qu’il y a toujours une solution


__infi_rien_à_faire_que_sinon__
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$
................................................................................
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]        ~..(?:ée?s?|ez|ai[ts]?)$
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]            ~..(?:ée?s?|ez|ai[ts]?)$
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  [lui|leur|y]                    en                         ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]        ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]            ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  [lui|leur|y]                    en                         ~..(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V", ":M") --1>> =suggVerbInfi(\-1)                      && Après “rien à faire que”, mettez le verbe à l’infinitif.

TEST: rien à faire sinon {{expliqué}} ce qu’il faisait là           ->> expliquer
TEST: rien d’autre à faire que lui {{donnait}} à manger             ->> donner


__infi_nous_vous_verbe!3__
    nous  ~ée?s?$
        <<- /infi/ space(\1, 1, 3) and morph(\2, ":Q") and not morph(<1, "V0.*:1p")
        -2>> =suggVerbInfi(\2)                                                          && Après “\1”, le verbe ne devrait pas être un participe passé.

    vous  ~ée?s?$
        <<- /infi/ space(\1, 1, 3) and morph(\2, ":Q") and not morph(<1, "V0.*:2p")
        -2>> =suggVerbInfi(\2)+"|"+suggVerbTense(\2, ":Ip", ":2p")                      && Après “\1”, le verbe ne devrait pas être un participe passé.

TEST: oui, pourquoi pas, puisque nous {{intéressé}} à la question ne suffit pas à faire de nous des experts.   ->> intéresser
TEST: il faut croire que vous {{mangé}} ne nous nourrirait guère                                               ->> manger|mangez
TEST: Sommes-nous désespérés à ce point ?
TEST: Vous d’habitude si réservée.


__infi_y_verbe!3__
    y ~ée?s?$
        <<- /infi/ morph(\2, ":V", ":[123][sp]") -2>> _                                 && Le verbe ne devrait pas être un participe passé.

TEST: y {{mangée}} était un supplice
TEST: j’y crée une nouvelle maison.



#### Infinitif directement après verbe

__infi_devoir!5__
................................................................................
TEST: En outre, les grosses institutions comme l’Éducation Nationale ne développent pas forcément en interne
TEST: Le mieux serait de le faire glisser


__tag_locutions_verbales_d_état__
    ## verbes d’état

    [>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre]
        <<- /1>> _VE_

    /_VCint_
        <<- morph(\1, ":V[0-3]e") /1>> _VEI_


    ## locutions verbales d’état

    >avoir [été|semblé|paru]
    >avoir [cru|imaginé|pensé|pu|su|voulu]                      [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    >avoir [besoin|crainte|envie|horreur|peur]                  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    >avoir l’ [envie|exigence|illusion|impression|intention]    [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    >avoir le [désir|sentiment]                                 [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    >avoir la ?ferme¿ [intention|volonté]                       [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    [>être|>sembler|>demeurer|>paraître|>paraitre] [loin|près]  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    [>être|>sembler] [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
    [>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]
        || ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
    [>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]
        || ?[en|y]¿ être [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
    [>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]
        || ?[en|y]¿ avoir [été|semblé|paru]
    [>arriver|>continuer|>commencer|>parvenir|>renoncer|>réussir|>travailler]                       à ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
    [>cesser|>continuer|>craindre|>demander|>exiger|>redouter|>rêver|>refuser|>risquer|>venir]      [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
    [>être|>sembler|>paraître|>paraitre|>devenir|>redevenir|>rester|>demeurer]  [>content|>conscient|>heureux|>inquiet|>malheureux|>susceptible]
        || [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
        <<- /1>> _LVED_
        <<- />> _LVE_
        <<- /-1>> _LVEF_

    /_VCint_  [été|semblé|paru]
    /_VCint_  [cru|imaginé|pensé|pu|su|voulu]                       [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    /_VCint_  [besoin|crainte|envie|horreur|peur]                   [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    /_VCint_  l’ [envie|exigence|illusion|impression|intention]     [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    /_VCint_  le [désir|sentiment]                                  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
    /_VCint_  la ?ferme¿ [intention|volonté]                        [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
        <<- morphVC(\1, ">avoir/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [loin|près]  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre]
        <<- morphVC(\1, ">(?:être|sembler|demeurer|para[îi]tre)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
        <<- morphVC(\1, ">(?:être|sembler)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
        <<- morphVC(\1, ">(?:aller|adorer|affirmer|aimer|croire|déclarer|désirer|détester|devoir|dire|estimer|imaginer|para[îi]tre|penser|pouvoir|préférer|risquer|savoir|sembler|souhaiter|vouloir)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  ?[en|y]¿ être [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
    /_VCint_  ?[en|y]¿ avoir [été|semblé|paru]
        <<- morphVC(\1, ">(?:adorer|affirmer|aimer|croire|déclarer|désirer|détester|devoir|dire|estimer|imaginer|para[îi]tre|penser|pouvoir|préférer|risquer|savoir|sembler|souhaiter|vouloir)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  à ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
        <<- morphVC(\1, ">(?:arriver|commencer|continuer|parvenir|renoncer|réussir|travailler)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
        <<- morphVC(\1, ">(?:cesser|continuer|craindre|demander|exiger|redouter|rêver|refuser|risquer|venir)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [>content|>conscient|>heureux|>inquiet|>malheureux|>susceptible] [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre]
        <<- morphVC(\1, ":V[0-3]e") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_


    ## locutions verbales d’état pronominales
................................................................................
TEST: iel semble être {{ignore}}
TEST: ouais, on adore avoir été {{persécute}} par ces enfoirés
TEST: nous préférions être restés {{chagrinait}} par cette perte
TEST: on déclare avoir été {{choque}} par ces nouvelles
TEST: ils semblent être redevenus {{élut}}
TEST: elles aiment avoir paru {{murent}}

















__ppas_être_confusion__
    ne [pas|jamais] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p)
        <<- /ppas/ --1>> =suggVerbPpas(\-1)                                                         && Après “ne \2 être”, il faut un participe passé.

    avoir [pu|cru|pensé|imaginé] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p)
        <<- /ppas/ not value(<1, "|l’|") and not tagbefore(\1, "_que_") --1>> =suggVerbPpas(\-1)    && Après le verbe “être”, il faut un participe passé.







|


>







 







|







 







>













>







 







>

>






<
>
>
>
>
>
>
>
>







 







>







 







>
>







 







<
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>









|
|
|
|







 







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







 







|
|







 







|







 







<







 







|







 







|








|



|









|

|







 







|









|
|
|
|
|
|


|

|


|
|
|
|





|
|
|
|
|





|
|










|












|





|





|







 







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







7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
.....
10062
10063
10064
10065
10066
10067
10068
10069
10070
10071
10072
10073
10074
10075
10076
.....
16291
16292
16293
16294
16295
16296
16297
16298
16299
16300
16301
16302
16303
16304
16305
16306
16307
16308
16309
16310
16311
16312
16313
16314
16315
16316
16317
16318
16319
.....
16838
16839
16840
16841
16842
16843
16844
16845
16846
16847
16848
16849
16850
16851
16852
16853

16854
16855
16856
16857
16858
16859
16860
16861
16862
16863
16864
16865
16866
16867
16868
.....
18254
18255
18256
18257
18258
18259
18260
18261
18262
18263
18264
18265
18266
18267
18268
.....
18987
18988
18989
18990
18991
18992
18993
18994
18995
18996
18997
18998
18999
19000
19001
19002
.....
24866
24867
24868
24869
24870
24871
24872

24873
24874
24875
24876
24877
24878
24879
24880
24881
24882
24883
24884
24885
24886
24887
24888
24889
24890
24891
24892
24893
24894
24895
24896
24897
24898
24899
24900
24901
24902
24903
24904
24905
24906
24907
24908
.....
24955
24956
24957
24958
24959
24960
24961
24962
24963
24964
24965
24966
24967
24968
24969
24970
24971
24972
24973
24974
24975
24976
24977
24978
24979
24980
24981
.....
26304
26305
26306
26307
26308
26309
26310
26311
26312
26313
26314
26315
26316
26317
26318
26319
.....
26337
26338
26339
26340
26341
26342
26343
26344
26345
26346
26347
26348
26349
26350
26351
.....
26354
26355
26356
26357
26358
26359
26360

26361
26362
26363
26364
26365
26366
26367
.....
26661
26662
26663
26664
26665
26666
26667
26668
26669
26670
26671
26672
26673
26674
26675
.....
26676
26677
26678
26679
26680
26681
26682
26683
26684
26685
26686
26687
26688
26689
26690
26691
26692
26693
26694
26695
26696
26697
26698
26699
26700
26701
26702
26703
26704
26705
26706
26707
26708
26709
26710
26711
26712
26713
26714
26715
.....
27993
27994
27995
27996
27997
27998
27999
28000
28001
28002
28003
28004
28005
28006
28007
28008
28009
28010
28011
28012
28013
28014
28015
28016
28017
28018
28019
28020
28021
28022
28023
28024
28025
28026
28027
28028
28029
28030
28031
28032
28033
28034
28035
28036
28037
28038
28039
28040
28041
28042
28043
28044
28045
28046
28047
28048
28049
28050
28051
28052
28053
28054
28055
28056
28057
28058
28059
28060
28061
28062
28063
28064
28065
28066
28067
28068
28069
28070
28071
28072
28073
28074
28075
28076
28077
28078
28079
28080
28081
28082
28083
28084
28085
28086
.....
29751
29752
29753
29754
29755
29756
29757
29758
29759
29760
29761
29762
29763
29764
29765
29766
29767
29768
29769
29770
29771
29772
29773
29774
29775
29776
29777
29778
29779
TEST: Le mari répète à l’envi qu’il a découvert la France à travers les mots de sa femme.
TEST: Il reste de nombreux militants sincères à la FI.


__conf_de_vconj__
    [de|d’]  @:[123][sp]¬:[GNA]
        <<- /conf/ not \2.istitle() and not \2.isupper() and not value(\2, "|jure|") and not tag(\2, "eg1mot")
        -2>> =suggSimil(\2, ":[NA]", True)+"|"+suggVerbInfi(\2)                                     && Incohérence avec « \1 » : “\2” est une forme verbale conjuguée.

TEST: il s’agit de {{mette}} en évidence.
TEST: sa façon de {{nettoyez}} était inefficace.                                            ->> nettoyer|nettoyant


    [de|d’]  [l’|leur]  @:[123][sp]¬:[GNAQ]
        <<- /conf/ not \3.istitle() and not \3.isupper() -3>> =suggSimil(\3, ":[NA]:.:[si]", True)  && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.

TEST: de l’{{arrivait}}
TEST: la production d’électricité par des énergies renouvelables aurait encore augmenté de 7 %, selon les calculs de l’AIE
................................................................................
    autour [de|d’] [ce|mon|ton|son|notre|votre|leur] [coup|coût|cout]
    la bride au [coup|coût|cout]
    la bride autour du [coup|coût|cout]
    la bride sur le [coup|coût|cout]
        <<- /conf/ --1>> cou            && Confusion probable. Le coût est le prix d’une chose. Le coup est ce qui frappe. Le cou est la partie joignant le tronc à la tête.|https://fr.wiktionary.org/wiki/cou

    [>cou|>coût|>cout] [au-dessous|en-dessous] [de|d’] la ceinture
    [>cou|>coût|>cout] [de|d’] [>baguette|>barre|>bâton|>bec|>bélier|blues|>botte|>boule|>boutoir|>bol|>bite|>cœur|>chaud|>coude|>couteau|>crayon|>dé|>dent|>déprime|>éponge|>feu|>froid|fil|>filet|>folie|>foudre|>genou|>grâce|>griffe|>grisou|>gueule|>hache|>hachette|>hanche|Jarnac|jus|>jeune|>klaxon|>main|maître|maitre|>massue|>marteau|>menton|monté+s|>nostalgie|>pied|>poing|>poignard|>pouce|>pute|>queue|>rein|>rabot|>savate|>sang|>sabot|>sabre|>semonce|>sonnette|>sifflet|>soleil|>sonde|>sort|>surin|>tête|>théâtre|>tonnerre|>torchon|>trique|>vent|vieux]
    [>cou|>coût|>cout] d’ [>arrêt|>éclat|>épée|>état|>épaule|œil|oeil|>estoc]
    [>cou|>coût|>cout] du sort
    [>cou|>coût|>cout] [dur+s]
    >cou d’ envoi
        <<- /conf/ -1>> coup|coups      && Confusion probable. Le coût est le prix d’une chose. Le cou est la partie joignant le tronc à la tête. Pour ce qui frappe, écrivez “coup”.

    violence du [>cou|>coût|>cout]
................................................................................
    ci-dessus
    chaque chose en son temps
    chose promise ?,¿ chose due
    comme [de|d’] juste
    comme bon [me|te|lui|leur|nous|vous] semble
    comme ci ?,¿ comme ça
    comme cul et chemise
    comme des fétus [de|d’] paille
    comme [frappé+ses] par la foudre
    comme gage [de|d’] bonne foi
    comme n’importe où ?ailleurs¿
    comme par [enchantement|magie]
    comme par un fait exprès
    comme pas deux
    comme peau [de|d’] chagrin
    comme prévu
    comme promis
    comme qui dirait
    comme si [de|d’] rien n’ était
    comme sur des roulettes
    comme un lion en cage
    comme un fétu [de|d’] paille
    comme une lettre à la poste
    contrairement aux apparences
    contre mauvaise fortune ?,¿ bon cœur
    contre nature
    contre toute [attente|vraisemblance]
    contre vents et marées
    contre [mon|ton|son|notre|votre|leur] gré
................................................................................
    pour ça [vaut|valait]
    pourtant
    presque
    primo
    quand bien même
    quand bon [me|te|lui|nous|vous|leur] [semble|semblera|semblait]
    quant à [ça|cela|ceci]
    qu’ à cela ne tienne
    [que|qu’] [ça|ceci|cela] [me|te|lui|leur|nous|vous] plaise ou non
    ##
    [que|qu’] je [le|l’] veuille ou non
    [que|qu’] tu [le|l’] veuilles ou non
    qu’ [il|elle|on|iel] [le|l’] veuille ou non
    [que|qu’] vous [le|l’] vouliez ou non
    [que|qu’] nous [le|l’] voulions ou non
    qu’ [ils|elles|iels] [le|l’] veuillent ou non

    ##
    [que|qu’] [je|j’] m’ en réjouisse ou que [je|j’] le déplore
    [que|qu’] tu t’ en réjouisses ou que tu le déplores
    qu’ [il|elle|iel|on] s’ en réjouisse ou qu’ [il|elle|iel|on] le déplore
    [que|qu’] nous nous en réjouissions ou que nous le déplorions
    [que|qu’] vous vous en réjouissez ou que vous le déploriez
    qu’ [ils|elles|iels] s’ en réjouissent ou qu’ [ils|elles|iels] le déplorent
    ##
    quel qu’ en soit [le|l’] [moyen|prix|danger]
    quel qu’ en soit [le|l’] risque ?[économique|financier|légal|juridique|militaire]¿
    quelle qu’ en soit la [cause|raison]
    quelque peu
    ?[de|d’]¿ quelque part
    qui plus est
    quoi qu’ il [arrive|arrivât|advienne|advînt]
................................................................................
    >résidence d’ [été|hiver]
    >responsable qualité
    [>resto|>restau] u
    >retour à la case départ
    >retour à la normale
    >retour [de|d’] [bâton|flamme]
    >retour en arrière
    revers [de|d’] fortune
    >revue [de|d’] presse
    >rivière à sec
    >robe [de|d’] [chambre|soirée]
    >robe du soir
    >robe sans >manche
    >roi [de|d’] [carreau|cœur|pique|trèfle]
    >roman à [>sensation|suspense]
................................................................................

    complètement
        <<- not morph(<1, ":D.*:m") ~>> *

    ~.ment$  ?[parlant|pas]¿
        <<- morph(\1, ":W", ":(?:3p|N)") ~>> *

    , *WORD et $:W¬* ,
        <<- morph(\2, ":W", "*") ~>> *


@@@@
@@@@
@@@@
@@@@
@@@@GRAPH: intergraphe12a|ig12a                                                                    _
................................................................................

!!
!!
!!!! Groupe nominal (sans déterminant)                                                            !!
!!
!!



__gn_start_prn_1m__
    <start>  $:M1 ?,¿  @:[NA]¬:([ISKYPEGW]|e:[si])
        <<- /gn/ morph(\2, ":M1.*:m", ":[fe]") and morph(\-1, ":[NA]", ":[me]:[si]")
        --1>> =suggMasSing(\-1)                                                                     && Cet adjectif n’est pas accordé avec le prénom masculin “\2”.
        <<- /gn/ __else__ and morph(\2, ":M1.*:f", ":[me]") and morph(\-1, ":[NA]", ":[fe]:[si]")
        --1>> =suggFemSing(\-1)                                                                     && Cet adjectif n’est pas accordé avec le prénom féminin “\2”.

TEST: Patrick {{partie}} à la boulangerie depuis une heure.                         ->> parti
TEST: Antonina, {{oublié}} par ses parents chez leur grand-mère                     ->> oubliée
TEST: Pauline, {{surnuméraires}} parmi les employés de cette boîte                  ->> surnuméraire
TEST: Ahmed, {{psychologues}} à l’hôpital de Strasbourg                             ->> psychologue
TEST: il fronça les sourcils, inquiet pour son avenir
TEST: elles préservaient ce secret, conscientes du danger.


__gn_start_2m__
    <start>  @:[NA]¬*  @:[NA]¬*
        <<- /gn/ ((morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*"))) and not apposition(\2, \3)
        -3>> =switchGender(\3)                                                                      && Accord de genre erroné avec « \2 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 && Accord de genre erroné avec « \3 ».
        <<- /gn/ ((morph(\2, ":s", "*") and morph(\3, ":p", "*")) or (morph(\2, ":p", "*") and morph(\3, ":s", "*"))) and not apposition(\2, \3)
        -3>> =switchPlural(\3)                                                                      && Accord de nombre erroné avec « \2 ».
        <<- /gn/ __also__ -2>> =switchPlural(\2)                                                    && Accord de nombre erroné avec « \3 ».

TEST: {{serrurière}} {{intelligent}}.                                               ->> serrurier|||intelligente
TEST: {{serrurier}} {{intelligente}}.                                               ->> serrurière|||intelligent
TEST: {{Femmes}} {{mariée}}                                                         ->> Femme|||mariées
TEST: {{hommes}} {{marié}}                                                          ->> homme|||mariés


__gn_start_3m__
    <start>  @:[NA]¬*  @:[NA]¬*  @:[NA]¬*
        <<- /gn/ morph(\2, ":p") and morph(\3, ":[pi]") and morph(\4, ":s", ":[pi]") and \4.islower() -4>> =switchPlural(\4)  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
        <<- /gn/ morph(\2, ":i") and morph(\3, ":p")    and morph(\4, ":s", ":[pi]") and \4.islower() -4>> =switchPlural(\4)  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.
        <<- /gn/ morph(\2, ":s") and morph(\3, ":[si]") and morph(\4, ":p", ":[si]") and \4.islower() -4>> =switchPlural(\4)  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
................................................................................
TEST: {{petite}} et {{grande}} homme                            ->> petit|||grand
TEST: {{bel}} et {{grand}} nation                               ->> belle|||grande
TEST: {{stupides}} et {{intellectuels}} psychologue             ->> stupide|||intellectuel
TEST: {{petite}} et {{grande}} hommes                           ->> petits|||grands
TEST: {{bel}} et {{grand}} nations                              ->> belles|||grandes
TEST: {{stupide}} et {{intellectuel}} psychologues              ->> stupides|||intellectuels


__gn_2m_et__
    [<start>|,|(]  *WORD  et  @:A¬:[ISKYPEGW]|;C  [<end>|,|)]
        <<- /gn/ morph(\2, ":A", ":[ISKYPEGW]|;C") and not agreement(\2, \4, False) -2>> =suggAgree(\2, \4)     && Cet adjectif n’est pas accordé avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggAgree(\4, \2)                                                               && Cet adjectif n’est pas accordé avec l’adjectif “\4”.

TEST: cette femme, {{grande}} et {{intelligent}}                ->> grand|||intelligente
TEST: cet homme, {{curieuse}} et {{affligé}}                    ->> curieux|||affligée
TEST: ces personnes, {{étrangères}} et {{passionnée}}           ->> étrangère|||passionnées
TEST: des portes, {{grands}} et {{folles}}                      ->> grandes|||fous
TEST: ils marchaient ensemble, ingénieurs et patron, vers leur dernière heure, ignorants du danger.
TEST: nous roulions lentement vers cette maison, inquiets et apeurés.


## Prépositions
__gn_pfx_en_2m__
    en  @:[NA]¬*  @:[NA]¬*
        <<- /gn/ ( (morph(\2, ":m", "*") and morph(\3, ":f", "*")) or (morph(\2, ":f", "*") and morph(\3, ":m", "*")) ) and not apposition(\2, \3)
        -3>> =switchGender(\3)                                                                      && Accord de genre erroné avec « \2 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2)                                 && Accord de genre erroné avec « \3 ».
................................................................................


__infi_commencer_finir_par__
    [>commencer|>finir]  par  ?[le|l’|la|leur|les]¿  @:V¬:[NGMY]
    [>commencer|>finir]  par  [nous|vous|lui]        @:V¬:[GMY]
        <<- /infi/ not \-1[0:1].isupper() --1>> =suggVerbInfi(\3)                       && Après « commencer/finir par », le verbe devrait être à l’infinitif.

TEST: commence par {{mangé}} le poulet.                                         ->> manger
TEST: enfin la petite finit par {{pleuré}} à chaudes larmes.                    ->> pleurer
TEST: sa tournée, elle la finit par Rodez.


#### Infinitif après “de”

__infi_de_verbe__
    [un|une] [de|d’] [perdu+ses] ?,¿ dix [de|d’] [retrouvé+ses]
................................................................................
    [de|d’] [me|m’|te|t’|se|s’]  [le|la|l’|les|en|y]                             @:V¬:Y
    [de|d’] [nous|vous]          [le|la|l’|les|en|y]                             @:V¬:[YP]
    [de|d’] [le|la|l’|les]       [lui|leur|en|y]                                 @:V¬:Y
    [de|d’] leur                 en                                              @:V¬:Y
    [de|d’] lui                  en                                              @:V¬:[YP]
        <<- /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|qualifier)/") and not morph(\2, ">(?:fieffer|sacrer)/") and not tag(<1, "_rien_")
            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 tagbefore(\1, "_ceque_")
        -2>> =suggVerbInfi(\2)                                                          && Le verbe devrait être à l’infinitif.

TEST: d’en {{parlé}} sans cesse                                                             ->> parler
TEST: cela suffit de les {{aimait}}                                                         ->> aimer
................................................................................
TEST: je suis certain d’en {{choque}} plusieurs.                                            ->> choquer
TEST: elle était capable de la {{trouvait}} où qu’elle soit.                                ->> trouver
TEST: de me le {{facturez}}                                                                 ->> facturer
TEST: suffit de {{la}} {{finit}}                                                            ->> là|||finir
TEST: Il s’agit de me {{donnait}} tout ça.                                                  ->> donner
TEST: j’étais incapable de m’{{orientait}} dans la bonne direction.                         ->> orienter
TEST: ils étaient susceptibles de m’y {{trouvaient}}                                        ->> trouver

TEST: elle a délibérément omis de les {{inclurent}}.                                        ->> inclure
TEST: d’{{mangé}} je ne suis pas capable                                                    ->> manger
TEST: elles n’ont rien touché de souillé
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
................................................................................


__infi_que_faire_sinon__
    que faire ?,¿ sinon  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$
    que faire ?,¿ sinon  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]        ~..(?:ée?s?|ez|ai[ts]?)$
    que faire ?,¿ sinon  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]            ~..(?:ée?s?|ez|ai[ts]?)$
    que faire ?,¿ sinon  ?[ne|n’]¿  [lui|leur|y]                    en                         ~..(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V", ":M") --1>> =suggVerbInfi(\-1)                                  && Après “que faire”, mettez le verbe à l’infinitif.

TEST: que faire, sinon s’{{adonnait}} à sa passion                                          ->> adonner
TEST: que croire sinon la pensée qu’il y a toujours une solution


__infi_rien_à_faire_que_sinon__
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$
................................................................................
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]        ~..(?:ée?s?|ez|ai[ts]?)$
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]            ~..(?:ée?s?|ez|ai[ts]?)$
    rien à faire [que|qu’|sinon]          ?[ne|n’]¿  [lui|leur|y]                    en                         ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿ ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]        ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]            ~..(?:ée?s?|ez|ai[ts]?)$
    rien d’ autre à faire [que|qu’|sinon] ?[ne|n’]¿  [lui|leur|y]                    en                         ~..(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V", ":M") --1>> =suggVerbInfi(\-1)                                  && Après “rien à faire que”, mettez le verbe à l’infinitif.

TEST: rien à faire sinon {{expliqué}} ce qu’il faisait là           ->> expliquer
TEST: rien d’autre à faire que lui {{donnait}} à manger             ->> donner


__infi_nous_vous_verbe!3__
    nous  ~ée?s?$
        <<- /infi/ space(\1, 1, 3) and morph(\2, ":Q") and not morph(<1, "V0.*:1p")
        -2>> =suggVerbInfi(\2)                                                                      && Après “\1”, le verbe ne devrait pas être un participe passé.

    vous  ~ée?s?$
        <<- /infi/ space(\1, 1, 3) and morph(\2, ":Q") and not morph(<1, "V0.*:2p")
        -2>> =suggVerbInfi(\2)+"|"+suggVerbTense(\2, ":Ip", ":2p")                                  && Après “\1”, le verbe ne devrait pas être un participe passé.

TEST: oui, pourquoi pas, puisque nous {{intéressé}} à la question ne suffit pas à faire de nous des experts.   ->> intéresser
TEST: il faut croire que vous {{mangé}} ne nous nourrirait guère                                               ->> manger|mangez
TEST: Sommes-nous désespérés à ce point ?
TEST: Vous d’habitude si réservée.


__infi_y_verbe!3__
    y ~ée?s?$
        <<- /infi/ \1.islower() and morph(\2, ":V", ":[123][sp]") -2>> =suggVerbInfi(\2)            && Le verbe ne devrait pas être un participe passé.

TEST: y {{mangée}} était un supplice                                ->> manger
TEST: j’y crée une nouvelle maison.



#### Infinitif directement après verbe

__infi_devoir!5__
................................................................................
TEST: En outre, les grosses institutions comme l’Éducation Nationale ne développent pas forcément en interne
TEST: Le mieux serait de le faire glisser


__tag_locutions_verbales_d_état__
    ## verbes d’état

    [>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre|>apparaître|>apparaitre]
        <<- /1>> _VE_

    /_VCint_
        <<- morph(\1, ":V[0-3]e") /1>> _VEI_


    ## locutions verbales d’état

    >avoir [été|semblé|paru]
    >avoir [cru|imaginé|pensé|pu|su|voulu]                      [être|sembler|devenir|rester|demeurer|redevenir|paraître|apparaître|apparaitre]
    >avoir [besoin|crainte|envie|horreur|peur]                  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|apparaître|apparaitre]
    >avoir l’ [envie|exigence|illusion|impression|intention]    [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|apparaître|apparaitre]
    >avoir le [désir|sentiment]                                 [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|apparaître|apparaitre]
    >avoir la ?ferme¿ [intention|volonté]                       [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|apparaître|apparaitre]
    [>être|>sembler|>demeurer|>paraître|>apparaître|>apparaitre] [loin|près]  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|apparaître|apparaitre]
    [>être|>sembler] [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
    [>aller|>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]
        || ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
    [>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]
        || ?[en|y]¿ être [devenu+ses|redevenu+ses|resté+ses|demeuré+ses|apparu+ses]
    [>adorer|>affirmer|>aimer|>croire|>déclarer|>désirer|>détester|>devoir|>dire|>estimer|>imaginer|>paraître|>paraitre|>penser|>pouvoir|>préférer|>risquer|>savoir|>sembler|>souhaiter|>vouloir]
        || ?[en|y]¿ avoir [été|semblé|paru]
    [>arriver|>continuer|>commencer|>parvenir|>renoncer|>réussir|>travailler]                   à ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
    [>cesser|>continuer|>craindre|>demander|>exiger|>redouter|>rêver|>refuser|>risquer|>venir]  [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
    [>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre|>apparaître|>apparaitre]  [>content|>conscient|>heureux|>inquiet|>malheureux|>susceptible]
        || [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
        <<- /1>> _LVED_
        <<- />> _LVE_
        <<- /-1>> _LVEF_

    /_VCint_  [été|semblé|paru]
    /_VCint_  [cru|imaginé|pensé|pu|su|voulu]                       [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre|apparaître|apparaitre]
    /_VCint_  [besoin|crainte|envie|horreur|peur]                   [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre|apparaître|apparaitre]
    /_VCint_  l’ [envie|exigence|illusion|impression|intention]     [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre|apparaître|apparaitre]
    /_VCint_  le [désir|sentiment]                                  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre|apparaître|apparaitre]
    /_VCint_  la ?ferme¿ [intention|volonté]                        [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre|apparaître|apparaitre]
        <<- morphVC(\1, ">avoir/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [loin|près]  [de|d’] [être|sembler|devenir|rester|demeurer|redevenir|paraître|paraitre|apparaître|apparaitre]
        <<- morphVC(\1, ">(?:être|sembler|demeurer|para[i]tre|appara[i]tre)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
        <<- morphVC(\1, ">(?:être|sembler)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
        <<- morphVC(\1, ">(?:aller|adorer|affirmer|aimer|croire|déclarer|désirer|détester|devoir|dire|estimer|imaginer|para[îi]tre|penser|pouvoir|préférer|risquer|savoir|sembler|souhaiter|vouloir)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  ?[en|y]¿ être [devenu+ses|redevenu+ses|resté+ses|demeuré+ses]
    /_VCint_  ?[en|y]¿ avoir [été|semblé|paru]
        <<- morphVC(\1, ">(?:adorer|affirmer|aimer|croire|déclarer|désirer|détester|devoir|dire|estimer|imaginer|para[îi]tre|penser|pouvoir|préférer|risquer|savoir|sembler|souhaiter|vouloir)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  à ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
        <<- morphVC(\1, ">(?:arriver|commencer|continuer|parvenir|renoncer|réussir|travailler)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
        <<- morphVC(\1, ">(?:cesser|continuer|craindre|demander|exiger|redouter|rêver|refuser|risquer|venir)/") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_

    /_VCint_  [>content|>conscient|>heureux|>inquiet|>malheureux|>susceptible] [de|d’] ?[ne|n’]¿ ?[en|y]¿ [être|sembler|devenir|redevenir|rester|demeurer|paraître|paraitre|apparaître|apparaitre]
        <<- morphVC(\1, ":V[0-3]e") >>>
        <<- /1>> _LVEID_
        <<- />> _LVEI_
        <<- /-1>> _LVEIF_


    ## locutions verbales d’état pronominales
................................................................................
TEST: iel semble être {{ignore}}
TEST: ouais, on adore avoir été {{persécute}} par ces enfoirés
TEST: nous préférions être restés {{chagrinait}} par cette perte
TEST: on déclare avoir été {{choque}} par ces nouvelles
TEST: ils semblent être redevenus {{élut}}
TEST: elles aiment avoir paru {{murent}}


__ppas_fin_loc_verb_état_adj_et_adj__
    [/_VE_|/_VEI_|/_LVEF_|/_LVEIF_|/_VEP_|/_LVEPF_|/_LVEPIF_] *WORD et @:A¬:[ISKYPEGW]|;C
        <<- /ppas/ morph(\2, ":[AQ]", ":G|;C") and not agreement(\2, \-1, False)
        --1>> =suggAgree(\-1, \2)                                                                   && Cet adjectif n’est pas accordé avec l’adjectif “\2”.

TEST: il est furieux et {{curieuse}}                                                    ->> curieux
TEST: tu es sot et {{ignorants}}                                                        ->> ignorant
TEST: elle est belle et {{intelligent}}                                                 ->> intelligente
TEST: elle sut apparaître grande et {{humbles}} à la fois                               ->> humble
TEST: ils devenaient forts et {{humble}}                                                ->> humbles
TEST: ils crurent avoir été trompés et {{volé}}                                         ->> volés
TEST: elles déclareront être restées calmes et {{attentive}}                            ->> attentives
TEST: nous imaginons devenir riches et {{connu}}                                        ->> connus


__ppas_être_confusion__
    ne [pas|jamais] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p)
        <<- /ppas/ --1>> =suggVerbPpas(\-1)                                                         && Après “ne \2 être”, il faut un participe passé.

    avoir [pu|cru|pensé|imaginé] être @:(?:V(?:1.*:Y|2.*:Ip.*:3s|3.*:Is.*:3s)|2p)
        <<- /ppas/ not value(<1, "|l’|") and not tagbefore(\1, "_que_") --1>> =suggVerbPpas(\-1)    && Après le verbe “être”, il faut un participe passé.