Grammalecte  Diff

Differences From Artifact [5138506e52]:

To Artifact [e6ca794ce1]:


909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
....
1136
1137
1138
1139
1140
1141
1142


1143
1144
1145
1146
1147
1148
1149
1150


1151
1152
1153
1154
1155
1156
1157
....
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
....
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
....
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
....
5510
5511
5512
5513
5514
5515
5516



5517
5518
5519
5520
5521
5522
5523
5524
5525
....
5527
5528
5529
5530
5531
5532
5533

5534
5535
5536
5537
5538
5539
5540
5541
....
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
.....
17956
17957
17958
17959
17960
17961
17962
17963
17964
17965
17966
17967
17968
17969
17970
.....
18072
18073
18074
18075
18076
18077
18078
18079
18080
18081
18082
18083
18084
18085
18086
.....
18096
18097
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
18108
18109
18110
.....
18158
18159
18160
18161
18162
18163
18164
18165
18166
18167
18168
18169
18170
18171
18172
18173
.....
18315
18316
18317
18318
18319
18320
18321
18322
18323
18324
18325
18326
18327
18328
18329
18330
.....
18337
18338
18339
18340
18341
18342
18343
18344
18345
18346
18347
18348
18349
18350
18351
.....
18387
18388
18389
18390
18391
18392
18393

18394
18395
18396
18397
18398
18399
18400
.....
18702
18703
18704
18705
18706
18707
18708
18709
18710
18711
18712
18713
18714
18715
18716
.....
18729
18730
18731
18732
18733
18734
18735
18736
18737
18738
18739
18740
18741
18742
18743

18744
18745
18746
18747
18748
18749
18750
.....
32890
32891
32892
32893
32894
32895
32896
32897
32898
32899
32900
32901
32902
32903
32904
32905
32906
32907
32908
32909
32910
32911
32912
32913
32914
32915
32916
32917
32918
32919
32920
32921
32922
.....
32961
32962
32963
32964
32965
32966
32967
32968
32969
32970
32971
32972
32973
32974
32975
32976
32977
32978
32979
32980
32981
32982
32983
.....
33288
33289
33290
33291
33292
33293
33294
33295
33296
33297
33298
33299
33300
33301
33302
33303
33304
33305
33306
33307
33308
33309
33310
33311
33312
33313
33314
33315
33316
.....
33317
33318
33319
33320
33321
33322
33323
33324
33325
33326
33327
33328
33329
33330
33331
.....
33335
33336
33337
33338
33339
33340
33341
33342
33343
33344
33345
33346
33347
33348
33349
33350
33351
33352
33353
33354
33355
33356
33357
.....
33371
33372
33373
33374
33375
33376
33377
33378
33379
33380
33381
33382
33383
33384
33385
33386
33387
33388
33389
33390
33391
33392
33393
33394
33395
33396
33397
33398
33399
33400
33401
33402
33403
.....
33418
33419
33420
33421
33422
33423
33424
33425
33426
33427
33428
33429
33430
33431
33432
.....
33861
33862
33863
33864
33865
33866
33867
33868
33869
33870
33871
33872
33873
33874
33875
33876
33877
33878
33879
33880
33881
33882
33883
33884
33885
33886
33887
33888
33889
33890
33891
33892
.....
33943
33944
33945
33946
33947
33948
33949
33950
33951
33952
33953
33954
33955
33956
33957
33958
33959
33960
33961
33962
33963
33964
33965
33966
33967
33968
33969
33970
33971
33972
33973
.....
34028
34029
34030
34031
34032
34033
34034
34035
34036
34037
34038
34039
34040
34041
34042
.....
34047
34048
34049
34050
34051
34052
34053
34054
34055
34056
34057
34058
34059
34060
34061
.....
34228
34229
34230
34231
34232
34233
34234

34235
34236
34237
34238
34239
34240
34241
TEST: un ou une électricien·ne
TEST: femme ou homme épuisé·e
TEST: un·e idiot·e


__[i](typo_écriture_invariable)__
    ({w_3})([-·–—.•⋅/]s|[(]s[)])  @@0,$
        <<- ~>> =normalizeInclusiveWriting(\0)
        <<- option("typo") and option("eepi") and not \0.endswith("·s") and not (\0.endswith("/s") and morph(\1, ";S"))
        ->> \1·s                                                                                    && Écriture invariable. Utilisez un point médian.

TEST: la ou les {{fille(s)}}                                            ->> fille·s
TEST: le ou les patron·s
TEST: combien de rad/s


!!
................................................................................
TEST: Ça coûte {{13,4¥}}.                               ->> 13,4 ¥
TEST: il mesure {{30,3 cm}}                             ->> 30,3 cm
TEST: il est monté à {{18 %}}                           ->> 18 %
TEST: une température de {{22,4 °C}}                    ->> 22,4 °C
TEST: il en veut {{18kg}}                               ->> 18 kg
TEST: il me le propose pour {{243 gCO2/kWh}}            ->> 243 gCO2/kWh
TEST: il me le propose pour {{243,4 gCO2/kWh}}          ->> 243,4 gCO2/kWh


TEST: {{40 MHz}}                                        ->> 40 MHz
TEST: {{100 Ah}}                                        ->> 100 Ah
TEST: {{1001 ans}}                                      ->> 1 001 ans
TEST: {{500000 euros}}                                  ->> 500 000 euros
TEST: en l’an 2000 Urgondorletroll eut une idée
TEST: 1998 s’annonce grandiose.
TEST: il y en a 3,43 milliards.
TEST: je veux 200 euros.




