Grammalecte  Check-in [55b6bb4791]

Overview
Comment:[core][fr] rename functions
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr | core | build
Files: files | file ages | folders
SHA3-256: 55b6bb4791d4a36ed9cd9a1980269f7bcce0d52b534c544de53778dbb5f06441
User & Date: olr on 2020-11-25 22:37:24
Other Links: manifest | tags
Context
2020-11-25
22:59
[build][core][fr][doc] rename functions check-in: b695f86d1e user: olr tags: trunk, fr, core, build, doc
22:37
[core][fr] rename functions check-in: 55b6bb4791 user: olr tags: trunk, fr, core, build
21:38
[core] remove useless parameter check-in: bd591492d4 user: olr tags: trunk, core
Changes

Modified compile_rules_graph.py from [dc34a23095] to [b9a13543b1].

36
37
38
39
40
41
42
43
44
45
46




47
48
49
50
51
52
53
36
37
38
39
40
41
42




43
44
45
46
47
48
49
50
51
52
53







-
-
-
-
+
+
+
+







    if sCode[0:1] == "=":
        sCode = sCode[1:]
    sCode = sCode.replace("__also__", "bCondMemo")
    sCode = sCode.replace("__else__", "not bCondMemo")
    sCode = sCode.replace("sContext", "_sAppContext")
    sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\(\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(morph|morphVC|analyse|value|tag|meta|info)[(]\\-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(select|exclude|define|define_from|rewrite|add_morph|change_meta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(select|exclude|define|define_from|rewrite|add_morph|change_meta)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1]', sCode)
    sCode = re.sub(r"\b(tag_before|tag_after)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2], dTags', sCode)
    sCode = re.sub(r"\b(tag_before|tag_after)[(][\\]-(\d+)", 'g_\\1(lToken[nLastToken-\\2+1], dTags', sCode)
    sCode = re.sub(r"\b(select|exclude|define|definefrom|rewrite|addmorph|setmeta)[(][\\](\d+)", 'g_\\1(lToken[nTokenOffset+\\2]', sCode)
    sCode = re.sub(r"\b(select|exclude|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_after[(][\\](\d+)", 'g_space_between_tokens(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\bspace_after[(][\\]-(\d+)", 'g_space_between_tokens(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\banalyse_with_next[(][\\](\d+)", 'g_merged_analyse(lToken[nTokenOffset+\\1], lToken[nTokenOffset+\\1+1]', sCode)
    sCode = re.sub(r"\banalyse_with_next[(][\\]-(\d+)", 'g_merged_analyse(lToken[nLastToken-\\1+1], lToken[nLastToken-\\1+2]', sCode)
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>1", 'g_\\1(lToken[nLastToken+1]', sCode)                       # next token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(<1", 'g_\\1(lToken[nTokenOffset]', sCode)                       # previous token
    sCode = re.sub(r"\b(morph|analyse|tag|meta|value)\(>(\d+)", 'g_\\1(g_token(lToken, nLastToken+\\2)', sCode)        # next token

Modified doc/syntax.txt from [9d8b7e574a] to [ae64accd19].

354
355
356
357
358
359
360
361

362
363
364
365
366
367
368
354
355
356
357
358
359
360

361
362
363
364
365
366
367
368







-
+







`tag(n, tag)`

>   Returns True if <tag> exists on taken the nth token.

`tag_before(n, tag)`

>   Returns True if <tag> is found any token before the nth tag.
   

`tag_after(n, tag)`

>   Returns True if <tag> is found any token after the nth tag.

### Functions for regex and token rules

`__also__`
617
618
619
620
621
622
623
624

625
626
627

628
629
630
631
632
633
634
617
618
619
620
621
622
623

624
625
626

627
628
629
630
631
632
633
634







-
+


-
+







    =>> exclude(\1, "po:verb")
    =>> exclude(\1, "po:verb") and define(\2, ["po:adv"]) and select(\3, "po:adv")

Note: All these functions ALWAYS return True.

If `select()` and `exclude()` generate an empty list, nothing change.

With `define()` and `add_morph()`, you must set a list of POS tags. Example:
With `define()` and `addmorph()`, you must set a list of POS tags. Example:

    =>> define(\1, ["po:nom is:plur", "po:adj is:sing", "po:adv"])
    =>> add_morph(\1, ["po:adv"])
    =>> addmorph(\1, ["po:adv"])

### Tagging

**Only for token rules**. Tagging can be done with the command `/>>`. You can set one or several tags at once. Use `|` as a separator.

Example: `/>> a_tag` to set the same tag on all takens of the rule.
Example: `/3>> a_tag` to set the tag on the third token.
665
666
667
668
669
670
671
672

673
674
675
676
677
678
679
665
666
667
668
669
670
671

672
673
674
675
676
677
678
679







-
+








    DEF: name definition

Usage: `{name}` will be replaced by its definition

Example:

    DEF: word_3_letters     \w\w\w+  
    DEF: word_3_letters     \w\w\w+
    DEF: uppercase_token    ~^[A-Z]+$
    DEF: month_token        [January|February|March|April|May|June|July|August|September|October|November|december]

    ({word_3_letters}) (\w+) <<- condition ->> suggestion     && message|URL

    {uppercase_token} {month_token}
        <<- condition ->> message                             && message|URL

Modified gc_core/js/lang_core/gc_functions.js from [66aee0aeb8] to [aa38f73dea].

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







-
+









-
+







    let bResult = lMorph.some(sMorph  =>  (sMorph.search(sPattern) !== -1));
    if (bResult && bSetMorph) {
        oToken1["lMorph"] = lMorph;
    }
    return bResult;
}

function g_tag_before (oToken, dTags, sTag) {
function g_tagbefore (oToken, dTags, sTag) {
    if (!dTags.has(sTag)) {
        return false;
    }
    if (oToken["i"] > dTags.get(sTag)[0]) {
        return true;
    }
    return false;
}

function g_tag_after (oToken, dTags, sTag) {
function g_tagafter (oToken, dTags, sTag) {
    if (!dTags.has(sTag)) {
        return false;
    }
    if (oToken["i"] < dTags.get(sTag)[1]) {
        return true;
    }
    return false;
419
420
421
422
423
424
425
426

427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447

448
449
450
451
452
453
454
455
456

457
458
459
460
461
462
463
419
420
421
422
423
424
425

426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446

447
448
449
450
451
452
453
454
455

456
457
458
459
460
461
462
463







-
+




















-
+








-
+







    let lSelect = lMorph.filter( sMorph => sMorph.search(sPattern) === -1 );
    if (lSelect.length > 0 && lSelect.length != lMorph.length) {
        oToken["lMorph"] = lSelect;
    }
    return true;
}

function g_add_morph (oToken, sNewMorph) {
function g_addmorph (oToken, sNewMorph) {
    // Disambiguation: add a morphology to a token
    let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : gc_engine.oSpellChecker.getMorph(oToken["sValue"]);
    lMorph.push(...sNewMorph.split("|"));
    oToken["lMorph"] = lMorph;
    return true;
}

function g_rewrite (oToken, sToReplace, sReplace) {
    // Disambiguation: rewrite morphologies
    let lMorph = (oToken.hasOwnProperty("lMorph")) ? oToken["lMorph"] : gc_engine.oSpellChecker.getMorph(oToken["sValue"]);
    oToken["lMorph"] = lMorph.map(s => s.replace(sToReplace, sReplace));
    return true;
}

function g_define (oToken, sMorphs) {
    // set morphologies of <oToken>, always return true
    oToken["lMorph"] = sMorphs.split("|");
    return true;
}

function g_define_from (oToken, nLeft=null, nRight=null) {
function g_definefrom (oToken, nLeft=null, nRight=null) {
    let sValue = oToken["sValue"];
    if (nLeft !== null) {
        sValue = (nRight !== null) ? sValue.slice(nLeft, nRight) : sValue.slice(nLeft);
    }
    oToken["lMorph"] = gc_engine.oSpellChecker.getMorph(sValue);
    return true;
}

function g_change_meta (oToken, sType) {
function g_setmeta (oToken, sType) {
    // Disambiguation: change type of token
    oToken["sType"] = sType;
    return true;
}



Modified gc_core/py/lang_core/gc_functions.py from [2ffbd61317] to [35f4fd30c3].

244
245
246
247
248
249
250
251

252
253
254
255
256
257
258
259
260

261
262
263
264
265
266
267
244
245
246
247
248
249
250

251
252
253
254
255
256
257
258
259

260
261
262
263
264
265
266
267







-
+








-
+







    zPattern = re.compile(sPattern)
    bResult = any(zPattern.search(sMorph)  for sMorph in lMorph)
    if bResult and bSetMorph:
        dToken1["lMorph"] = lMorph
    return bResult


def g_tag_before (dToken, dTags, sTag):
def g_tagbefore (dToken, dTags, sTag):
    "returns True if <sTag> is present on tokens before <dToken>"
    if sTag not in dTags:
        return False
    if dToken["i"] > dTags[sTag][0]:
        return True
    return False


def g_tag_after (dToken, dTags, sTag):
def g_tagafter (dToken, dTags, sTag):
    "returns True if <sTag> is present on tokens after <dToken>"
    if sTag not in dTags:
        return False
    if dToken["i"] < dTags[sTag][1]:
        return True
    return False

361
362
363
364
365
366
367
368

369
370
371
372
373
374
375
361
362
363
364
365
366
367

368
369
370
371
372
373
374
375







-
+







    lSelect = [ sMorph  for sMorph in lMorph  if not re.search(sPattern, sMorph) ]
    if lSelect and len(lSelect) != len(lMorph):
        dToken["lMorph"] = lSelect
    #echo("DA:", dToken["sValue"], dToken["lMorph"])
    return True


def g_add_morph (dToken, sNewMorph):
def g_addmorph (dToken, sNewMorph):
    "Disambiguation: add a morphology to a token"
    lMorph = dToken["lMorph"]  if "lMorph" in dToken  else _oSpellChecker.getMorph(dToken["sValue"])
    lMorph.extend(sNewMorph.split("|"))
    dToken["lMorph"] = lMorph
    return True


383
384
385
386
387
388
389
390

391
392
393
394
395
396
397
398
399

400
401
402
403
404
405
406
383
384
385
386
387
388
389

390
391
392
393
394
395
396
397
398

399
400
401
402
403
404
405
406







-
+








-
+







def g_define (dToken, sMorphs):
    "Disambiguation: set morphologies of <dToken>, always return True"
    dToken["lMorph"] = sMorphs.split("|")
    #echo("DA:", dToken["sValue"], lMorph)
    return True


def g_define_from (dToken, nLeft=None, nRight=None):
def g_definefrom (dToken, nLeft=None, nRight=None):
    "Disambiguation: set morphologies of <dToken> with slicing its value with <nLeft> and <nRight>"
    if nLeft is not None:
        dToken["lMorph"] = _oSpellChecker.getMorph(dToken["sValue"][slice(nLeft, nRight)])
    else:
        dToken["lMorph"] = _oSpellChecker.getMorph(dToken["sValue"])
    return True


def g_change_meta (dToken, sType):
def g_setmeta (dToken, sType):
    "Disambiguation: change type of token"
    dToken["sType"] = sType
    return True



#### GRAMMAR CHECKER PLUGINS

Modified gc_lang/fr/rules.grx from [f8fdf0f604] to [16cbef8ec3].

1858
1859
1860
1861
1862
1863
1864
1865

1866
1867
1868
1869

1870
1871
1872
1873
1874
1875
1876
1858
1859
1860
1861
1862
1863
1864

1865
1866
1867
1868

1869
1870
1871
1872
1873
1874
1875
1876







-
+



-
+







#TEST: +{{1.5}} dioptrie
#TEST: j’en veux 2.000
#TEST: et moi 3.000.000 de dollars


__virg_après_verbe_COD__
    [le|la|l’|les]  $:Y¬:N  $:M
        <<- /virg/ not value(\2, "|appeler|") and not tag_before(\1, "_que_") and not tag_before(\1, "_comme_")
        <<- /virg/ not value(\2, "|appeler|") and not tagbefore(\1, "_que_") and not tagbefore(\1, "_comme_")
        -2>> \2,                                                && Si “\-1” marque le début d’une proposition, une virgule est probablement souhaitable.

    [le|la|l’|les]  *WORD  ?[cher|chère]¿  @:M[12]  <end>
        <<- /virg/ morph(\2, ":[123][sp]", ">appeler/|:[NA]") and not tag_before(\1, "_que_") and not tag_before(\1, "_comme_")
        <<- /virg/ morph(\2, ":[123][sp]", ">appeler/|:[NA]") and not tagbefore(\1, "_que_") and not tagbefore(\1, "_comme_")
        -2>> \2,                                                && Si “\-2” est une personne apostrophée, alors il faut mettre le nom en incise.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?Th=2&t1=&id=3412

TEST: Tu vas les {{donner}} Rachel.
TEST: Il va la {{tuer}} Paul.
TEST: je le {{sais}} chère Paula
TEST: Ma fille, je vais l’appeler Deirdre.
TEST: Cependant les promesses n’engagent que ceux qui les croient, comme aimait à le dire Jacques Chirac.
2372
2373
2374
2375
2376
2377
2378
2379

2380
2381
2382
2383
2384
2385
2386
2372
2373
2374
2375
2376
2377
2378

2379
2380
2381
2382
2383
2384
2385
2386







-
+







    ce @:[NA].*:[me]:[si]¬:(?:3[sp]|V0)
        <<- not value(<1, "|il|elle|on|iel|ils|elles|iels|ne|n’|") =>> select(\-1, ":[NA]")

    sa  @¬:(?:V0|3s)
        <<- =>> exclude(\2, ":V")

    les  ~.es$
        <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tag_before(\1, "_2s_") and not value(>1, "|tu|pas|jamais|")
        <<- not value(<1, "|tu|ne|n’|me|m’|te|t’|se|s’|nous|vous|") and morph(\2, ":V1.*Ip.*:2s") and not tagbefore(\1, "_2s_") and not value(>1, "|tu|pas|jamais|")
        =>> 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")

    [/_VCint_|/_VCimp_]  [le|la|l’|leur|les]  $:¬:Y
        <<- =>> select(\2, ":D")
2426
2427
2428
2429
2430
2431
2432
2433

2434
2435
2436
2437
2438
2439
2440
2426
2427
2428
2429
2430
2431
2432

2433
2434
2435
2436
2437
2438
2439
2440







-
+









__da_groupe_nominal__cas_particuliers__
    [au|aux] alentour
        <<- =>> select(\2, ":N")

    avions
        <<- not tag_before(\1, "_1p_") and not value(<1, "|n’|") and not value(>1, "|nous|") =>> select(\-1, ":N")
        <<- not tagbefore(\1, "_1p_") and not value(<1, "|n’|") and not value(>1, "|nous|") =>> select(\-1, ":N")

    l’ avions
        <<- morph(<1, ":Y") =>> select(\-1, ":N")

    bac + ~^\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, ":N:e:i")
2473
2474
2475
2476
2477
2478
2479
2480

2481
2482
2483

2484
2485
2486
2487
2488
2489
2490
2473
2474
2475
2476
2477
2478
2479

2480
2481
2482

2483
2484
2485
2486
2487
2488
2489
2490







-
+


-
+







__da_couleurs_invariables__
    *WORD [abricot|acajou|amarante|anthracite|aubergine|brique|caca|café|cannelle|caramel|carmin|carotte|cerise|châtaigne|chocolat|citron|corail|crème|fuchsia|groseille|havane|jonquille|marron|mastic|nacarat|ocre|olive|paille|parme|pastel|pervenche|pie|prune|sable|tabac|vermillon]
        <<- morph(\1, ":(?:D.*:p|B)") =>> exclude(\2, ":A:e:i")


__da_noms_propres__
    Concorde
        <<- not morph(<1, ":D.*:f") =>> add_morph(\1, ">Concorde/:MP:m:i")
        <<- not morph(<1, ":D.*:f") =>> addmorph(\1, ">Concorde/:MP:m:i")

    Mustang
        <<- not morph(<1, ":D.*:m") =>> add_morph(\1, ">Mustang/:MP:f:i")
        <<- not morph(<1, ":D.*:m") =>> addmorph(\1, ">Mustang/:MP:f:i")

TEST: le crash du Concorde
TEST: elle a acheté une Mustang



!!!
2625
2626
2627
2628
2629
2630
2631
2632

2633
2634
2635
2636
2637
2638
2639
2625
2626
2627
2628
2629
2630
2631

2632
2633
2634
2635
2636
2637
2638
2639







-
+







    ni
        <<- />> _ni_


__tag_noms__
    ~\w-là$
        <<- />> -là
        <<- =>> =define_from(\1, 0, -3)
        <<- =>> =definefrom(\1, 0, -3)

    ## _1M_  : première lettre majuscule
    ## _CAP_ : toutes capitales
    ## _Cap_ : première lettre capitale, les autres minuscules
    ~^[A-ZÀÂÉÈÊÎÏÔ]
        <<- />> _Maj_
        <<- \1.isupper() />> _CAP_
2651
2652
2653
2654
2655
2656
2657
2658

2659
2660
2661
2662
2663
2664

2665
2666
2667
2668
2669
2670
2671
2651
2652
2653
2654
2655
2656
2657

2658

2659
2660
2661
2662

2663
2664
2665
2666
2667
2668
2669
2670







-
+
-




-
+







    alors    [que|qu’]
    dès lors [que|qu’]
        <<- ~>> ␣
        <<- =>> define(\1, ":Cs")

    quelqu’ [un|une]
        <<- ~>> ␣
        <<- =>> change_meta(\1, "WORD")
        <<- =>> setmeta(\1, "WORD")


    [  [m|t|s]  ]  [a|on|es]
    [  [n|v]    ]  [otre|ôtre]
        <<- space_after(\1, 0, 0) and space_after(\2, 0, 0) and space_after(\3, 0, 0) ~>> ␣\2\4
        <<- =>> change_meta(\1, "WORD")
        <<- =>> setmeta(\1, "WORD")

TEST: [s]es {{homme}}                                           ->> hommes
TEST: des effets sur [s]es états d’âme, [s]on corps


__fusions_noms_communs__
    au revoir
2695
2696
2697
2698
2699
2700
2701
2702

2703
2704
2705
2706
2707
2708
2709
2694
2695
2696
2697
2698
2699
2700

2701
2702
2703
2704
2705
2706
2707
2708







-
+








    notre père
        <<- morph(<1, ":D.*:[mp]") ~>> ␣
        <<- __also__ =>> define(\1, ":N:m:i")

    presqu’ [>ile|>île]
        <<- ~>> ␣
        <<- =>> change_meta(\1, "WORD")
        <<- =>> setmeta(\1, "WORD")

    nec plus ultra
    terra incognita
    statu quo
        <<- ~>> ␣

    *NUM : *NUM
4558
4559
4560
4561
4562
4563
4564
4565

4566
4567
4568
4569
4570
4571
4572
4557
4558
4559
4560
4561
4562
4563

4564
4565
4566
4567
4568
4569
4570
4571







-
+









__eleu_n_superflu__
    on n’ [a|avait|eut|aura|aurait|eût] rarement
        <<- /eleu/ -2:3>> \3                                    && Adverbe de négation erroné. Rarement signifie que ça arrive, pas que ça n’arrive pas.

    on n’ [a|avait|eut|aura|aurait|eût] [>besoin|>chaud|>crainte|>faim|>froid|>peur|>soif]
        <<- /eleu/ not tag_after(\-1, "_que_") and not value(<1, "|jamais|guère|")
        <<- /eleu/ not tagafter(\-1, "_que_") and not value(<1, "|jamais|guère|")
        -2:3>> \3|n’\3 pas|n’\3 jamais|n’\3 plus|n’\3 guère     && Adverbe de négation superflu ou manquant.

TEST: on {{n’a}} rarement besoin d’avoir accès à plus de 10 logiciels.              ->> a
TEST: on {{n’avait}} faim.                                                          ->> avait|n’avait pas|n’avait jamais|n’avait plus|n’avait guère
TEST: on n’avait peur que lorsque la tempête soufflait
TEST: jamais on n’eut besoin d’une telle chose.

4903
4904
4905
4906
4907
4908
4909
4910

4911
4912
4913
4914
4915
4916
4917
4902
4903
4904
4905
4906
4907
4908

4909
4910
4911
4912
4913
4914
4915
4916







-
+









!!!! Dates                                                                                        !!

__fusion_date__
    *NUM  -  ~^\d\d?$  -  ~^\d{2,5}$
        <<- \1.isdigit() ~>> ␣
        <<- =>> change_meta(\1, "DATE")
        <<- =>> setmeta(\1, "DATE")


__date_jour_mois_année__
    31 [avril|juin|septembre|novembre]
        <<- /date/ space_after(\1, 1, 1) ->> 30 \2                                                  && Cette date est invalide. Il n’y a que 30 jours en \2.

    [30|31] février
5124
5125
5126
5127
5128
5129
5130
5131

5132
5133
5134
5135
5136
5137
5138
5123
5124
5125
5126
5127
5128
5129

5130
5131
5132
5133
5134
5135
5136
5137







-
+







        <<- ~1>> *

    [une|la|cette|cet|ma|ta|sa]  pseudo  @:N.*:f
        <<- /tu/ -2:3>> pseudo-\3                                                                   && Si vous voulez évoquer le simulacre de “\2”, mettez un trait d’union.
        <<- ~2>> *

    ~^[pP]seudo-\w+
        <<- =>> define_from(\1, 7)
        <<- =>> definefrom(\1, 7)

TEST: il n’avait contracté qu’un {{pseudo mariage}}.
TEST: elle connaissait de {{cet}} pseudo-prêtresse uniquement de nom.
TEST: la {{pseudo taxe}} carbone


__tu_mots_composés_verbe_nom__
5984
5985
5986
5987
5988
5989
5990
5991

5992
5993
5994
5995
5996
5997
5998
5983
5984
5985
5986
5987
5988
5989

5990
5991
5992
5993
5994
5995
5996
5997







-
+







!!!! 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]") and not tag_before(\1, "_1p_")
        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:1p", ":[GW]") and not tagbefore(\1, "_1p_")
        --2:-1>> \-2-\-1                                                                            && Forme interrogative ? Mettez un trait d’union.

    ,  ~ons$  nous  [<end>|,|)]
    ,  ~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.

6018
6019
6020
6021
6022
6023
6024
6025

6026
6027
6028
6029
6030
6031
6032
6017
6018
6019
6020
6021
6022
6023

6024
6025
6026
6027
6028
6029
6030
6031







-
+









__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]") and not tag_before(\1, "_2p_")
        <<- /inte/ space_after(\-2, 1, 1) and morph(\-2, ":V.*:2p", ":[GW]") and not tagbefore(\1, "_2p_")
        --2:-1>> \-2-\-1       && Forme interrogative ? Mettez un trait d’union.

    ,  ~ez$  vous  [<end>|,|)]
    ,  ~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.

7220
7221
7222
7223
7224
7225
7226
7227

7228
7229
7230
7231
7232
7233

7234
7235
7236
7237

7238
7239
7240
7241

7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254

7255
7256
7257
7258
7259
7260

7261
7262
7263
7264

7265
7266
7267
7268

7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283

7284
7285
7286
7287
7288
7289

7290
7291
7292
7293

7294
7295
7296
7297

7298
7299
7300
7301

7302
7303
7304
7305
7306
7307
7308
7219
7220
7221
7222
7223
7224
7225

7226
7227
7228
7229
7230
7231

7232
7233
7234
7235

7236
7237
7238
7239

7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252

7253
7254
7255
7256
7257
7258

7259
7260
7261
7262

7263
7264
7265
7266

7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281

7282
7283
7284
7285
7286
7287

7288
7289
7290
7291

7292
7293
7294
7295

7296
7297
7298
7299

7300
7301
7302
7303
7304
7305
7306
7307







-
+





-
+



-
+



-
+












-
+





-
+



-
+



-
+














-
+





-
+



-
+



-
+



-
+







!!
!!

## Incohérences avec formes verbales 1sg et 2sg sans sujet

__conj_1s_sans_sujet_xxxai!3__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  ~ai$
        <<- /conj/ not tag_before(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])")
        <<- /conj/ not tagbefore(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable.

    [me|m’|te|t’]       ?[le|la|l’|les|en|y]¿   ~ai$
    [le|la|l’|les]      [lui|leur|en|y]         ~ai$
    [lui|leur]          en                      ~ai$
        <<- /conj/ not tag_before(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])")
        <<- /conj/ not tagbefore(\1, "_1s_") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp])")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable.

    [nous|vous]         ?[le|la|l’|les|en|y]¿   ~ai$
        <<- /conj/ not tag_before(\-1, "_1s_") and not morph(<1, ":R") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        <<- /conj/ not tagbefore(\-1, "_1s_") and not morph(<1, ":R") and morph(\-1, ":1s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable.

    ~ai$
        <<- /conj/ not tag_before(\1, "_1s_") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (\1.istitle() and before0("\\w"))
        <<- /conj/ not tagbefore(\1, "_1s_") and morph(\1, ":1s", ":(?:E|G|W|M|J|3[sp]|N|A|Q)") and not (\1.istitle() and before0("\\w"))
        -1>> =suggVerb(\1, ":3s")                                                                   && Incohérence. Ceci est un verbe à la 1ʳᵉ personne du singulier. Sujet (“je” ou “moi qui”) introuvable.

TEST: avançait et s’{{donnai}} en spectacle
TEST: il avancera, ne {{serai}} ce que de quelques pas
TEST: m’{{occupai}} que deux jours, cette ânerie
TEST: Lui, quand il y pensait, en {{arrivai}} à chaque fois à la même conclusion.
TEST: {{dansai}} puis oubliait
TEST: ce qui, dans le meilleur des cas, peut-être, oui, c’est vrai, vous {{donnerai}} l’avantage.


__conj_2s_sans_sujet_xxxas_xxxes!3__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  ~[ae]s$
        <<- /conj/ not tag_before(\1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)")
        <<- /conj/ not tagbefore(\1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.

    [me|m’|te|t’]       ?[le|la|l’|les|en|y]¿   ~[ae]s$
    [le|la|l’|les]      [lui|leur|en|y]         ~[ae]s$
    [lui|leur]          en                      ~[ae]s$
        <<- /conj/ not tag_before(\-1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)")
        <<- /conj/ not tagbefore(\-1, "_2s_") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.

    [nous|vous]         ?[le|la|l’|les|en|y]¿   ~[ae]s$
        <<- /conj/ not tag_before(\-1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        <<- /conj/ not tagbefore(\-1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":2s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.

    ~..[ae]s$
        <<- /conj/ not tag_before(\1, "_2s_") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (\1.istitle() and before0("\\w"))
        <<- /conj/ not tagbefore(\1, "_2s_") and morph(\1, ":2s", ":(?:E|G|W|M|J|3[sp]|N|A|Q|1p)") and not (\1.istitle() and before0("\\w"))
        -1>> =suggVerb(\1, ":3s")                                                                   && Incohérence. Ceci est un verbe à la 2ᵉ personne du singulier. Sujet (“tu” ou “toi qui”) introuvable.

TEST: se {{demandes}} comment faire
TEST: oui, il l’ignorait, ne me {{demandes}} comment c’était possible
TEST: c’est ça, me {{demandes}} comment c’est possible
TEST: je me questionne, {{exiges}} des réponses mais n’en obtiens pas…
TEST: Caroline, quand l’heure viendra, {{décideras}} de la conduite à tenir.
TEST: {{arrimeras}} le voilier
TEST: n’est-ce pas, indubitablement, nous la {{contestes}}
TEST: nous laisserons derrière nous les empires de la Terre.


__conj_1s_2s_sans_sujet_xxxs!3__
    [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  ~[iudnrtpcï]s$
        <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Le sujet de cette forme verbale est introuvable.

    [me|m’|te|t’]       ?[le|la|l’|les|en|y]¿   ~[iudnrtpcï]s$
    [le|la|l’|les]      [lui|leur|en|y]         ~[iudnrtpcï]s$
    [lui|leur]          en                      ~[iudnrtpcï]s$
        <<- /conj/ not tag_before(\-1, "_1s_") and not tag_before(\-1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        <<- /conj/ not tagbefore(\-1, "_1s_") and not tagbefore(\-1, "_2s_") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Le sujet de cette forme verbale est introuvable.

    [nous|vous]         ?[le|la|l’|les|en|y]¿   ~[iudnrtpcï]s$
        <<- /conj/ not tag_before(\-1, "_1s_") and not tag_before(\1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        <<- /conj/ not tagbefore(\-1, "_1s_") and not tagbefore(\1, "_2s_") and not morph(<1, ":R") and morph(\-1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p)")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Le sujet de cette forme verbale est introuvable.

    étais
        <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and not (\1.istitle() and before0("\\w")) and not morph(<1, ":[DA].*:p")
        <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and not (\1.istitle() and before0("\\w")) and not morph(<1, ":[DA].*:p")
        -1>> =suggVerb(\1, ":3s")                                                                   && Incohérence. Le sujet de cette forme verbale est introuvable.

    ~[iudnrtpcï]s$
        <<- /conj/ not tag(\1, "eg1mot") and not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_")
        <<- /conj/ not tag(\1, "eg1mot") and not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_")
            and morph(\1, ":[12]s", ":(?:E|G|W|M|J|3[sp]|2p|1p|V0e|N|A|Q)") and not (\1.istitle() and before0("\\w"))
        -1>> =suggVerb(\1, ":3s")                                                                   && Incohérence. Le sujet de cette forme verbale est introuvable.

TEST: s’{{précipitais}} dans la gueule du loup
TEST: ne leur {{donnais}} aucune raison de se faire aimer
TEST: leur en {{faisais}} baver
TEST: vous en {{donnais}} pour votre argent, ce type.
7318
7319
7320
7321
7322
7323
7324
7325

7326
7327
7328
7329

7330
7331
7332
7333
7334

7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352

7353
7354
7355
7356
7357

7358
7359
7360
7361
7362
7363
7364
7317
7318
7319
7320
7321
7322
7323

7324
7325
7326
7327

7328
7329
7330
7331
7332

7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350

7351
7352
7353
7354
7355

7356
7357
7358
7359
7360
7361
7362
7363







-
+



-
+




-
+

















-
+




-
+









__conj_peux_veux_vaux_équivaux_prévaux_sans_sujet!3__
    [ne|n’]                  ?[le|la|l’|les|en|vous|lui|leur|y]¿  [peux|veux|vaux|équivaux|prévaux]
    [me|m’|te|t’|nous|vous]  ?[le|la|l’|les|en|y]¿                [peux|veux|vaux|équivaux|prévaux]
    [le|la|l’|les]           [lui|leur|en|y]                      [peux|veux|vaux|équivaux|prévaux]
    [lui|leur]               en                                   [peux|veux|vaux|équivaux|prévaux]
        <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_")
        <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_")
        --1>> =suggVerb(\-1, ":3s")                                                                 && Incohérence. Le sujet de cette forme verbale est introuvable.

    vaux
        <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and not (\1.istitle() and before0("\\w"))
        <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and not (\1.istitle() and before0("\\w"))
            and not morph(<1, ":(?:R|D.*:p)")
        -1>> =suggVerb(\1, ":3s")                                                                   && Incohérence. Le sujet de cette forme verbale est introuvable.

    [peux|veux|équivaux|prévaux]
        <<- /conj/ not tag_before(\1, "_1s_") and not tag_before(\1, "_2s_") and not (\1.istitle() and before0("\\w"))
        <<- /conj/ not tagbefore(\1, "_1s_") and not tagbefore(\1, "_2s_") and not (\1.istitle() and before0("\\w"))
        -1>> =suggVerb(\1, ":3s")                                                                   && Incohérence. Le sujet de cette forme verbale est introuvable.

TEST: tu sais, s’{{équivaux}}, voilà.
TEST: tu sais, s’en {{veux}} d’avoir raté ça.
TEST: s’{{peux}} qu’il avait faim, va savoir
TEST: n’{{équivaux}} pas à ma BMW, cette tire.
TEST: faut voir, ces hommes, lui, tu sais, l’en peux
TEST: la lui {{donnais}} sans contrepartie
TEST: {{vaux}} pas ça, ce truc.
TEST: ouais, ce serait pas de refus, ouais, {{peux}} peut-être nous aider
TEST: Elle, ici et dans tous les cas de figure, {{veux}} toujours en faire plus.
TEST: Le total de cette opération, contrairement à ce qu’on pense, {{équivaux}} à au moins trois d’entre eux.


## Incohérences avec formes verbales 1pl et 2pl sans sujet
__conj_1p_sans_sujet!3__
    ~ons$
        <<- /conj/ morph(\1, ":1p", ":[EGMNAJ]") and not tag_before(\1, "_1p_") and not (\1.istitle() and before0("\\w"))
        <<- /conj/ morph(\1, ":1p", ":[EGMNAJ]") and not tagbefore(\1, "_1p_") and not (\1.istitle() and before0("\\w"))
        -1>> =suggVerb(\1, ":3p")     && Ceci est un verbe à la 1ʳᵉ personne du pluriel. Sujet (“nous” ou équivalent) introuvable.

__conj_2p_sans_sujet!3__
    ~ez$
        <<- /conj/ morph(\1, ":2p", ":[EGMNAJ]") and not tag_before(\2, "_2p_") and not (\1.istitle() and before0("\\w"))
        <<- /conj/ morph(\1, ":2p", ":[EGMNAJ]") and not tagbefore(\2, "_2p_") and not (\1.istitle() and before0("\\w"))
        -1>> =suggVerb(\1, ":3p")     && Ceci est un verbe à la 2ᵉ personne du pluriel. Sujet (“vous” ou équivalent) introuvable.

TEST: les hommes et les femmes, qui sans un bruit, sans une parole amère, {{continuerons}} leur tâche n’en seront pas plus récompensés.
TEST: il était dit que cette femme et son frère {{promènerez}} leur chien à cette heure de la journée.
TEST: cet homme et cette femme {{pouvez}} y parvenir avec de la persévérance
TEST: Comme on lui disait que vous-même aviez déjà consulté le notaire
TEST: ce sont des terroristes et ça ne nous arrivera pas à nous, qui n’avons rien à nous reprocher
7783
7784
7785
7786
7787
7788
7789
7790

7791
7792
7793
7794
7795
7796
7797
7782
7783
7784
7785
7786
7787
7788

7789
7790
7791
7792
7793
7794
7795
7796







-
+








TEST: en tant qu’{{abaisse}}
TEST: en tant que tel


__conf_presque_vconj__
    presque  @:[123][sp]¬:[GNAQWM]
        <<- /conf/ not tag_before(\1, "_ceque_") and not value(<1, "|ou|") -2>> _                   && Incohérence probable avec “presque” : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe.
        <<- /conf/ not tagbefore(\1, "_ceque_") and not value(<1, "|ou|") -2>> _                    && Incohérence probable avec “presque” : « \2 » n’est ni un adjectif, ni un participe passé, ni un adverbe.

TEST: presque {{délaissait}} par tout le monde.
TEST: Tout le monde ou presque déteste ces gens-là.


__conf_sur_vconj__
    sur  @:(?:[123][sp]|P)¬:[GNAQM]
7852
7853
7854
7855
7856
7857
7858
7859

7860
7861
7862
7863
7864
7865
7866
7851
7852
7853
7854
7855
7856
7857

7858
7859
7860
7861
7862
7863
7864
7865







-
+








# pour justifiée qu’elle fût
# [aussi|si] habile qu’il soit


__conf_trop_vconj__
    trop  @:[123][sp]¬:(?:[GNAQWM]|3p)
        <<- /conf/ not tag_before(\1, "_ceque_") -2>> _                                              && Incohérence probable avec “trop” : “\2” n’est ni un adjectif, ni un participe passé, ni un adverbe.
        <<- /conf/ not tagbefore(\1, "_ceque_") -2>> _                                              && Incohérence probable avec “trop” : “\2” n’est ni un adjectif, ni un participe passé, ni un adverbe.

TEST: J’ai trop {{mangeais}}.
TEST: Ce que nous réussissons presque sera considéré comme un échec.


__conf_très_verbe__
    très  @:(?:Y|[123][sp])¬:[AQW]
10299
10300
10301
10302
10303
10304
10305
10306

10307
10308
10309
10310
10311
10312
10313
10298
10299
10300
10301
10302
10303
10304

10305
10306
10307
10308
10309
10310
10311
10312







-
+







TEST: Un homme pas {{évidement}} intelligible.
TEST: L’{{évidemment}} du sanglier ne sera pas si facile.


# en fait
__conf_en_fait__
    en [faite|>faîte]
        <<- /conf/ not value(<1, "|n’|") and not tag_before(\1, "_2p_")
        <<- /conf/ not value(<1, "|n’|") and not tagbefore(\1, "_2p_")
        ->> en fait                                         && Confusion probable : « en fait » qui signifie « en réalité ». Le faîte est la partie la plus élevée d’un bâtiment.

TEST: {{en faite}}, on en voit partout, ça grouille.
TEST: ils sont {{en faîtes}} partis à la montagne.
TEST: Aujourd’hui, n’en faites pas trop.


12571
12572
12573
12574
12575
12576
12577
12578

12579
12580
12581
12582
12583
12584
12585
12570
12571
12572
12573
12574
12575
12576

12577
12578
12579
12580
12581
12582
12583
12584







-
+







    [qui|que|comment|pourquoi|lorsque|quand] son [,|@:[DR]]
        <<- /conf/ -2>> sont                                    && Confusion probable : “son” est un déterminant ou un nom masculin. Le verbe “être” à la 3ᵉ personne du pluriel s’écrit “sont”.

    [<start>|,|(] sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW]
        <<- /conf/ -2>> son                                     && Confusion probable : “sont” est la forme verbale de “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”.

    sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW]
        <<- /conf/ morph(<1, ":(?:V|Cs|R)", ":(?:[NA].*:[pi]|Ov)") and not tag_before(\1, "_ceque_")
        <<- /conf/ morph(<1, ":(?:V|Cs|R)", ":(?:[NA].*:[pi]|Ov)") and not tagbefore(\1, "_ceque_")
        -1>> son                                                && Confusion probable : “sont” est la forme verbale de “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”.

    [à|chez|dès|par] sont
    [avec|contre|devant|derrière|pour|sans|sur] sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW]
        <<- /conf/ -2>> son                                     && Confusion probable : “sont” est la forme verbale de “être” à la 3ᵉ personne du pluriel. Pour le déterminant, écrivez “son”.

    en sont @:[NA].*:[me]:s|>[aeéiîou].*/:[NA].*:f:s¬:[GW]
16814
16815
16816
16817
16818
16819
16820
16821

16822
16823
16824
16825
16826
16827
16828
16813
16814
16815
16816
16817
16818
16819

16820
16821
16822
16823
16824
16825
16826
16827







-
+







    haut [placé+ses]
        <<- not value(<1, "|en|de|d’|") ~1>> *

    haut et fort
        <<- not morph(<1, ":D") ~>> *

    hélas
        <<- not morph(<1, ":(?:X|Ov)") and not tag_before(\1, "_2s_") ~>> *
        <<- not morph(<1, ":(?:X|Ov)") and not tagbefore(\1, "_2s_") ~>> *

    [hein|hop]
        <<- not morph(<1, ":D") ~>> *

    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>> *

19337
19338
19339
19340
19341
19342
19343
19344

19345
19346
19347
19348
19349
19350
19351
19352
19353
19354
19355
19356
19357
19358
19359

19360
19361
19362
19363

19364
19365
19366
19367
19368
19369
19370
19336
19337
19338
19339
19340
19341
19342

19343
19344
19345
19346
19347
19348
19349
19350
19351
19352
19353
19354
19355
19356
19357

19358
19359
19360
19361

19362
19363
19364
19365
19366
19367
19368
19369







-
+














-
+



-
+







    >prêter attention a
    enclin a
    en être [réduit+ses] a
    en [hommage|proie] a
    [m’|t’|s’] en >remettre a
    nous nous en >remettre a
    vous vous en >remettre a
        <<- /conf/ \-1 != "A" and not tag_before(\1, "_àCOI_") and not value(>1, "|été|")
        <<- /conf/ \-1 != "A" and not tagbefore(\1, "_àCOI_") and not value(>1, "|été|")
        --1>> à                                                             && Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0

    [>abandonner|>accorder|>adapter|>adjoindre|>adresser|>affirmer|>agréer|>aider|>ajouter|>amener|>annoncer|>appeler|>applaudir|>appliquer|>apporter|>apprendre|>arguer|>argüer|>aspirer|>assujettir|>attacher|>atteindre|>attoucher|>attribuer|>autoriser|>avancer|>céder|>changer|>chicaner|>coller|>commander|>commencer|>conclure|>conférer|>confier|>confirmer|>conseiller|>consentir|>conspirer|>continuer|>convertir|>couper|>couter|>coûter|>croire|>décider|>déclarer|>décrire|>défendre|>déférer|>demander|>destiner|>devoir|>dire|>disposer|>disputer|>donner|>échapper|>écrire|>élever|>employer|>engager|>enjoindre|>entendre|>envoyer|>exercer|>expliquer|>exposer|>falloir|>fermer|>filer|>forfaire|>former|>fournir|>gouter|>goûter|>impartir|>imputer|>infliger|>insulter|>intégrer|>intéresser|>jeter|>justifier|>lier|>lire|>livrer|>manquer|>mesurer|>mettre|>montrer|>obliger|>obtenir|>offrir|>ouvrir|>parer|>parler|>passer|>payer|>penser|>permettre|>porter|>pourvoir|>prendre|>préparer|>prescrire|>présenter|>présider|>prétendre|>promettre|>protester|>quémander|>rappeler|>rapprendre|>ravir|>réapprendre|>recoller|>recourir|>redéclarer|>redire|>référer|>réfléchir|>refuser|>regarder|>réimputer|>remesurer|>remettre|>remontrer|>rendre|>renoncer|>reparler|>répondre|>reprendre|>répugner|>retoucher|>retravailler|>retweeter|>réussir|>révéler|>rêver|>satisfaire|>schtroumpfer|>servir|>signaler|>sonner|>soumettre|>souscrire|>soutenir|>statuer|>suppléer|>surseoir|>sursoir|>survendre|>téléphoner|>témoigner|>tendre|>tenir|>tirer|>toucher|>traduire|>travailler|>tweeter|>unir|>veiller|>vendre|>virer|>viser|>vouloir|>aboutir|>acquiescer|>adhérer|>apparaitre|>apparaître|>compatir|>complaire|>concourir|>confiner|>contribuer|>convenir|>coopérer|>correspondre|>déplaire|>désobéir|>disparaitre|>équivaloir|>mentir|>naitre|>naître|>nuire|>obéir|>obtempérer|>participer|>plaire|>profiter|>réagir|>rechigner|>renaitre|>renaître|>résister|>ressembler|>retéléphoner|>seoir|>songer|>sourire|>succéder|>succomber|>suffire|>surréagir|>survivre|>tarder|>vaquer] a
    >arriver a
    >condamner a
    ## locutions
    >avoir du mal a
    >dire [adieu|merde] a
    >donner du grain à moudre a
    >faire [barrage|barrière|confiance|écho] a
    >faire faux bond a
    >prêter serment a
    >rendre hommage a
    >rendre service a
        <<- /conf/ not tag_before(\1, "_propsub_") and not morph(\1, ":[YNA]") and not value(>1, "|été|")
        <<- /conf/ not tagbefore(\1, "_propsub_") and not morph(\1, ":[YNA]") and not value(>1, "|été|")
        --1>> à                                                             && Confusion probable : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0

    @:V¬:[YGNAWM]  a
        <<- /conf/ \-1 != "A" and not tag(\-1, "eg1mot") and not tag_before(\1, "_propsub_") and not morph(>1, ":Q")
        <<- /conf/ \-1 != "A" and not tag(\-1, "eg1mot") and not tagbefore(\1, "_propsub_") and not morph(>1, ":Q")
        --1>> à                                                             && Confusion probable : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0

    [/_VCint_|/_VCimp_]  a
        <<- /conf/ not value(\1, "|rendez-vous|") --1>> à                   && Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0

    >passer du coq a l’ âne
        <<- /conf/ -4>> à                                                   && Confusion : “a” est la conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0
19762
19763
19764
19765
19766
19767
19768
19769

19770
19771
19772
19773
19774
19775
19776
19761
19762
19763
19764
19765
19766
19767

19768
19769
19770
19771
19772
19773
19774
19775







-
+








TEST: Ils l’ont échappé {{bel}}


# bien / bine
__conf_bien_bine__
    bine
        <<- /conf/ not tag_before(\1, "_propsub_") and morph(<1, ":V")
        <<- /conf/ not tagbefore(\1, "_propsub_") and morph(<1, ":V")
        ->> bien                                                        && Confusion probable. Erreur de frappe ?

    [<start>|,|(] bine [que|qu’|entendu|sûr]
        <<- /conf/ -2>> bien                                            && Confusion probable. Erreur de frappe ?

TEST: il me semblait {{bine}} que j’avais raison                        ->> bien
TEST: il avance {{bine}}                                                ->> bien
21481
21482
21483
21484
21485
21486
21487
21488

21489
21490
21491
21492
21493
21494
21495
21480
21481
21482
21483
21484
21485
21486

21487
21488
21489
21490
21491
21492
21493
21494







-
+







__conf_prie_prit__
    [me|te|le|la|nous|vous|les] prit [de|d’] [ne|n’|me|m’|te|t’|se|s’]
    [me|te|le|la|nous|vous|les] prit [de|d’] [le|la|l’|les|en|nous|vous|lui|leur|y]  $:Y
    [me|te|le|la|nous|vous|les] prit [de|d’] [nous|vous]     [le|la|l’|les|en|y]     $:Y
    [me|te|le|la|nous|vous|les] prit [de|d’] [le|la|l’|les]  [lui|leur|en|y]         $:Y
    [me|te|le|la|nous|vous|les] prit [de|d’] [lui|leur|y]    en                      $:Y
    [me|te|le|la|nous|vous|les] prit [de|d’] $:Y
        <<- /conf/ not tag_before(\1, "_cequi_") -2>> prie              && Confusion probable. Si vous voulez dire “prier de faire quelque chose”, écrivez “prie”.|https://fr.wiktionary.org/wiki/prier
        <<- /conf/ not tagbefore(\1, "_cequi_") -2>> prie               && Confusion probable. Si vous voulez dire “prier de faire quelque chose”, écrivez “prie”.|https://fr.wiktionary.org/wiki/prier

TEST: elle me {{prit}} d’obéir
TEST: je ne sais pas ce qui me prit de lui écrire


# prêt / près / pré
__conf_suivre_de_près__
24946
24947
24948
24949
24950
24951
24952
24953

24954
24955
24956
24957
24958
24959
24960
24945
24946
24947
24948
24949
24950
24951

24952
24953
24954
24955
24956
24957
24958
24959







-
+







    [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 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, "_ceque_")
            and not tagbefore(\1, "_ceque_")
        -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.
25320
25321
25322
25323
25324
25325
25326
25327

25328
25329
25330
25331
25332
25333
25334
25319
25320
25321
25322
25323
25324
25325

25326
25327
25328
25329
25330
25331
25332
25333







-
+







        <<- /infi/ not value(\1, "|devoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not (value(\1, "|devant|") and morph(\-1, ":N"))
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet doit accomplir, le verbe devrait être à l’infinitif.

    >devoir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~..(?:ai(?:s|t|ent))$
    >devoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~..(?:ai(?:s|t|ent))$
    >devoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~..(?:ai(?:s|t|ent))$
    >devoir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~..(?:ai(?:s|t|ent))$
        <<- /infi/ not value(\1, "|devoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not (value(\1, "|devant|") and morph(\-1, ":N")) and not tag_before(\1, "_ceque_")
        <<- /infi/ not value(\1, "|devoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not (value(\1, "|devant|") and morph(\-1, ":N")) and not tagbefore(\1, "_ceque_")
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet doit accomplir, le verbe devrait être à l’infinitif.

    de  devoir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~(?:ée?s?|ez|ais)$
    de  devoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~(?:ée?s?|ez|ais)$
    de  devoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~(?:ée?s?|ez|ais)$
    de  devoir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~(?:ée?s?|ez|ais)$
        <<- /infi/ morph(\-1, ":V", ":M")
25354
25355
25356
25357
25358
25359
25360
25361

25362
25363
25364
25365
25366
25367
25368
25353
25354
25355
25356
25357
25358
25359

25360
25361
25362
25363
25364
25365
25366
25367







-
+







        <<- /infi/ not value(\1, "|puis|pouvoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D"))
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet peut accomplir, le verbe devrait être à l’infinitif.

    >pouvoir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~..(?:ai(?:s|t|ent))$
    >pouvoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~..(?:ai(?:s|t|ent))$
    >pouvoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~..(?:ai(?:s|t|ent))$
    >pouvoir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~..(?:ai(?:s|t|ent))$
        <<- /infi/ not value(\1, "|puis|pouvoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tag_before(\1, "_ceque_")
        <<- /infi/ not value(\1, "|puis|pouvoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tagbefore(\1, "_ceque_")
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet peut accomplir, le verbe devrait être à l’infinitif.

    [de|d’]  pouvoir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~(?:ée?s?|ez|ais)$
    [de|d’]  pouvoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~(?:ée?s?|ez|ais)$
    [de|d’]  pouvoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~(?:ée?s?|ez|ais)$
    [de|d’]  pouvoir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~(?:ée?s?|ez|ais)$
        <<- /infi/ morph(\-1, ":V", ":M")
25391
25392
25393
25394
25395
25396
25397
25398

25399
25400
25401
25402
25403
25404
25405
25390
25391
25392
25393
25394
25395
25396

25397
25398
25399
25400
25401
25402
25403
25404







-
+







        <<- /infi/ not value(\1, "|savoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D"))
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet sait accomplir, le verbe devrait être à l’infinitif.

    >savoir  ?[ne|n’]¿  [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  ~..(?:ai(?:s|t|ent))$
    >savoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]       ~..(?:ai(?:s|t|ent))$
    >savoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]           ~..(?:ai(?:s|t|ent))$
    >savoir  ?[ne|n’]¿  [lui|leur|y]                    en                        ~..(?:ai(?:s|t|ent))$
        <<- /infi/ not value(\1, "|savoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tag_before(\1, "_ceque_")
        <<- /infi/ not value(\1, "|savoirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tagbefore(\1, "_ceque_")
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet sait accomplir, le verbe devrait être à l’infinitif.

    [de|d’]  savoir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~(?:ée?s?|ez|ais)$
    [de|d’]  savoir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~(?:ée?s?|ez|ais)$
    [de|d’]  savoir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~(?:ée?s?|ez|ais)$
    [de|d’]  savoir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~(?:ée?s?|ez|ais)$
        <<- /infi/ morph(\-1, ":V", ":M")
25437
25438
25439
25440
25441
25442
25443
25444

25445
25446
25447
25448
25449
25450
25451
25436
25437
25438
25439
25440
25441
25442

25443
25444
25445
25446
25447
25448
25449
25450







-
+







        <<- /infi/ not value(\1, "|vouloirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D"))
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet veut accomplir, le verbe devrait être à l’infinitif.

    >vouloir  ?[ne|n’]¿  [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  ~..(?:ai(?:s|t|ent))$
    >vouloir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]       ~..(?:ai(?:s|t|ent))$
    >vouloir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]           ~..(?:ai(?:s|t|ent))$
    >vouloir  ?[ne|n’]¿  [lui|leur|y]                    en                        ~..(?:ai(?:s|t|ent))$
        <<- /infi/ not value(\1, "|vouloirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tag_before(\1, "_ceque_")
        <<- /infi/ not value(\1, "|vouloirs|") and morph(\-1, ":V", ":M") and not (morph(\1, ":N") and morph(<1, ":D")) and not tagbefore(\1, "_ceque_")
        --1>> =suggVerbInfi(\-1)                                                                    && S’il s’agit d’une action que le sujet veut accomplir, le verbe devrait être à l’infinitif.

    [de|d’]  vouloir  ?[ne|n’]¿  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿  ~(?:ée?s?|ez|ai[ts]?)$
    [de|d’]  vouloir  ?[ne|n’]¿  [me|m’|te|t’|se|s’|nous|vous]   [le|la|l’|les|en|y]         ~(?:ée?s?|ez|ai[ts]?)$
    [de|d’]  vouloir  ?[ne|n’]¿  [le|la|l’|les]                  [lui|leur|en|y]             ~(?:ée?s?|ez|ai[ts]?)$
    [de|d’]  vouloir  ?[ne|n’]¿  [lui|leur|y]                    en                          ~(?:ée?s?|ez|ai[ts]?)$
        <<- /infi/ morph(\-1, ":V", ":M")
25489
25490
25491
25492
25493
25494
25495
25496

25497
25498
25499
25500
25501
25502
25503
25488
25489
25490
25491
25492
25493
25494

25495
25496
25497
25498
25499
25500
25501
25502







-
+









__infi_falloir__
    [faut|fallait|fallut|faudra|faudrait]                   @:V¬:[YMWG]
    il faille                                               @:V¬:[YMWG]
    >avoir    fallu                                         @:V¬:[YMWG]
    [faut-il|fallait-il|fallut-il|faudra-t-il|faudrait-il]  @:V¬:[YMWG]
        <<- /infi/ not (tag_before(\1, "_que_") and morph(\-1, ":3[sp]"))
        <<- /infi/ not (tagbefore(\1, "_que_") and morph(\-1, ":3[sp]"))
        --1>> =suggVerbInfi(\-1)                                                                    && Après le verbe “falloir”, le verbe devrait être à l’infinitif.

    [faut|fallait|fallut|faudra|faudrait]                   [le|la|leur|les|l’]  @:V¬:[YMWGN]
    il faille                                               [le|la|leur|les|l’]  @:V¬:[YMWGN]
    >avoir    fallu                                         [le|la|leur|les|l’]  @:V¬:[YMWGN]
    [faut-il|fallait-il|fallut-il|faudra-t-il|faudrait-il]  [le|la|leur|les|l’]  @:V¬:[YMWGN]
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                                         && Après le verbe “falloir”, le verbe devrait être à l’infinitif.
26740
26741
26742
26743
26744
26745
26746
26747

26748
26749
26750
26751
26752
26753
26754
26739
26740
26741
26742
26743
26744
26745

26746
26747
26748
26749
26750
26751
26752
26753







-
+







TEST: L’hôtel {{ou}} ils sont allés l’été dernier.
TEST: une chambre {{ou}} nous n’avons rien trouvé


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

TEST: après avoir mis à jour sont {{profile}}.
TEST: maintenir en confinement certaines personnes sous prétexte qu’elles sont à risques serait une mesure inconstitutionnelle et discriminatoire.



26898
26899
26900
26901
26902
26903
26904
26905

26906
26907
26908
26909
26910
26911
26912
26897
26898
26899
26900
26901
26902
26903

26904
26905
26906
26907
26908
26909
26910
26911







-
+







TEST: elles ne s’y étaient pas {{donnée}}.
TEST: sans fin elles se sont succédé


__ppas_se_être__
    [me|m’|te|se|s’]  ?[y|en]¿  >être  *WORD
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QAG]") --1>> =suggVerbPpas(\-1)                && Incohérence. Après « s’être », le verbe doit être un participe passé.
        <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not tag_before(\1, "_que_") and not before("(?i)\\bon (?:ne |)$")
        <<- /ppas/ __else__ and morph(\-2, ":[123]s") and morph(\-1, ":Q.*:p") and not tagbefore(\1, "_que_") and not before("(?i)\\bon (?:ne |)$")
        --1>> =suggSing(\-1)                                                                        && Le participe passé devrait être au singulier.

    tu  t’  ?[y|en]¿  [es|étais|seras|serais|fus|fusses]  *WORD
        <<- /ppas/ morph(\-1, ":(?:Y|[123][sp])", ":[QAG]") --1>> =suggVerbPpas(\-1)                && Incohérence. Après « s’être », le verbe doit être un participe passé.

TEST: s’être toujours {{donner}} le mot.
TEST: je suis venu et me suis totalement {{donnés}} à cette œuvre
28296
28297
28298
28299
28300
28301
28302
28303

28304
28305
28306
28307
28308

28309
28310
28311
28312
28313
28314
28315
28316
28317
28318
28319
28320
28321

28322
28323
28324
28325
28326

28327
28328
28329
28330
28331
28332
28333
28295
28296
28297
28298
28299
28300
28301

28302
28303
28304
28305
28306

28307
28308
28309
28310
28311
28312
28313
28314
28315
28316
28317
28318
28319

28320
28321
28322
28323
28324

28325
28326
28327
28328
28329
28330
28331
28332







-
+




-
+












-
+




-
+









__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 tag_before(\1, "_que_") --1>> =suggVerbPpas(\-1)   && Après le verbe “être”, il faut un participe passé.
        <<- /ppas/ not value(<1, "|l’|") and not tagbefore(\1, "_que_") --1>> =suggVerbPpas(\-1)    && Après le verbe “être”, il faut un participe passé.

    >être  ~..er$
        <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and (morph(\2, ":Y", ":[NAQ]") or morph(\2, ">(?:aller|manger)/"))
            and not morph(<1, ":Y|>ce/") and not value(<1, "|c’|") and not value(<2, "|ce|")
            and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_")
            and not tagbefore(\1, "_ceque_") and not tagbefore(\1, "_sujinfi_")
        -2>> =suggVerbPpas(\2)                                                                      && Après “être”, le verbe ne devrait pas être à l’infinitif.

    >être  ~..ez$
        <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":2p", ":[NAQ]")
        -2>> =suggVerbPpas(\2)                                                                      && Après “être”, le verbe ne devrait pas être conjugué à la 2ᵉ personne du pluriel.

    >être  ~..es$
        <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":2s", ":[NAQ]")
        -2>> =suggVerbPpas(\2)                                                                      && Après “être”, le verbe ne devrait pas être conjugué à la 2ᵉ personne du singulier.

    >être  ~.it$
        <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":V(?:2.*:Ip.*:3s|3.*:Is.*:3s)", ":[NAQ]")
            and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_")
            and not tagbefore(\1, "_ceque_") and not tagbefore(\1, "_sujinfi_")
        -2>> =suggVerbPpas(\2)                                                                      && Après “être”, le verbe ne devrait pas être conjugué à la 3ᵉ personne du singulier.

    >être  ~.ut$
        <<- /ppas/ morph(\1, ":V", ":Q|>soit/") and morph(\2, ":V3.*:Is.*:3s", ":[NAQ]")
            and not tag_before(\1, "_ceque_") and not tag_before(\1, "_sujinfi_")
            and not tagbefore(\1, "_ceque_") and not tagbefore(\1, "_sujinfi_")
        -2>> =suggVerbPpas(\2)                                                                      && Après “être”, le verbe ne devrait pas être conjugué à la 3ᵉ personne du singulier.

TEST: Ne pas être {{aller}} là-bas est une grave erreur que nous regretterons longtemps.
TEST: Ne pas être {{arrivez}} à ses fins.
TEST: Ne pas être {{prit}} au sérieux.
TEST: Ne pas être {{voulut}}.
TEST: avoir cru être {{éliminer}} par de tels bouffons…
28647
28648
28649
28650
28651
28652
28653
28654

28655
28656
28657
28658
28659
28660
28661
28646
28647
28648
28649
28650
28651
28652

28653
28654
28655
28656
28657
28658
28659
28660







-
+







TEST: Nous l’avons {{mangées}}.
TEST: Ils ne me l’ont pas {{donnés}}
TEST: il faillit agir, mais l’ayant {{remarqués}}, il passa son chemin.


__ppas_m_t_avoir__
    [m’|t’] >avoir @:Q.*:p¬:[GWsi]
        <<- /ppas/ not tag_before(\1, "_que_") or morph(\3, ":V[0-3]..t_")  -3>> =suggSing(\3)
        <<- /ppas/ not tagbefore(\1, "_que_") or morph(\3, ":V[0-3]..t_")  -3>> =suggSing(\3)
        && Accord avec « \1 ». S’il s’agit d’un COD, le participe passé « \3 » devrait être au singulier (et accordé en genre).|http://fr.wikipedia.org/wiki/Accord_du_participe_pass%C3%A9_en_fran%C3%A7ais

TEST: ces livres m’avaient {{ennuyés}} au-delà du dicible.
TEST: Les élèves m’ont {{écoutés}}.
TEST: Les élèves t’ont de temps en temps {{écoutées}}.
TEST: Les élèves ne m’ont pas {{écoutés}}.
TEST: Les élèves ne m’ont pas {{écoutées}}.
30209
30210
30211
30212
30213
30214
30215
30216

30217
30218
30219
30220
30221
30222
30223
30208
30209
30210
30211
30212
30213
30214

30215
30216
30217
30218
30219
30220
30221
30222







-
+







TEST: vous examiner a eu des conséquences imprévues.


#### être / avoir
__conf_ait_confiance_été_faim_tort!3__
    [es|est] [confiance|conscience|envie|été|peur|faim|hâte|honte|recours|soif|tort]
    [es|est] peine [à|a]
        <<- /conf/ not tag_before(\1, "_ceque_") and not value(<1, "|tout|d’|l’|")
        <<- /conf/ not tagbefore(\1, "_ceque_") and not value(<1, "|tout|d’|l’|")
        -1>> ait|aie                                                && Confusion probable dans l’expression “avoir \2”. Vous utilisez ici le verbe “être”.

TEST: il est posssible qu’il {{est}} confiance en toi
TEST: Je crains qu’il {{est}} peine à trouver le bonheur.
TEST: La révolution est crainte.
TEST: Je n’en ai cure.
TEST: Notre communauté vous est redevable.
30889
30890
30891
30892
30893
30894
30895
30896

30897
30898
30899
30900
30901
30902
30903
30904
30905

30906
30907
30908
30909
30910
30911
30912
30888
30889
30890
30891
30892
30893
30894

30895
30896
30897
30898
30899
30900
30901
30902
30903

30904
30905
30906
30907
30908
30909
30910
30911







-
+








-
+







TEST: y être sans ma femme ni les enfants fait monter en moi une certaine nervosité.


__conj_le_la_leur_nom__
    [le|la|l’|leur]  *WORD  @:V¬:(?:3s|P|Q|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3)
                        or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3)
            and not ( morph(\2, "(?:[123][sp]|P)") and not value(<1, "|<start>|,|") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3s", suggSing)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [le|la|l’|leur]  *WORD  qui  @:V¬:(?:3s|P|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
                        or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
        -4>> =suggVerb(\4, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: La {{N.S.A.}} {{espionneras}} toujours tout le monde
TEST: La suspicion envers les élus {{accroissaient}}…                                               ->> accroissait
TEST: Le chien n’{{es}} pas mort.
TEST: Le damné {{donnes}}
TEST: La Corée {{peux}} gagner.
30938
30939
30940
30941
30942
30943
30944
30945

30946
30947
30948
30949
30950
30951
30952
30953

30954
30955
30956
30957
30958
30959
30960
30961

30962
30963
30964
30965
30966
30967
30968
30937
30938
30939
30940
30941
30942
30943

30944
30945
30946
30947
30948
30949
30950
30951

30952
30953
30954
30955
30956
30957
30958
30959

30960
30961
30962
30963
30964
30965
30966
30967







-
+







-
+







-
+







TEST: un grand nombre avaient été humiliés par ces pratiques délétères


__conj_det_sing_nom__
    [un|ce|cet|mon|ton|son|notre|votre]  *WORD  @:[123][sp]¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[me]:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|nombre|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>>
                        or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3s", suggSing)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [une|cette|mon|ton|son|ma|ta|sa|notre|votre]  *WORD  @:[123][sp]¬:(?:3s|P|Y|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[fe]:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>>
                        or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\3, ":3?p") ) and not agreement(\2, \3) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and morph(\3, ":A.*:p") or (morph(\3, ":N.*:p") and morph(\2, ":A"))
        -3>> =suggVerb(\3, ":3s", suggSing)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3s")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

    [un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre]  *WORD  qui  @:V¬:(?:3s|P|3p!|G|M)
        <<- /conj/ not tag(\2, "_enum_") and morph(<1, ":C|<start>|>,", ":[YP]") and morph(\2, ":[NA].*:[si]", ":G")
            and not ( (value(\2, "|dizaine|douzaine|quinzaine|vingtaine|trentaine|quarantaine|cinquantaine|soixantaine|centaine|majorité|minorité|millier|partie|poignée|tas|paquet|moitié|")
                        or tag_before(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
                        or tagbefore(\1, "_ni_") or value(<1, "|et|ou|")) and morph(\4, ":3p") )
        -4>> =suggVerb(\4, ":3s")                                                                   && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Tu devrais le savoir, ce roman-là de Jean-Paul Sartre {{es}} passionnant.
TEST: Cette confusion qui {{donnent}} le tournis.
TEST: tu sais, une hausse de 2 % {{satisfais}} tout le monde                                        ->> satisfait
TEST: tu sais, une petite {{donnes}} satisfaction
TEST: tu penses mal, cet homme {{mens}}

Modified misc/grammalecte.sublime-syntax from [3aba4c4214] to [08a130127a].

56
57
58
59
60
61
62
63

64
65
66
67
68
69
70
56
57
58
59
60
61
62

63
64
65
66
67
68
69
70







-
+







    # other.
    - match: '\b(?:if|else|and|or|not|in)\b'
      scope: keyword.python

    - match: '\b(?:True|False|None)\b'
      scope: constant.language

    - match: '\b(?:spell|morph|morphVC|stem|tag|value|space_after|textarea0?\w*|before0?\w*|after0?\w*|word|option|define|define_from|select|exclude|analyse\w*|tag_\w+|apposition|is[A-Z]\w+|agreement|rewrite|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b'
    - match: '\b(?:spell|morph(?:VC|)|stem|tag|value|space_after|textarea0?\w*|before0?\w*|after0?\w*|word|option|define(?:from|)|select|exclude|setmeta|analyse\w*|tag(?:after|before)|apposition|is[A-Z]\w+|agreement|rewrite|checkD\w+|getD\w+|has[A-Z]\w+|sugg[A-Z]\w+|switch[A-Z]\w+|ceOrCet|formatN\w+|mbUnit)\b'
      scope: entity.name.function

    - match: '\b(?:replace|endswith|startswith|search|upper|lower|capitalize|strip|rstrip|is(?:alpha|upper|lower|digit|title))\b'
      scope: support.function

    - match: '\becho\b'
      scope: support.function.debug