__[s]/typo(typo_math)__
    (?:cos|sin|tan|cotan|log|ln)²? [2-9]?[a-zA-Zα-ωΑ-Ω](?![’'])
        <<- ->> =\0.replace(" ", "(")+")|"+\0.replace(" ", " ")             && Mettez des parenthèses (ou éventuellement un espace insécable).

TEST: {{cos ω}}                                         ->> cos(ω)|cos ω
................................................................................
!!
!!
!!!! Cohérence des guillemets                                                                     !!
!!
!!

__<s>/typo(typo_cohérence_guillemets_chevrons_ouvrants)__
    («)[^»“]+?(”)  @@0,$
        <<- not before("\\w$") -1>> “                                                               && Guillemet ouvrant différent du guillemet fermant (”).
        <<- not after("^\\w") -2>> " »"                                                             && Guillemet fermant différent du guillemet ouvrant («).
__<s>/typo(typo_cohérence_guillemets_chevrons_fermants)__
    (“)[^”«]+?(»)  @@0,$
        <<- not before("\\w$") -1>> "« "                                                            && Guillemet ouvrant différent du guillemet fermant (»).
        <<- not after("^\\w") -2>> ”                                                                && Guillemet fermant différent du guillemet ouvrant (“).

TEST: C’est {{«}}stupide{{”}}.
TEST: Quel {{“}}emmerdeur{{»}}, ce gars-là.


__<s>/typo(typo_cohérence_guillemets_doubles_ouvrants)__
    (“)[^”’“«]+?(’)(?![\w'’)])  @@0,$
        <<- not ( after("^”") and re.search("“(?:l|d|c|ç|n|m|t|s|j|z|[A-ZÇ]|qu|jusqu|puisqu|lorsqu|quoiqu|quelqu)’", \0) ) >>>
        <<- not before("\\w$") -1>> "‘"                                                             && Guillemet ouvrant différent du guillemet fermant (’).
        <<- __also__ -2>> ”                                                                         && Guillemet fermant différent du guillemet ouvrant (“).
__<s>/typo(typo_cohérence_guillemets_doubles_fermants)__
    (‘)[^’“«]+?(”)  @@0,$
        <<- not before("\\w$") -1>> "“"                                                             && Guillemet ouvrant différent du guillemet fermant (”).
        <<- not after("^\\w") -2>> ’                                                                && Guillemet fermant différent du guillemet ouvrant (‘).

TEST: Tu sais, {{‘}}ton ami{{”}} est venu.
TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}.
TEST: Après “n’”, il faut une forme verbale.
TEST: il (n’)est (pas) là.


__[i]/typo(typo_guillemets_doubles_ouvrants_non_fermés)__
    (“)\w[^”"»]+$  @@0
        <<- -1>> _                                                                                  && Guillemets fermants introuvables dans la suite du paragraphe.
................................................................................
!!
!!!! Verbes composés                                                                              !!
!!
!!

__inte_verbes_composés_interrogatifs__
    ~\w-[jJ]e$
        <<- /inte/ morphVC(\1, ":V", ":1[sśŝ]") ->> =suggVerb(\1, ":1ś", None, True)                && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier.
        <<- /inte/ __else__ and not morphVC(\1, ":V") ->> =suggSimil(\1, ":1[sśŝ]", False, True)    && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier.
        <<- />> -je|_VCint_
        <<- value(<1, "|me|m’|") />> _upron_

    aie-je
        <<- /vmode/ ->> ai-je                                                                       && Forme interrogative. N’employez pas le subjonctif présent.

    ~\w-[tT]u$
        <<- /inte/ morphVC(\1, ":V", ":[ISK].*:2s") ->> =suggVerb(\1, ":2s", None, True)            && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier.
        <<- /inte/ __else__ and not morphVC(\1, ":V") ->> =suggSimil(\1, ":2s", False, True)        && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier.
        <<- />> -tu|_VCint_
        <<- value(<1, "|te|t’|") />> _upron_

    ~\w-[iI]l$
        <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", None, True) + "|" + \1+"s"              && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True)                 && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:t|voilà)/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -il|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[eE]lle$
        <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", None, True) + "|" + \1+"s"    && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True)       && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -elle|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[iI]el$
        <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", None, True) + "|" + \1+"s"    && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True)       && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -iel|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[oO]n$
        <<- /inte/ morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", None, True)                    && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -on|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[cCs]e$
        <<- /inte/ morphVC(\1, ":V", ":(?:3s|V0e.*:3p)")
        ->> =suggVerb(\1, ":3s", None, True)                && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
        <<- /inte/ __else__ and morphVC(\1, ":", ":V")
        ->> =suggSimil(\1, ":3s", False, True)              && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
        <<- /conf/ \1.endswith("se") ->> =\1[:-2]+"ce"      && Forme interrogative. Confusion.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
        <<- />> -ce|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[iI]ls$
        <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", None, True)                    && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True)   && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- />> -ils|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[eE]lles$
        <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", None, True)                    && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True)   && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- />> -elles|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[iI]els$
        <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", None, True)                    && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True)   && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- />> -iels|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

TEST: {{Vas-je}}                                                                        ->> Vais-je
TEST: mais {{aie-je}} seulement le choix ?                                              ->> ai-je
TEST: {{bluff-je}}                                                                      ->> bluffe-je
................................................................................
TEST: Eh ! dit Athos, ne sont-ce pas des braconniers qu’on arrête là-bas ?
TEST: Le moteur choisi convient-il ?


__inte_verbes_composés_interrogatifs_impératifs__
    ~\w-[nN]ous$
        <<- /inte/ not re.search("-[lL](?:es?|a)-[nN]ous$", \1) >>>
        <<- /inte/ morphVC(\1, ":V", ":(?:1p|E:2[sp])") ->> =suggVerb(\1, ":1p", None, True)+"|"+suggVerbImpe(\1, True) && Forme interrogative ou impérative incorrecte.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:chez|malgré)/") ->> =suggSimil(\1, ":1p", False, True)         && Forme interrogative ou impérative incorrecte.
        <<- />> -nous|_VCint_

    ~\w-[vV]ous$
        <<- /inte/ not re.search("-[lL](?:es?|a)-[vV]ous$", \1) >>>
        <<- /inte/ morphVC(\1, ":V", ":2p") ->> =suggVerb(\1, ":2p", None, True)                      && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>chez/") ->> =suggSimil(\1, ":2p", False, True)  && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel.
        <<- />> -vous|_VCint_

TEST: {{Prendront-nous}}                                    ->> Prendrons-nous|Prends-nous|Prenons-nous|Prenez-nous
TEST: {{Attendront-nous}} le train                          ->> Attendrons-nous|Attends-nous|Attendons-nous|Attendez-nous
TEST: {{action-nous}} !                                     ->> axions-nous|actions-nous
TEST: {{santon-nous}} mauvais ?                             ->> sentons-nous|centons-nous
................................................................................
        <<- =>> definefrom(\1, 7)

TEST: il n’avait contracté qu’un {{pseudo mariage}}.            ->> pseudo-mariage
TEST: la {{pseudo taxe}} carbone                                ->> pseudo-taxe


__tu_mots_composés_verbe_nom__



    [contre|entre]  *WORD
        <<- /tu/ not morph(\2, ":[GYB]") and morph(<1, ":(?:D|V0e)|<start>|>,") and morph2(\1, "-", ":N")
        ->> \1-\2                                                                                   && Il manque probablement un trait d’union.

    [m’|t’|s’] entre *WORD
        <<- /tu/ morph(\3, ":V") and morph2(\2, "-", ":V")
        -2:3>> \2-\3                                                                                && Il manque probablement un trait d’union.

    nous nous entre ~on[ts]$
................................................................................
        <<- /tu/ morph(\4, ":V") and morph2(\3, "-", ":V") and not morph(<1, ":R")
        -3:4>> \3-\4                                                                                && Il manque probablement un trait d’union.

    [attrape|garde|porte|brise|cache|casse|chauffe|coupe|cure|croque|essuie|lance|lave|lève|marque|pare|passe|perce|pèse|porte|poste|pousse|presse|protège|ramasse|serre|taille|tire|tourne|traîne|traine|vide]  *WORD
        <<- /tu/ morph(<1, ":(?:D|V0e)|<start>|>,") and morph2(\1, "-", ":N")
        ->> \1-\2                                                                                   && Il manque probablement un trait d’union.


TEST: c’est le {{contre exemple}} parfait                       ->> contre-exemple
TEST: une {{entre voie}}                                        ->> entre-voie
TEST: s’{{entre regarder}}                                      ->> entre-regarder
TEST: ce sont des {{lève tard}}.                                ->> lève-tard
TEST: nous nous {{entre tuions}}                                ->> entre-tuions
TEST: un {{brise glace}}                                        ->> brise-glace
TEST: entre deux chaises…

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


__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}}                                                                     ->> arrivée|arrivant
TEST: la production d’électricité par des énergies renouvelables aurait encore augmenté de 7 %, selon les calculs de l’AIE


    [de|d’]  le  *WORD
        <<- /conf/ space(\1, 0, 1) and morph(\3, ":[NAQ].*:[me]", ":[YG]") and not \3.istitle()
            and not (value(\3, "|mal|") and morph(>1, ":Y")) -1:2>> du                              && Incohérence avec « \1 \2 » : “\3” est un nom ou un adjectif.
        <<- /conf/ morph(\3, ":[123][sp]") -3>> =suggVerbInfi(\3)                                   && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.
................................................................................
    >cellule [de|d’] crise
    >cellule [de|d’] détention provisoire
    [centrale+s] d’ >achat
    >centre d’ éducation [populaire|surveillée]
    >centre [de|d’] rétention ?[préventive|administrative]¿
    >certificat [de|d’] [conformité|virginité]
    >certificat [de|d’] bonne conduite
    >certificat [de|d’] études [primaires|secondaires|supérieures|spécialisées|musicales|théâtrales|bibliques|théologiques]
    >certificat [de|d’] scolarité ?[maternelle|primaire|secondaire]¿
    >chair à [pâté|>canon]
    >chair [de|d’] poule
    >chalet d’ alpage
    >chambre à [coucher|gaz]
    >chambre [de|d’] [agriculture|hôte|hôtel|hôtes|commerce|compensation|décompression|dégrisement]
    >champion du monde
................................................................................
    >défaut [de|d’] paiement
    >descente aux [enfers|flambeaux]
    >dindon [de|d’] la farce
    dieu tout-puissant
    [>dîner|>diner] aux chandelles
    [>dîner|>diner] [de|d’] gala
    >discipline [de|d’] [acier|fer]
    >doigt de fée
    >don en nature
    >donneur [de|d’] >leçon
    >dossier d’ inscription ?[administrative|scolaire]¿
    >dossier [de|d’] presse
    >drapeau en berne
    >drone [de|d’] [combat|surveillance]
    >drogue [de|d’] synthèse
................................................................................
    >effet [de|d’] bord
    >effort [de|d’] guerre
    >élément à charge
    >emploi du temps
    >employé [de|d’] maison
    >ennemi d’ État
    ennemi public numéro [un|$:B|*NUM]
    ennemie publique numéro [un|$:B|*NUM]
    >ennui [de|d’] santé
    >enregistreur [de|d’] vol
    >enterrement [de|d’] vie [de|d’] garçon
    >enterrement [de|d’] vie [de|d’] jeune fille
    >entrée [de|d’] service
    >entretien d’ embauche
    >enquête à charge
................................................................................
    >fil à retordre
    >file d’ attente
    >fille à [papa|maman|>soldat]
    >fille au pair
    >film X
    fils à [papa|maman]
    fils [de|d’] pute
    >figure de proue
    >fin [de] non-recevoir
    >fleuve à sec
    >flic en civil
    >flocon [de|d’] neige ?électronique¿
    >foire d’ >empoigne
    fonds d’ investissement
    fonds [de|d’] pension
    >fontaine à eau
................................................................................
    >matelas à mémoire de forme
    >matière à [débat|polémique|réflexion]
    >médaille d’ [or|argent|bronze]
    >médecin [de|d’] [famille|garde]
    >mère au foyer
    >mesure >barrière
    >metteur en scène
    >mineur [de|d’] moins [de|d’] *NUM ans
    >mineur [de|d’] moins [de|d’] $:B:e:p ans
    >minute d’ arc
    >miroir aux alouettes
    >mise en danger de la vie d’ autrui
    >mouchoir [de|d’] poche
    >mode [de|d’] [emploi|paiement|scrutin|vie]
    >monnaie [de|d’] [échange|réserve|singe]
    >montée en puissance
................................................................................
    >motion [de|d’] [censure|défiance] ?constructive¿
    >moule à [>gaufre|>gâteau|brioche|manqué|savarin|charlotte|tarte]
    >moulin à [café|eau|paroles|poivre|prières|vent]
    >mouton à [cinq|5] pattes
    [moyen+s] [de|d’] transport
    >navire [de|d’] plaisance
    >nerf à vif
    >nettoyeur haute pression
    >nid à merde
    >nid [de|d’] résistance
    >niveau [de|d’] vie
    noix [de|d’] [cajou|pécan|pecan|coco|lavage|muscade|veau|macadamia]
    >nom à particule
    >nom [de|d’] famille
    >notice [de|d’] [montage|utilisation]
................................................................................
    >peloton d’ exécution
    >pendaison [de|d’] crémaillère
    >périphérique à bande ?[analogique|magnétique]¿
    >personnage [de|d’] roman
    perspectives d’ avenir
    >perte [de|d’] temps ?précieux¿
    >peur [de|d’] tous les diables

    >phase [I|II|III|IV|V|VI|VII|VIII|IX|X|XI|XII|XIII|XIV|XV|XVI|XVII|XVIII|XIX|XX|XXI|XXII|XXIII|XXIV|XXV|XXVI|XXVII|XXVIII|XXIX|XXX]
    >piano à queue
    >pièce à conviction
    >pièce [de|d’] [théâtre|monnaie|rechange]
    >pièce [de|d’] *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling]
    >pied [de|d’] biche
    >pile à [combustible|hydrogène]
................................................................................
    [secret+s] défense
    >sobre comme un chameau
    >sourd comme un pot
    >sujet à [caution|débat|interprétation]
    >sujet à interprétations diverses
    [>sur|>sûr] de [mon|ton|son|notre|votre|leur] bon droit
    >têtu comme une [bourrique|mule]
    >têtu comme un [âne|bourriquot|mulet]
    [tiré+ses] à [quatre|4] épingles
    [vu+ses] d’ un ?très¿ [bon|mauvais] œil
        <<- ~2:0>> *

    flambant >neuf
        <<- ~1>> *

................................................................................
    >calibre . *NUM ?[acp|auto|brenneke|browning|british|colt|court|H&K|magnum|mauser|otan|remington|parabellum|russian|S&W|sig|soviet|special|wcf|wsm|winchester]¿
    >calibre . *NUM long rifle
    >calibre *NUM ?[mm|in]¿
    >calibre *NUM [*|×] *NUM ?[mm|in]¿
        <<- ~2:0>> *
        <<- =>> =select(\1, ":N")

    une bonne chose de réglée
        <<- ~-2:0>> *

    [le|la|l’|les]  $:N  d’ alors
        <<- ~-2:0>> *

    [>homme|>femme|>garçon|>garçonnet|>fille|>fillette|>vieillard|>acteur|>architecte|>auteur|>artiste|>chef|>cinéaste|>cuisinier|>dessinateur|>écrivain|>graphiste|>ingénieur|>joueur|>musicien|>peintre|>photographe|>réalisateur]
        || [de|d’] grand talent

        <<- ~2:0>> *


__purge_syntagmes_nominaux_matière__
    *WORD  en  acier  ?[galvanisé|inoxydable|trempé]¿       ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿
    *WORD  en  chêne  ?massif¿                              ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿
    *WORD  en  bois   ?vernis¿                              ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿
................................................................................
__conj_le_la_leur_nom!5__
    le  *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 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", suggMasSing)                                                      && 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.

    la  *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 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", suggFemSing)                                                      && 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.

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

__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]|>et/") 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 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]|>et/") 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 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]|>et/") 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 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.
................................................................................


__conj_det_plur_nom__
    [ces|mes|tes|ses|nos|vos|leurs|quelques]  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M|A.*:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and (morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", suggPlur)                                                         && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [ces|mes|tes|ses|nos|vos|leurs|quelques]  @:[NA].*:[pi]¬:V0  qui  @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Ses « chiens » {{coure}} sur ma pelouse.                                                      ->> courent
TEST: mes filles {{passe}} ce matin                                                                 ->> passent
TEST: vos filles {{passes}} ce matin                                                                ->> passent
TEST: ces travaux qui {{demande}} tant d’efforts.                                                   ->> demandent
TEST: vos questions ne {{réclame}} aucune réflexion.                                                ->> réclament
TEST: Ces attaques à main armée {{donne}} la chair de poule.                                        ->> donnent
TEST: Ces marchands {{passe}} leur temps à se quereller.
TEST: maints hommes {{oublie}} leurs origines pour mieux se construire un passé glorieux            ->> oublient
TEST: nos hommes qui {{repartirons}} demain                                                         ->> repartiront
TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler.
TEST: trier les cons et les connes expose à un violent coup de boomerang
TEST: Tu penses que quelqu’un qui frappe sa femme et ses enfants est un bon père ?


................................................................................
__conj_les_nom__
    les  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not ( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", suggPlur)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    les  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

................................................................................
TEST: Les infirmières à mi-temps ne {{travaille}} pas dans cette aile.                              ->> travaillent
TEST: les données, en quantité plus que suffisante, {{indique}} que…                                ->> indiquent
TEST: Les hommes comme celui-là {{mange}} comme deux.                                               ->> mangent
TEST: les récompenses distribuées à parts égales {{était}}…                                         ->> étaient
TEST: Les États-Unis d’Amérique se {{compose}} de 50 états.                                         ->> composent
TEST: Les enfants en {{manges}}.                                                                    ->> mangent
TEST: Les ombres la {{donnes}}                                                                      ->> donnent
TEST: les grands {{danse}}
TEST: les filles {{passes}} ce matin                                                                ->> passent
TEST: les marchands {{marche}}
TEST: les marchands {{plie}}
TEST: il prétendait que les banques universelles « à la française » s’{{était}} bien comportées     ->> étaient
TEST: les marchands {{paye}}
TEST: les marchands {{marchande}}
TEST: les marchandes {{paie}}
TEST: les marchandes {{marchande}}                                                                  ->> marchandent|marchandes
TEST: les chattes {{finis}}                                                                         ->> finissent|finirent|finissaient
TEST: les chattes {{manges}}                                                                        ->> mangent
TEST: les religieux qui n’en {{finisse}} pas de mentir.                                             ->> finissent
TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.                     ->> montrent
TEST: les malades que tu as servis {{outrepasse}} leur droit                                        ->> outrepassent
TEST: l’écart entre les riches et les pauvres n’était pas si grand.
TEST: Les grands hommes politiques
................................................................................
__conj_certains_certaines_plusieurs_nom__
    [certains|maints]  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", suggMasPlur)                                                      && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [certaines|maintes]  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", suggFemPlur)                                                      && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    plusieurs  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", suggPlur)                                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [certains|certaines|plusieurs|maints|maintes]  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

................................................................................
TEST: certains imbéciles passés à l’ennemi feraient mieux de se taire.


__conj_des_nom__
    [<start>|,|(]  des  @:[NA].*:[pi]  @:V¬:(?:3p|P|G|Q|Y|A.*:[pi]|V[23].*:Y)
        <<- /conj/ morph(>1, ":(?:R|D.*:p)|>au/|<end>|>,") >>>
        <<- /conj/ not morph(\4, ":[NA]") -4>> =suggVerb(\4, ":3p")                                 && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and not agreement(\3, \4) -4>> =suggVerb(\4, ":3p", suggPlur)           && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [<start>|,|(]  des  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -5>> =suggVerb(\5, ":3p")                                                        && Conjugaison erronée. Accord avec “\2 \3 \4…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    *WORD  des  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|G)
        <<- /conj/ morph(\1, ":[VR]", ":[NA]") --1>> =suggVerb(\-1, ":3p")                          && Conjugaison erronée. Accord avec “\2 \3 \4…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

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


# indicatif nécessaire
__vmode_sujet_indicatif__
    <start>  [je|j’|tu|il|ils|elle|elles|on|nous|vous|iel|iels]  @:S¬:[GIK]|V0a.*:Sq
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Ce verbe ne devrait pas être au subjonctif.

TEST: Il {{ait}} demandé.                                                           ->> a|avait|eut|aura
TEST: Il en {{conclue}} qu’il a eu raison.                                          ->> conclut|concluait|conclura
TEST: j’en {{aie}} marre                                                            ->> ai|avais|eus|aurai
TEST: j’{{aie}} faim                                                                ->> ai|avais|eus|aurai
TEST: Tu ne l’y {{aies}} pas vu.                                                    ->> as|avais|eus|auras


# Après/dès que + indicatif
__vmode_que_indicatif__
    [après|dès]  [que|qu’]  @:(?:Os|M)  @:V.*:S¬:[GI]
    [après|dès]  [que|qu’]  @:(?:Os|M)  @:V0e.*:S
        <<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3)                    && Après « \1 que », le verbe ne s’emploie pas au subjonctif mais à l’indicatif, si l’action s’est déroulée de façon certaine.

    à  mesure    [que|qu’]  @:(?:Os|M)  @:V.*:S¬:[GI]
    à  mesure    [que|qu’]  @:(?:Os|M)  @:V0e.*:S
        <<- /vmode/ -5>> =suggVerbMode(\5, ":I", \4)                    && Après « à mesure que », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

TEST: Après qu’il {{ait}} pris la tangeante                                             ->> a|avait|eut|aura
TEST: Après que nous {{ayons}} mangé son repas.                                         ->> avons|avions|eûmes|aurons
TEST: Après que tu {{sois}} parti, il plut.                                             ->> es|étais|fus|seras
TEST: Dès qu’il y {{eût}} pensé, il fit ce qu’il fallait pour résoudre le problème.     ->> a|avait|eut|aura
TEST: à mesure qu’elle {{devienne}} forte                                               ->> devient|devenait|devint|deviendra


# verbe que + subjonctif
................................................................................
    >valoir mieux                                   [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    mieux >valoir                                   [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/  --1>> =suggVerbMode(\-1, ":S", \-2)                                            && Après “mieux valoir que”, ce verbe devrait être au subjonctif.

TEST: Il suffit qu’il {{court}} plus                                                ->> coure|courût
TEST: j’attends que tu {{viens}}.                                                   ->> viennes|vinsses
TEST: Je veux qu’il {{finit}} son repas.                                            ->> finisse|finît
TEST: Je ne veux pas que tu {{es}} des ennuis                                       ->> sois|fusses
TEST: je doute qu’il {{vient}} demain.                                              ->> vienne|vînt
TEST: il se peut que nous {{avons}} tort.                                           ->> ayons|eussions
TEST: j’ai bon espoir qu’il {{vient}} vite.                                         ->> vienne|vînt
TEST: peu s’en est fallu qu’il {{devient}} estropié.                                ->> devienne|devînt
TEST: je m’étonne qu’il {{est}} aussi fragile                                       ->> soit|fût
TEST: elle a envie qu’il {{est}} intelligent.                                       ->> soit|fût
TEST: il importera que nous {{devenons}} prêts.                                     ->> devenions|devinssions
TEST: prends garde que vous {{revenez}} en un seul morceau.                         ->> reveniez|revinssiez
TEST: ça ira, si tant est que Paul {{comprend}} ce qui se passe.                    ->> comprenne|comprît
TEST: faites attention à ce qu’elle ne {{devient}} pas timorée.                     ->> devienne|devînt
TEST: je tiens à ce que vous {{devenez}} grands.                                    ->> deveniez|devinssiez
TEST: Veille à ce qu’il y {{est}} des gâteaux.                                      ->> soit|fût
TEST: il arrive qu’il {{vient}}, mais rarement                                      ->> vienne|vînt
TEST: Vaudrait mieux qu’elle {{meurt}}                                              ->> meure|mourût
TEST: il aurait mieux valu qu’elle {{meurt}}                                        ->> meure|mourût
TEST: il est possible qu’il {{est}} parti                                           ->> soit|fût
TEST: se peut-il que je {{viens}}                                                   ->> vienne|vinsse
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: Je me doutais bien qu’elle me détestait
TEST: Je veux que tu sois prudent.
TEST: Je souhaitais que tu fusses présent.
TEST: Je souhaite qu’il apprenne le français.
................................................................................

    [<start>|,|(]  encore                           [que|qu’]   @:(?:Os|M)  @:I¬:(?:[GSK]|If)
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                && Après “\2 que”, le verbe s’emploie au subjonctif.

    jusqu’      à           [ce|tant]               [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2)                                             && Après “\1 \2 \3 que”, ce verbe devrait être au subjonctif.

TEST: Quoiqu’il {{est}} parti il y a longtemps, on pense encore beaucoup à lui.                     ->> soit|fût
TEST: quoi qu’il en {{conclut}}                                                                     ->> conclue|conclût
TEST: Avant que tu {{pars}}, je voudrais qu’on discute.                                             ->> partes|partisses
TEST: Sans qu’elle {{prend}} le temps d’analyser le problème.                                       ->> prenne|prît
TEST: il est possible qu’il {{vient}} demain.                                                       ->> vienne|vînt
TEST: à condition que tu {{réussis}}                                                                ->> réussisses
TEST: Pourvu qu’elle {{réussit}}.                                                                   ->> réussisse|réussît
TEST: en admettant que tu {{deviens}} plus talentueuse qu’elle, qu’est-ce que tu feras ?            ->> deviennes|devinsses
................................................................................
TEST: Nous œuvrons silencieusement de crainte qu’il nous {{entend}}.                                ->> entende|entendît
TEST: En admettant qu’il {{devient}} juste.                                                         ->> devienne|devînt
TEST: à condition qu’elle le {{pensa}}                                                              ->> pense|pensât
TEST: non qu’il {{prend}} son temps                                                                 ->> prenne|prît
TEST: si tant est que nous {{prenons}} notre temps                                                  ->> prenions|prissions
TEST: moyennant qu’elle {{vient}} demain                                                            ->> vienne|vînt
TEST: en attendant qu’il {{devient}} plus raisonnable                                               ->> devienne|devînt
TEST: {{où}} qu’il {{est}}, on le trouvera                                                          ->> ou|||soit|fût
TEST: Il ne le savait pas, bien qu’il en {{avait}} entendu parler.                                  ->> ait|eût
TEST: Bien que je {{prends}} mon mal en patience.                                                   ->> prenne|prisse
TEST: encore qu’il {{sait}} s’y prendre                                                             ->> sache|sût
TEST: jusqu’à ce qu’elle {{vient}} avec nous                                                        ->> vienne|vînt
TEST: C’est un joli bien. Bien qu’il a hérité de son oncle, notez bien.
TEST: Bien qu’il avait donné à ses enfants.
TEST: si bien que je me suis toujours demandée si cela ne m’avait pas un peu bousillé les yeux
................................................................................
TODO: Les côtes sont dans leur ensemble extrêmement découpées.

!!! Indécidable                                                                                   !!
TEST: Du sable fin grippe les rouages (accord avec ce qui précède).
TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit).

!!! Autres tests                                                                                  !!

TEST: l’ambulance censée amener Cédric n’est jamais arrivée
TEST: Chez les intellectuels, le mot utopie n’a jamais été synonyme de folie, mais il l’a été pour l’homme de la rue.
TEST: Les États parties sont les pays qui ont ratifié la Convention du patrimoine mondial.
TEST: Ça a l’air de t’aller.
TEST: Et je m’en sors.
TEST: C’est à chacun d’entre nous de suivre le modèle d’Amos.
TEST: C’est toi qui voulais y aller.







|
|
<







 







>
>








>
>







 







|



|



|
|












|
|







 







|








|





|
|





|
|





|
|





|






|







|





|





|







 







|





|







 







>
>
>

|







 







>
|







 







|
|





|







 







|







 







|







 







|







 







|
|







 







|
|







 







|







 







>







 







|







 







|





|
|
>







 







|








|








|







 







|







|







 







|













|







 







|







 







|

|
|

|
|
|
|







 







|








|








|







 







|







 







|



|












|







 







|




|
|





|



|







 







|







 







|







 







>







909
910
911
912
913
914
915
916
917

918
919
920
921
922
923
924
....
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
....
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
....
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
....
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
....
5513
5514
5515
5516
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
....
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
....
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
.....
17963
17964
17965
17966
17967
17968
17969
17970
17971
17972
17973
17974
17975
17976
17977
.....
18079
18080
18081
18082
18083
18084
18085
18086
18087
18088
18089
18090
18091
18092
18093
.....
18103
18104
18105
18106
18107
18108
18109
18110
18111
18112
18113
18114
18115
18116
18117
.....
18165
18166
18167
18168
18169
18170
18171
18172
18173
18174
18175
18176
18177
18178
18179
18180
.....
18322
18323
18324
18325
18326
18327
18328
18329
18330
18331
18332
18333
18334
18335
18336
18337
.....
18344
18345
18346
18347
18348
18349
18350
18351
18352
18353
18354
18355
18356
18357
18358
.....
18394
18395
18396
18397
18398
18399
18400
18401
18402
18403
18404
18405
18406
18407
18408
.....
18710
18711
18712
18713
18714
18715
18716
18717
18718
18719
18720
18721
18722
18723
18724
.....
18737
18738
18739
18740
18741
18742
18743
18744
18745
18746
18747
18748
18749
18750
18751
18752
18753
18754
18755
18756
18757
18758
18759
.....
32899
32900
32901
32902
32903
32904
32905
32906
32907
32908
32909
32910
32911
32912
32913
32914
32915
32916
32917
32918
32919
32920
32921
32922
32923
32924
32925
32926
32927
32928
32929
32930
32931
.....
32970
32971
32972
32973
32974
32975
32976
32977
32978
32979
32980
32981
32982
32983
32984
32985
32986
32987
32988
32989
32990
32991
32992
.....
33297
33298
33299
33300
33301
33302
33303
33304
33305
33306
33307
33308
33309
33310
33311
33312
33313
33314
33315
33316
33317
33318
33319
33320
33321
33322
33323
33324
33325
.....
33326
33327
33328
33329
33330
33331
33332
33333
33334
33335
33336
33337
33338
33339
33340
.....
33344
33345
33346
33347
33348
33349
33350
33351
33352
33353
33354
33355
33356
33357
33358
33359
33360
33361
33362
33363
33364
33365
33366
.....
33380
33381
33382
33383
33384
33385
33386
33387
33388
33389
33390
33391
33392
33393
33394
33395
33396
33397
33398
33399
33400
33401
33402
33403
33404
33405
33406
33407
33408
33409
33410
33411
33412
.....
33427
33428
33429
33430
33431
33432
33433
33434
33435
33436
33437
33438
33439
33440
33441
.....
33870
33871
33872
33873
33874
33875
33876
33877
33878
33879
33880
33881
33882
33883
33884
33885
33886
33887
33888
33889
33890
33891
33892
33893
33894
33895
33896
33897
33898
33899
33900
33901
.....
33952
33953
33954
33955
33956
33957
33958
33959
33960
33961
33962
33963
33964
33965
33966
33967
33968
33969
33970
33971
33972
33973
33974
33975
33976
33977
33978
33979
33980
33981
33982
.....
34037
34038
34039
34040
34041
34042
34043
34044
34045
34046
34047
34048
34049
34050
34051
.....
34056
34057
34058
34059
34060
34061
34062
34063
34064
34065
34066
34067
34068
34069
34070
.....
34237
34238
34239
34240
34241
34242
34243
34244
34245
34246
34247
34248
34249
34250
34251
TEST: un ou une électricien·ne
TEST: femme ou homme épuisé·e
TEST: un·e idiot·e


__[i](typo_écriture_invariable)__
    ({w_3})([-·–—.•⋅/]s|[(]s[)])  @@0,$
        <<- not (\0.endswith("/s") and morph(\1, ";S")) ~>> =normalizeInclusiveWriting(\0)
        <<- __also__ and option("typo") and option("eepi") and not \0.endswith("·s") ->> \1·s       && Écriture invariable. Utilisez un point médian.


TEST: la ou les {{fille(s)}}                                            ->> fille·s
TEST: le ou les patron·s
TEST: combien de rad/s


!!
................................................................................
TEST: Ça coûte {{13,4¥}}.                               ->> 13,4 ¥
TEST: il mesure {{30,3 cm}}                             ->> 30,3 cm
TEST: il est monté à {{18 %}}                           ->> 18 %
TEST: une température de {{22,4 °C}}                    ->> 22,4 °C
TEST: il en veut {{18kg}}                               ->> 18 kg
TEST: il me le propose pour {{243 gCO2/kWh}}            ->> 243 gCO2/kWh
TEST: il me le propose pour {{243,4 gCO2/kWh}}          ->> 243,4 gCO2/kWh
TEST: {{140 rad/s}}                                     ->> 140 rad/s
TEST: {{200 m}}/s                                       ->> 200 m
TEST: {{40 MHz}}                                        ->> 40 MHz
TEST: {{100 Ah}}                                        ->> 100 Ah
TEST: {{1001 ans}}                                      ->> 1 001 ans
TEST: {{500000 euros}}                                  ->> 500 000 euros
TEST: en l’an 2000 Urgondorletroll eut une idée
TEST: 1998 s’annonce grandiose.
TEST: il y en a 3,43 milliards.
TEST: je veux 200 euros.
TEST: 140 rad/s
TEST: 140 rad/s


__[s]/typo(typo_math)__
    (?:cos|sin|tan|cotan|log|ln)²? [2-9]?[a-zA-Zα-ωΑ-Ω](?![’'])
        <<- ->> =\0.replace(" ", "(")+")|"+\0.replace(" ", " ")             && Mettez des parenthèses (ou éventuellement un espace insécable).

TEST: {{cos ω}}                                         ->> cos(ω)|cos ω
................................................................................
!!
!!
!!!! Cohérence des guillemets                                                                     !!
!!
!!

__<s>/typo(typo_cohérence_guillemets_chevrons_ouvrants)__
    («[  ])[^»“]+?(”)  @@0,$
        <<- not before("\\w$") -1>> “                                                               && Guillemet ouvrant différent du guillemet fermant (”).
        <<- not after("^\\w") -2>> " »"                                                             && Guillemet fermant différent du guillemet ouvrant («).
__<s>/typo(typo_cohérence_guillemets_chevrons_fermants)__
    (“)[^”«]+?([  ]»)  @@0,$
        <<- not before("\\w$") -1>> "« "                                                            && Guillemet ouvrant différent du guillemet fermant (»).
        <<- not after("^\\w") -2>> ”                                                                && Guillemet fermant différent du guillemet ouvrant (“).

TEST: C’est {{« }}stupide{{”}}.                                             ->> “||| »
TEST: Quel {{“}}emmerdeur{{ »}}, ce gars-là.                                ->> « |||”


__<s>/typo(typo_cohérence_guillemets_doubles_ouvrants)__
    (“)[^”’“«]+?(’)(?![\w'’)])  @@0,$
        <<- not ( after("^”") and re.search("“(?:l|d|c|ç|n|m|t|s|j|z|[A-ZÇ]|qu|jusqu|puisqu|lorsqu|quoiqu|quelqu)’", \0) ) >>>
        <<- not before("\\w$") -1>> "‘"                                                             && Guillemet ouvrant différent du guillemet fermant (’).
        <<- __also__ -2>> ”                                                                         && Guillemet fermant différent du guillemet ouvrant (“).
__<s>/typo(typo_cohérence_guillemets_doubles_fermants)__
    (‘)[^’“«]+?(”)  @@0,$
        <<- not before("\\w$") -1>> "“"                                                             && Guillemet ouvrant différent du guillemet fermant (”).
        <<- not after("^\\w") -2>> ’                                                                && Guillemet fermant différent du guillemet ouvrant (‘).

TEST: Tu sais, {{‘}}ton ami{{”}} est venu.                                  ->> “|||’
TEST: Oui, je vois, mais c’est quand même un {{“}}salopard{{’}}.            ->> ‘|||”
TEST: Après “n’”, il faut une forme verbale.
TEST: il (n’)est (pas) là.


__[i]/typo(typo_guillemets_doubles_ouvrants_non_fermés)__
    (“)\w[^”"»]+$  @@0
        <<- -1>> _                                                                                  && Guillemets fermants introuvables dans la suite du paragraphe.
................................................................................
!!
!!!! Verbes composés                                                                              !!
!!
!!

__inte_verbes_composés_interrogatifs__
    ~\w-[jJ]e$
        <<- /inte/ morphVC(\1, ":V", ":1[sśŝ]") ->> =suggVerb(\1, ":1ś", True)                      && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier.
        <<- /inte/ __else__ and not morphVC(\1, ":V") ->> =suggSimil(\1, ":1[sśŝ]", False, True)    && Forme interrogative. Désaccord avec “je”. Le verbe n’est pas à la 1ʳᵉ personne du singulier.
        <<- />> -je|_VCint_
        <<- value(<1, "|me|m’|") />> _upron_

    aie-je
        <<- /vmode/ ->> ai-je                                                                       && Forme interrogative. N’employez pas le subjonctif présent.

    ~\w-[tT]u$
        <<- /inte/ morphVC(\1, ":V", ":[ISK].*:2s") ->> =suggVerb(\1, ":2s", True)                  && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier.
        <<- /inte/ __else__ and not morphVC(\1, ":V") ->> =suggSimil(\1, ":2s", False, True)        && Forme interrogative. Désaccord avec “tu”. Le verbe n’est pas à la 2ᵉ personne du singulier.
        <<- />> -tu|_VCint_
        <<- value(<1, "|te|t’|") />> _upron_

    ~\w-[iI]l$
        <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", True) + "|" + \1+"s"                    && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True)                       && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:t|voilà)/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “il”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -il|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[eE]lle$
        <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", True) + "|" + \1+"s"          && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True)             && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “elle”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -elle|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[iI]el$
        <<- /inte/ morphVC(\1, ":3p", ":3s") ->> =suggVerb(\1, ":3s", True) + "|" + \1+"s"          && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True)             && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “iel”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -iel|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[oO]n$
        <<- /inte/ morphVC(\1, ":V", ":3s") ->> =suggVerb(\1, ":3s", True)                          && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3s", False, True)   && Forme interrogative. Désaccord avec “on”. Le verbe n’est pas à la 3ᵉ personne du singulier.
        <<- />> -on|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[cCs]e$
        <<- /inte/ morphVC(\1, ":V", ":(?:3s|V0e.*:3p)")
        ->> =suggVerb(\1, ":3s", True)                      && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
        <<- /inte/ __else__ and morphVC(\1, ":", ":V")
        ->> =suggSimil(\1, ":3s", False, True)              && Forme interrogative. Désaccord avec “ce”. Le verbe n’est pas à la 3ᵉ personne du singulier.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
        <<- /conf/ \1.endswith("se") ->> =\1[:-2]+"ce"      && Forme interrogative. Confusion.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4132
        <<- />> -ce|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[iI]ls$
        <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", True)                          && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True)   && Forme interrogative. Désaccord avec “ils”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- />> -ils|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[eE]lles$
        <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", True)                          && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True)   && Forme interrogative. Désaccord avec “elles”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- />> -elles|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

    ~\w-[iI]els$
        <<- /inte/ morphVC(\1, ":V", ":3p") ->> =suggVerb(\1, ":3p", True)                          && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>t/") ->> =suggSimil(\1, ":3p", False, True)   && Forme interrogative. Désaccord avec “iels”. Le verbe n’est pas à la 3ᵉ personne du pluriel.
        <<- />> -iels|_VCint_
        <<- value(<1, "|se|s’|") />> _upron_

TEST: {{Vas-je}}                                                                        ->> Vais-je
TEST: mais {{aie-je}} seulement le choix ?                                              ->> ai-je
TEST: {{bluff-je}}                                                                      ->> bluffe-je
................................................................................
TEST: Eh ! dit Athos, ne sont-ce pas des braconniers qu’on arrête là-bas ?
TEST: Le moteur choisi convient-il ?


__inte_verbes_composés_interrogatifs_impératifs__
    ~\w-[nN]ous$
        <<- /inte/ not re.search("-[lL](?:es?|a)-[nN]ous$", \1) >>>
        <<- /inte/ morphVC(\1, ":V", ":(?:1p|E:2[sp])") ->> =suggVerb(\1, ":1p", True)+"|"+suggVerbImpe(\1, True)       && Forme interrogative ou impérative incorrecte.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>(?:chez|malgré)/") ->> =suggSimil(\1, ":1p", False, True)         && Forme interrogative ou impérative incorrecte.
        <<- />> -nous|_VCint_

    ~\w-[vV]ous$
        <<- /inte/ not re.search("-[lL](?:es?|a)-[vV]ous$", \1) >>>
        <<- /inte/ morphVC(\1, ":V", ":2p") ->> =suggVerb(\1, ":2p", True)                            && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel.
        <<- /inte/ __else__ and morphVC(\1, ":", ":V|>chez/") ->> =suggSimil(\1, ":2p", False, True)  && Forme interrogative ou impérative. Désaccord avec “vous”. Le verbe n’est pas à la 2ᵉ personne du pluriel.
        <<- />> -vous|_VCint_

TEST: {{Prendront-nous}}                                    ->> Prendrons-nous|Prends-nous|Prenons-nous|Prenez-nous
TEST: {{Attendront-nous}} le train                          ->> Attendrons-nous|Attends-nous|Attendons-nous|Attendez-nous
TEST: {{action-nous}} !                                     ->> axions-nous|actions-nous
TEST: {{santon-nous}} mauvais ?                             ->> sentons-nous|centons-nous
................................................................................
        <<- =>> definefrom(\1, 7)

TEST: il n’avait contracté qu’un {{pseudo mariage}}.            ->> pseudo-mariage
TEST: la {{pseudo taxe}} carbone                                ->> pseudo-taxe


__tu_mots_composés_verbe_nom__
    contre >productif
        <<- /tu/ ->> \1-\2                                                                          && Il manque un trait d’union.

    [contre|entre]  *WORD
        <<- /tu/ not morph(\2, ":[GYB]") and morph(<1, ":(?:D|V.e)|<start>|>,") and morph2(\1, "-", ":N")
        ->> \1-\2                                                                                   && Il manque probablement un trait d’union.

    [m’|t’|s’] entre *WORD
        <<- /tu/ morph(\3, ":V") and morph2(\2, "-", ":V")
        -2:3>> \2-\3                                                                                && Il manque probablement un trait d’union.

    nous nous entre ~on[ts]$
................................................................................
        <<- /tu/ morph(\4, ":V") and morph2(\3, "-", ":V") and not morph(<1, ":R")
        -3:4>> \3-\4                                                                                && Il manque probablement un trait d’union.

    [attrape|garde|porte|brise|cache|casse|chauffe|coupe|cure|croque|essuie|lance|lave|lève|marque|pare|passe|perce|pèse|porte|poste|pousse|presse|protège|ramasse|serre|taille|tire|tourne|traîne|traine|vide]  *WORD
        <<- /tu/ morph(<1, ":(?:D|V0e)|<start>|>,") and morph2(\1, "-", ":N")
        ->> \1-\2                                                                                   && Il manque probablement un trait d’union.

TEST: ça semble totalement {{contre productif}}                 ->> contre-productif
TEST: c’est le {{contre exemple}} parfai                       ->> contre-exemple
TEST: une {{entre voie}}                                        ->> entre-voie
TEST: s’{{entre regarder}}                                      ->> entre-regarder
TEST: ce sont des {{lève tard}}.                                ->> lève-tard
TEST: nous nous {{entre tuions}}                                ->> entre-tuions
TEST: un {{brise glace}}                                        ->> brise-glace
TEST: entre deux chaises…

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


__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.                                                           ->> mettre|mets|mise|mises|misses|missions
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}}                                                                             ->> arrivée|arrivant
TEST: la production d’électricité par des énergies renouvelables aurait encore augmenté de 7 %, selon les calculs de l’AIE


    [de|d’]  le  *WORD
        <<- /conf/ space(\1, 0, 1) and morph(\3, ":[NAQ].*:[me]", ":[YG]") and not \3.istitle()
            and not (value(\3, "|mal|") and morph(>1, ":Y")) -1:2>> du                              && Incohérence avec « \1 \2 » : “\3” est un nom ou un adjectif.
        <<- /conf/ morph(\3, ":[123][sp]") -3>> =suggVerbInfi(\3)                                   && Incohérence avec « \1 \2 » : “\3” est une forme verbale conjuguée.
................................................................................
    >cellule [de|d’] crise
    >cellule [de|d’] détention provisoire
    [centrale+s] d’ >achat
    >centre d’ éducation [populaire|surveillée]
    >centre [de|d’] rétention ?[préventive|administrative]¿
    >certificat [de|d’] [conformité|virginité]
    >certificat [de|d’] bonne conduite
    >certificat d’ études ?[primaires|secondaires|supérieures|spécialisées|musicales|théâtrales|bibliques|théologiques]¿
    >certificat [de|d’] scolarité ?[maternelle|primaire|secondaire]¿
    >chair à [pâté|>canon]
    >chair [de|d’] poule
    >chalet d’ alpage
    >chambre à [coucher|gaz]
    >chambre [de|d’] [agriculture|hôte|hôtel|hôtes|commerce|compensation|décompression|dégrisement]
    >champion du monde
................................................................................
    >défaut [de|d’] paiement
    >descente aux [enfers|flambeaux]
    >dindon [de|d’] la farce
    dieu tout-puissant
    [>dîner|>diner] aux chandelles
    [>dîner|>diner] [de|d’] gala
    >discipline [de|d’] [acier|fer]
    >doigt [de|d’] fée
    >don en nature
    >donneur [de|d’] >leçon
    >dossier d’ inscription ?[administrative|scolaire]¿
    >dossier [de|d’] presse
    >drapeau en berne
    >drone [de|d’] [combat|surveillance]
    >drogue [de|d’] synthèse
................................................................................
    >effet [de|d’] bord
    >effort [de|d’] guerre
    >élément à charge
    >emploi du temps
    >employé [de|d’] maison
    >ennemi d’ État
    ennemi public numéro [un|$:B|*NUM]
    ennemie publique numéro [un|une|$:B|*NUM]
    >ennui [de|d’] santé
    >enregistreur [de|d’] vol
    >enterrement [de|d’] vie [de|d’] garçon
    >enterrement [de|d’] vie [de|d’] jeune fille
    >entrée [de|d’] service
    >entretien d’ embauche
    >enquête à charge
................................................................................
    >fil à retordre
    >file d’ attente
    >fille à [papa|maman|>soldat]
    >fille au pair
    >film X
    fils à [papa|maman]
    fils [de|d’] pute
    >figure [de|d’] proue
    >fin [de|d’] non-recevoir
    >fleuve à sec
    >flic en civil
    >flocon [de|d’] neige ?électronique¿
    >foire d’ >empoigne
    fonds d’ investissement
    fonds [de|d’] pension
    >fontaine à eau
................................................................................
    >matelas à mémoire de forme
    >matière à [débat|polémique|réflexion]
    >médaille d’ [or|argent|bronze]
    >médecin [de|d’] [famille|garde]
    >mère au foyer
    >mesure >barrière
    >metteur en scène
    >mineur [de|d’] [moins|plus] [de|d’] *NUM ans
    >mineur [de|d’] [moins|plus] [de|d’] $:B:e:p ans
    >minute d’ arc
    >miroir aux alouettes
    >mise en danger de la vie d’ autrui
    >mouchoir [de|d’] poche
    >mode [de|d’] [emploi|paiement|scrutin|vie]
    >monnaie [de|d’] [échange|réserve|singe]
    >montée en puissance
................................................................................
    >motion [de|d’] [censure|défiance] ?constructive¿
    >moule à [>gaufre|>gâteau|brioche|manqué|savarin|charlotte|tarte]
    >moulin à [café|eau|paroles|poivre|prières|vent]
    >mouton à [cinq|5] pattes
    [moyen+s] [de|d’] transport
    >navire [de|d’] plaisance
    >nerf à vif
    >nettoyeur ?à¿ haute pression
    >nid à merde
    >nid [de|d’] résistance
    >niveau [de|d’] vie
    noix [de|d’] [cajou|pécan|pecan|coco|lavage|muscade|veau|macadamia]
    >nom à particule
    >nom [de|d’] famille
    >notice [de|d’] [montage|utilisation]
................................................................................
    >peloton d’ exécution
    >pendaison [de|d’] crémaillère
    >périphérique à bande ?[analogique|magnétique]¿
    >personnage [de|d’] roman
    perspectives d’ avenir
    >perte [de|d’] temps ?précieux¿
    >peur [de|d’] tous les diables
    >phase [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]
    >phase [I|II|III|IV|V|VI|VII|VIII|IX|X|XI|XII|XIII|XIV|XV|XVI|XVII|XVIII|XIX|XX|XXI|XXII|XXIII|XXIV|XXV|XXVI|XXVII|XXVIII|XXIX|XXX]
    >piano à queue
    >pièce à conviction
    >pièce [de|d’] [théâtre|monnaie|rechange]
    >pièce [de|d’] *NUM [>euro|>dollar|>centime|>cent|>livre|>shilling]
    >pied [de|d’] biche
    >pile à [combustible|hydrogène]
................................................................................
    [secret+s] défense
    >sobre comme un chameau
    >sourd comme un pot
    >sujet à [caution|débat|interprétation]
    >sujet à interprétations diverses
    [>sur|>sûr] de [mon|ton|son|notre|votre|leur] bon droit
    >têtu comme une [bourrique|mule]
    >têtu comme un [âne|bourricot|mulet]
    [tiré+ses] à [quatre|4] épingles
    [vu+ses] d’ un ?très¿ [bon|mauvais] œil
        <<- ~2:0>> *

    flambant >neuf
        <<- ~1>> *

................................................................................
    >calibre . *NUM ?[acp|auto|brenneke|browning|british|colt|court|H&K|magnum|mauser|otan|remington|parabellum|russian|S&W|sig|soviet|special|wcf|wsm|winchester]¿
    >calibre . *NUM long rifle
    >calibre *NUM ?[mm|in]¿
    >calibre *NUM [*|×] *NUM ?[mm|in]¿
        <<- ~2:0>> *
        <<- =>> =select(\1, ":N")

    une bonne chose [de|d’] réglée
        <<- ~-2:0>> *

    [le|la|l’|les]  $:N  d’ alors
        <<- ~-2:0>> *

    [>homme|>femme|>garçon|>garçonnet|>fille|>fillette|>gonzesse|>mec|>meuf|>vieillard]                 [de|d’] grand talent
    [>acteur|>architecte|>artiste|>auteur|>chef|>cinéaste|>cuisinier|>dessinateur|>écrivain|>graphiste] [de|d’] grand talent
    [>ingénieur|>joueur|>musicien|>peintre|>photographe|>réalisateur]                                   [de|d’] grand talent
        <<- ~2:0>> *


__purge_syntagmes_nominaux_matière__
    *WORD  en  acier  ?[galvanisé|inoxydable|trempé]¿       ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿
    *WORD  en  chêne  ?massif¿                              ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿
    *WORD  en  bois   ?vernis¿                              ?[clair|foncé|rouge|vert|brun|marron|jaune|orange|bleu|gris|rose|noir|blanc]¿
................................................................................
__conj_le_la_leur_nom!5__
    le  *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 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", False, suggMasSing)                                               && 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.

    la  *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 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", False, suggFemSing)                                               && 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.

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

__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]|>et/") 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 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", False, 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]|>et/") 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 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", False, 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]|>et/") 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 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.
................................................................................


__conj_det_plur_nom__
    [ces|mes|tes|ses|nos|vos|leurs|quelques]  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M|A.*:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") ) >>>
        <<- /conj/ not tag(\-1, "_ngn_") and (morph(\3, ":A.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", False, suggAgree, \3, \2)                                         && Accord avec « \1 \2… » incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [ces|mes|tes|ses|nos|vos|leurs|quelques]  @:[NA].*:[pi]¬:V0  qui  @:V¬:(?:3p|P|Y|G|M|A.*:e:[pi])
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Ses « chiens » {{coure}} sur ma pelouse.                                                      ->> courent
TEST: mes filles {{passe}} ce matin                                                                 ->> passent
TEST: vos filles {{passes}} ce matin                                                                ->> passent
TEST: ces travaux qui {{demande}} tant d’efforts.                                                   ->> demandent
TEST: vos questions ne {{réclame}} aucune réflexion.                                                ->> réclament
TEST: Ces attaques à main armée {{donne}} la chair de poule.                                        ->> donnent
TEST: Ces marchands {{passe}} leur temps à se quereller.                                            ->> passent|passes|passés
TEST: maints hommes {{oublie}} leurs origines pour mieux se construire un passé glorieux            ->> oublient
TEST: nos hommes qui {{repartirons}} demain                                                         ->> repartiront
TEST: le lien entre les agences de renseignement et ces mêmes entreprises pouvait reposer sur des activités de surveillance à proprement parler.
TEST: trier les cons et les connes expose à un violent coup de boomerang
TEST: Tu penses que quelqu’un qui frappe sa femme et ses enfants est un bon père ?


................................................................................
__conj_les_nom__
    les  @:[NA].*:[pi]¬:V0  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not ( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", False, suggAgree, \3, \2)                                         && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    les  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

................................................................................
TEST: Les infirmières à mi-temps ne {{travaille}} pas dans cette aile.                              ->> travaillent
TEST: les données, en quantité plus que suffisante, {{indique}} que…                                ->> indiquent
TEST: Les hommes comme celui-là {{mange}} comme deux.                                               ->> mangent
TEST: les récompenses distribuées à parts égales {{était}}…                                         ->> étaient
TEST: Les États-Unis d’Amérique se {{compose}} de 50 états.                                         ->> composent
TEST: Les enfants en {{manges}}.                                                                    ->> mangent
TEST: Les ombres la {{donnes}}                                                                      ->> donnent
TEST: les grands {{danse}}                                                                          ->> dansent|dansés
TEST: les filles {{passes}} ce matin                                                                ->> passent
TEST: les marchands {{marche}}                                                                      ->> marchent
TEST: les marchands {{plie}}                                                                        ->> plient|pliés
TEST: il prétendait que les banques universelles « à la française » s’{{était}} bien comportées     ->> étaient
TEST: les marchands {{paye}}                                                                        ->> payent|payés
TEST: les marchands {{marchande}}                                                                   ->> marchandent|marchands|marchandés
TEST: les marchandes {{paie}}                                                                       ->> payent|paies|payées
TEST: les marchandes {{marchande}}                                                                  ->> marchandent|marchandes|marchandées
TEST: les chattes {{finis}}                                                                         ->> finissent|finirent|finissaient
TEST: les chattes {{manges}}                                                                        ->> mangent
TEST: les religieux qui n’en {{finisse}} pas de mentir.                                             ->> finissent
TEST: Les tests grand public de Jean-Paul {{montre}} des résultats surprenants.                     ->> montrent
TEST: les malades que tu as servis {{outrepasse}} leur droit                                        ->> outrepassent
TEST: l’écart entre les riches et les pauvres n’était pas si grand.
TEST: Les grands hommes politiques
................................................................................
__conj_certains_certaines_plusieurs_nom__
    [certains|maints]  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", False, suggMasPlur)                                               && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [certaines|maintes]  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", False, suggFemPlur)                                               && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    plusieurs  @:[NA].*:[pi]  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\3, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
            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.*:s") or (morph(\3, ":N.*:s") and morph(\2, ":A")))
        -3>> =suggVerb(\3, ":3p", False, suggPlur)                                                  && Accord avec “\1 \2…” incorrect. Conjugaison erronée ou accord nom/adjectif incorrect.
        <<- /conj/ __else__ -3>> =suggVerb(\3, ":3p")                                               && Conjugaison erronée. Accord avec “\1 \2…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [certains|certaines|plusieurs|maints|maintes]  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|Y|G|M)
        <<- /conj/ morph(<1, ":Cs|<start>|>,")
            and not( morph(\4, ":3s") and before("(?i)\\b(?:l[ea] |l’|une? |ce(?:tte|t|) |[mts](?:on|a) |[nv]otre ).+ entre .+ et ") )
        -4>> =suggVerb(\4, ":3p")                                                                   && Conjugaison erronée. Accord avec “\1 \2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

................................................................................
TEST: certains imbéciles passés à l’ennemi feraient mieux de se taire.


__conj_des_nom__
    [<start>|,|(]  des  @:[NA].*:[pi]  @:V¬:(?:3p|P|G|Q|Y|A.*:[pi]|V[23].*:Y)
        <<- /conj/ morph(>1, ":(?:R|D.*:p)|>au/|<end>|>,") >>>
        <<- /conj/ not morph(\4, ":[NA]") -4>> =suggVerb(\4, ":3p")                                 && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and not agreement(\3, \4) -4>> =suggVerb(\4, ":3p", False, suggPlur)    && Conjugaison erronée. Accord avec “\2 \3…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    [<start>|,|(]  des  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -5>> =suggVerb(\5, ":3p")                                                        && Conjugaison erronée. Accord avec “\2 \3 \4…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    *WORD  des  @:[NA].*:[pi]  qui  @:V¬:(?:3p|P|G)
        <<- /conj/ morph(\1, ":[VR]", ":[NA]") --1>> =suggVerb(\-1, ":3p")                          && Conjugaison erronée. Accord avec “\2 \3 \4…”. Le verbe devrait être à la 3ᵉ personne du pluriel.

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


# indicatif nécessaire
__vmode_sujet_indicatif__
    <start>  [je|j’|tu|il|ils|elle|elles|on|nous|vous|iel|iels]  @:S¬:[GIK]|V0a.*:Sq
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":I", \-2)                                             && Ce verbe ne devrait pas être au subjonctif.

TEST: Il {{ait}} demandé.                                                           ->> a|avait|eut|aura|est
TEST: Il en {{conclue}} qu’il a eu raison.                                          ->> conclut|concluait|conclura
TEST: j’en {{aie}} marre                                                            ->> ai|avais|eus|aurai
TEST: j’{{aie}} faim                                                                ->> ai|avais|eus|aurai
TEST: Tu ne l’y {{aies}} pas vu.                                                    ->> as|avais|eus|auras|es


# Après/dès que + indicatif
__vmode_que_indicatif__
    [après|dès]  [que|qu’]  @:(?:Os|M)  @:V.*:S¬:[GI]
    [après|dès]  [que|qu’]  @:(?:Os|M)  @:V0e.*:S
        <<- /vmode/ -4>> =suggVerbMode(\4, ":I", \3)                    && Après « \1 que », le verbe ne s’emploie pas au subjonctif mais à l’indicatif, si l’action s’est déroulée de façon certaine.

    à  mesure    [que|qu’]  @:(?:Os|M)  @:V.*:S¬:[GI]
    à  mesure    [que|qu’]  @:(?:Os|M)  @:V0e.*:S
        <<- /vmode/ -5>> =suggVerbMode(\5, ":I", \4)                    && Après « à mesure que », le verbe ne s’emploie pas au subjonctif mais à l’indicatif.

TEST: Après qu’il {{ait}} pris la tangeante                                             ->> a|avait|eut|aura|est
TEST: Après que nous {{ayons}} mangé son repas.                                         ->> avons|avions|eûmes|aurons
TEST: Après que tu {{sois}} parti, il plut.                                             ->> es|étais|fus|seras
TEST: Dès qu’il y {{eût}} pensé, il fit ce qu’il fallait pour résoudre le problème.     ->> a|avait|eut|aura
TEST: à mesure qu’elle {{devienne}} forte                                               ->> devient|devenait|devint|deviendra


# verbe que + subjonctif
................................................................................
    >valoir mieux                                   [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
    mieux >valoir                                   [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/  --1>> =suggVerbMode(\-1, ":S", \-2)                                            && Après “mieux valoir que”, ce verbe devrait être au subjonctif.

TEST: Il suffit qu’il {{court}} plus                                                ->> coure|courût
TEST: j’attends que tu {{viens}}.                                                   ->> viennes|vinsses
TEST: Je veux qu’il {{finit}} son repas.                                            ->> finisse|finît
TEST: Je ne veux pas que tu {{es}} des ennuis                                       ->> sois|fusses|aies
TEST: je doute qu’il {{vient}} demain.                                              ->> vienne|vînt
TEST: il se peut que nous {{avons}} tort.                                           ->> ayons|eussions
TEST: j’ai bon espoir qu’il {{vient}} vite.                                         ->> vienne|vînt
TEST: peu s’en est fallu qu’il {{devient}} estropié.                                ->> devienne|devînt
TEST: je m’étonne qu’il {{est}} aussi fragile                                       ->> soit|fût|ait
TEST: elle a envie qu’il {{est}} intelligent.                                       ->> soit|fût|ait
TEST: il importera que nous {{devenons}} prêts.                                     ->> devenions|devinssions
TEST: prends garde que vous {{revenez}} en un seul morceau.                         ->> reveniez|revinssiez
TEST: ça ira, si tant est que Paul {{comprend}} ce qui se passe.                    ->> comprenne|comprît
TEST: faites attention à ce qu’elle ne {{devient}} pas timorée.                     ->> devienne|devînt
TEST: je tiens à ce que vous {{devenez}} grands.                                    ->> deveniez|devinssiez
TEST: Veille à ce qu’il y {{est}} des gâteaux.                                      ->> soit|fût|ait
TEST: il arrive qu’il {{vient}}, mais rarement                                      ->> vienne|vînt
TEST: Vaudrait mieux qu’elle {{meurt}}                                              ->> meure|mourût
TEST: il aurait mieux valu qu’elle {{meurt}}                                        ->> meure|mourût
TEST: il est possible qu’il {{est}} parti                                           ->> soit|fût|ait
TEST: se peut-il que je {{viens}}                                                   ->> vienne|vinsse
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: Je me doutais bien qu’elle me détestait
TEST: Je veux que tu sois prudent.
TEST: Je souhaitais que tu fusses présent.
TEST: Je souhaite qu’il apprenne le français.
................................................................................

    [<start>|,|(]  encore                           [que|qu’]   @:(?:Os|M)  @:I¬:(?:[GSK]|If)
        <<- /vmode/ -5>> =suggVerbMode(\5, ":S", \4)                                                && Après “\2 que”, le verbe s’emploie au subjonctif.

    jusqu’      à           [ce|tant]               [que|qu’]   @:(?:Os|M)  @:I¬:[GYS]
        <<- /vmode/ --1>> =suggVerbMode(\-1, ":S", \-2)                                             && Après “\1 \2 \3 que”, ce verbe devrait être au subjonctif.

TEST: Quoiqu’il {{est}} parti il y a longtemps, on pense encore beaucoup à lui.                     ->> soit|fût|ait
TEST: quoi qu’il en {{conclut}}                                                                     ->> conclue|conclût
TEST: Avant que tu {{pars}}, je voudrais qu’on discute.                                             ->> partes|partisses
TEST: Sans qu’elle {{prend}} le temps d’analyser le problème.                                       ->> prenne|prît
TEST: il est possible qu’il {{vient}} demain.                                                       ->> vienne|vînt
TEST: à condition que tu {{réussis}}                                                                ->> réussisses
TEST: Pourvu qu’elle {{réussit}}.                                                                   ->> réussisse|réussît
TEST: en admettant que tu {{deviens}} plus talentueuse qu’elle, qu’est-ce que tu feras ?            ->> deviennes|devinsses
................................................................................
TEST: Nous œuvrons silencieusement de crainte qu’il nous {{entend}}.                                ->> entende|entendît
TEST: En admettant qu’il {{devient}} juste.                                                         ->> devienne|devînt
TEST: à condition qu’elle le {{pensa}}                                                              ->> pense|pensât
TEST: non qu’il {{prend}} son temps                                                                 ->> prenne|prît
TEST: si tant est que nous {{prenons}} notre temps                                                  ->> prenions|prissions
TEST: moyennant qu’elle {{vient}} demain                                                            ->> vienne|vînt
TEST: en attendant qu’il {{devient}} plus raisonnable                                               ->> devienne|devînt
TEST: {{où}} qu’il {{est}}, on le trouvera                                                          ->> ou|||soit|fût|ait
TEST: Il ne le savait pas, bien qu’il en {{avait}} entendu parler.                                  ->> ait|eût
TEST: Bien que je {{prends}} mon mal en patience.                                                   ->> prenne|prisse
TEST: encore qu’il {{sait}} s’y prendre                                                             ->> sache|sût
TEST: jusqu’à ce qu’elle {{vient}} avec nous                                                        ->> vienne|vînt
TEST: C’est un joli bien. Bien qu’il a hérité de son oncle, notez bien.
TEST: Bien qu’il avait donné à ses enfants.
TEST: si bien que je me suis toujours demandée si cela ne m’avait pas un peu bousillé les yeux
................................................................................
TODO: Les côtes sont dans leur ensemble extrêmement découpées.

!!! Indécidable                                                                                   !!
TEST: Du sable fin grippe les rouages (accord avec ce qui précède).
TEST: Du monde noir sortent les envahisseurs (accord avec ce qui suit).

!!! Autres tests                                                                                  !!
TEST: Mon père est contre et ma mère se dit pour mais a un discours très hypocrite quand on aborde le sujet.
TEST: l’ambulance censée amener Cédric n’est jamais arrivée
TEST: Chez les intellectuels, le mot utopie n’a jamais été synonyme de folie, mais il l’a été pour l’homme de la rue.
TEST: Les États parties sont les pays qui ont ratifié la Convention du patrimoine mondial.
TEST: Ça a l’air de t’aller.
TEST: Et je m’en sors.
TEST: C’est à chacun d’entre nous de suivre le modèle d’Amos.
TEST: C’est toi qui voulais y aller.